fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 4:fcf597f82632 53 // cleaning up the last state
gwappa 4:fcf597f82632 54 teardown_prev();
gwappa 4:fcf597f82632 55
gwappa 0:f736749c33d2 56 // pc.printf("done.\r\n");
gwappa 0:f736749c33d2 57 }
gwappa 0:f736749c33d2 58
gwappa 0:f736749c33d2 59 void makeTransition()
gwappa 0:f736749c33d2 60 {
gwappa 0:f736749c33d2 61 LOG_DEBUG("transition");
gwappa 0:f736749c33d2 62 teardown_prev();
gwappa 0:f736749c33d2 63 setup_next();
gwappa 0:f736749c33d2 64 event = None;
gwappa 0:f736749c33d2 65 }
gwappa 0:f736749c33d2 66 }