Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
automaton.cpp@0:f736749c33d2, 2018-05-14 (annotated)
- Committer:
- gwappa
- Date:
- Mon May 14 14:12:32 2018 +0000
- Revision:
- 0:f736749c33d2
- Child:
- 4:fcf597f82632
set up config parser
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gwappa | 0:f736749c33d2 | 1 | #include "automaton.h" |
gwappa | 0:f736749c33d2 | 2 | |
gwappa | 0:f736749c33d2 | 3 | //#define DEBUG_AUTOMATON |
gwappa | 0:f736749c33d2 | 4 | |
gwappa | 0:f736749c33d2 | 5 | #ifdef DEBUG_AUTOMATON |
gwappa | 0:f736749c33d2 | 6 | #include "IO.h" |
gwappa | 0:f736749c33d2 | 7 | #define LOG_DEBUG(msg) IO::debug(msg) |
gwappa | 0:f736749c33d2 | 8 | #else |
gwappa | 0:f736749c33d2 | 9 | #define LOG_DEBUG(msg) |
gwappa | 0:f736749c33d2 | 10 | #endif |
gwappa | 0:f736749c33d2 | 11 | |
gwappa | 0:f736749c33d2 | 12 | namespace automaton { |
gwappa | 0:f736749c33d2 | 13 | |
gwappa | 0:f736749c33d2 | 14 | Callback<void()> entry; |
gwappa | 0:f736749c33d2 | 15 | Callback<void()> teardown_prev; |
gwappa | 0:f736749c33d2 | 16 | Callback<void()> setup_next; |
gwappa | 0:f736749c33d2 | 17 | volatile Event event; |
gwappa | 0:f736749c33d2 | 18 | |
gwappa | 0:f736749c33d2 | 19 | void makeTransition(); |
gwappa | 0:f736749c33d2 | 20 | |
gwappa | 0:f736749c33d2 | 21 | void empty_entry_callback() |
gwappa | 0:f736749c33d2 | 22 | { |
gwappa | 0:f736749c33d2 | 23 | event = Done; |
gwappa | 0:f736749c33d2 | 24 | } |
gwappa | 0:f736749c33d2 | 25 | |
gwappa | 0:f736749c33d2 | 26 | void do_nothing_callback(){ } // do nothing |
gwappa | 0:f736749c33d2 | 27 | |
gwappa | 0:f736749c33d2 | 28 | void run(){ |
gwappa | 0:f736749c33d2 | 29 | event = None; |
gwappa | 0:f736749c33d2 | 30 | |
gwappa | 0:f736749c33d2 | 31 | // go into the entry point |
gwappa | 0:f736749c33d2 | 32 | LOG_DEBUG("starting"); |
gwappa | 0:f736749c33d2 | 33 | entry(); |
gwappa | 0:f736749c33d2 | 34 | |
gwappa | 0:f736749c33d2 | 35 | while(event != Done){ |
gwappa | 0:f736749c33d2 | 36 | // wait until event status changes |
gwappa | 0:f736749c33d2 | 37 | while(event == None); |
gwappa | 0:f736749c33d2 | 38 | |
gwappa | 0:f736749c33d2 | 39 | switch(event){ |
gwappa | 0:f736749c33d2 | 40 | case Transition: |
gwappa | 0:f736749c33d2 | 41 | makeTransition(); |
gwappa | 0:f736749c33d2 | 42 | break; |
gwappa | 0:f736749c33d2 | 43 | case Done: |
gwappa | 0:f736749c33d2 | 44 | break; |
gwappa | 0:f736749c33d2 | 45 | default: |
gwappa | 0:f736749c33d2 | 46 | // TODO: handle error more nicely |
gwappa | 0:f736749c33d2 | 47 | LOG_DEBUG("unexpected event"); |
gwappa | 0:f736749c33d2 | 48 | event = Done; |
gwappa | 0:f736749c33d2 | 49 | break; |
gwappa | 0:f736749c33d2 | 50 | } |
gwappa | 0:f736749c33d2 | 51 | } |
gwappa | 0:f736749c33d2 | 52 | |
gwappa | 0:f736749c33d2 | 53 | // pc.printf("done.\r\n"); |
gwappa | 0:f736749c33d2 | 54 | } |
gwappa | 0:f736749c33d2 | 55 | |
gwappa | 0:f736749c33d2 | 56 | void makeTransition() |
gwappa | 0:f736749c33d2 | 57 | { |
gwappa | 0:f736749c33d2 | 58 | LOG_DEBUG("transition"); |
gwappa | 0:f736749c33d2 | 59 | teardown_prev(); |
gwappa | 0:f736749c33d2 | 60 | setup_next(); |
gwappa | 0:f736749c33d2 | 61 | event = None; |
gwappa | 0:f736749c33d2 | 62 | } |
gwappa | 0:f736749c33d2 | 63 | } |