Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
core/automaton.h@32:1416e015016c, 2018-12-13 (annotated)
- Committer:
- gwappa
- Date:
- Thu Dec 13 07:18:43 2018 +0000
- Revision:
- 32:1416e015016c
- Parent:
- 26:b4421d1ee57a
change to use the Staged state
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gwappa | 0:f736749c33d2 | 1 | #ifndef AUTOMATON_H_ |
gwappa | 0:f736749c33d2 | 2 | #define AUTOMATON_H_ |
gwappa | 0:f736749c33d2 | 3 | |
gwappa | 0:f736749c33d2 | 4 | #include "mbed.h" |
gwappa | 0:f736749c33d2 | 5 | |
gwappa | 0:f736749c33d2 | 6 | namespace automaton |
gwappa | 0:f736749c33d2 | 7 | { |
gwappa | 0:f736749c33d2 | 8 | |
gwappa | 0:f736749c33d2 | 9 | /** |
gwappa | 0:f736749c33d2 | 10 | * event enum to notice changes to the instance |
gwappa | 0:f736749c33d2 | 11 | */ |
gwappa | 0:f736749c33d2 | 12 | enum Event |
gwappa | 0:f736749c33d2 | 13 | { |
gwappa | 0:f736749c33d2 | 14 | None = 0x00, |
gwappa | 0:f736749c33d2 | 15 | Transition = 0x01, |
gwappa | 0:f736749c33d2 | 16 | Done = 0x02, |
gwappa | 0:f736749c33d2 | 17 | }; |
gwappa | 0:f736749c33d2 | 18 | |
gwappa | 0:f736749c33d2 | 19 | /** |
gwappa | 0:f736749c33d2 | 20 | * a callback that does nothing |
gwappa | 0:f736749c33d2 | 21 | */ |
gwappa | 0:f736749c33d2 | 22 | void do_nothing_callback(); |
gwappa | 0:f736749c33d2 | 23 | |
gwappa | 0:f736749c33d2 | 24 | extern Callback<void()> entry; |
gwappa | 0:f736749c33d2 | 25 | extern Callback<void()> teardown_prev; |
gwappa | 0:f736749c33d2 | 26 | extern Callback<void()> setup_next; |
gwappa | 0:f736749c33d2 | 27 | extern volatile Event event; |
gwappa | 0:f736749c33d2 | 28 | |
gwappa | 0:f736749c33d2 | 29 | /** |
gwappa | 0:f736749c33d2 | 30 | * marks for performing a transition from FromState to ToState. |
gwappa | 0:f736749c33d2 | 31 | */ |
gwappa | 0:f736749c33d2 | 32 | template<typename FromState, typename ToState> |
gwappa | 4:fcf597f82632 | 33 | void jump() |
gwappa | 0:f736749c33d2 | 34 | { |
gwappa | 0:f736749c33d2 | 35 | if ( event == None ){ |
gwappa | 0:f736749c33d2 | 36 | teardown_prev = &FromState::teardown; |
gwappa | 0:f736749c33d2 | 37 | setup_next = &ToState::setup; |
gwappa | 0:f736749c33d2 | 38 | event = Transition; |
gwappa | 0:f736749c33d2 | 39 | } |
gwappa | 0:f736749c33d2 | 40 | } |
gwappa | 0:f736749c33d2 | 41 | |
gwappa | 0:f736749c33d2 | 42 | template<typename State> |
gwappa | 0:f736749c33d2 | 43 | void done() |
gwappa | 0:f736749c33d2 | 44 | { |
gwappa | 0:f736749c33d2 | 45 | if (event == None){ |
gwappa | 0:f736749c33d2 | 46 | teardown_prev = &State::teardown; |
gwappa | 0:f736749c33d2 | 47 | setup_next = &do_nothing_callback; |
gwappa | 0:f736749c33d2 | 48 | event = Done; |
gwappa | 0:f736749c33d2 | 49 | } |
gwappa | 0:f736749c33d2 | 50 | } |
gwappa | 0:f736749c33d2 | 51 | |
gwappa | 0:f736749c33d2 | 52 | template<typename State> |
gwappa | 0:f736749c33d2 | 53 | void init() |
gwappa | 0:f736749c33d2 | 54 | { |
gwappa | 0:f736749c33d2 | 55 | entry = &State::setup; |
gwappa | 0:f736749c33d2 | 56 | teardown_prev = &do_nothing_callback; |
gwappa | 0:f736749c33d2 | 57 | setup_next = &do_nothing_callback; |
gwappa | 0:f736749c33d2 | 58 | event = None; |
gwappa | 0:f736749c33d2 | 59 | } |
gwappa | 0:f736749c33d2 | 60 | |
gwappa | 0:f736749c33d2 | 61 | /** |
gwappa | 0:f736749c33d2 | 62 | * runs the automaton once |
gwappa | 0:f736749c33d2 | 63 | */ |
gwappa | 0:f736749c33d2 | 64 | void run(); |
gwappa | 0:f736749c33d2 | 65 | |
gwappa | 0:f736749c33d2 | 66 | } |
gwappa | 0:f736749c33d2 | 67 | #endif |