Suad Suljic / Mbed OS KOPIRANO_cell_locker

Dependencies:   MPU6050_SIM5320_TEST

Fork of MPU_SDCARD by Suad Suljic

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CaseFsm.h Source File

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_ */