first cut at turnon scripts for EasyTimer v2
[fw/altos] / src / kernel / ao.h
index cdcdadc34d8bc1f71f62f603b60d2ddf2404cca2..b3f780f5c7609797c15c895e90b0fa965dcf1a44 100644 (file)
@@ -40,8 +40,18 @@ extern char ao_getchar(void);
 #define HAS_TASK       1
 #endif
 
+#ifndef AO_GPIO_TYPE
+#define AO_GPIO_TYPE void *
+#endif
+
+typedef AO_GPIO_TYPE ao_gpio_t;
 typedef AO_PORT_TYPE ao_port_t;
 
+#ifndef AO_TICK_TYPE
+#define AO_TICK_TYPE uint32_t
+#define AO_TICK_SIGNED int32_t
+#endif
+
 #if HAS_TASK
 #include <ao_task.h>
 #else
@@ -75,21 +85,31 @@ typedef AO_PORT_TYPE ao_port_t;
 #define AO_PANIC_SELF_TEST_HMC5883     0x40 | 2        /* Self test failure */
 #define AO_PANIC_SELF_TEST_MPU6000     0x40 | 3        /* Self test failure */
 #define AO_PANIC_SELF_TEST_MPU9250     0x40 | 3        /* Self test failure */
+#define AO_PANIC_SELF_TEST_BMX160      0x40 | 3        /* Self test failure */
 #define AO_PANIC_SELF_TEST_MS5607      0x40 | 4        /* Self test failure */
+#define AO_PANIC_SELF_TEST_ADS124S0X   0x40 | 5        /* Self test failure */
 
 /* Stop the operating system, beeping and blinking the reason */
 void
-ao_panic(uint8_t reason);
+ao_panic(uint8_t reason) __attribute__((noreturn));
 
 /*
- * ao_timer.c
+ * ao_romconfig.c
  */
 
-#ifndef AO_TICK_TYPE
-#define AO_TICK_TYPE   uint16_t
-#define AO_TICK_SIGNED int16_t
+#define AO_ROMCONFIG_VERSION   2
+
+extern AO_ROMCONFIG_SYMBOL uint16_t ao_romconfig_version;
+extern AO_ROMCONFIG_SYMBOL uint16_t ao_romconfig_check;
+extern AO_ROMCONFIG_SYMBOL uint16_t ao_serial_number;
+#if HAS_RADIO
+extern AO_ROMCONFIG_SYMBOL uint32_t ao_radio_cal;
 #endif
 
+/*
+ * ao_timer.c
+ */
+
 extern volatile AO_TICK_TYPE ao_tick_count;
 
 /* Our timer runs at 100Hz */
@@ -97,24 +117,25 @@ extern volatile AO_TICK_TYPE ao_tick_count;
 #define AO_HERTZ               100
 #endif
 #define AO_MS_TO_TICKS(ms)     ((ms) / (1000 / AO_HERTZ))
-#define AO_SEC_TO_TICKS(s)     ((s) * AO_HERTZ)
+#define AO_SEC_TO_TICKS(s)     ((AO_TICK_TYPE) (s) * AO_HERTZ)
+#define AO_NS_TO_TICKS(ns)     ((ns) / (1000000000L / AO_HERTZ))
 
 /* Returns the current time in ticks */
 AO_TICK_TYPE
 ao_time(void);
 
+/* Returns the current time in ns */
+uint64_t
+ao_time_ns(void);
+
 /* Suspend the current task until ticks time has passed */
 void
-ao_delay(uint16_t ticks);
+ao_delay(AO_TICK_TYPE ticks);
 
 /* Set the ADC interval */
 void
 ao_timer_set_adc_interval(uint8_t interval);
 
-/* Timer interrupt */
-void
-ao_timer_isr(void) ao_arch_interrupt(9);
-
 /* Initialize the timer */
 void
 ao_timer_init(void);
@@ -165,7 +186,7 @@ void
 ao_put_string(const char *s);
 
 void
-ao_cmd_readline(void);
+ao_cmd_readline(const char *prompt);
 
 char
 ao_cmd_lex(void);
@@ -234,7 +255,7 @@ ao_cmd_filter(void);
 #include <ao_beep.h>
 #endif
 
-#if LEDS_AVAILABLE
+#if LEDS_AVAILABLE || HAS_LED
 #include <ao_led.h>
 #endif
 
@@ -374,7 +395,8 @@ ao_spi_slave(void);
 #define AO_GPS_NEW_TRACKING    2
 
 extern uint8_t ao_gps_new;
-extern uint16_t ao_gps_tick;
+extern AO_TICK_TYPE ao_gps_tick;
+extern AO_TICK_TYPE ao_gps_utc_tick;
 extern uint8_t ao_gps_mutex;
 extern struct ao_telemetry_location ao_gps_data;
 extern struct ao_telemetry_satellite ao_gps_tracking_data;
