From 452a385756169020f3b3b4be8474e513b03dfcec Mon Sep 17 00:00:00 2001 From: Vasily Davydov Date: Wed, 5 Oct 2022 15:02:02 +0300 Subject: [PATCH] state-handler: #6 add state controller functions - HandleState to set an event of the state - SetState to update current state to new --- StateHandler/inc/StateHandler.h | 14 ++++++++++++++ StateHandler/src/StateHandler.cpp | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/StateHandler/inc/StateHandler.h b/StateHandler/inc/StateHandler.h index ac0b385..a31df2b 100644 --- a/StateHandler/inc/StateHandler.h +++ b/StateHandler/inc/StateHandler.h @@ -41,13 +41,27 @@ enum _buttons { BUTTON_CONTROL_TOG_ACTIVE }; +class StateHandler; +typedef void (StateHandler::*state_pointer)(const Event &); + + class StateHandler { public: StateHandler(); virtual ~StateHandler(); int getSetPresuure(); // Get currently set pressure 0-100% int getSetSpeed(); //Get currently set FanSpeed 0-100% + + /** Handle the given event of the current state + * @param event event to be handled in the current state + */ + void HandleState(const Event &event); private: + state_pointer current; + /** Set a new curremt state + * @param newstate new state to be set to current + */ + void SetState(state_pointer newstate); bool mode; Counter * bar_pressure; Counter * bar_speed; diff --git a/StateHandler/src/StateHandler.cpp b/StateHandler/src/StateHandler.cpp index 792c11c..7c4fb0f 100644 --- a/StateHandler/src/StateHandler.cpp +++ b/StateHandler/src/StateHandler.cpp @@ -25,3 +25,14 @@ int StateHandler::getSetSpeed(){ // TODO return 0; } + +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)); + +}