From 800f3377b1a374ad5cf826aa897efdcb08059040 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 11 Sep 2014 15:00:25 -0700 Subject: altos: Fix ability to disable telemetry by setting interval to 0 For non-zero telemetry intervals, the radio code limits the value based on the data rate. However, a zero interval means that telemetry should be entirely disabled, so that value should be left alone when checking. Signed-off-by: Keith Packard --- src/kernel/ao_telemetry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/kernel/ao_telemetry.c b/src/kernel/ao_telemetry.c index 56bd715e..27306a34 100644 --- a/src/kernel/ao_telemetry.c +++ b/src/kernel/ao_telemetry.c @@ -518,7 +518,7 @@ ao_telemetry_set_interval(uint16_t interval) }; ao_telemetry_desired_interval = interval; - if (interval < min_interval[ao_config.radio_rate]) + if (interval && interval < min_interval[ao_config.radio_rate]) interval = min_interval[ao_config.radio_rate]; #endif ao_telemetry_interval = interval; -- cgit v1.2.3 From e969172a81e24f70c349b10f429e69817900c307 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 11 Sep 2014 19:56:13 -0700 Subject: 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 --- src/kernel/ao_report.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src') 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; } } -- cgit v1.2.3