@@ -516,7 +538,7 @@ struct ao_telemetry_tiny_recv {
  * for reporting RSSI. So, now we use these values everywhere
  */
 #define AO_RSSI_FROM_RADIO(radio)      ((int16_t) ((int8_t) (radio) >> 1) - 74)
-#define AO_RADIO_FROM_RSSI(rssi)       (((int8_t) (rssi) + 74) << 1)
+#define AO_RADIO_FROM_RSSI(rssi)       ((uint8_t) (((rssi) + 74) << 1))
 
 /*
  * ao_radio_recv tacks on rssi and status bytes
@@ -581,9 +603,6 @@ extern int8_t       ao_radio_rssi;
 #define HAS_RADIO_RATE HAS_RADIO
 #endif
 
-void
-ao_radio_general_isr(void) ao_arch_interrupt(16);
-
 #if HAS_RADIO_XMIT
 void
 ao_radio_send(const void *d, uint8_t size);
@@ -591,7 +610,7 @@ ao_radio_send(const void *d, uint8_t size);
 
 #if HAS_RADIO_RECV
 uint8_t
-ao_radio_recv(void *d, uint8_t size, uint8_t timeout);
+ao_radio_recv(void *d, uint8_t size, AO_TICK_TYPE timeout);
 
 void
 ao_radio_recv_abort(void);
@@ -712,8 +731,8 @@ struct ao_stdio {
 };
 
 extern struct ao_stdio ao_stdios[];
-extern int8_t ao_cur_stdio;
-extern int8_t ao_num_stdios;
+extern uint8_t ao_cur_stdio;
+extern uint8_t ao_num_stdios;
 
 void
 flush(void);
@@ -723,7 +742,7 @@ extern uint8_t ao_stdin_ready;
 uint8_t
 ao_echo(void);
 
-int8_t
+uint8_t
 ao_add_stdio(int (*pollchar)(void),
             void (*putchar)(char) ,
             void (*flush)(void));
@@ -737,9 +756,6 @@ enum ao_igniter {
        ao_igniter_main = 1
 };
 
-void
-ao_ignite(enum ao_igniter igniter);
-
 enum ao_igniter_status {
        ao_igniter_unknown,     /* unknown status (ambiguous voltage) */
        ao_igniter_ready,       /* continuity detected */
@@ -819,15 +835,15 @@ struct ao_fifo {
        char    fifo[AO_FIFO_SIZE];
 };
 
-#define ao_fifo_insert(f,c) do { \
-       (f).fifo[(f).insert] = (c); \
-       (f).insert = ((f).insert + 1) & (AO_FIFO_SIZE-1); \
-} while(0)
+#define ao_fifo_insert(f,c) do {                                       \
+               (f).fifo[(f).insert] = (char) (c);                      \
+               (f).insert = ((f).insert + 1) & (AO_FIFO_SIZE-1);       \
+       } while(0)
 
-#define ao_fifo_remove(f,c) do {\
-       c = (f).fifo[(f).remove]; \
-       (f).remove = ((f).remove + 1) & (AO_FIFO_SIZE-1); \
-} while(0)
+#define ao_fifo_remove(f,c) do {                                       \
+               c = (f).fifo[(f).remove];                               \
+               (f).remove = ((f).remove + 1) & (AO_FIFO_SIZE-1);       \
+       } while(0)
 
 #define ao_fifo_full(f)                ((((f).insert + 1) & (AO_FIFO_SIZE-1)) == (f).remove)
 #define ao_fifo_mostly(f)      ((((f).insert - (f).remove) & (AO_FIFO_SIZE-1)) >= (AO_FIFO_SIZE * 3 / 4))
@@ -926,12 +942,6 @@ ao_log_single(void);
 
 #define AO_TELEPYRO_NUM_ADC    9
 
-#ifndef ao_xmemcpy
-#define ao_xmemcpy(d,s,c) memcpy(d,s,c)
-#define ao_xmemset(d,v,c) memset(d,v,c)
-#define ao_xmemcmp(d,s,c) memcmp(d,s,c)
-#endif
-
 /*
  * ao_terraui.c
  */
@@ -944,9 +954,6 @@ ao_terraui_init(void);
  */
 
 #ifdef BATTERY_PIN
-void
-ao_battery_isr(void) ao_arch_interrupt(1);
-
 uint16_t
 ao_battery_get(void);
 
@@ -965,7 +972,7 @@ ao_sqrt(uint32_t op);
  * ao_freq.c
  */
 
-int32_t ao_freq_to_set(int32_t freq, int32_t cal);
+uint32_t ao_freq_to_set(uint32_t freq, uint32_t cal);
 
 /*
  * ao_ms5607.c