Skip to content

Commit 24968b3

Browse files
author
Ezra Boley
committed
Updated the state machine to better reflect the current state of affairs
1 parent 63295c0 commit 24968b3

File tree

8 files changed

+114
-239
lines changed

8 files changed

+114
-239
lines changed

embedded/app/include/state_machine.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,13 @@
99
#include <stdlib.h>
1010

1111

12-
#define NUM_STATES 15
12+
#define NUM_STATES 10
1313
#define FAULT "fault"
1414

15-
#define PRE_RUN_FAULT_NAME FAULT"Pre"
16-
#define POST_RUN_FAULT_NAME FAULT"Post"
15+
#define NON_RUN_FAULT_NAME FAULT"NonRun"
1716
#define RUN_FAULT_NAME FAULT"Run"
18-
#define POWER_OFF_NAME "powerOff"
1917
#define IDLE_NAME "idle"
2018
#define PUMPDOWN_NAME "pumpdown"
21-
#define READY_FOR_PUMPDOWN_NAME "readyForPumpdown"
22-
#define READY_NAME "readyForPropulsion"
2319
#define PROPULSION_NAME "propulsion"
2420
#define BRAKING_NAME "braking"
2521
#define STOPPED_NAME "stopped"
@@ -67,6 +63,7 @@ typedef struct state_t {
6763
stateTransition_t *(*action)();
6864
char *name; // FIXME Thinking about switching this to a number
6965
stateTransition_t **transitions;
66+
stateTransition_t *fault;
7067
int numTransitions;
7168
int transitionCounter;
7269
} state_t;

