Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MPU6050_SIM5320_TEST
Fork of MPU_SDCARD by
CaseFsm.h
00001 #ifndef CASEFSM_FSM_H_ 00002 #define CASEFSM_FSM_H_ 00003 #include <CaseState.h> 00004 #include "mbed.h" 00005 00006 #include <CaseEvents.h> 00007 00008 struct SwitchPosition; 00009 struct RFIDEvent; 00010 00011 class CaseFsmStates 00012 { 00013 public: 00014 CaseFsmStates(); 00015 00016 CaseState* deviceEmptyState(); 00017 CaseState* deviceFullState(); 00018 CaseState* phoneUndetectedState(); 00019 CaseState* phoneDetectedState(); 00020 CaseState* currentState(); 00021 00022 void currentState(CaseState* state); 00023 ~CaseFsmStates(); 00024 00025 private: 00026 00027 CaseState* deviceEmptyState_; 00028 CaseState* deviceFullState_; 00029 CaseState* phoneUndetectedState_; 00030 CaseState* phoneDetectedState_; 00031 CaseState* currentState_; 00032 00033 Timer timer; 00034 00035 }; 00036 00037 class CaseFsm 00038 { 00039 public: 00040 CaseFsm(); 00041 Timeout rfidTimeout; 00042 void timerCallback(); 00043 template <typename Event> 00044 void handle(Event& event) { 00045 CaseState* state = states_.currentState()->handle(event); 00046 if(state==states_.deviceFullState()) { 00047 rfidTimeout.attach(this, &CaseFsm::timerCallback, 5.0); 00048 } 00049 if(state==states_.deviceEmptyState()) { 00050 rfidTimeout.detach(); 00051 } 00052 if(state==states_.phoneDetectedState()) { 00053 rfidTimeout.detach(); 00054 } 00055 states_.currentState(state); 00056 } 00057 bool DeviceInFullState() { 00058 return states_.currentState() == states_.deviceFullState(); 00059 } 00060 bool DeviceInPhoneDetectedState() { 00061 return states_.currentState() == states_.phoneDetectedState(); 00062 } 00063 bool DeviceInDeviceEmptyState() { 00064 return states_.currentState() == states_.deviceEmptyState(); 00065 } 00066 virtual ~CaseFsm() {} 00067 00068 private: 00069 CaseFsmStates states_; 00070 00071 }; 00072 #endif /* ifndef CASEFSM_FSM_H_ */
Generated on Tue Jul 12 2022 19:25:17 by
1.7.2
