summaryrefslogtreecommitdiff
path: root/src/ao_telemetry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ao_telemetry.c')
-rw-r--r--src/ao_telemetry.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/ao_telemetry.c b/src/ao_telemetry.c
index 9f57f3a9..7eefee3c 100644
--- a/src/ao_telemetry.c
+++ b/src/ao_telemetry.c
@@ -18,6 +18,10 @@
#include "ao.h"
__xdata uint16_t ao_telemetry_interval = 0;
+__xdata uint8_t ao_rdf = 0;
+__xdata uint16_t ao_rdf_time;
+
+#define AO_RDF_INTERVAL AO_SEC_TO_TICKS(3)
void
ao_telemetry(void)
@@ -27,6 +31,7 @@ ao_telemetry(void)
ao_config_get();
memcpy(telemetry.callsign, ao_config.callsign, AO_MAX_CALLSIGN);
telemetry.addr = ao_serial_number;
+ ao_rdf_time = ao_time();
for (;;) {
while (ao_telemetry_interval == 0)
ao_sleep(&ao_telemetry_interval);
@@ -43,6 +48,13 @@ ao_telemetry(void)
ao_mutex_put(&ao_gps_mutex);
ao_radio_send(&telemetry);
ao_delay(ao_telemetry_interval);
+ if (ao_rdf &&
+ (int16_t) (ao_time() - ao_rdf_time) >= 0)
+ {
+ ao_rdf_time = ao_time() + AO_RDF_INTERVAL;
+ ao_radio_rdf();
+ ao_delay(ao_telemetry_interval);
+ }
}
}
@@ -53,6 +65,14 @@ ao_telemetry_set_interval(uint16_t interval)
ao_wakeup(&ao_telemetry_interval);
}
+void
+ao_rdf_set(uint8_t rdf)
+{
+ ao_rdf = rdf;
+ if (rdf == 0)
+ ao_radio_rdf_abort();
+}
+
__xdata struct ao_task ao_telemetry_task;
void