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"
|
#include "ThreadCommon.h"
|
||||||
|
|
||||||
Manager::Manager(ThreadCommon::QueueManager* qm, Menu * menu)
|
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()
|
Manager::~Manager()
|
||||||
@ -33,7 +32,7 @@ Event::EventPair Manager::parseEvent(Event* e)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return {ERROR_RETURN, Event::Null};
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::taskFunction()
|
void Manager::taskFunction()
|
||||||
|
|||||||
@ -22,11 +22,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
Event::EventPair parseEvent(Event* e);
|
Event::EventPair parseEvent(Event* e);
|
||||||
ThreadCommon::QueueManager* _qm;
|
ThreadCommon::QueueManager* _qm;
|
||||||
Counter<EventRawData> set_point;
|
|
||||||
Menu* _menu;
|
Menu* _menu;
|
||||||
|
|
||||||
EventRawData int_temp;
|
|
||||||
EventRawData ext_temp;
|
|
||||||
EventRawData rotary_action;
|
EventRawData rotary_action;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -8,15 +8,16 @@
|
|||||||
#include "Menu.h"
|
#include "Menu.h"
|
||||||
#include <assert.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()
|
Menu::~Menu()
|
||||||
{
|
{
|
||||||
// TODO Auto-generated destructor stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::HandleEventPair (Event::EventPair *ep)
|
void Menu::HandleEventPair (Event::EventPair *ep)
|
||||||
@ -47,13 +48,11 @@ void Menu::HandleEventPair (Event::EventPair *ep)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Event::InternalTemp:
|
|
||||||
// TODO
|
|
||||||
assert(0);
|
|
||||||
break;
|
|
||||||
case Event::ExternalTemp:
|
case Event::ExternalTemp:
|
||||||
// TODO
|
//Change ExternalTemp value.
|
||||||
assert(0);
|
this->ext_temp = ep->rd;
|
||||||
|
//Refresh the menu screen.
|
||||||
|
this->HandleObj(MenuObjEvent (MenuObjEvent::eRefresh));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
@ -63,6 +62,93 @@ void Menu::HandleEventPair (Event::EventPair *ep)
|
|||||||
return;
|
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)
|
void Menu::SetState (p_state new_state)
|
||||||
{
|
{
|
||||||
(this->*current) (MenuObjEvent (MenuObjEvent::eUnFocus));
|
(this->*current) (MenuObjEvent (MenuObjEvent::eUnFocus));
|
||||||
@ -75,3 +161,7 @@ void Menu::HandleObj (const MenuObjEvent &event)
|
|||||||
(this->*current) (event);
|
(this->*current) (event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::NotifyAndRefreshUI (const char *str)
|
||||||
|
{
|
||||||
|
//Send string on a queue to UI task.
|
||||||
|
}
|
||||||
@ -5,14 +5,14 @@
|
|||||||
* Author: dave
|
* Author: dave
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef THREADS_MANAGER_MENU_H_
|
||||||
|
#define THREADS_MANAGER_MENU_H_
|
||||||
|
|
||||||
#include "Counter.h"
|
#include "Counter.h"
|
||||||
#include "MenuObjEvent.h"
|
#include "MenuObjEvent.h"
|
||||||
#include "ThreadCommon.h"
|
#include "ThreadCommon.h"
|
||||||
#include "Event.h"
|
#include "Event.h"
|
||||||
|
|
||||||
#ifndef THREADS_MANAGER_MENU_H_
|
|
||||||
#define THREADS_MANAGER_MENU_H_
|
|
||||||
|
|
||||||
class Menu;
|
class Menu;
|
||||||
typedef void (Menu::*p_state) (const MenuObjEvent &);
|
typedef void (Menu::*p_state) (const MenuObjEvent &);
|
||||||
|
|
||||||
@ -26,9 +26,18 @@ public:
|
|||||||
private:
|
private:
|
||||||
/* Variables and objects */
|
/* Variables and objects */
|
||||||
p_state current;
|
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 */
|
/* Methods */
|
||||||
void SetState (p_state new_state);
|
void SetState (p_state new_state);
|
||||||
void HandleObj (const MenuObjEvent &event);
|
void HandleObj (const MenuObjEvent &event);
|
||||||
|
void NotifyAndRefreshUI (const char *str);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* THREADS_MANAGER_MENU_H_ */
|
#endif /* THREADS_MANAGER_MENU_H_ */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user