summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-12-06 10:23:39 -0800
committerKeith Packard <keithp@keithp.com>2012-12-06 10:23:39 -0800
commitf661da527fb4a3a492f5322e2a718d441e1cde83 (patch)
tree8299c69eabb77845d6fa84b486a4414a0ab7dd04
parentc1e6fa32b856b91afa355cd272d2d7287d3ccca1 (diff)
altos: Hook up APRS to telemetry loop
Send APRS packet once every 2 seconds Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/core/ao_telemetry.c21
-rw-r--r--src/drivers/ao_aprs.h2
-rw-r--r--src/megametrum-v0.1/ao_pins.h1
3 files changed, 23 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;
diff --git a/src/drivers/ao_aprs.h b/src/drivers/ao_aprs.h
index a033fa0b..e00dd75b 100644
--- a/src/drivers/ao_aprs.h
+++ b/src/drivers/ao_aprs.h
@@ -18,6 +18,8 @@
#ifndef _AO_APRS_H_
#define _AO_APRS_H_
+#define AO_APRS_INTERVAL_TICKS AO_SEC_TO_TICKS(2)
+
void
ao_aprs_send(void);
diff --git a/src/megametrum-v0.1/ao_pins.h b/src/megametrum-v0.1/ao_pins.h
index f07dc26e..083c1b6f 100644
--- a/src/megametrum-v0.1/ao_pins.h
+++ b/src/megametrum-v0.1/ao_pins.h
@@ -70,6 +70,7 @@
#define HAS_BEEP 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
+#define HAS_APRS 1
#define HAS_SPI_1 1
#define SPI_1_PA5_PA6_PA7 1 /* Barometer */