embedded/app/main/badgerloop_HV.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ int main() {
7070
runStateMachine();
7171

7272
if (data->flags->shouldBrake)
73-
signalLV("brake");
73+
signalLV((char *)"brake");
7474
usleep(10000);
7575

7676
// Control loop

embedded/app/src/state_machine.c

Lines changed: 44 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,16 @@ static void initState(state_t* state, char* name, stateTransition_t *(*action)()
2020
static void initTransition(stateTransition_t *transition, state_t *target, int (*action)() );
2121

2222

23-
extern stateTransition_t * powerOnAction(void);
2423
extern stateTransition_t * idleAction(void);
25-
extern stateTransition_t * readyForPumpdownAction(void);
2624
extern stateTransition_t * pumpdownAction(void);
27-
extern stateTransition_t * readyForLaunchAction(void);
2825
extern stateTransition_t * propulsionAction(void);
2926
extern stateTransition_t * brakingAction(void);
3027
extern stateTransition_t * stoppedAction(void);
3128
extern stateTransition_t * crawlAction(void);
3229
extern stateTransition_t * postRunAction(void);
3330
extern stateTransition_t * safeToApproachAction(void);
34-
extern stateTransition_t * preFaultAction(void);
3531
extern stateTransition_t * runFaultAction(void);
36-
extern stateTransition_t * postFaultAction(void);
32+
extern stateTransition_t * nonRunFaultAction(void);
3733

3834

3935

@@ -133,47 +129,27 @@ static int addTransition(char *stateName, stateTransition_t *trans) {
133129
return 0;
134130
}
135131

136-
static int initPowerOff(state_t *powerOff) {
137-
initTransition(powerOff->transitions[0], findState(IDLE_NAME), genTranAction);
138-
initTransition(powerOff->transitions[1], findState(PRE_RUN_FAULT_NAME), genTranAction);
139-
addTransition(POWER_OFF_NAME, powerOff->transitions[0]);
140-
addTransition(POWER_OFF_NAME, powerOff->transitions[1]);
141-
return 0;
142-
}
143-
144132
static int initIdle(state_t *idle) {
145133

146-
initTransition(idle->transitions[0], findState(READY_FOR_PUMPDOWN_NAME), genTranAction);
147-
initTransition(idle->transitions[1], findState(PRE_RUN_FAULT_NAME), genTranAction);
134+
initTransition(idle->transitions[0], findState(PUMPDOWN_NAME), genTranAction);
135+
initTransition(idle->transitions[1], findState(NON_RUN_FAULT_NAME), genTranAction);
148136
addTransition(IDLE_NAME, idle->transitions[0]);
149137
addTransition(IDLE_NAME, idle->transitions[1]);
150-
return 0;
151-
}
152-
153-
static int initReadyForPumpdown(state_t *readyForPumpdown) {
138+
139+
idle->fault = idle->transitions[1];
154140

155-
initTransition(readyForPumpdown->transitions[0], findState(PUMPDOWN_NAME), genTranAction);
156-
initTransition(readyForPumpdown->transitions[1], findState(PRE_RUN_FAULT_NAME), genTranAction);
157-
addTransition(READY_FOR_PUMPDOWN_NAME, readyForPumpdown->transitions[0]);
158-
addTransition(READY_FOR_PUMPDOWN_NAME, readyForPumpdown->transitions[1]);
159141
return 0;
160142
}
161143

162144
static int initPumpdown(state_t *pumpdown) {
163145

164-
initTransition(pumpdown->transitions[0], findState(READY_NAME), genTranAction);
165-
initTransition(pumpdown->transitions[1], findState(PRE_RUN_FAULT_NAME), genTranAction);
146+
initTransition(pumpdown->transitions[0], findState(PROPULSION_NAME), genTranAction);
147+
initTransition(pumpdown->transitions[1], findState(RUN_FAULT_NAME), genTranAction);
166148
addTransition(PUMPDOWN_NAME, pumpdown->transitions[0]);
167-
addTransition(PUMPDOWN_NAME, pumpdown->transitions[1]);
168-
return 0;
169-
}
149+
addTransition(PUMPDOWN_NAME,
150+
pumpdown->fault = pumpdown->transitions[1]);
170151

171-
static int initReadyForLaunch(state_t *ready) {
172152

173-
initTransition(ready->transitions[0], findState(PROPULSION_NAME), toPropulsion);
174-
initTransition(ready->transitions[1], findState(PRE_RUN_FAULT_NAME), genTranAction);
175-
addTransition(READY_NAME, ready->transitions[0]);
176-
addTransition(READY_NAME, ready->transitions[1]);
177153
return 0;
178154
}
179155

@@ -182,7 +158,8 @@ static int initPropulsion(state_t *propulsion) {
182158
initTransition(propulsion->transitions[0], findState(BRAKING_NAME), toBraking);
183159
initTransition(propulsion->transitions[1], findState(RUN_FAULT_NAME), genTranAction);
184160
addTransition(PROPULSION_NAME, propulsion->transitions[0]);
185-
addTransition(PROPULSION_NAME, propulsion->transitions[1]);
161+
addTransition(PROPULSION_NAME,
162+
propulsion->fault = propulsion->transitions[1]);
186163

187164
return 0;
188165
}
@@ -194,19 +171,19 @@ static int initBraking(state_t *braking) {
194171
initTransition(braking->transitions[2], findState(RUN_FAULT_NAME), genTranAction);
195172
addTransition(BRAKING_NAME, braking->transitions[0]);
196173
addTransition(BRAKING_NAME, braking->transitions[1]);
197-
addTransition(BRAKING_NAME, braking->transitions[2]);
174+
addTransition(BRAKING_NAME,
175+
braking->fault = braking->transitions[2]);
198176

199177
return 0;
200178
}
201179

202180
static int initCrawl(state_t *crawl) {
203181

204-
initTransition(crawl->transitions[0], findState(STOPPED_NAME), genTranAction);
205-
initTransition(crawl->transitions[1], findState(BRAKING_NAME), toBraking);
182+
initTransition(crawl->transitions[1], findState(POST_RUN_NAME), toBraking);
206183
initTransition(crawl->transitions[2], findState(RUN_FAULT_NAME), genTranAction);
207184
addTransition(CRAWL_NAME, crawl->transitions[0]);
208-
addTransition(CRAWL_NAME, crawl->transitions[1]);
209-
addTransition(CRAWL_NAME, crawl->transitions[2]);
185+
addTransition(CRAWL_NAME,
186+
crawl->fault = crawl->transitions[1]);
210187

211188
return 0;
212189
}
@@ -215,26 +192,29 @@ static int initStopped(state_t *stopped) {
215192

216193

217194
initTransition(stopped->transitions[0], findState(POST_RUN_NAME), genTranAction);
218-
initTransition(stopped->transitions[1], findState(RUN_FAULT_NAME), genTranAction);
219-
initTransition(stopped->transitions[2], findState(CRAWL_NAME), toCrawl);
195+
initTransition(stopped->transitions[1], findState(CRAWL_NAME), toCrawl);
196+
initTransition(stopped->transitions[2], findState(RUN_FAULT_NAME), genTranAction);
220197
addTransition(STOPPED_NAME, stopped->transitions[0]);
221198
addTransition(STOPPED_NAME, stopped->transitions[1]);
222-
addTransition(STOPPED_NAME, stopped->transitions[2]);
199+
addTransition(STOPPED_NAME,
200+
stopped->fault = stopped->transitions[2]);
223201

224202
return 0;
225203
}
226204

227205
static int initPostRun(state_t *postRun) {
228206
initTransition(postRun->transitions[0], findState(SAFE_TO_APPROACH_NAME), genTranAction);
229-
initTransition(postRun->transitions[1], findState(POST_RUN_FAULT_NAME), genTranAction);
207+
initTransition(postRun->transitions[1], findState(RUN_FAULT_NAME), genTranAction);
230208
addTransition(POST_RUN_NAME, postRun->transitions[0]);
231-
addTransition(POST_RUN_NAME, postRun->transitions[1]);
209+
addTransition(POST_RUN_NAME,
210+
postRun->fault = postRun->transitions[1]);
232211
return 0;
233212
}
234213

235214
static int initSafeToApproach(state_t *safeToApproach) {
236-
initTransition(safeToApproach->transitions[0], findState(POST_RUN_FAULT_NAME), genTranAction);
237-
addTransition(SAFE_TO_APPROACH_NAME, safeToApproach->transitions[0]);
215+
initTransition(safeToApproach->transitions[0], findState(NON_RUN_FAULT_NAME), genTranAction);
216+
addTransition(SAFE_TO_APPROACH_NAME,
217+
safeToApproach->fault = safeToApproach->transitions[0]);
238218
return 0;
239219
}
240220

@@ -312,32 +292,25 @@ void buildStateMachine(void) {
312292
stateMachine.allStates[i] = malloc(sizeof(state_t));
313293
}
314294

315-
initState(stateMachine.allStates[0], POWER_OFF_NAME, powerOnAction, 2);
316-
initState(stateMachine.allStates[1], IDLE_NAME, idleAction, 2);
317-
initState(stateMachine.allStates[2], READY_FOR_PUMPDOWN_NAME, readyForPumpdownAction, 2);
318-
initState(stateMachine.allStates[3], PUMPDOWN_NAME, pumpdownAction, 2);
319-
initState(stateMachine.allStates[4], READY_NAME, readyForLaunchAction, 2);
320-
initState(stateMachine.allStates[5], PROPULSION_NAME, propulsionAction, 2);
321-
initState(stateMachine.allStates[6], BRAKING_NAME, brakingAction, 3);
322-
initState(stateMachine.allStates[7], CRAWL_NAME, crawlAction, 3);
323-
initState(stateMachine.allStates[8], STOPPED_NAME, stoppedAction, 3);
324-
initState(stateMachine.allStates[9], POST_RUN_NAME, postRunAction, 2);
325-
initState(stateMachine.allStates[10], SAFE_TO_APPROACH_NAME, safeToApproachAction, 1);
326-
initState(stateMachine.allStates[11], PRE_RUN_FAULT_NAME, preFaultAction, 0);
327-
initState(stateMachine.allStates[12], RUN_FAULT_NAME, runFaultAction, 0);
328-
initState(stateMachine.allStates[13], POST_RUN_FAULT_NAME, postFaultAction, 0);
295+
initState(stateMachine.allStates[0], IDLE_NAME, idleAction, 2);
296+
initState(stateMachine.allStates[1], PUMPDOWN_NAME, pumpdownAction, 2);
297+
initState(stateMachine.allStates[2], PROPULSION_NAME, propulsionAction, 2);
298+
initState(stateMachine.allStates[3], BRAKING_NAME, brakingAction, 3);
299+
initState(stateMachine.allStates[4], CRAWL_NAME, crawlAction, 3);
300+
initState(stateMachine.allStates[5], STOPPED_NAME, stoppedAction, 3);
301+
initState(stateMachine.allStates[6], POST_RUN_NAME, postRunAction, 2);
302+
initState(stateMachine.allStates[7], SAFE_TO_APPROACH_NAME, safeToApproachAction, 1);
303+
initState(stateMachine.allStates[8], NON_RUN_FAULT_NAME, nonRunFaultAction, 0);
304+
initState(stateMachine.allStates[9], RUN_FAULT_NAME, runFaultAction, 0);
329305

330-
initPowerOff(stateMachine.allStates[0]);
331-
initIdle( stateMachine.allStates[1]);
332-
initReadyForPumpdown(stateMachine.allStates[2]);
333-
initPumpdown(stateMachine.allStates[3]);
334-
initReadyForLaunch( stateMachine.allStates[4]);
335-
initPropulsion(stateMachine.allStates[5]);
336-
initBraking(stateMachine.allStates[6]);
337-
initStopped(stateMachine.allStates[7]);
338-
initCrawl(stateMachine.allStates[8]);
339-
initPostRun(stateMachine.allStates[9]);
340-
initSafeToApproach(stateMachine.allStates[10]);
306+
initIdle( stateMachine.allStates[0]);
307+
initPumpdown(stateMachine.allStates[1]);
308+
initPropulsion(stateMachine.allStates[2]);
309+
initBraking(stateMachine.allStates[3]);
310+
initStopped(stateMachine.allStates[4]);
311+
initCrawl(stateMachine.allStates[5]);
312+
initPostRun(stateMachine.allStates[6]);
313+
initSafeToApproach(stateMachine.allStates[7]);
341314

342315
stateMachine.currState = stateMachine.allStates[0];
343316

0 commit comments

Comments
 (0)