summaryrefslogtreecommitdiff
path: root/src/core/ao_telemetry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ao_telemetry.c')
-rw-r--r--src/core/ao_telemetry.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/core/ao_telemetry.c b/src/core/ao_telemetry.c
index 52ac9489..79d1bb81 100644
--- a/src/core/ao_telemetry.c
+++ b/src/core/ao_telemetry.c
@@ -22,6 +22,12 @@ static __pdata uint16_t ao_telemetry_interval;
static __pdata uint8_t ao_rdf = 0;
static __pdata uint16_t ao_rdf_time;
+#if HAS_APRS
+static __pdata uint16_t ao_aprs_time;
+
+#include <ao_aprs.h>
+#endif
+
#if defined(MEGAMETRUM)
#define AO_SEND_MEGA 1
#endif
@@ -288,6 +294,9 @@ ao_telemetry(void)
while (ao_telemetry_interval == 0)
ao_sleep(&telemetry);
time = ao_rdf_time = ao_time();
+#if HAS_APRS
+ ao_aprs_time = time;
+#endif
while (ao_telemetry_interval) {
@@ -325,6 +334,12 @@ ao_telemetry(void)
#endif
ao_radio_rdf();
}
+#if HAS_APRS
+ if (ao_rdf && (int16_t) (ao_time() - ao_aprs_time) >= 0) {
+ ao_aprs_time = ao_time() + AO_APRS_INTERVAL_TICKS;
+ ao_aprs_send();
+ }
+#endif
#endif
time += ao_telemetry_interval;
delay = time - ao_time();
@@ -389,8 +404,12 @@ ao_rdf_set(uint8_t rdf)
ao_rdf = rdf;
if (rdf == 0)
ao_radio_rdf_abort();
- else
+ else {
ao_rdf_time = ao_time() + AO_RDF_INTERVAL_TICKS;
+#if HAS_APRS
+ ao_aprs_time = ao_time() + AO_APRS_INTERVAL_TICKS;
+#endif
+ }
}
__xdata struct ao_task ao_telemetry_task;