altos: Add DMA, SPI and MS5607 drivers
[fw/altos] / src / core / ao.h
index 1fbcf7df554018b90f7376959d3f4782eec5c8b7..67efa437f843fbe91143041ae7623c8bc8b49da8 100644 (file)
@@ -113,6 +113,8 @@ ao_start_scheduler(void);
 #define AO_PANIC_FLASH         9       /* Invalid flash part (or wrong blocksize) */
 #define AO_PANIC_USB           10      /* Trying to send USB packet while busy */
 #define AO_PANIC_BT            11      /* Communications with bluetooth device failed */
+#define AO_PANIC_STACK         12      /* Stack overflow */
+#define AO_PANIC_SPI           13      /* SPI communication failure */
 
 /* Stop the operating system, beeping and blinking the reason */
 void
@@ -257,29 +259,33 @@ ao_beep_init(void);
 
 #define AO_LED_NONE    0
 
+#ifndef AO_LED_TYPE
+#define AO_LED_TYPE uint8_t
+#endif
+
 /* Turn on the specified LEDs */
 void
-ao_led_on(uint8_t colors);
+ao_led_on(AO_LED_TYPE colors);
 
 /* Turn off the specified LEDs */
 void
-ao_led_off(uint8_t colors);
+ao_led_off(AO_LED_TYPE colors);
 
 /* Set all of the LEDs to the specified state */
 void
-ao_led_set(uint8_t colors);
+ao_led_set(AO_LED_TYPE colors);
 
 /* Toggle the specified LEDs */
 void
-ao_led_toggle(uint8_t colors);
+ao_led_toggle(AO_LED_TYPE colors);
 
 /* Turn on the specified LEDs for the indicated interval */
 void
-ao_led_for(uint8_t colors, uint16_t ticks) __reentrant;
+ao_led_for(AO_LED_TYPE colors, uint16_t ticks) __reentrant;
 
 /* Initialize the LEDs */
 void
-ao_led_init(uint8_t enable);
+ao_led_init(AO_LED_TYPE enable);
 
 /*
  * ao_usb.c
@@ -389,42 +395,6 @@ uint8_t
 ao_cmd_filter(void);
 #endif
 
-/*
- * ao_dma.c
- */
-
-/* Allocate a DMA channel. the 'done' parameter will be set when the
- * dma is finished and will be used to wakeup any waiters
- */
-
-uint8_t
-ao_dma_alloc(__xdata uint8_t * done);
-
-/* Setup a DMA channel */
-void
-ao_dma_set_transfer(uint8_t id,
-                   void __xdata *srcaddr,
-                   void __xdata *dstaddr,
-                   uint16_t count,
-                   uint8_t cfg0,
-                   uint8_t cfg1);
-
-/* Start a DMA channel */
-void
-ao_dma_start(uint8_t id);
-
-/* Manually trigger a DMA channel */
-void
-ao_dma_trigger(uint8_t id);
-
-/* Abort a running DMA transfer */
-void
-ao_dma_abort(uint8_t id);
-
-/* DMA interrupt routine */
-void
-ao_dma_isr(void) ao_arch_interrupt(8);
-
 /*
  * ao_mutex.c
  */
@@ -898,7 +868,7 @@ ao_dbg_init(void);
 #error Please define HAS_SERIAL_1
 #endif
 
-#if HAS_SERIAL_1
+#if HAS_SERIAL_1 | HAS_SERIAL_2 | HAS_SERIAL_3
 #ifndef USE_SERIAL_STDIN
 #error Please define USE_SERIAL_STDIN
 #endif
@@ -917,7 +887,7 @@ char
 ao_serial_pollchar(void) __critical;
 
 void
-ao_serial_set_stdin(uint8_t stdin);
+ao_serial_set_stdin(uint8_t in);
 #endif
 
 void
@@ -938,46 +908,38 @@ void
 ao_serial_init(void);
 #endif
 
-/*
- * ao_spi.c
- */
+#ifndef HAS_SERIAL_0
+#define HAS_SERIAL_0 0
+#endif
 
-extern __xdata uint8_t ao_spi_mutex;
+#if HAS_SERIAL_0
 
-#define ao_spi_get_mask(reg,mask) do {\
-       ao_mutex_get(&ao_spi_mutex); \
-       (reg) &= ~(mask); \
-       } while (0)
+extern volatile __xdata struct ao_fifo ao_usart0_rx_fifo;
+extern volatile __xdata struct ao_fifo ao_usart0_tx_fifo;
 
-#define ao_spi_put_mask(reg,mask) do { \
-       (reg) |= (mask); \
-       ao_mutex_put(&ao_spi_mutex); \
-       } while (0)
+void
+ao_serial0_rx0_isr(void) ao_arch_interrupt(2);
 
-#define ao_spi_get_bit(bit) do {\
-       ao_mutex_get(&ao_spi_mutex); \
-       (bit) = 0; \
-       } while (0)
+void
+ao_serial0_tx0_isr(void) ao_arch_interrupt(7);
 
-#define ao_spi_put_bit(bit) do { \
-       (bit) = 1; \
-       ao_mutex_put(&ao_spi_mutex); \
-       } while (0)
+char
+ao_serial0_getchar(void) __critical;
 
-/*
- * The SPI mutex must be held to call either of these
- * functions -- this mutex covers the entire SPI operation,
- * from chip select low to chip select high
- */
+void
+ao_serial0_putchar(char c) __critical;
 
 void
-ao_spi_send(void __xdata *block, uint16_t len) __reentrant;
+ao_serial0_drain(void) __critical;
 
 void
-ao_spi_recv(void __xdata *block, uint16_t len) __reentrant;
+ao_serial0_set_speed(uint8_t speed);
 
 void
-ao_spi_init(void);
+ao_serial0_init(void);
+
+#endif
+
 
 /*
  * ao_spi_slave.c
@@ -1506,7 +1468,6 @@ ao_igniter_init(void);
 struct ao_radio_channel {
        char            name[AO_CHANNEL_NAME_LEN];
        uint32_t        kHz;
-       uint32_t        radio_setting;
 };
 #endif
 
@@ -1526,6 +1487,7 @@ struct ao_config {
        uint32_t        radio_setting;          /* minor version 7 */
        uint8_t         radio_enable;           /* minor version 8 */
        uint8_t         aes_key[AO_AES_LEN];    /* minor version 9 */
+       uint32_t        frequency;              /* minor version 10 */
 #if HAS_RADIO_CHANNELS
        struct ao_radio_channel radio_channels[AO_NUM_CHANNELS];        /* minor version 10 */
 #endif
@@ -1926,4 +1888,18 @@ ao_battery_init(void);
 uint32_t
 ao_sqrt(uint32_t op);
 
+/*
+ * ao_freq.c
+ */
+
+int32_t ao_freq_to_set(int32_t freq, int32_t cal);
+
+#include <ao_arch_funcs.h>
+
+/*
+ * ao_ms5607.c
+ */
+
+void ao_ms5607_init(void);
+
 #endif /* _AO_H_ */