#if HAS_TASK
#include <ao_task.h>
+#else
+#include <ao_notask.h>
#endif
/*
#define AO_PANIC_STACK 12 /* Stack overflow */
#define AO_PANIC_SPI 13 /* SPI communication failure */
#define AO_PANIC_CRASH 14 /* Processor crashed */
+#define AO_PANIC_BUFIO 15 /* Mis-using bufio API */
#define AO_PANIC_SELF_TEST_CC1120 0x40 | 1 /* Self test failure */
#define AO_PANIC_SELF_TEST_HMC5883 0x40 | 2 /* Self test failure */
#define AO_PANIC_SELF_TEST_MPU6000 0x40 | 3 /* Self test failure */
#define AO_SEC_TO_TICKS(s) ((s) * AO_HERTZ)
/* Returns the current time in ticks */
-uint16_t
+AO_TICK_TYPE
ao_time(void);
/* Suspend the current task until ticks time has passed */
extern __pdata char ao_cmd_lex_c;
extern __pdata enum ao_cmd_status ao_cmd_status;
+void
+ao_put_string(__code char *s);
+
void
ao_cmd_lex(void);
*/
uint8_t
-ao_spi_slave_recv(uint8_t *buf, uint8_t len);
+ao_spi_slave_recv(void *buf, uint16_t len);
void
-ao_spi_slave_send(uint8_t *buf, uint8_t len);
+ao_spi_slave_send(void *buf, uint16_t len);
void
ao_spi_slave_init(void);
void
ao_gps_tracking_print(__xdata struct ao_gps_tracking_orig *gps_tracking_data);
+void
+ao_gps_show(void) __reentrant;
+
void
ao_gps_init(void);
extern __xdata uint8_t ao_radio_dma;
+extern __xdata int8_t ao_radio_rssi;
+
#ifdef PKT_APPEND_STATUS_1_CRC_OK
#define AO_RADIO_STATUS_CRC_OK PKT_APPEND_STATUS_1_CRC_OK
#else
#define AO_RADIO_STATUS_CRC_OK AO_FEC_DECODE_CRC_OK
#endif
+#ifndef HAS_RADIO_RECV
+#define HAS_RADIO_RECV HAS_RADIO
+#endif
+#ifndef HAS_RADIO_XMIT
+#define HAS_RADIO_XMIT HAS_RADIO
+#endif
+
void
ao_radio_general_isr(void) ao_arch_interrupt(16);
+#if HAS_RADIO_XMIT
void
ao_radio_send(const __xdata void *d, uint8_t size) __reentrant;
+#endif
+#if HAS_RADIO_RECV
uint8_t
-ao_radio_recv(__xdata void *d, uint8_t size) __reentrant;
+ao_radio_recv(__xdata void *d, uint8_t size, uint8_t timeout) __reentrant;
void
ao_radio_recv_abort(void);
+#endif
void
ao_radio_test(uint8_t on);
+typedef int16_t (*ao_radio_fill_func)(uint8_t *buffer, int16_t len);
+
+void
+ao_radio_send_aprs(ao_radio_fill_func fill);
+
+/*
+ * ao_radio_pa
+ */
+
+#if HAS_RADIO_AMP
+void
+ao_radio_pa_on(void);
+
+void
+ao_radio_pa_off(void);
+
+void
+ao_radio_pa_init(void);
+#else
+#define ao_radio_pa_on()
+#define ao_radio_pa_off()
+#define ao_radio_pa_init()
+#endif
+
/*
* Compute the packet length as follows:
*
#define AO_READ_AGAIN (-1)
struct ao_stdio {
- int (*pollchar)(void);
+ int (*_pollchar)(void); /* Called with interrupts blocked */
void (*putchar)(char c) __reentrant;
void (*flush)(void);
uint8_t echo;
#endif
#define AO_CONFIG_MAJOR 1
-#define AO_CONFIG_MINOR 12
+#define AO_CONFIG_MINOR 14
#define AO_AES_LEN 16
uint16_t apogee_lockout; /* minor version 11 */
#if AO_PYRO_NUM
struct ao_pyro pyro[AO_PYRO_NUM]; /* minor version 12 */
+#endif
+ uint16_t aprs_interval; /* minor version 13 */
+#if HAS_RADIO_POWER
+ uint8_t radio_power; /* minor version 14 */
+#endif
+#if HAS_RADIO_AMP
+ uint8_t radio_amp; /* minor version 14 */
#endif
};
#define AO_IGNITE_MODE_APOGEE 1
#define AO_IGNITE_MODE_MAIN 2
+#define AO_RADIO_ENABLE_CORE 1
+#define AO_RADIO_DISABLE_TELEMETRY 2
+#define AO_RADIO_DISABLE_RDF 4
+
#define AO_PAD_ORIENTATION_ANTENNA_UP 0
#define AO_PAD_ORIENTATION_ANTENNA_DOWN 1