From b2c15f39e467736703c5dc1edff05b579626fdf4 Mon Sep 17 00:00:00 2001 From: Edward Haas Date: Sun, 16 Nov 2014 00:27:18 +0200 Subject: [PATCH 1/3] Dynamic State Machine A State Machine implementation with configurable state transitions. It maintains state decoupling, allowing it to scale and support multiple setups. Setup/Definition logic: - Create a State Machine. - Create states. - Set the SM initial state. - Set the SM default behavior: Action to take if no map is found. (NULL specifies to remain in the same state) - Map State & Result to the next State. (state, result, nextState) Receiving an event wile in state, triggers a state operation, resulting in a StateResult. SM State is changed to the nextState based on the result. Operation: - Usually called from a controller that receives events in an asynchronous mode. Usage example: State *state = sm->getCurrentState(); sm->execEvent(state->evExist()); // At this stage sm->getCurrentState() will return a new state. --- src/state_machine/card_states.h | 48 ++++++++ src/state_machine/dynamic_state_machine.cpp | 38 +++++++ src/state_machine/dynamic_state_machine.h | 65 +++++++++++ src/state_machine/state.h | 32 ++++++ .../mk_common/utest_config_production_path.mk | 32 +++--- .../build/mk_common/utest_config_test_path.mk | 37 +++--- .../dynamic_state_machine_test.cpp | 105 ++++++++++++++++++ 7 files changed, 324 insertions(+), 33 deletions(-) create mode 100644 src/state_machine/card_states.h create mode 100644 src/state_machine/dynamic_state_machine.cpp create mode 100644 src/state_machine/dynamic_state_machine.h create mode 100644 src/state_machine/state.h create mode 100644 unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp diff --git a/src/state_machine/card_states.h b/src/state_machine/card_states.h new file mode 100644 index 0000000..22a669f --- /dev/null +++ b/src/state_machine/card_states.h @@ -0,0 +1,48 @@ +/* + * card_states.h + * + * Created on: Nov 15, 2014 + * Author: edwardh + */ + +#ifndef STATE_MACHINE_CARD_STATES_H_ +#define STATE_MACHINE_CARD_STATES_H_ + +#include "state.h" + + +class StateNA : public State +{ +public: + virtual stateResult evExist() {return RET_SUCCESS;} +}; + +class StateInit : public State +{ +public: + virtual stateResult evInitSuccess(){return RET_SUCCESS;} + virtual stateResult evInitFail() {return RET_FAIL;} +}; + +class StateProv : public State +{ +public: + virtual stateResult evProvSuccess(){return RET_SUCCESS;} + virtual stateResult evProvFail() {return RET_FAIL;} +}; + +class StateReady : public State +{ +public: +}; + +class StateFault : public State +{ +public: + virtual stateResult evInitSuccess(){return RET_SUCCESS;} + virtual stateResult evInitFail() {return RET_FAIL;} +}; + + + +#endif /* STATE_MACHINE_CARD_STATES_H_ */ diff --git a/src/state_machine/dynamic_state_machine.cpp b/src/state_machine/dynamic_state_machine.cpp new file mode 100644 index 0000000..2d7d957 --- /dev/null +++ b/src/state_machine/dynamic_state_machine.cpp @@ -0,0 +1,38 @@ +/* + * dynamic_state_machine.cpp + * + * Created on: Nov 15, 2014 + * Author: edwardh + */ + + +#include "dynamic_state_machine.h" + + + +void DStateMachine::setBaseState(State *st) +{ + this->state = st; +} + + +void DStateMachine::mapDefault(State *default_nextState) +{ + this->default_next_state = default_nextState; +} + + +void DStateMachine::mapStateResult2NextState(State *st, State::stateResult ret_st, State *nextSt) +{ + if(ret_st < State::RET_COUNT) + st->stateMap[ret_st] = nextSt; +} + + +void DStateMachine::execEvent(State::stateResult result) +{ + State *nextState = this->state->stateMap[result]; + + if(NULL != nextState) + this->state = nextState; +} diff --git a/src/state_machine/dynamic_state_machine.h b/src/state_machine/dynamic_state_machine.h new file mode 100644 index 0000000..829408d --- /dev/null +++ b/src/state_machine/dynamic_state_machine.h @@ -0,0 +1,65 @@ +/* + * dynamic_state_machine.h + * + * A State Machine implementation with configurable state transitions. + * It maintains state decoupling, allowing it to scale and support multiple setups. + * + * Setup/Definition logic: + * - Create a State Machine. + * - Create states. + * - Set the SM initial state. + * - Set the SM default behavior: Action to take if no map is found. + * (NULL specifies to remain in the same state) + * - Map State & Result to the next State. (state, result, nextState) + * Receiving an event wile in state, triggers a state operation, resulting in a StateResult. + * SM State is changed to the nextState based on the result. + * + * Operation: + * - Usually called from a controller that receives events in an asynchronous mode. + * Usage example: + * State *state = sm->getCurrentState(); + * sm->execEvent(state->evExist()); + * // At this stage sm->getCurrentState() will return a new state. + * + * + * Created on: Nov 15, 2014 + * Author: edwardh + */ + +#ifndef DYNAMIC_STATE_MACHINE_H_ +#define DYNAMIC_STATE_MACHINE_H_ + +#include "state.h" + +class DStateMachine +{ +public: + // SM Setup // + void setBaseState(State *st); + + void mapDefault(State *default_nextState); + + void mapStateResult2NextState(State *st, State::stateResult ret_st, State *nextSt); + + // SM Operations // + void execEvent(State::stateResult result); //TODO: Ugly, it should not process the event at the calee, but in the SM. + // Need to convert this into a function pointer (or find a better solution). + + State *getCurrentState(){return state;}; + +private: + State *state; + State *default_next_state; + + /* + * Currently, the State MAP is maintained by each state independently. + * Located at the State "interface" to decouple individual states from each other. + * A different design approach could be to keep & manage the MAP here, in the SM, however + * it will require a special data structure to be maintain. + * It needs to be reconsidered again, some more thought should be put into this. + */ +}; + + + +#endif /* DYNAMIC_STATE_MACHINE_H_ */ diff --git a/src/state_machine/state.h b/src/state_machine/state.h new file mode 100644 index 0000000..1c74a3d --- /dev/null +++ b/src/state_machine/state.h @@ -0,0 +1,32 @@ +/* + * state.h + * + * Created on: Nov 15, 2014 + * Author: edwardh + */ + +#ifndef STATE_MACHINE_STATE_H_ +#define STATE_MACHINE_STATE_H_ + +#include "string.h" + +class State +{ +public: + State(){memset(stateMap, 0, sizeof(stateMap));} + virtual ~State(){} + + // RET_COUNT must be left last, counting the number of possible results. + enum stateResult {RET_SUCCESS=0, RET_FAIL, RET_COUNT}; + + virtual stateResult evExist() {return RET_FAIL;} + virtual stateResult evInitSuccess(){return RET_FAIL;} + virtual stateResult evInitFail() {return RET_FAIL;} + virtual stateResult evProvSuccess(){return RET_FAIL;} + virtual stateResult evProvFail() {return RET_FAIL;} + + State *stateMap[RET_COUNT]; +}; + + +#endif /* STATE_MACHINE_STATE_H_ */ diff --git a/unit_tester/build/mk_common/utest_config_production_path.mk b/unit_tester/build/mk_common/utest_config_production_path.mk index d23f027..c28c589 100755 --- a/unit_tester/build/mk_common/utest_config_production_path.mk +++ b/unit_tester/build/mk_common/utest_config_production_path.mk @@ -1,16 +1,18 @@ -# -# -# - -# When all source files in a folder are under tests, it is prefered to add the folder instead of adding individual source files. -SRC_DIRS = \ - $(PRODUCTION_SOURCES)/llist -# - -SRC_FILES = \ -# $(PRODUCTION_SOURCES)/source_file.cpp -# - -INCLUDE_DIRS +=\ - $(PRODUCTION_SOURCES)/ +# +# +# + +# When all source files in a folder are under tests, it is prefered to add the folder instead of adding individual source files. +SRC_DIRS = \ + $(PRODUCTION_SOURCES)/llist\ + $(PRODUCTION_SOURCES)/state_machine\ +# + +SRC_FILES = \ +# $(PRODUCTION_SOURCES)/source_file.cpp +# + +INCLUDE_DIRS +=\ + $(PRODUCTION_SOURCES)/\ + $(PRODUCTION_SOURCES)/state_machine\ # \ No newline at end of file diff --git a/unit_tester/build/mk_common/utest_config_test_path.mk b/unit_tester/build/mk_common/utest_config_test_path.mk index 6fa1005..bddd8da 100755 --- a/unit_tester/build/mk_common/utest_config_test_path.mk +++ b/unit_tester/build/mk_common/utest_config_test_path.mk @@ -1,19 +1,20 @@ -# -# -# - -INCLUDE_DIRS =\ - .\ - $(TEST_ROOT)/helpers/include\ - $(TEST_ROOT)/mocks/include\ - /usr/include\ - $(CPPUTEST_HOME)/include\ - -TEST_SRC_DIRS = \ - $(TEST_ROOT)/helpers/src\ - $(TEST_ROOT)/tests\ - $(TEST_ROOT)/tests/llist_test\ -# - -MOCKS_SRC_DIRS =\ +# +# +# + +INCLUDE_DIRS =\ + .\ + $(TEST_ROOT)/helpers/include\ + $(TEST_ROOT)/mocks/include\ + /usr/include\ + $(CPPUTEST_HOME)/include\ + +TEST_SRC_DIRS = \ + $(TEST_ROOT)/helpers/src\ + $(TEST_ROOT)/tests\ + $(TEST_ROOT)/tests/llist_test\ + $(TEST_ROOT)/tests/state_machine_test\ +# + +MOCKS_SRC_DIRS =\ $(TEST_ROOT)/mocks/src\ \ No newline at end of file diff --git a/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp b/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp new file mode 100644 index 0000000..55a383e --- /dev/null +++ b/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp @@ -0,0 +1,105 @@ +/* + * dynamic_state_machine_test.cpp + * + * Created on: Nov 15, 2014 + * Author: edwardh + */ + + + +#include "CppUTest/TestHarness.h" + +#include "dynamic_state_machine.h" +#include "card_states.h" + + + +TEST_GROUP(dynamic_sm) +{ + DStateMachine *sm; + State *stateNA; + State *stateInit; + State *stateReady; + State *stateProv; + State *stateFault; + + void setupStateMachine(DStateMachine *sMachine) + { + sMachine->setBaseState(stateNA); + sMachine->mapDefault(NULL); + sMachine->mapStateResult2NextState(stateNA, State::RET_SUCCESS, stateInit); + sMachine->mapStateResult2NextState(stateInit, State::RET_SUCCESS, stateProv); + sMachine->mapStateResult2NextState(stateInit, State::RET_FAIL, stateFault); + sMachine->mapStateResult2NextState(stateProv, State::RET_SUCCESS, stateReady); + sMachine->mapStateResult2NextState(stateFault, State::RET_FAIL, stateInit); + } + + void setup() + { + sm = new DStateMachine(); + stateNA = new StateNA(); + stateInit = new StateInit(); + stateReady = new StateReady(); + stateProv = new StateProv(); + stateFault = new StateFault(); + + setupStateMachine(sm); + } + + void teardown() + { + delete stateNA; + delete stateInit; + delete stateReady; + delete stateProv; + delete stateFault; + delete sm; + } +}; + + +TEST(dynamic_sm, define_sm) +{ + DStateMachine *_sm = new DStateMachine(); + _sm->setBaseState(stateNA); + _sm->mapDefault(NULL); + _sm->mapStateResult2NextState(stateNA, State::RET_SUCCESS, stateInit); + _sm->mapStateResult2NextState(stateInit, State::RET_SUCCESS, stateProv); + _sm->mapStateResult2NextState(stateInit, State::RET_FAIL, stateFault); + _sm->mapStateResult2NextState(stateProv, State::RET_SUCCESS, stateReady); + _sm->mapStateResult2NextState(stateFault, State::RET_FAIL, stateInit); + + POINTERS_EQUAL(stateNA, _sm->getCurrentState()); + + delete _sm; +} + +TEST(dynamic_sm, state_switch_evExist_sNA__moved2_StateInit) +{ + State *state = sm->getCurrentState(); + + //TODO: Ugly, it should not process the event here, but in the SM. + // Need to convert this into a function pointer (or find a better solution). + sm->execEvent(state->evExist()); + + POINTERS_EQUAL(stateInit, sm->getCurrentState()); +} + +TEST(dynamic_sm, state_switch_evInitFail_sInit__moved2_StateFault) +{ + sm->setBaseState(stateInit); + + State *state = sm->getCurrentState(); + sm->execEvent(state->evInitFail()); + + POINTERS_EQUAL(stateFault, sm->getCurrentState()); +} + +TEST(dynamic_sm, unsupported_event_for_the_given_state__remain_in_state) +{ + State *state = sm->getCurrentState(); + + sm->execEvent(state->evProvSuccess()); + + POINTERS_EQUAL(stateNA, sm->getCurrentState()); +} From c96d9bcc97efaa296bdb075a91c0e75392822100 Mon Sep 17 00:00:00 2001 From: Edward Haas Date: Sun, 16 Nov 2014 13:39:28 +0200 Subject: [PATCH 2/3] Card Controller - Integrated with the Dynamic State Machine. The controller is serving the cards (devices) by providing them means to register to the controller with their SM and giving each a unique id for communication. regCard() is used for card registration. run() is used for running the controller, usually in it's own task in an endless loop, blocking on recv messages. --- src/state_machine/card_controller.cpp | 45 +++++ src/state_machine/card_controller.h | 41 +++++ src/state_machine/card_states.h | 7 + src/state_machine/device.h | 46 ++++++ src/state_machine/state.h | 8 +- .../card_controller_test.cpp | 154 ++++++++++++++++++ .../dynamic_state_machine_test.cpp | 20 ++- 7 files changed, 315 insertions(+), 6 deletions(-) create mode 100644 src/state_machine/card_controller.cpp create mode 100644 src/state_machine/card_controller.h create mode 100644 src/state_machine/device.h create mode 100644 unit_tester/tests/state_machine_test/card_controller_test.cpp diff --git a/src/state_machine/card_controller.cpp b/src/state_machine/card_controller.cpp new file mode 100644 index 0000000..f65dddd --- /dev/null +++ b/src/state_machine/card_controller.cpp @@ -0,0 +1,45 @@ +/* + * card_controller.cpp + * + * Created on: Nov 16, 2014 + * Author: edwardh + */ + +#include "card_controller.h" + +#include + +#ifndef FOREVER +#define FOREVER() for(;;) +#endif + +CardController::CardController() : number_of_registered_cards(0) +{ + memset(this->cardSM, 0, MAX_SUPPORTED_CARDS); +} + +int CardController::regCard(DStateMachine *sm) +{ + this->cardSM[number_of_registered_cards] = sm; + return number_of_registered_cards++; +} + +void CardController::run() +{ +// Do here some Init stuff... + +// Enter the main loop, receive messages from Device/s (Cards), +// identify the sender by devID and lookup his SM. +// We are left with executing the event on the SM. +// +// FOREVER() +// { +// msg = recv_msg(); +// switch (msg->event) +// { +// case EV_EXIST: +// this->cardSM[msg->devID]->execEvent(...event...); +// } +// } +} + diff --git a/src/state_machine/card_controller.h b/src/state_machine/card_controller.h new file mode 100644 index 0000000..2026b6e --- /dev/null +++ b/src/state_machine/card_controller.h @@ -0,0 +1,41 @@ +/* + * card_controller.h + * + * Description: + * The controller is serving the cards (devices) by providing them means + * to register to the controller with their SM and giving each a unique id for communication. + * + * regCard() is used for card registration. + * run() is used for running the controller, usually in it's own task in an endless loop, + * blocking on recv messages. + * + * Created on: Nov 16, 2014 + * Author: edwardh + */ + +#ifndef STATE_MACHINE_CARD_CONTROLLER_H_ +#define STATE_MACHINE_CARD_CONTROLLER_H_ + +#include "dynamic_state_machine.h" + +class CardController +{ +public: + CardController(); + virtual ~CardController(){} + + enum eventID {EV_NONE, EV_EXIST, EV_INIT_SUCCESS, EV_INIT_FAIL, EV_PROV_SUCCESS, EV_PROV_FAIL, EV_COUNT}; + + int regCard(DStateMachine *sm); + + virtual void run(); + + static const int MAX_SUPPORTED_CARDS = 32; + +protected: + DStateMachine *cardSM[MAX_SUPPORTED_CARDS]; + int number_of_registered_cards; +}; + + +#endif /* STATE_MACHINE_CARD_CONTROLLER_H_ */ diff --git a/src/state_machine/card_states.h b/src/state_machine/card_states.h index 22a669f..9f8858d 100644 --- a/src/state_machine/card_states.h +++ b/src/state_machine/card_states.h @@ -1,6 +1,13 @@ /* * card_states.h * + * This file contains specific states with their relevant events (as methods). + * For each state, an event will execute the relevant method, + * performing some action and returning a result. + * Note: In the below definition, no actions are performed and each method + * returns a specific result. In real usage, an action/method may return + * with different results. + * * Created on: Nov 15, 2014 * Author: edwardh */ diff --git a/src/state_machine/device.h b/src/state_machine/device.h new file mode 100644 index 0000000..b213ee7 --- /dev/null +++ b/src/state_machine/device.h @@ -0,0 +1,46 @@ +/* + * device.h + * + * Description: + * A device is a generalization of a card, which has a reference to a controller + * and gets from the controller an ID (identifying it at the controller). + * + * A device can send an event to the controller through the sendEvent method. + * + * Created on: Nov 16, 2014 + * Author: edwardh + */ + +#ifndef STATE_MACHINE_DEVICE_H_ +#define STATE_MACHINE_DEVICE_H_ + +#include "card_controller.h" + +class Device +{ +public: + Device(CardController *controller) : devID(-1), ctrl(controller) {} + virtual ~Device(){}; + + virtual void sendEvent(CardController::eventID evID) + { + (void)evID; + /* + * Build a message and send it to the controller. + * msg->event = evID; + * msg->devID = this->devID; + * send_msg_to_controller(msg); + */ + } + + int devID; + +// // For debug only (actually for tests. TODO: Should be cleaned up and moved to the test. +// CardController::eventID lastEvent() {return last_event_id;} +// CardController::eventID last_event_id; +private: + CardController *ctrl; +}; + + +#endif /* STATE_MACHINE_DEVICE_H_ */ diff --git a/src/state_machine/state.h b/src/state_machine/state.h index 1c74a3d..0a7a496 100644 --- a/src/state_machine/state.h +++ b/src/state_machine/state.h @@ -1,6 +1,12 @@ /* * state.h * + * Description: + * The State interface defines the available events with their default action. + * (Here the defaults are to do nothing and return a FAIL response) + * In addition, it contains the storage of the state map (mapping result to next state). + * (Each state has such a map which is populated by the SM during configuration) + * * Created on: Nov 15, 2014 * Author: edwardh */ @@ -16,7 +22,7 @@ class State State(){memset(stateMap, 0, sizeof(stateMap));} virtual ~State(){} - // RET_COUNT must be left last, counting the number of possible results. + // RET_COUNT must be left last, representing the number of possible results. enum stateResult {RET_SUCCESS=0, RET_FAIL, RET_COUNT}; virtual stateResult evExist() {return RET_FAIL;} diff --git a/unit_tester/tests/state_machine_test/card_controller_test.cpp b/unit_tester/tests/state_machine_test/card_controller_test.cpp new file mode 100644 index 0000000..02f1a34 --- /dev/null +++ b/unit_tester/tests/state_machine_test/card_controller_test.cpp @@ -0,0 +1,154 @@ +/* + * card_controller_test.cpp + * + * The Controller test utilizes both the Dynamic SM implementation and the CardController logic. + * We use an inherited controller & card class to allow unit tests to be performed. + * + * Created on: Nov 16, 2014 + * Author: edwardh + */ + + +#include "CppUTest/TestHarness.h" + +#include "card_controller.h" +#include "device.h" + +#include "dynamic_state_machine.h" +#include "card_states.h" + + +// Implementation of CardController for testing purposes. +class CardController4Test : public CardController +{ +public: + void setInputEvent(CardController::eventID evID) {input_event_id = evID;} + void setInputDev(int devID) {input_dev_id = devID;} + + virtual void run() + { + DStateMachine *sm = this->cardSM[input_dev_id]; + State *st = sm->getCurrentState(); + + if(CardController::EV_EXIST == input_event_id) + sm->execEvent(st->evExist()); + } +private: + CardController::eventID input_event_id; + int input_dev_id; +}; + + +// Implementation of Device for testing purposes. +class CardDevice : public Device +{ +public: + CardDevice(CardController *controller) : Device(controller), last_event_id(CardController::EV_NONE){} + void sendEvent(CardController::eventID evID){last_event_id = evID;} + + CardController::eventID lastEvent() {return last_event_id;} + CardController::eventID last_event_id; +}; + +TEST_GROUP(card_controller) +{ + DStateMachine *sm; + State *stateNA; + State *stateInit; + State *stateReady; + State *stateProv; + State *stateFault; + + void setupStateMachine(DStateMachine *sMachine) + { + sMachine->setBaseState(stateNA); + sMachine->mapDefault(NULL); + sMachine->mapStateResult2NextState(stateNA, State::RET_SUCCESS, stateInit); + sMachine->mapStateResult2NextState(stateInit, State::RET_SUCCESS, stateProv); + sMachine->mapStateResult2NextState(stateInit, State::RET_FAIL, stateFault); + sMachine->mapStateResult2NextState(stateProv, State::RET_SUCCESS, stateReady); + sMachine->mapStateResult2NextState(stateFault, State::RET_FAIL, stateInit); + } + + void createCardStates() + { + stateNA = new StateNA(); + stateInit = new StateInit(); + stateReady = new StateReady(); + stateProv = new StateProv(); + stateFault = new StateFault(); + } + + void destroyCardStates() + { + delete stateNA; + delete stateInit; + delete stateReady; + delete stateProv; + delete stateFault; + } + + void setup() + { + sm = new DStateMachine(); + createCardStates(); + setupStateMachine(sm); + } + + void teardown() + { + destroyCardStates(); + delete sm; + } +}; + +TEST(card_controller, create_controller) +{ + CardController *controller = new CardController4Test(); + delete controller; +} + +TEST(card_controller, register_card_onto_controller__get_id) +{ + CardController *controller = new CardController4Test(); + + Device card(controller); + card.devID = controller->regCard(sm); + + LONGS_EQUAL(0, card.devID); + + delete controller; +} + +TEST(card_controller, register_2cards_onto_controller__get_next_unique_id) +{ + CardController *controller = new CardController4Test(); + + Device card1(controller); + Device card2(controller); + card1.devID = controller->regCard(sm); + card2.devID = controller->regCard(sm); + + LONGS_EQUAL(1, card2.devID); + + delete controller; +} + +TEST(card_controller, card_triggers_an_event__controller_executes_sm_event) +{ + CardController *controller = new CardController4Test(); + + CardDevice card(controller); + card.devID = controller->regCard(sm); + card.sendEvent(CardController::EV_EXIST); + + // Inject input (Event ID & Device ID) + ((CardController4Test*)controller)->setInputEvent(card.lastEvent()); + ((CardController4Test*)controller)->setInputDev(card.devID); + + controller->run(); + + POINTERS_EQUAL(stateInit, sm->getCurrentState()); + + delete controller; +} diff --git a/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp b/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp index 55a383e..8d181e7 100644 --- a/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp +++ b/unit_tester/tests/state_machine_test/dynamic_state_machine_test.cpp @@ -34,25 +34,35 @@ TEST_GROUP(dynamic_sm) sMachine->mapStateResult2NextState(stateFault, State::RET_FAIL, stateInit); } - void setup() + void createCardStates() { - sm = new DStateMachine(); stateNA = new StateNA(); stateInit = new StateInit(); stateReady = new StateReady(); stateProv = new StateProv(); stateFault = new StateFault(); - - setupStateMachine(sm); } - void teardown() + void destroyCardStates() { delete stateNA; delete stateInit; delete stateReady; delete stateProv; delete stateFault; + } + + void setup() + { + sm = new DStateMachine(); + createCardStates(); + + setupStateMachine(sm); + } + + void teardown() + { + destroyCardStates(); delete sm; } }; From 027e876272d96aae35ecd1d7eb3975ccb7755e93 Mon Sep 17 00:00:00 2001 From: Edward Haas Date: Sun, 16 Nov 2014 21:51:17 +0200 Subject: [PATCH 3/3] Adding Controller & SM documentation. An UML and a README file have been added. --- src/state_machine/ControllerAndSM.dia | Bin 0 -> 3753 bytes src/state_machine/ControllerAndSM.png | Bin 0 -> 111423 bytes src/state_machine/README.setup_and_run | 38 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/state_machine/ControllerAndSM.dia create mode 100644 src/state_machine/ControllerAndSM.png create mode 100644 src/state_machine/README.setup_and_run diff --git a/src/state_machine/ControllerAndSM.dia b/src/state_machine/ControllerAndSM.dia new file mode 100644 index 0000000000000000000000000000000000000000..a2975b9e27723d35439fa7cfa1bd9377306c19ac GIT binary patch literal 3753 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

