altos: clear CPU port 1 interrupt flag when handled
[fw/altos] / src / ao.h
index 89109fd964449926bb4141020f61aa90c0982df1..600c488a00f98aed631f5a717429690e162e4c57 100644 (file)
--- a/src/ao.h
+++ b/src/ao.h
@@ -107,6 +107,7 @@ ao_start_scheduler(void);
 #define AO_PANIC_REBOOT                8       /* Reboot failed */
 #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 */
 
 /* Stop the operating system, beeping and blinking the reason */
 void
@@ -403,6 +404,14 @@ ao_cmd_register(__code struct ao_cmds *cmds);
 void
 ao_cmd_init(void);
 
+#if HAS_CMD_FILTER
+/*
+ * Provided by an external module to filter raw command lines
+ */
+uint8_t
+ao_cmd_filter(void);
+#endif
+
 /*
  * ao_dma.c
  */
@@ -903,6 +912,10 @@ ao_dbg_init(void);
 #endif
 
 #if HAS_SERIAL_1
+#ifndef USE_SERIAL_STDIN
+#error Please define USE_SERIAL_STDIN
+#endif
+
 void
 ao_serial_rx1_isr(void) __interrupt 3;
 
@@ -912,12 +925,24 @@ ao_serial_tx1_isr(void) __interrupt 14;
 char
 ao_serial_getchar(void) __critical;
 
+#if USE_SERIAL_STDIN
+char
+ao_serial_pollchar(void) __critical;
+
+void
+ao_serial_set_stdin(uint8_t stdin);
+#endif
+
 void
 ao_serial_putchar(char c) __critical;
 
+void
+ao_serial_drain(void) __critical;
+
 #define AO_SERIAL_SPEED_4800   0
 #define AO_SERIAL_SPEED_9600   1
-#define AO_SERIAL_SPEED_57600  2
+#define AO_SERIAL_SPEED_19200  2
+#define AO_SERIAL_SPEED_57600  3
 
 void
 ao_serial_set_speed(uint8_t speed);
@@ -1154,14 +1179,22 @@ struct ao_stdio {
        char    (*pollchar)(void);
        void    (*putchar)(char c) __reentrant;
        void    (*flush)(void);
+       uint8_t echo;
 };
 
+extern __xdata struct ao_stdio ao_stdios[];
+extern __data int8_t ao_cur_stdio;
+extern __data int8_t ao_num_stdios;
+
 void
 flush(void);
 
 extern __xdata uint8_t ao_stdin_ready;
 
-void
+uint8_t
+ao_echo(void);
+
+int8_t
 ao_add_stdio(char (*pollchar)(void),
             void (*putchar)(char) __reentrant,
             void (*flush)(void)) __reentrant;
@@ -1332,4 +1365,21 @@ ao_packet_slave_stop(void);
 void
 ao_packet_slave_init(uint8_t enable);
 
+/* ao_btm.c */
+
+/* If bt_link is on P2, this interrupt is shared by USB, so the USB
+ * code calls this function. Otherwise, it's a regular ISR.
+ */
+
+void
+ao_btm_isr(void)
+#if BT_LINK_ON_P1
+       __interrupt 15
+#endif
+       ;
+
+
+void
+ao_btm_init(void);
+
 #endif /* _AO_H_ */