diff --git a/source/shoh/src/threads/manager/Manager.cpp b/source/shoh/src/threads/manager/Manager.cpp index 9d33288..b5eee38 100644 --- a/source/shoh/src/threads/manager/Manager.cpp +++ b/source/shoh/src/threads/manager/Manager.cpp @@ -9,9 +9,8 @@ #include "ThreadCommon.h" Manager::Manager(ThreadCommon::QueueManager* qm, Menu * menu) -: _qm(qm), _menu(menu), set_point(0, 100, 5) +: _qm(qm), _menu(menu) { - set_point.setCurrent(0); } Manager::~Manager() @@ -33,7 +32,7 @@ Event::EventPair Manager::parseEvent(Event* e) return p; } } - + return {ERROR_RETURN, Event::Null}; } void Manager::taskFunction() diff --git a/source/shoh/src/threads/manager/Manager.h b/source/shoh/src/threads/manager/Manager.h index bf93e5f..8ab2884 100644 --- a/source/shoh/src/threads/manager/Manager.h +++ b/source/shoh/src/threads/manager/Manager.h @@ -22,11 +22,8 @@ public: private: Event::EventPair parseEvent(Event* e); ThreadCommon::QueueManager* _qm; - Counter set_point; Menu* _menu; - EventRawData int_temp; - EventRawData ext_temp; EventRawData rotary_action; }; diff --git a/source/shoh/src/threads/manager/Menu.cpp b/source/shoh/src/threads/manager/Menu.cpp index 04f24ed..2b15825 100644 --- a/source/shoh/src/threads/manager/Menu.cpp +++ b/source/shoh/src/threads/manager/Menu.cpp @@ -8,15 +8,16 @@ #include "Menu.h" #include -Menu::Menu() +Menu::Menu(): current(&Menu::sInitView), set_point(0, 100, 1), +main_text ("CURRENT %2d DESIRED %2d "), +set_point_text("CURRENT %2d DESIRED[%2d] ") { - // TODO Auto-generated constructor stub - + this->SetState(&Menu::sInitView); + set_point.setCurrent(0); } Menu::~Menu() { - // TODO Auto-generated destructor stub } void Menu::HandleEventPair (Event::EventPair *ep) @@ -47,13 +48,11 @@ void Menu::HandleEventPair (Event::EventPair *ep) break; } break; - case Event::InternalTemp: - // TODO - assert(0); - break; case Event::ExternalTemp: - // TODO - assert(0); + //Change ExternalTemp value. + this->ext_temp = ep->rd; + //Refresh the menu screen. + this->HandleObj(MenuObjEvent (MenuObjEvent::eRefresh)); break; default: assert(0); @@ -63,6 +62,93 @@ void Menu::HandleEventPair (Event::EventPair *ep) return; } +/* States */ +void Menu::sInitView(const MenuObjEvent &e) +{ + switch (e.type) + { + case MenuObjEvent::eFocus: + this->NotifyAndRefreshUI("Loading..."); + break; + case MenuObjEvent::eUnFocus: + this->NotifyAndRefreshUI(""); + break; + case MenuObjEvent::eRollClockWise: + break; + case MenuObjEvent::eRollCClockWise: + break; + case MenuObjEvent::eClick: + break; + case MenuObjEvent::eRefresh: + this->SetState(&Menu::sMainView); + break; + default: + break; + } +} + +void Menu::sMainView(const MenuObjEvent &e) +{ + char screen_text[64]; + switch (e.type) + { + case MenuObjEvent::eFocus: + sprintf(screen_text, main_text, this->ext_temp, this->set_point.getCurrent()); + this->NotifyAndRefreshUI(screen_text); + break; + case MenuObjEvent::eUnFocus: + this->NotifyAndRefreshUI(""); + break; + case MenuObjEvent::eRollClockWise: + break; + case MenuObjEvent::eRollCClockWise: + break; + case MenuObjEvent::eClick: + this->SetState(&Menu::sSetPointMod); + break; + case MenuObjEvent::eRefresh: + sprintf(screen_text, main_text, this->ext_temp, this->set_point.getCurrent()); + this->NotifyAndRefreshUI(screen_text); + break; + default: + break; + } +} + +void Menu::sSetPointMod(const MenuObjEvent &e) +{ + char screen_text[64]; + switch (e.type) + { + case MenuObjEvent::eFocus: + sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); + this->NotifyAndRefreshUI(screen_text); + break; + case MenuObjEvent::eUnFocus: + this->NotifyAndRefreshUI(""); + break; + case MenuObjEvent::eRollClockWise: + set_point.inc(); + sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); + this->NotifyAndRefreshUI(screen_text); + break; + case MenuObjEvent::eRollCClockWise: + set_point.dec(); + sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); + this->NotifyAndRefreshUI(screen_text); + break; + case MenuObjEvent::eClick: + this->SetState(&Menu::sMainView); + break; + case MenuObjEvent::eRefresh: + sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); + this->NotifyAndRefreshUI(screen_text); + break; + default: + break; + } +} + void Menu::SetState (p_state new_state) { (this->*current) (MenuObjEvent (MenuObjEvent::eUnFocus)); @@ -75,3 +161,7 @@ void Menu::HandleObj (const MenuObjEvent &event) (this->*current) (event); } +void Menu::NotifyAndRefreshUI (const char *str) +{ + //Send string on a queue to UI task. +} \ No newline at end of file diff --git a/source/shoh/src/threads/manager/Menu.h b/source/shoh/src/threads/manager/Menu.h index eb89d98..a8a3d7f 100644 --- a/source/shoh/src/threads/manager/Menu.h +++ b/source/shoh/src/threads/manager/Menu.h @@ -5,14 +5,14 @@ * Author: dave */ +#ifndef THREADS_MANAGER_MENU_H_ +#define THREADS_MANAGER_MENU_H_ + #include "Counter.h" #include "MenuObjEvent.h" #include "ThreadCommon.h" #include "Event.h" -#ifndef THREADS_MANAGER_MENU_H_ -#define THREADS_MANAGER_MENU_H_ - class Menu; typedef void (Menu::*p_state) (const MenuObjEvent &); @@ -26,9 +26,18 @@ public: private: /* Variables and objects */ p_state current; + int ext_temp; + Counter set_point; + const char main_text[64]; + const char set_point_text[64]; + /* States */ + void sInitView(const MenuObjEvent &e); + void sMainView(const MenuObjEvent &e); + void sSetPointMod(const MenuObjEvent &e); /* Methods */ void SetState (p_state new_state); void HandleObj (const MenuObjEvent &event); + void NotifyAndRefreshUI (const char *str); }; #endif /* THREADS_MANAGER_MENU_H_ */