State machines are commonly used to implement decision making algorithms. State machines are used in applications where distinguishable states exist. A finite state machine (FSM) is based on the idea that a given system has a finite number of states.

Dependencies:   mbed

Fork of FRDM-K64F_FSM by Nikolaos Maliganis

Committer:
mnikolaos
Date:
Thu Aug 07 15:02:42 2014 +0000
Revision:
0:17539d6d4289
fsm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mnikolaos 0:17539d6d4289 1 #include "mbed.h"
mnikolaos 0:17539d6d4289 2
mnikolaos 0:17539d6d4289 3 Serial pc(USBTX, USBRX);
mnikolaos 0:17539d6d4289 4
mnikolaos 0:17539d6d4289 5 DigitalOut gpo1(D1);
mnikolaos 0:17539d6d4289 6 DigitalOut gpo2(D2);
mnikolaos 0:17539d6d4289 7 DigitalOut gpo3(D3);
mnikolaos 0:17539d6d4289 8 DigitalOut ledB(LED_BLUE);
mnikolaos 0:17539d6d4289 9 DigitalOut ledG(LED_GREEN);
mnikolaos 0:17539d6d4289 10 DigitalOut ledR(LED_RED);
mnikolaos 0:17539d6d4289 11
mnikolaos 0:17539d6d4289 12 Ticker tick;
mnikolaos 0:17539d6d4289 13
mnikolaos 0:17539d6d4289 14 typedef struct EventTag {
mnikolaos 0:17539d6d4289 15 uint16_t sig; /* signal of the event */
mnikolaos 0:17539d6d4289 16 } Event;
mnikolaos 0:17539d6d4289 17
mnikolaos 0:17539d6d4289 18 struct StateTableTag; /* forward declaration */
mnikolaos 0:17539d6d4289 19
mnikolaos 0:17539d6d4289 20 typedef void (*Tran)(struct StateTableTag *me, Event const *e);
mnikolaos 0:17539d6d4289 21
mnikolaos 0:17539d6d4289 22 typedef struct StateTableTag {
mnikolaos 0:17539d6d4289 23 uint8_t state; /* the current active state */
mnikolaos 0:17539d6d4289 24 uint8_t *st_desc; /* the current active state Name Descriprion */
mnikolaos 0:17539d6d4289 25 Tran const *state_table; /* the State-Table */
mnikolaos 0:17539d6d4289 26 uint8_t n_states; /* number of states */
mnikolaos 0:17539d6d4289 27 uint8_t n_signals; /* number of signals */
mnikolaos 0:17539d6d4289 28 Tran initial; /* the initial transition */
mnikolaos 0:17539d6d4289 29 } StateTable;
mnikolaos 0:17539d6d4289 30
mnikolaos 0:17539d6d4289 31 void StTbl_ctor(StateTable *me,
mnikolaos 0:17539d6d4289 32 Tran const *table,
mnikolaos 0:17539d6d4289 33 uint8_t n_states,
mnikolaos 0:17539d6d4289 34 uint8_t n_signals,
mnikolaos 0:17539d6d4289 35 Tran initial);
mnikolaos 0:17539d6d4289 36
mnikolaos 0:17539d6d4289 37 void StTbl_init(StateTable *me);
mnikolaos 0:17539d6d4289 38 void StTbl_dispatch(StateTable *me, Event const *e);
mnikolaos 0:17539d6d4289 39 void StTbl_empty(StateTable *me, Event const *e);
mnikolaos 0:17539d6d4289 40
mnikolaos 0:17539d6d4289 41 /* macro for taking a state transition inside a transition function */
mnikolaos 0:17539d6d4289 42 #define TRAN(target_) (((StateTable *)me)->state = (uint8_t)(target_))
mnikolaos 0:17539d6d4289 43
mnikolaos 0:17539d6d4289 44 void StTbl_ctor(StateTable *me,
mnikolaos 0:17539d6d4289 45 Tran const *table, uint8_t n_states, uint8_t n_signals,
mnikolaos 0:17539d6d4289 46 Tran initial)
mnikolaos 0:17539d6d4289 47 {
mnikolaos 0:17539d6d4289 48 me->state_table = table;
mnikolaos 0:17539d6d4289 49 me->n_states = n_states;
mnikolaos 0:17539d6d4289 50 me->n_signals = n_signals;
mnikolaos 0:17539d6d4289 51 me->initial = initial;
mnikolaos 0:17539d6d4289 52 }
mnikolaos 0:17539d6d4289 53
mnikolaos 0:17539d6d4289 54 void StTbl_init(StateTable *me) {
mnikolaos 0:17539d6d4289 55 me->state = me->n_states;
mnikolaos 0:17539d6d4289 56 (*me->initial)(me, (Event *)0);
mnikolaos 0:17539d6d4289 57 }
mnikolaos 0:17539d6d4289 58
mnikolaos 0:17539d6d4289 59 void StTbl_dispatch(StateTable *me, Event const *e) {
mnikolaos 0:17539d6d4289 60 Tran t;
mnikolaos 0:17539d6d4289 61
mnikolaos 0:17539d6d4289 62 t = me->state_table[me->state*me->n_signals + e->sig];
mnikolaos 0:17539d6d4289 63 (*t)(me, e);
mnikolaos 0:17539d6d4289 64 }
mnikolaos 0:17539d6d4289 65
mnikolaos 0:17539d6d4289 66 void StTbl_empty(StateTable *me, Event const *e) {
mnikolaos 0:17539d6d4289 67 (void)me;
mnikolaos 0:17539d6d4289 68 (void)e;
mnikolaos 0:17539d6d4289 69 }
mnikolaos 0:17539d6d4289 70
mnikolaos 0:17539d6d4289 71 typedef struct Tag { /* FSM */
mnikolaos 0:17539d6d4289 72 StateTable super; /* derive from the StateTable structure */
mnikolaos 0:17539d6d4289 73 uint8_t timeout; /* number of seconds till exp */
mnikolaos 0:17539d6d4289 74 uint8_t defuse; /* secret defuse code to disarm */
mnikolaos 0:17539d6d4289 75 uint8_t code; /* currently entered code to disarm */
mnikolaos 0:17539d6d4289 76 } FSM1;
mnikolaos 0:17539d6d4289 77
mnikolaos 0:17539d6d4289 78
mnikolaos 0:17539d6d4289 79 enum FSMSignals { /* all signals for the Bomb FSM */
mnikolaos 0:17539d6d4289 80 GO_SIG,
mnikolaos 0:17539d6d4289 81 OUT_SIG,
mnikolaos 0:17539d6d4289 82 TICK_SIG,
mnikolaos 0:17539d6d4289 83 ERR_SIG,
mnikolaos 0:17539d6d4289 84 CONF_SIG,
mnikolaos 0:17539d6d4289 85 TRANADM_SIG,
mnikolaos 0:17539d6d4289 86
mnikolaos 0:17539d6d4289 87 MAX_SIG /* the number of signals */
mnikolaos 0:17539d6d4289 88 };
mnikolaos 0:17539d6d4289 89
mnikolaos 0:17539d6d4289 90 enum FSMStates {
mnikolaos 0:17539d6d4289 91 SETTING_FSM_STATE, /* Setting for FSM */
mnikolaos 0:17539d6d4289 92 READY_FSM_STATE, /* Unassigned and Ready to be configured from PC */
mnikolaos 0:17539d6d4289 93 ASSIGNED_FSM_STATE, /* Assigned to a user. None could use it apart from him.*/
mnikolaos 0:17539d6d4289 94 LOCKED_FSM_STATE, /* Locked by user*/
mnikolaos 0:17539d6d4289 95 ERROR_STATE, /* Error state. Only logging communication*/
mnikolaos 0:17539d6d4289 96
mnikolaos 0:17539d6d4289 97 MAX_STATE
mnikolaos 0:17539d6d4289 98 };
mnikolaos 0:17539d6d4289 99
mnikolaos 0:17539d6d4289 100 typedef struct TickEvtTag {
mnikolaos 0:17539d6d4289 101 Event super; /* derive from the Event structure */
mnikolaos 0:17539d6d4289 102 uint8_t fine_time; /* the fine 1/10 s counter */
mnikolaos 0:17539d6d4289 103 } TickEvt;
mnikolaos 0:17539d6d4289 104
mnikolaos 0:17539d6d4289 105
mnikolaos 0:17539d6d4289 106 static void FSM_initial (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 107 {
mnikolaos 0:17539d6d4289 108 (void)e;
mnikolaos 0:17539d6d4289 109
mnikolaos 0:17539d6d4289 110 pc.printf("State --> Initial\n");
mnikolaos 0:17539d6d4289 111 TRAN(SETTING_FSM_STATE);
mnikolaos 0:17539d6d4289 112 }
mnikolaos 0:17539d6d4289 113
mnikolaos 0:17539d6d4289 114 static void FSM_setting_GO (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 115 {
mnikolaos 0:17539d6d4289 116 (void)e;
mnikolaos 0:17539d6d4289 117 pc.printf("State --> Setting - GO Event was caught\n");
mnikolaos 0:17539d6d4289 118 TRAN(READY_FSM_STATE);
mnikolaos 0:17539d6d4289 119 }
mnikolaos 0:17539d6d4289 120
mnikolaos 0:17539d6d4289 121 static void FSM_setting_OUT (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 122 {
mnikolaos 0:17539d6d4289 123 (void)e;
mnikolaos 0:17539d6d4289 124 pc.printf("State --> Setting - OUT Event was caught\n");
mnikolaos 0:17539d6d4289 125 }
mnikolaos 0:17539d6d4289 126
mnikolaos 0:17539d6d4289 127 static void FSM_setting_ERR (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 128 {
mnikolaos 0:17539d6d4289 129 (void)e;
mnikolaos 0:17539d6d4289 130 pc.printf("State --> Setting - ERR Event was caught\n");
mnikolaos 0:17539d6d4289 131 TRAN(ERROR_STATE);
mnikolaos 0:17539d6d4289 132 }
mnikolaos 0:17539d6d4289 133
mnikolaos 0:17539d6d4289 134 static void FSM_setting_TRAN (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 135 {
mnikolaos 0:17539d6d4289 136 (void)e;
mnikolaos 0:17539d6d4289 137 pc.printf("State --> Setting - TRAN ADMIN Event was caught\n");
mnikolaos 0:17539d6d4289 138 }
mnikolaos 0:17539d6d4289 139
mnikolaos 0:17539d6d4289 140 static void FSM_ready_GO (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 141 {
mnikolaos 0:17539d6d4289 142 (void)e;
mnikolaos 0:17539d6d4289 143 pc.printf("State --> Ready - GO Event was caught\n");
mnikolaos 0:17539d6d4289 144 TRAN(ASSIGNED_FSM_STATE);
mnikolaos 0:17539d6d4289 145 }
mnikolaos 0:17539d6d4289 146
mnikolaos 0:17539d6d4289 147 static void FSM_ready_OUT (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 148 {
mnikolaos 0:17539d6d4289 149 (void)e;
mnikolaos 0:17539d6d4289 150 pc.printf("State --> Ready - OUT Event was caught\n");
mnikolaos 0:17539d6d4289 151 }
mnikolaos 0:17539d6d4289 152
mnikolaos 0:17539d6d4289 153 static void FSM_ready_TICK (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 154 {
mnikolaos 0:17539d6d4289 155 (void)e;
mnikolaos 0:17539d6d4289 156 pc.printf("State --> Ready - TICK Event was caught\n");
mnikolaos 0:17539d6d4289 157 }
mnikolaos 0:17539d6d4289 158
mnikolaos 0:17539d6d4289 159 static void FSM_ready_ERR (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 160 {
mnikolaos 0:17539d6d4289 161 (void)e;
mnikolaos 0:17539d6d4289 162 pc.printf("State --> Ready - ERR Event was caught\n");
mnikolaos 0:17539d6d4289 163 TRAN(ERROR_STATE);
mnikolaos 0:17539d6d4289 164
mnikolaos 0:17539d6d4289 165 }
mnikolaos 0:17539d6d4289 166
mnikolaos 0:17539d6d4289 167 static void FSM_ready_CONF (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 168 {
mnikolaos 0:17539d6d4289 169 (void)e;
mnikolaos 0:17539d6d4289 170 pc.printf("State --> Ready - CONF Event was caught\n");
mnikolaos 0:17539d6d4289 171 TRAN(SETTING_FSM_STATE);
mnikolaos 0:17539d6d4289 172
mnikolaos 0:17539d6d4289 173 }
mnikolaos 0:17539d6d4289 174
mnikolaos 0:17539d6d4289 175 static void FSM_ready_TRAN (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 176 {
mnikolaos 0:17539d6d4289 177 (void)e;
mnikolaos 0:17539d6d4289 178 pc.printf("State --> Ready - TRAN ADMIN Event was caught\n");
mnikolaos 0:17539d6d4289 179 }
mnikolaos 0:17539d6d4289 180
mnikolaos 0:17539d6d4289 181 static void FSM_assigned_GO (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 182 {
mnikolaos 0:17539d6d4289 183 (void)e;
mnikolaos 0:17539d6d4289 184 pc.printf("State --> Assigned - GO Event was caught\n");
mnikolaos 0:17539d6d4289 185 TRAN(LOCKED_FSM_STATE);
mnikolaos 0:17539d6d4289 186 }
mnikolaos 0:17539d6d4289 187
mnikolaos 0:17539d6d4289 188 static void FSM_assigned_OUT (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 189 {
mnikolaos 0:17539d6d4289 190 (void)e;
mnikolaos 0:17539d6d4289 191 pc.printf("State --> Assigned - OUT Event was caught\n");
mnikolaos 0:17539d6d4289 192 TRAN(READY_FSM_STATE);
mnikolaos 0:17539d6d4289 193 }
mnikolaos 0:17539d6d4289 194
mnikolaos 0:17539d6d4289 195 static void FSM_assigned_TICK (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 196 {
mnikolaos 0:17539d6d4289 197 (void)e;
mnikolaos 0:17539d6d4289 198 pc.printf("State --> Assigned - TICK Event was caught\n");
mnikolaos 0:17539d6d4289 199
mnikolaos 0:17539d6d4289 200 }
mnikolaos 0:17539d6d4289 201
mnikolaos 0:17539d6d4289 202 static void FSM_assigned_ERR (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 203 {
mnikolaos 0:17539d6d4289 204 (void)e;
mnikolaos 0:17539d6d4289 205 pc.printf("State --> Assigned - ERR Event was caught\n");
mnikolaos 0:17539d6d4289 206 TRAN(ERROR_STATE);
mnikolaos 0:17539d6d4289 207
mnikolaos 0:17539d6d4289 208 }
mnikolaos 0:17539d6d4289 209
mnikolaos 0:17539d6d4289 210 static void FSM_assigned_CONF (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 211 {
mnikolaos 0:17539d6d4289 212 (void)e;
mnikolaos 0:17539d6d4289 213 pc.printf("State --> Assigned - CONF Event was caught\n");
mnikolaos 0:17539d6d4289 214 TRAN(SETTING_FSM_STATE);
mnikolaos 0:17539d6d4289 215
mnikolaos 0:17539d6d4289 216 }
mnikolaos 0:17539d6d4289 217
mnikolaos 0:17539d6d4289 218 static void FSM_assigned_TRAN (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 219 {
mnikolaos 0:17539d6d4289 220 (void)e;
mnikolaos 0:17539d6d4289 221 pc.printf("State --> Assigned - TRAN ADMIN Event was caught\n");
mnikolaos 0:17539d6d4289 222
mnikolaos 0:17539d6d4289 223 }
mnikolaos 0:17539d6d4289 224
mnikolaos 0:17539d6d4289 225 static void FSM_locked_GO (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 226 {
mnikolaos 0:17539d6d4289 227 (void)e;
mnikolaos 0:17539d6d4289 228 pc.printf("State --> Locked - GO Event was caught\n");
mnikolaos 0:17539d6d4289 229
mnikolaos 0:17539d6d4289 230 }
mnikolaos 0:17539d6d4289 231
mnikolaos 0:17539d6d4289 232 static void FSM_locked_OUT (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 233 {
mnikolaos 0:17539d6d4289 234 (void)e;
mnikolaos 0:17539d6d4289 235 pc.printf("State --> Locked - OUT Event was caught\n");
mnikolaos 0:17539d6d4289 236 TRAN(ASSIGNED_FSM_STATE);
mnikolaos 0:17539d6d4289 237
mnikolaos 0:17539d6d4289 238 }
mnikolaos 0:17539d6d4289 239
mnikolaos 0:17539d6d4289 240 static void FSM_locked_TICK (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 241 {
mnikolaos 0:17539d6d4289 242 (void)e;
mnikolaos 0:17539d6d4289 243 pc.printf("State --> Locked - TICK Event was caught\n");
mnikolaos 0:17539d6d4289 244
mnikolaos 0:17539d6d4289 245 }
mnikolaos 0:17539d6d4289 246
mnikolaos 0:17539d6d4289 247 static void FSM_locked_ERR (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 248 {
mnikolaos 0:17539d6d4289 249 (void)e;
mnikolaos 0:17539d6d4289 250 pc.printf("State --> Locked - ERR Event was caught\n");
mnikolaos 0:17539d6d4289 251 TRAN(ERROR_STATE);
mnikolaos 0:17539d6d4289 252
mnikolaos 0:17539d6d4289 253 }
mnikolaos 0:17539d6d4289 254
mnikolaos 0:17539d6d4289 255 static void FSM_locked_CONF (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 256 {
mnikolaos 0:17539d6d4289 257 (void)e;
mnikolaos 0:17539d6d4289 258 pc.printf("State --> Locked - CONF Event was caught\n");
mnikolaos 0:17539d6d4289 259 TRAN(SETTING_FSM_STATE);
mnikolaos 0:17539d6d4289 260
mnikolaos 0:17539d6d4289 261 }
mnikolaos 0:17539d6d4289 262
mnikolaos 0:17539d6d4289 263 static void FSM_locked_TRAN (FSM1 *me, Event const *e)
mnikolaos 0:17539d6d4289 264 {
mnikolaos 0:17539d6d4289 265 (void)e;
mnikolaos 0:17539d6d4289 266 pc.printf("State --> Locked - TRAN ADMIN Event was caught\n");
mnikolaos 0:17539d6d4289 267
mnikolaos 0:17539d6d4289 268 }
mnikolaos 0:17539d6d4289 269
mnikolaos 0:17539d6d4289 270
mnikolaos 0:17539d6d4289 271 void FSM_ctor(FSM1 *me, uint8_t defuse) {
mnikolaos 0:17539d6d4289 272
mnikolaos 0:17539d6d4289 273 static const Tran fsm_state_table[MAX_STATE][MAX_SIG] =
mnikolaos 0:17539d6d4289 274 {
mnikolaos 0:17539d6d4289 275 {(Tran)&FSM_setting_GO, (Tran)&FSM_setting_OUT, &StTbl_empty, (Tran)&FSM_setting_ERR, &StTbl_empty, (Tran)&FSM_setting_TRAN },
mnikolaos 0:17539d6d4289 276 {(Tran)&FSM_ready_GO, (Tran)&FSM_ready_OUT, (Tran)&FSM_ready_TICK, (Tran)&FSM_ready_ERR, (Tran)&FSM_ready_CONF, (Tran)&FSM_ready_TRAN },
mnikolaos 0:17539d6d4289 277 {(Tran)&FSM_assigned_GO, (Tran)&FSM_assigned_OUT, (Tran)&FSM_assigned_TICK, (Tran)&FSM_assigned_ERR, (Tran)&FSM_assigned_CONF, (Tran)&FSM_assigned_TRAN },
mnikolaos 0:17539d6d4289 278 {(Tran)&FSM_locked_GO, (Tran)&FSM_locked_OUT, (Tran)&FSM_locked_TICK, (Tran)&FSM_locked_ERR, (Tran)&FSM_locked_CONF, (Tran)&FSM_locked_TRAN }
mnikolaos 0:17539d6d4289 279 };
mnikolaos 0:17539d6d4289 280
mnikolaos 0:17539d6d4289 281 StTbl_ctor(&me->super, &fsm_state_table[0][0], MAX_STATE, MAX_SIG, (Tran)&FSM_initial);
mnikolaos 0:17539d6d4289 282
mnikolaos 0:17539d6d4289 283 me->defuse = defuse;
mnikolaos 0:17539d6d4289 284 }
mnikolaos 0:17539d6d4289 285
mnikolaos 0:17539d6d4289 286 bool _t1_OVRFL = false;
mnikolaos 0:17539d6d4289 287 // ISR Timer per 1sec
mnikolaos 0:17539d6d4289 288 void ISR(void) {
mnikolaos 0:17539d6d4289 289 _t1_OVRFL = true;
mnikolaos 0:17539d6d4289 290 }
mnikolaos 0:17539d6d4289 291
mnikolaos 0:17539d6d4289 292 char cmd;
mnikolaos 0:17539d6d4289 293 bool _pc_GTCMD = false;
mnikolaos 0:17539d6d4289 294 // ISR when Gets command
mnikolaos 0:17539d6d4289 295 void Serial_ISR(void) {
mnikolaos 0:17539d6d4289 296 _pc_GTCMD = true;
mnikolaos 0:17539d6d4289 297 cmd = pc.getc(); //Gets the command
mnikolaos 0:17539d6d4289 298 }
mnikolaos 0:17539d6d4289 299
mnikolaos 0:17539d6d4289 300 int main()
mnikolaos 0:17539d6d4289 301 {
mnikolaos 0:17539d6d4289 302
mnikolaos 0:17539d6d4289 303 pc.baud(9600);
mnikolaos 0:17539d6d4289 304 pc.attach(&Serial_ISR);
mnikolaos 0:17539d6d4289 305 tick.attach(&ISR, 1.0);
mnikolaos 0:17539d6d4289 306
mnikolaos 0:17539d6d4289 307 static FSM1 _frdm_fsm;
mnikolaos 0:17539d6d4289 308 static Event const go_evt = { GO_SIG };
mnikolaos 0:17539d6d4289 309 static Event const out_evt = { OUT_SIG };
mnikolaos 0:17539d6d4289 310 static Event const err_evt = { ERR_SIG };
mnikolaos 0:17539d6d4289 311 static Event const conf_evt = { CONF_SIG };
mnikolaos 0:17539d6d4289 312 static TickEvt tick_evt = { TICK_SIG, 0};
mnikolaos 0:17539d6d4289 313
mnikolaos 0:17539d6d4289 314 FSM_ctor(&_frdm_fsm, 0xFF);
mnikolaos 0:17539d6d4289 315
mnikolaos 0:17539d6d4289 316 StTbl_init((StateTable *)&_frdm_fsm);
mnikolaos 0:17539d6d4289 317
mnikolaos 0:17539d6d4289 318 pc.printf("Frdm K64F FSM App\r\n");
mnikolaos 0:17539d6d4289 319 Event const *e = (Event *)0;
mnikolaos 0:17539d6d4289 320
mnikolaos 0:17539d6d4289 321 while (true) {
mnikolaos 0:17539d6d4289 322
mnikolaos 0:17539d6d4289 323 pc.printf("Running\r\n\n");
mnikolaos 0:17539d6d4289 324 gpo1 = !gpo1; // toggle pin
mnikolaos 0:17539d6d4289 325 ledB = !ledB; // toggle led
mnikolaos 0:17539d6d4289 326 wait(0.2f);
mnikolaos 0:17539d6d4289 327
mnikolaos 0:17539d6d4289 328 if(_t1_OVRFL)
mnikolaos 0:17539d6d4289 329 {
mnikolaos 0:17539d6d4289 330 _t1_OVRFL = false;
mnikolaos 0:17539d6d4289 331 StTbl_dispatch((StateTable *)&_frdm_fsm, (Event *)&tick_evt);
mnikolaos 0:17539d6d4289 332 }
mnikolaos 0:17539d6d4289 333
mnikolaos 0:17539d6d4289 334 switch (cmd)
mnikolaos 0:17539d6d4289 335 {
mnikolaos 0:17539d6d4289 336 case 'G': {
mnikolaos 0:17539d6d4289 337 pc.printf(" Go received \n");
mnikolaos 0:17539d6d4289 338 e = &go_evt;
mnikolaos 0:17539d6d4289 339 break;
mnikolaos 0:17539d6d4289 340 }
mnikolaos 0:17539d6d4289 341 case 'O': {
mnikolaos 0:17539d6d4289 342 pc.printf(" Out Received \n");
mnikolaos 0:17539d6d4289 343 e = &out_evt;
mnikolaos 0:17539d6d4289 344 break;
mnikolaos 0:17539d6d4289 345 }
mnikolaos 0:17539d6d4289 346 case 'E': {
mnikolaos 0:17539d6d4289 347 pc.printf(" Error Received \n");
mnikolaos 0:17539d6d4289 348 e = &err_evt;
mnikolaos 0:17539d6d4289 349 break;
mnikolaos 0:17539d6d4289 350 }
mnikolaos 0:17539d6d4289 351 case 'C': {
mnikolaos 0:17539d6d4289 352 pc.printf(" Config Received \n");
mnikolaos 0:17539d6d4289 353 e = &conf_evt;
mnikolaos 0:17539d6d4289 354 break;
mnikolaos 0:17539d6d4289 355 }
mnikolaos 0:17539d6d4289 356 }
mnikolaos 0:17539d6d4289 357 if(_pc_GTCMD)
mnikolaos 0:17539d6d4289 358 {
mnikolaos 0:17539d6d4289 359 _pc_GTCMD = false;
mnikolaos 0:17539d6d4289 360 if (e != (Event *)0)
mnikolaos 0:17539d6d4289 361 {
mnikolaos 0:17539d6d4289 362 StTbl_dispatch((StateTable *)&_frdm_fsm, e);
mnikolaos 0:17539d6d4289 363 }
mnikolaos 0:17539d6d4289 364 }
mnikolaos 0:17539d6d4289 365
mnikolaos 0:17539d6d4289 366 }
mnikolaos 0:17539d6d4289 367 }
mnikolaos 0:17539d6d4289 368