summaryrefslogtreecommitdiff
path: root/src/core/ao_telemetry.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-08-01 22:44:13 -0700
committerKeith Packard <keithp@keithp.com>2011-08-27 12:12:41 -0700
commitb10fbbf0830053a39e4640a53598b1c027615c63 (patch)
tree6e43d1b214a74f525ef8f4bd4ddfc484d8463614 /src/core/ao_telemetry.c
parent1c46c419704f661064d200432eb7efeeb11b3859 (diff)
altos: Add 'send all baro' compile-time option
This option creates a new packet type that delivers full sensor-rate barometer telemetry data to allow for off-line analysis of flight algorithms using all of the data, rather than the slower rate provided either over telemetry or stored in the eeprom file. Define AO_SEND_ALL_BARO and this will get built in. Perhaps this could be a run-time option... Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core/ao_telemetry.c')
-rw-r--r--src/core/ao_telemetry.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/core/ao_telemetry.c b/src/core/ao_telemetry.c
index c7338a58..de669ce1 100644
--- a/src/core/ao_telemetry.c
+++ b/src/core/ao_telemetry.c
@@ -94,6 +94,30 @@ ao_send_sensor(void)
ao_radio_send(&telemetry, sizeof (telemetry));
}
+static uint8_t ao_baro_sample;
+
+#ifdef AO_SEND_ALL_BARO
+static void
+ao_send_baro(void)
+{
+ uint8_t sample = ao_sample_adc;
+ uint8_t samples = (sample - ao_baro_sample) & (AO_ADC_RING - 1);
+
+ if (samples > 12) {
+ ao_baro_sample = (ao_baro_sample + (samples - 12)) & (AO_ADC_RING - 1);
+ samples = 12;
+ }
+ telemetry.generic.tick = ao_adc_ring[sample].tick;
+ telemetry.generic.type = AO_TELEMETRY_BARO;
+ telemetry.baro.samples = samples;
+ for (sample = 0; sample < samples; sample++) {
+ telemetry.baro.baro[sample] = ao_adc_ring[ao_baro_sample].pres;
+ ao_baro_sample = ao_adc_ring_next(ao_baro_sample);
+ }
+ ao_radio_send(&telemetry, sizeof (telemetry));
+}
+#endif
+
static void
ao_send_configuration(void)
{
@@ -193,6 +217,9 @@ ao_telemetry(void)
while (ao_telemetry_interval) {
+#ifdef AO_SEND_ALL_BARO
+ ao_send_baro();
+#endif
ao_send_sensor();
#if HAS_COMPANION
if (ao_companion_running)
@@ -203,12 +230,14 @@ ao_telemetry(void)
ao_send_location();
ao_send_satellite();
#endif
+#ifndef AO_SEND_ALL_BARO
if (ao_rdf &&
(int16_t) (ao_time() - ao_rdf_time) >= 0)
{
ao_rdf_time = ao_time() + AO_RDF_INTERVAL_TICKS;
ao_radio_rdf(AO_RDF_LENGTH_MS);
}
+#endif
time += ao_telemetry_interval;
delay = time - ao_time();
if (delay > 0)