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 KOPIRANO_cell_locker by
Diff: CaseFSM/include/CaseFsm.h
- Revision:
- 1:75966605a6a3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CaseFSM/include/CaseFsm.h Fri Nov 10 15:35:26 2017 +0000
@@ -0,0 +1,72 @@
+#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_ */
