altos: Remove *_TO_DATA macros
[fw/altos] / src / kernel / ao.h
index ad5bbf8e76ae152fefaed06eed6758963b8ec0da..520f6ef201f5698235745469fafa9973d3bccaca 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <ao_pins.h>
 #include <ao_arch.h>
 
+/* replace stdio macros with direct calls to our functions */
+#undef putchar
+#undef getchar
+#define putchar(c)     ao_putchar(c)
+#define getchar                ao_getchar
+
+extern int ao_putchar(char c);
+extern char ao_getchar(void);
+
 #define TRUE 1
 #define FALSE 0
 
-/* Convert a __data pointer into an __xdata pointer */
-#ifndef DATA_TO_XDATA
-#define DATA_TO_XDATA(a)       (a)
-#endif
-#ifndef PDATA_TO_XDATA
-#define PDATA_TO_XDATA(a)      (a)
-#endif
-#ifndef CODE_TO_XDATA
-#define CODE_TO_XDATA(a)       (a)
-#endif
-
 #ifndef HAS_TASK
 #define HAS_TASK       1
 #endif
 
-#ifndef AO_PORT_TYPE
-#define AO_PORT_TYPE uint8_t
-#endif
-
 typedef AO_PORT_TYPE ao_port_t;
 
 #if HAS_TASK
@@ -76,9 +71,12 @@ typedef AO_PORT_TYPE ao_port_t;
 #define AO_PANIC_BUFIO         15      /* Mis-using bufio API */
 #define AO_PANIC_EXTI          16      /* Mis-using exti API */
 #define AO_PANIC_FAST_TIMER    17      /* Mis-using fast timer API */
+#define AO_PANIC_ADC           18      /* Mis-using ADC interface */
+#define AO_PANIC_IRQ           19      /* interrupts not blocked */
 #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_PANIC_SELF_TEST_MPU9250     0x40 | 3        /* Self test failure */
 #define AO_PANIC_SELF_TEST_MS5607      0x40 | 4        /* Self test failure */
 
 /* Stop the operating system, beeping and blinking the reason */
@@ -127,6 +125,16 @@ ao_timer_init(void);
 void
 ao_clock_init(void);
 
+#if AO_POWER_MANAGEMENT
+/* Go to low power clock */
+void
+ao_clock_suspend(void);
+
+/* Restart full-speed clock */
+void
+ao_clock_resume(void);
+#endif
+
 /*
  * ao_mutex.c
  */
@@ -161,6 +169,9 @@ void
 ao_put_string(__code char *s);
 
 void
+ao_cmd_readline(void);
+
+char
 ao_cmd_lex(void);
 
 void
@@ -205,6 +216,9 @@ ao_cmd_register(const __code struct ao_cmds *cmds);
 void
 ao_cmd_init(void);
 
+void
+ao_cmd(void);
+
 #if HAS_CMD_FILTER
 /*
  * Provided by an external module to filter raw command lines
@@ -518,15 +532,9 @@ struct ao_telemetry_raw_recv {
 
 /* Set delay between telemetry reports (0 to disable) */
 
-#ifdef AO_SEND_ALL_BARO
-#define AO_TELEMETRY_INTERVAL_PAD      AO_MS_TO_TICKS(100)
-#define AO_TELEMETRY_INTERVAL_FLIGHT   AO_MS_TO_TICKS(100)
-#define AO_TELEMETRY_INTERVAL_RECOVER  AO_MS_TO_TICKS(100)
-#else
 #define AO_TELEMETRY_INTERVAL_PAD      AO_MS_TO_TICKS(1000)
 #define AO_TELEMETRY_INTERVAL_FLIGHT   AO_MS_TO_TICKS(100)
 #define AO_TELEMETRY_INTERVAL_RECOVER  AO_MS_TO_TICKS(1000)
-#endif
 
 void
 ao_telemetry_reset_interval(void);
@@ -637,6 +645,12 @@ ao_radio_continuity(uint8_t c);
 void
 ao_radio_rdf_abort(void);
 
+void
+ao_radio_test_on(void);
+
+void
+ao_radio_test_off(void);
+
 void
 ao_radio_init(void);
 
@@ -646,7 +660,7 @@ ao_radio_init(void);
 
 #if HAS_MONITOR
 
-extern const char const * const ao_state_names[];
+extern const char * const ao_state_names[];
 
 #define AO_MONITOR_RING        8
 
@@ -662,7 +676,9 @@ union ao_monitor {
 extern __xdata union ao_monitor ao_monitor_ring[AO_MONITOR_RING];
 
 #define ao_monitor_ring_next(n)        (((n) + 1) & (AO_MONITOR_RING - 1))
+#define ao_monitor_ring_prev(n)        (((n) - 1) & (AO_MONITOR_RING - 1))
 
+extern __xdata uint8_t ao_monitoring_mutex;
 extern __data uint8_t ao_monitoring;
 extern __data uint8_t ao_monitor_head;
 
@@ -818,6 +834,8 @@ struct ao_fifo {
 } 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))
+#define ao_fifo_barely(f)      ((((f).insert - (f).remove) & (AO_FIFO_SIZE-1)) >= (AO_FIFO_SIZE * 1 / 4))
 #define ao_fifo_empty(f)       ((f).insert == (f).remove)
 
 #if PACKET_HAS_MASTER || PACKET_HAS_SLAVE
@@ -840,33 +858,6 @@ struct ao_fifo {
 #include <ao_aes.h>
 #endif
 
-/* ao_launch.c */
-
-struct ao_launch_command {
-       uint16_t        tick;
-       uint16_t        serial;
-       uint8_t         cmd;
-       uint8_t         channel;
-       uint16_t        unused;
-};
-
-#define AO_LAUNCH_QUERY                1
-
-struct ao_launch_query {
-       uint16_t        tick;
-       uint16_t        serial;
-       uint8_t         channel;
-       uint8_t         valid;
-       uint8_t         arm_status;
-       uint8_t         igniter_status;
-};
-
-#define AO_LAUNCH_ARM          2
-#define AO_LAUNCH_FIRE         3
-
-void
-ao_launch_init(void);
-
 /*
  * ao_log_single.c
  */