From: Keith Packard Date: Fri, 12 Sep 2014 02:56:13 +0000 (-0700) Subject: altos: Make sure we don't beep out continuity twice in idle mode X-Git-Tag: bdale-altosdroid~36 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=807e62ccebc83eb6427a63431d06effa074e5e76 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 --- 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; } }