commit
Dependencies: MPU6050_SIM5320_TEST
Fork of MPU_SDCARD by
CaseFSM/include/CaseFsm.h
- Committer:
- suads
- Date:
- 2017-11-10
- Revision:
- 1:75966605a6a3
File content as of revision 1:75966605a6a3:
#ifndef CASEFSM_FSM_H_ #define CASEFSM_FSM_H_ #include <CaseState.h> #include "mbed.h" #include <CaseEvents.h> struct SwitchPosition; struct RFIDEvent; class CaseFsmStates { public: CaseFsmStates(); CaseState* deviceEmptyState(); CaseState* deviceFullState(); CaseState* phoneUndetectedState(); CaseState* phoneDetectedState(); CaseState* currentState(); void currentState(CaseState* state); ~CaseFsmStates(); private: CaseState* deviceEmptyState_; CaseState* deviceFullState_; CaseState* phoneUndetectedState_; CaseState* phoneDetectedState_; CaseState* currentState_; Timer timer; }; class CaseFsm { public: CaseFsm(); Timeout rfidTimeout; void timerCallback(); template <typename Event> void handle(Event& event) { CaseState* state = states_.currentState()->handle(event); if(state==states_.deviceFullState()) { rfidTimeout.attach(this, &CaseFsm::timerCallback, 5.0); } if(state==states_.deviceEmptyState()) { rfidTimeout.detach(); } if(state==states_.phoneDetectedState()) { rfidTimeout.detach(); } states_.currentState(state); } bool DeviceInFullState() { return states_.currentState() == states_.deviceFullState(); } bool DeviceInPhoneDetectedState() { return states_.currentState() == states_.phoneDetectedState(); } bool DeviceInDeviceEmptyState() { return states_.currentState() == states_.deviceEmptyState(); } virtual ~CaseFsm() {} private: CaseFsmStates states_; }; #endif /* ifndef CASEFSM_FSM_H_ */