summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ao.h10
-rw-r--r--src/core/ao_config.c2
-rw-r--r--src/core/ao_telemetry.c46
3 files changed, 47 insertions, 11 deletions
diff --git a/src/core/ao.h b/src/core/ao.h
index 54018b37..fa873efe 100644
--- a/src/core/ao.h
+++ b/src/core/ao.h
@@ -529,6 +529,11 @@ ao_radio_recv_abort(void);
void
ao_radio_test(uint8_t on);
+typedef int16_t (*ao_radio_fill_func)(uint8_t *buffer, int16_t len);
+
+void
+ao_radio_send_lots(ao_radio_fill_func fill);
+
/*
* Compute the packet length as follows:
*
@@ -712,6 +717,11 @@ struct ao_config {
#define AO_IGNITE_MODE_APOGEE 1
#define AO_IGNITE_MODE_MAIN 2
+#define AO_RADIO_ENABLE_CORE 1
+#define AO_RADIO_ENABLE_APRS 2
+#define AO_RADIO_DISABLE_TELEMETRY 4
+#define AO_RADIO_DISABLE_RDF 8
+
#define AO_PAD_ORIENTATION_ANTENNA_UP 0
#define AO_PAD_ORIENTATION_ANTENNA_DOWN 1
diff --git a/src/core/ao_config.c b/src/core/ao_config.c
index 797fe7ec..63158158 100644
--- a/src/core/ao_config.c
+++ b/src/core/ao_config.c
@@ -128,7 +128,7 @@ _ao_config_get(void)
if (minor < 6)
ao_config.pad_orientation = AO_CONFIG_DEFAULT_PAD_ORIENTATION;
if (minor < 8)
- ao_config.radio_enable = TRUE;
+ ao_config.radio_enable = AO_RADIO_ENABLE_CORE;
if (minor < 9)
ao_xmemset(&ao_config.aes_key, '\0', AO_AES_LEN);
if (minor < 10)
diff --git a/src/core/ao_telemetry.c b/src/core/ao_telemetry.c
index 52ac9489..cfc72e04 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,30 +294,41 @@ 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) {
+#if HAS_APRS
+ if (!(ao_config.radio_enable & AO_RADIO_DISABLE_TELEMETRY))
+#endif
+ {
#ifdef AO_SEND_ALL_BARO
- ao_send_baro();
+ ao_send_baro();
#endif
#ifdef AO_SEND_MEGA
- ao_send_mega_sensor();
- ao_send_mega_data();
+ ao_send_mega_sensor();
+ ao_send_mega_data();
#else
- ao_send_sensor();
+ ao_send_sensor();
#endif
#if HAS_COMPANION
- if (ao_companion_running)
- ao_send_companion();
+ if (ao_companion_running)
+ ao_send_companion();
#endif
- ao_send_configuration();
+ ao_send_configuration();
#if HAS_GPS
- ao_send_location();
- ao_send_satellite();
+ ao_send_location();
+ ao_send_satellite();
#endif
+ }
#ifndef AO_SEND_ALL_BARO
if (ao_rdf &&
+#if HAS_APRS
+ !(ao_config.radio_enable & AO_RADIO_DISABLE_RDF) &&
+#endif
(int16_t) (ao_time() - ao_rdf_time) >= 0)
{
#if HAS_IGNITE_REPORT
@@ -325,6 +342,14 @@ ao_telemetry(void)
#endif
ao_radio_rdf();
}
+#if HAS_APRS
+ if ((ao_config.radio_enable & AO_RADIO_ENABLE_APRS) &&
+ (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 +414,9 @@ 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;
+ }
}
__xdata struct ao_task ao_telemetry_task;