Tasks may move in task structure as a result of ao_exit
[fw/altos] / src / ao.h
index d8e1b92ac70a6fe7cd2d0247164f3fa2937de40d..97cb75ae59ca016f7f0c953c094827c134690360 100644 (file)
--- a/src/ao.h
+++ b/src/ao.h
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <stddef.h>
 #include "cc1111.h"
+#include "ao_pins.h"
 
 #define TRUE 1
 #define FALSE 0
@@ -42,7 +43,7 @@ struct ao_task {
        __xdata void *wchan;            /* current wait channel (NULL if running) */
        uint16_t alarm;                 /* abort ao_sleep time */
        uint8_t stack_count;            /* amount of saved stack */
-       uint8_t task_id;                /* index in the task array */
+       uint8_t task_id;                /* unique id */
        __code char *name;              /* task name */
        uint8_t stack[AO_STACK_SIZE];   /* saved stack */
 };
@@ -108,6 +109,7 @@ ao_start_scheduler(void);
 #define AO_PANIC_CMD           6       /* Too many command sets registered */
 #define AO_PANIC_STDIO         7       /* Too many stdio handlers registered */
 #define AO_PANIC_REBOOT                8       /* Reboot failed */
+#define AO_PANIC_FLASH         9       /* Invalid flash part (or wrong blocksize) */
 
 /* Stop the operating system, beeping and blinking the reason */
 void
@@ -147,15 +149,7 @@ void
 ao_clock_init(void);
 
 /*
- * ao_adc.c
- */
-
-#define AO_ADC_RING    32
-#define ao_adc_ring_next(n)    (((n) + 1) & (AO_ADC_RING - 1))
-#define ao_adc_ring_prev(n)    (((n) - 1) & (AO_ADC_RING - 1))
-
-/*
- * One set of samples read from the A/D converter
+ * One set of samples read from the A/D converter or telemetry
  */
 struct ao_adc {
        uint16_t        tick;           /* tick when the sample was read */
@@ -167,6 +161,20 @@ struct ao_adc {
        int16_t         sense_m;        /* main continuity sense */
 };
 
+#ifndef HAS_ADC
+#error Please define HAS_ADC
+#endif
+
+#if HAS_ADC
+/*
+ * ao_adc.c
+ */
+
+#define AO_ADC_RING    32
+#define ao_adc_ring_next(n)    (((n) + 1) & (AO_ADC_RING - 1))
+#define ao_adc_ring_prev(n)    (((n) - 1) & (AO_ADC_RING - 1))
+
+
 /*
  * A/D data is stored in a ring, with the next sample to be written
  * at ao_adc_head
@@ -187,15 +195,16 @@ void
 ao_adc_get(__xdata struct ao_adc *packet);
 
 /* The A/D interrupt handler */
-#if !AO_NO_ADC_ISR
+
 void
 ao_adc_isr(void) interrupt 1;
-#endif
 
 /* Initialize the A/D converter */
 void
 ao_adc_init(void);
 
+#endif /* HAS_ADC */
+
 /*
  * ao_beep.c
  */
@@ -254,8 +263,6 @@ ao_beep_init(void);
  */
 
 #define AO_LED_NONE    0
-#define AO_LED_GREEN   1
-#define AO_LED_RED     2
 
 /* Turn on the specified LEDs */
 void
@@ -617,6 +624,7 @@ extern __pdata int16_t                      ao_ground_pres;
 extern __pdata int16_t                 ao_ground_accel;
 extern __pdata int16_t                 ao_min_pres;
 extern __pdata uint16_t                        ao_launch_time;
+extern __xdata uint8_t                 ao_flight_force_idle;
 
 /* Flight thread */
 void
@@ -694,13 +702,16 @@ ao_dbg_init(void);
  * ao_serial.c
  */
 
-#if !AO_NO_SERIAL_ISR
+#ifndef HAS_SERIAL_1
+#error Please define HAS_SERIAL_1
+#endif
+
+#if HAS_SERIAL_1
 void
 ao_serial_rx1_isr(void) interrupt 3;
 
 void
 ao_serial_tx1_isr(void) interrupt 14;
-#endif
 
 char
 ao_serial_getchar(void) __critical;
@@ -717,6 +728,7 @@ ao_serial_set_speed(uint8_t speed);
 
 void
 ao_serial_init(void);
+#endif
 
 /*
  * ao_gps.c
@@ -729,6 +741,8 @@ ao_serial_init(void);
 #define AO_GPS_RUNNING         (1 << 5)
 #define AO_GPS_DATE_VALID      (1 << 6)
 
+extern __xdata uint16_t ao_gps_tick;
+
 struct ao_gps_data {
        uint8_t                 year;
        uint8_t                 month;
@@ -835,6 +849,11 @@ extern __xdata uint8_t ao_radio_mutex;
 void
 ao_radio_general_isr(void) interrupt 16;
 
+void
+ao_radio_get(void);
+
+#define ao_radio_put() ao_mutex_put(&ao_radio_mutex)
+
 void
 ao_radio_set_telemetry(void);
 
@@ -949,7 +968,7 @@ struct ao_config {
        char            callsign[AO_MAX_CALLSIGN + 1];
        uint8_t         apogee_delay;           /* minor version 1 */
        int16_t         accel_minus_g;          /* minor version 2 */
-       uint32_t        radio_frequency;        /* minor version 3 */
+       uint32_t        radio_cal;              /* minor version 3 */
 };
 
 extern __xdata struct ao_config ao_config;