diff options
| author | Keith Packard <keithp@keithp.com> | 2014-09-11 19:56:13 -0700 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2014-09-13 11:26:21 -0600 | 
| commit | e969172a81e24f70c349b10f429e69817900c307 (patch) | |
| tree | ea3792062533baceb42d58b4726477d8d70f70cf /src | |
| parent | 800f3377b1a374ad5cf826aa897efdcb08059040 (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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel/ao_report.c | 10 | 
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;  	}  } | 
