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 #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