ceL5H*kPnvGc~E-Cg%Z3DVR1(>{mB*gr7flA%|m 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%0A*Hf|)8Lmol~b-`H$$0f#B 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 +4. Configure the SM by mapping actions/results +to the next state (per state): +sm->mapStateResult2NextState(stateNA, State::RET_SUCCESS, stateInit); +The above can be described as follows: +An event received while in stateNA, triggers the event method on that state, +and if it returns RET_SUCCESS, the SM current state is moved to stateInit. +Any other result value, by default keeps the current state unchanged. + +5. Create a controller: controller = new CardController(); +6. Create a card/device and bind to controller: card = new Device(controller); +7. Register the card & the SM it needs to work with to the controller: +card.devID = controller->regCard(sm); +The devID is used to identify the card in the controller. +When notifications arrive from the card, they include the devID and event, +and the controller can map the devID to its SM. + +Runtime: +1. Start the controller so it will listen to inclomming messages: +controller->run(); +Usually such a controller will run on a seperated thread, blocking on +msg_recv(); +2. The card/device sends notifications to the controllen it is bind to: +card.sendEvent(CardController::EV_EXIST); +It is usually done through a message service service: msg_send(msg); +The information sent includes the card devID and the event ID. +3. The controller receives the message, using the devID determine the SM +it belongs to and run on it the event. +(it actually executes the event method on the current state) +