state-handler: #6 add state controller functions

- HandleState to set an event of the state
- SetState to update current state to new
This commit is contained in:
Vasily Davydov 2022-10-05 15:02:02 +03:00
parent f95c15e13c
commit 69d767a73e
2 changed files with 74 additions and 60 deletions

View File

@ -15,10 +15,10 @@
#ifndef STATE_HANDLER_H_ #ifndef STATE_HANDLER_H_
#define STATE_HANDLER_H_ #define STATE_HANDLER_H_
#include "DigitalIoPin.h"
#include "LiquidCrystal.h"
#include "Counter.h" #include "Counter.h"
#include "DigitalIoPin.h"
#include "Event.h" #include "Event.h"
#include "LiquidCrystal.h"
/** Buttons enumeration /** Buttons enumeration
* *
@ -28,7 +28,8 @@
* of the particular button. * of the particular button.
* */ * */
enum _buttons { enum _buttons
{
/** Raises the bar up */ /** Raises the bar up */
BUTTON_CONTROL_UP, BUTTON_CONTROL_UP,
/** Raises the bar down */ /** Raises the bar down */
@ -42,14 +43,16 @@ enum _buttons {
BUTTON_CONTROL_TOG_ACTIVE BUTTON_CONTROL_TOG_ACTIVE
}; };
enum _bars { enum _bars
{
/** 0-100 % */ /** 0-100 % */
FAN_SPEED, FAN_SPEED,
/** 0-120 Pa */ /** 0-120 Pa */
PRESSURE PRESSURE
}; };
enum _mode { enum _mode
{
MANUAL, MANUAL,
AUTO AUTO
}; };
@ -57,8 +60,8 @@ enum _mode {
class StateHandler; class StateHandler;
typedef void (StateHandler::*state_pointer) (const Event &); typedef void (StateHandler::*state_pointer) (const Event &);
class StateHandler
class StateHandler { {
public: public:
StateHandler (LiquidCrystal *lcd); StateHandler (LiquidCrystal *lcd);
virtual ~StateHandler (); virtual ~StateHandler ();
@ -86,6 +89,7 @@ public:
* @param event event to be handled in the current state * @param event event to be handled in the current state
*/ */
void HandleState (const Event &event); void HandleState (const Event &event);
private: private:
state_pointer current; state_pointer current;
/** Set a new curremt state /** Set a new curremt state
@ -95,7 +99,6 @@ private:
bool current_mode; bool current_mode;
Counter set[2] = { { 0, 100 }, { 0, 120 } }; Counter set[2] = { { 0, 100 }, { 0, 120 } };
LiquidCrystal *_lcd; LiquidCrystal *_lcd;
}; };
#endif /* STATE_HANDLER_H_ */ #endif /* STATE_HANDLER_H_ */

View File

@ -61,3 +61,14 @@ StateHandler::SetState (state_pointer newstate)
current = newstate; current = newstate;
(this->*current) (Event (Event::eEnter)); (this->*current) (Event (Event::eEnter));
} }
void StateHandler::HandleState(const Event &event){
(this->*current)(event);
}
void StateHandler::SetState(state_pointer newstate){
(this->*current)(Event(Event::eExit));
current = newstate;
(this->*current)(Event(Event::eEnter));
}