menu: [#25] Made states. Moved logic to Menu.
*Menu class now is responsible for the whole logic with temperature and set_point. *void NotifyAndRefreshUI (const char *str) is a placeholder for sending a string value on a queue to UI task, which will handle the lcd screen. *Added error return value to Manager::parseEvent(Event* e)
This commit is contained in:
parent
fad70c9f37
commit
d3f5cdebbc
@ -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()
|
||||
|
||||
@ -22,11 +22,8 @@ public:
|
||||
private:
|
||||
Event::EventPair parseEvent(Event* e);
|
||||
ThreadCommon::QueueManager* _qm;
|
||||
Counter<EventRawData> set_point;
|
||||
Menu* _menu;
|
||||
|
||||
EventRawData int_temp;
|
||||
EventRawData ext_temp;
|
||||
EventRawData rotary_action;
|
||||
};
|
||||
|
||||
|
||||
@ -8,15 +8,16 @@
|
||||
#include "Menu.h"
|
||||
#include <assert.h>
|
||||
|
||||
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.
|
||||
}
|
||||
@ -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<EventRawData> 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_ */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user