commit

Dependencies:   MPU6050_SIM5320_TEST

Fork of MPU_SDCARD by Suad Suljic

Committer:
suads
Date:
Fri Nov 10 15:35:26 2017 +0000
Revision:
1:75966605a6a3
mbed cli

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suads 1:75966605a6a3 1 #ifndef CASEFSM_FSM_H_
suads 1:75966605a6a3 2 #define CASEFSM_FSM_H_
suads 1:75966605a6a3 3 #include <CaseState.h>
suads 1:75966605a6a3 4 #include "mbed.h"
suads 1:75966605a6a3 5
suads 1:75966605a6a3 6 #include <CaseEvents.h>
suads 1:75966605a6a3 7
suads 1:75966605a6a3 8 struct SwitchPosition;
suads 1:75966605a6a3 9 struct RFIDEvent;
suads 1:75966605a6a3 10
suads 1:75966605a6a3 11 class CaseFsmStates
suads 1:75966605a6a3 12 {
suads 1:75966605a6a3 13 public:
suads 1:75966605a6a3 14 CaseFsmStates();
suads 1:75966605a6a3 15
suads 1:75966605a6a3 16 CaseState* deviceEmptyState();
suads 1:75966605a6a3 17 CaseState* deviceFullState();
suads 1:75966605a6a3 18 CaseState* phoneUndetectedState();
suads 1:75966605a6a3 19 CaseState* phoneDetectedState();
suads 1:75966605a6a3 20 CaseState* currentState();
suads 1:75966605a6a3 21
suads 1:75966605a6a3 22 void currentState(CaseState* state);
suads 1:75966605a6a3 23 ~CaseFsmStates();
suads 1:75966605a6a3 24
suads 1:75966605a6a3 25 private:
suads 1:75966605a6a3 26
suads 1:75966605a6a3 27 CaseState* deviceEmptyState_;
suads 1:75966605a6a3 28 CaseState* deviceFullState_;
suads 1:75966605a6a3 29 CaseState* phoneUndetectedState_;
suads 1:75966605a6a3 30 CaseState* phoneDetectedState_;
suads 1:75966605a6a3 31 CaseState* currentState_;
suads 1:75966605a6a3 32
suads 1:75966605a6a3 33 Timer timer;
suads 1:75966605a6a3 34
suads 1:75966605a6a3 35 };
suads 1:75966605a6a3 36
suads 1:75966605a6a3 37 class CaseFsm
suads 1:75966605a6a3 38 {
suads 1:75966605a6a3 39 public:
suads 1:75966605a6a3 40 CaseFsm();
suads 1:75966605a6a3 41 Timeout rfidTimeout;
suads 1:75966605a6a3 42 void timerCallback();
suads 1:75966605a6a3 43 template <typename Event>
suads 1:75966605a6a3 44 void handle(Event& event) {
suads 1:75966605a6a3 45 CaseState* state = states_.currentState()->handle(event);
suads 1:75966605a6a3 46 if(state==states_.deviceFullState()) {
suads 1:75966605a6a3 47 rfidTimeout.attach(this, &CaseFsm::timerCallback, 5.0);
suads 1:75966605a6a3 48 }
suads 1:75966605a6a3 49 if(state==states_.deviceEmptyState()) {
suads 1:75966605a6a3 50 rfidTimeout.detach();
suads 1:75966605a6a3 51 }
suads 1:75966605a6a3 52 if(state==states_.phoneDetectedState()) {
suads 1:75966605a6a3 53 rfidTimeout.detach();
suads 1:75966605a6a3 54 }
suads 1:75966605a6a3 55 states_.currentState(state);
suads 1:75966605a6a3 56 }
suads 1:75966605a6a3 57 bool DeviceInFullState() {
suads 1:75966605a6a3 58 return states_.currentState() == states_.deviceFullState();
suads 1:75966605a6a3 59 }
suads 1:75966605a6a3 60 bool DeviceInPhoneDetectedState() {
suads 1:75966605a6a3 61 return states_.currentState() == states_.phoneDetectedState();
suads 1:75966605a6a3 62 }
suads 1:75966605a6a3 63 bool DeviceInDeviceEmptyState() {
suads 1:75966605a6a3 64 return states_.currentState() == states_.deviceEmptyState();
suads 1:75966605a6a3 65 }
suads 1:75966605a6a3 66 virtual ~CaseFsm() {}
suads 1:75966605a6a3 67
suads 1:75966605a6a3 68 private:
suads 1:75966605a6a3 69 CaseFsmStates states_;
suads 1:75966605a6a3 70
suads 1:75966605a6a3 71 };
suads 1:75966605a6a3 72 #endif /* ifndef CASEFSM_FSM_H_ */