altos: Simplify BT communications
[fw/altos] / src / ao_btm.c
index 4f56c382daa8cce6df8461f3ac8ab568b8b7a06c..6ba5eb1abeb32ffb8cbfb1b85647018dc7e38816 100644 (file)
@@ -26,8 +26,6 @@ __xdata char          ao_btm_buffer[1024];
 int                    ao_btm_ptr;
 char                   ao_btm_dir;
 
-uint8_t                        ao_btm_send_chars = 0;
-
 void
 ao_btm_putchar(char c);
 
@@ -109,6 +107,9 @@ ao_btm_drain()
                ;
 }
 
+/*
+ * Set the stdio echo for the bluetooth link
+ */
 void
 ao_btm_echo(uint8_t echo)
 {
@@ -138,39 +139,20 @@ ao_cmd_filter(void)
                ao_cmd_lex();
        }
        ao_cmd_status = 0;
-       return !ao_btm_connected;
+       return 0;
 }
 
 /*
- * A wrapper for ao_serial_pollchar that
- * doesn't return any characters while we're
- * initializing the bluetooth device
+ * Delay between command charaters; the BT module
+ * can't keep up with 57600 baud
  */
-char
-ao_btm_pollchar(void)
-{
-       char    c;
-       if (!ao_btm_running)
-               return AO_READ_AGAIN;
-       c = ao_serial_pollchar();
-       if (c != AO_READ_AGAIN)
-               ao_btm_log_in_char(c);
-       return c;
-}
 
 void
 ao_btm_putchar(char c)
 {
-       if (!ao_btm_send_chars) {
-               ao_btm_log_out_char(c);
-               ao_serial_putchar(c);
-       }
-}
-
-void
-ao_btm_stdio_putchar(char c) {
-       if (ao_btm_connected)
-               ao_btm_putchar(c);
+       ao_btm_log_out_char(c);
+       ao_serial_putchar(c);
+       ao_delay(1);
 }
 
 /*
@@ -211,12 +193,13 @@ ao_btm_cmd(__code char *cmd)
 uint8_t
 ao_btm_set_name(void)
 {
-       char    sn[7];
-       char    *s = sn + 7;
+       char    sn[8];
+       char    *s = sn + 8;
        char    c;
        int     n;
        ao_btm_string("ATN=TeleBT-");
        *--s = '\0';
+       *--s = '\r';
        n = ao_serial_number;
        do {
                *--s = '0' + n % 10;
@@ -236,6 +219,7 @@ ao_btm_try_speed(uint8_t speed)
                return 1;
        return 0;
 }
+
 /*
  * A thread to initialize the bluetooth device and
  * hang around to blink the LED when connected
@@ -243,12 +227,9 @@ ao_btm_try_speed(uint8_t speed)
 void
 ao_btm(void)
 {
-       ao_add_stdio(ao_btm_pollchar,
-                    ao_btm_stdio_putchar,
-                    NULL);
-       ao_btm_stdio = ao_num_stdios - 1;
-       ao_btm_echo(0);
-
+       /*
+        * Wait for the bluetooth device to boot
+        */
        ao_delay(AO_SEC_TO_TICKS(3));
 
        /*
@@ -276,6 +257,11 @@ ao_btm(void)
        /* Turn off status reporting */
        ao_btm_cmd("ATQ1\r");
 
+       ao_btm_stdio = ao_add_stdio(ao_serial_pollchar,
+                                   ao_serial_putchar,
+                                   NULL);
+       ao_btm_echo(0);
+
        ao_btm_running = 1;
        for (;;) {
                while (!ao_btm_connected && !ao_btm_chat)