Allow for more than one serial port in core AltOS
[fw/altos] / src / core / ao.h
index 8bd7a3d2ba9f43396e9f641d3f1135700043b4ac..b2f3305f6a9e261ecfe6c867a858e7f8a1bcaae9 100644 (file)
@@ -113,6 +113,7 @@ 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 */
 
 /* Stop the operating system, beeping and blinking the reason */
 void
@@ -376,7 +377,7 @@ struct ao_cmds {
 };
 
 void
-ao_cmd_register(__code struct ao_cmds *cmds);
+ao_cmd_register(const __code struct ao_cmds *cmds);
 
 void
 ao_cmd_init(void);
@@ -898,7 +899,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 +918,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,6 +939,39 @@ void
 ao_serial_init(void);
 #endif
 
+#ifndef HAS_SERIAL_0
+#define HAS_SERIAL_0 0
+#endif
+
+#if HAS_SERIAL_0
+
+extern volatile __xdata struct ao_fifo ao_usart0_rx_fifo;
+extern volatile __xdata struct ao_fifo ao_usart0_tx_fifo;
+
+void
+ao_serial0_rx0_isr(void) ao_arch_interrupt(2);
+
+void
+ao_serial0_tx0_isr(void) ao_arch_interrupt(7);
+
+char
+ao_serial0_getchar(void) __critical;
+
+void
+ao_serial0_putchar(char c) __critical;
+
+void
+ao_serial0_drain(void) __critical;
+
+void
+ao_serial0_set_speed(uint8_t speed);
+
+void
+ao_serial0_init(void);
+
+#endif
+
+
 /*
  * ao_spi.c
  */
@@ -1352,10 +1386,10 @@ void
 ao_radio_set_packet(void);
 
 void
-ao_radio_send(__xdata void *data, uint8_t size) __reentrant;
+ao_radio_send(__xdata void *d, uint8_t size) __reentrant;
 
 uint8_t
-ao_radio_recv(__xdata void *data, uint8_t size) __reentrant;
+ao_radio_recv(__xdata void *d, uint8_t size) __reentrant;
 
 void
 ao_radio_recv_abort(void);
@@ -1506,7 +1540,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 +1559,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
@@ -1708,7 +1742,7 @@ ao_companion_init(void);
 /* ao_lcd.c */
   
 void
-ao_lcd_putchar(uint8_t data);
+ao_lcd_putchar(uint8_t d);
 
 void
 ao_lcd_putstring(char *string);
@@ -1739,14 +1773,14 @@ ao_lcd_init(void);
 /* ao_lcd_port.c */
 
 void
-ao_lcd_port_put_nibble(uint8_t rs, uint8_t data);
+ao_lcd_port_put_nibble(uint8_t rs, uint8_t d);
 
 void
 ao_lcd_port_init(void);
 
 /* ao_aes.c */
 
-__xdata uint8_t ao_aes_mutex;
+extern __xdata uint8_t ao_aes_mutex;
 
 /* AES keys and blocks are 128 bits */
 
@@ -1926,4 +1960,10 @@ 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);
+
 #endif /* _AO_H_ */