/* Stack runs from above the allocated __data space to 0xfe, which avoids
* writing to 0xff as that triggers the stack overflow indicator
*/
-#define AO_STACK_START 0x70
+#define AO_STACK_START 0x80
#define AO_STACK_END 0xfe
#define AO_STACK_SIZE (AO_STACK_END - AO_STACK_START + 1)
/* Add a task to the run queue */
void
-ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name);
+ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant;
/* Dump task info to console */
void
/* Trigger a conversion sequence (called from the timer interrupt) */
void
ao_adc_poll(void);
-
+
/* Suspend the current task until another A/D sample is converted */
void
ao_adc_sleep(void);
/* Turn on the beeper for the specified time */
void
-ao_beep_for(uint8_t beep, uint16_t ticks);
+ao_beep_for(uint8_t beep, uint16_t ticks) __reentrant;
/* Initialize the beeper */
void
void
ao_led_set(uint8_t colors);
+/* Toggle the specified LEDs */
+void
+ao_led_toggle(uint8_t colors);
+
/* Turn on the specified LEDs for the indicated interval */
void
-ao_led_for(uint8_t colors, uint16_t ticks);
+ao_led_for(uint8_t colors, uint16_t ticks) __reentrant;
/* Initialize the LEDs */
void
-ao_led_init(void);
+ao_led_init(uint8_t enable);
/*
* ao_usb.c
void
ao_usb_isr(void) interrupt 6;
+/* Enable the USB controller */
+void
+ao_usb_enable(void);
+
+/* Disable the USB controller */
+void
+ao_usb_disable(void);
+
/* Initialize the USB system */
void
ao_usb_init(void);
void
ao_cmd_hex(void);
+void
+ao_cmd_decimal(void);
+
struct ao_cmds {
uint8_t cmd;
void (*func)(void);
*/
/* Allocate a DMA channel. the 'done' parameter will be set to 1
- * when the dma is finished and will be used to wakeup any waiters
+ * when the dma is finished and will be used to wakeup any waiters
*/
uint8_t
ao_dma_alloc(__xdata uint8_t * done);
* packet type, the packet checksum and the tick count. Then
* they all contain 2 16 bit values which hold packet-specific
* data.
- *
+ *
* For each flight, the first packet
* is FLIGHT packet, indicating the serial number of the
* device and a unique number marking the number of flights
ao_pres_to_altitude(int16_t pres) __reentrant;
int16_t
-ao_temp_to_dC(int16_t temp) __reentrant;
+ao_altitude_to_pres(int16_t alt) __reentrant;
int16_t
-ao_accel_to_cm_per_s2(int16_t accel) __reentrant;
+ao_temp_to_dC(int16_t temp) __reentrant;
/*
* ao_dbg.c
void
ao_gps_init(void);
+/*
+ * ao_gps_report.c
+ */
+
+void
+ao_gps_report(void);
+
+void
+ao_gps_report_init(void);
+
/*
* ao_telemetry.c
*/
+#define AO_MAX_CALLSIGN 8
+
struct ao_telemetry {
uint8_t addr;
uint8_t flight_state;
struct ao_adc adc;
struct ao_gps_data gps;
+ char callsign[AO_MAX_CALLSIGN];
};
+/* Set delay between telemetry reports (0 to disable) */
+
+#define AO_TELEMETRY_INTERVAL_FLIGHT AO_MS_TO_TICKS(50)
+#define AO_TELEMETRY_INTERVAL_RECOVER AO_MS_TO_TICKS(1000)
+
+void
+ao_telemetry_set_interval(uint16_t interval);
+
+void
+ao_rdf_set(uint8_t rdf);
+
void
ao_telemetry_init(void);
struct ao_radio_recv {
struct ao_telemetry telemetry;
- uint8_t rssi;
+ int8_t rssi;
uint8_t status;
};
void
ao_radio_recv(__xdata struct ao_radio_recv *recv) __reentrant;
+void
+ao_radio_rdf(void);
+
+void
+ao_radio_rdf_abort(void);
+
void
ao_radio_init(void);
* ao_monitor.c
*/
+extern const char const * const ao_state_names[];
+
void
ao_monitor(void);
void
-ao_monitor_init(void);
+ao_monitor_init(uint8_t led);
/*
* ao_stdio.c
void
ao_igniter_init(void);
-#endif /* _AO_H_ */
+/*
+ * ao_config.c
+ */
+
+#define AO_CONFIG_MAJOR 1
+#define AO_CONFIG_MINOR 0
+
+struct ao_config {
+ uint8_t major;
+ uint8_t minor;
+ uint16_t main_deploy;
+ int16_t accel_zero_g;
+ uint8_t radio_channel;
+ char callsign[AO_MAX_CALLSIGN + 1];
+};
+
+extern __xdata struct ao_config ao_config;
+void
+ao_config_get(void);
+
+void
+ao_config_init(void);
+
+#endif /* _AO_H_ */