altos: Hook up APRS to telemetry loop
authorKeith Packard <keithp@keithp.com>
Thu, 6 Dec 2012 18:23:39 +0000 (10:23 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 6 Dec 2012 18:23:39 +0000 (10:23 -0800)
Send APRS packet once every 2 seconds

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao_telemetry.c
src/drivers/ao_aprs.h
src/megametrum-v0.1/ao_pins.h

index 52ac94891adebd99f915cf97a20e95ddf171a18c..79d1bb814f7b2ad87da0414bce50fb9841b05177 100644 (file)
@@ -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;
index a033fa0b991b49edbf5ea264835d8d02199e8441..e00dd75bf6d79405778305f31535d88850464163 100644 (file)
@@ -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);
 
index f07dc26ed975fc11b0d5324720bf14cf471d1f29..083c1b6fea390f8c58e2e34746796f2fd0a443ed 100644 (file)
@@ -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 */