summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-09-11 19:56:13 -0700
committerBdale Garbee <bdale@gag.com>2014-09-13 11:26:21 -0600
commite969172a81e24f70c349b10f429e69817900c307 (patch)
treeea3792062533baceb42d58b4726477d8d70f70cf
parent800f3377b1a374ad5cf826aa897efdcb08059040 (diff)
altos: Make sure we don't beep out continuity twice in idle mode
If the battery voltage report takes longer than the initialiation sequence, we could get to the state reporting after the state had switched from startup to idle. This would result in continuity being reported the first time through the loop. Then, as the state had already changed, we'd pass through the while test and go back to report continuity a second time. Fixed by using the state remembered before beeping out the voltage to decide whether to report the continuity. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/kernel/ao_report.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/kernel/ao_report.c b/src/kernel/ao_report.c
index 5314fc8f..f4253b3d 100644
--- a/src/kernel/ao_report.c
+++ b/src/kernel/ao_report.c
@@ -246,15 +246,15 @@ ao_report_continuity(void) __reentrant
void
ao_report(void)
{
- ao_report_state = ao_flight_state;
for(;;) {
+ ao_report_state = ao_flight_state;
#if HAS_BATTERY_REPORT
- if (ao_flight_state == ao_flight_startup)
+ if (ao_report_state == ao_flight_startup)
ao_report_battery();
else
#endif
ao_report_beep();
- if (ao_flight_state == ao_flight_landed) {
+ if (ao_report_state == ao_flight_landed) {
ao_report_altitude();
#if HAS_FLIGHT
ao_delay(AO_SEC_TO_TICKS(5));
@@ -262,7 +262,7 @@ ao_report(void)
#endif
}
#if HAS_IGNITE_REPORT
- if (ao_flight_state == ao_flight_idle)
+ if (ao_report_state == ao_flight_idle)
ao_report_continuity();
while (ao_flight_state == ao_flight_pad) {
uint8_t c;
@@ -272,10 +272,8 @@ ao_report(void)
pause(AO_MS_TO_TICKS(100));
}
#endif
-
while (ao_report_state == ao_flight_state)
ao_sleep(DATA_TO_XDATA(&ao_flight_state));
- ao_report_state = ao_flight_state;
}
}