77 lines
1.9 KiB
C++
Executable File
77 lines
1.9 KiB
C++
Executable File
#include "fsm.h"
|
|
|
|
using namespace std;
|
|
|
|
struct Event { int state; };
|
|
enum States { AAAA, BBBB, CCCC };
|
|
|
|
struct QQQQSwitch {
|
|
typedef LIST3(AAAA, BBBB, CCCC) StateList;
|
|
template <int> int event(Event & ev) { Serial.println("undefined event -- event"); return ev.state; }
|
|
template <int> int event() { Serial.println("undefined enter"); return 0; }
|
|
template <int> void enter() { Serial.println("undefined enter"); }
|
|
template <int> void exit() { Serial.println("undefined leave"); };
|
|
|
|
template <int> void tick() { Serial.println("undefined enter");}
|
|
};
|
|
|
|
template <> void QQQQSwitch::enter<AAAA>() { Serial.println("enter AAAA"); }
|
|
template <> void QQQQSwitch::exit<AAAA>() { Serial.println("exit AAAA"); }
|
|
template <> void QQQQSwitch::tick<AAAA>() { Serial.println("tick AAAA"); }
|
|
|
|
template <> void QQQQSwitch::enter<BBBB>() { Serial.println("enter BBBB"); }
|
|
template <> void QQQQSwitch::exit<BBBB>() { Serial.println("exit BBBB"); }
|
|
template <> void QQQQSwitch::tick<BBBB>() { Serial.println("tick BBBB"); }
|
|
|
|
template <> void QQQQSwitch::enter<CCCC>() { Serial.println("enter CCCC"); }
|
|
template <> void QQQQSwitch::exit<CCCC>() { Serial.println("exit CCCC"); }
|
|
template <> void QQQQSwitch::tick<CCCC>() { Serial.println("tick CCCC"); }
|
|
|
|
StateMachine<QQQQSwitch>* sm;
|
|
|
|
Event event_AAAA = {AAAA};
|
|
Event event_BBBB = {BBBB};
|
|
Event event_CCCC = {CCCC};
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
Serial.println("starts");
|
|
|
|
QQQQSwitch c;
|
|
sm = new StateMachine<QQQQSwitch>(c);
|
|
|
|
}
|
|
|
|
void loop() {
|
|
delay(2000);
|
|
Serial.println("...");
|
|
|
|
|
|
if (Serial.available() > 0) {
|
|
char in = (char) Serial.read();
|
|
|
|
switch(in) {
|
|
|
|
case 'a':
|
|
sm->work(event_AAAA);
|
|
return;
|
|
|
|
case 'b':
|
|
sm->work(event_BBBB);
|
|
return;
|
|
|
|
case 'c':
|
|
sm->work(event_CCCC);
|
|
return;
|
|
|
|
default:
|
|
Serial.println('??');
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
sm->tick();
|
|
|
|
}
|