From: Keith Packard Date: Tue, 19 Apr 2011 20:20:19 +0000 (-0700) Subject: altos: Solidify BT connections X-Git-Tag: 0.9.3~55 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=e3d501940718428135e04995dff7fef691c08a20 altos: Solidify BT connections Use delays while sending commands to BT module. Don't use BT for stdio until the module is initialized. Add \r to name setting command Don't require 'connected' signal for command input. Signed-off-by: Keith Packard --- diff --git a/src/ao.h b/src/ao.h index dad1f3df..226f9a22 100644 --- a/src/ao.h +++ b/src/ao.h @@ -1194,7 +1194,7 @@ extern __xdata uint8_t ao_stdin_ready; uint8_t ao_echo(void); -void +int8_t ao_add_stdio(char (*pollchar)(void), void (*putchar)(char) __reentrant, void (*flush)(void)) __reentrant; diff --git a/src/ao_btm.c b/src/ao_btm.c index 4f56c382..784a566f 100644 --- a/src/ao_btm.c +++ b/src/ao_btm.c @@ -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,7 +139,7 @@ ao_cmd_filter(void) ao_cmd_lex(); } ao_cmd_status = 0; - return !ao_btm_connected; + return 0; } /* @@ -161,16 +162,10 @@ ao_btm_pollchar(void) 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); + if (!ao_btm_running) + ao_delay(1); } /* @@ -211,12 +206,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 +232,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 +240,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 +270,11 @@ ao_btm(void) /* Turn off status reporting */ ao_btm_cmd("ATQ1\r"); + ao_btm_stdio = ao_add_stdio(ao_btm_pollchar, + ao_btm_putchar, + NULL); + ao_btm_echo(0); + ao_btm_running = 1; for (;;) { while (!ao_btm_connected && !ao_btm_chat) diff --git a/src/ao_stdio.c b/src/ao_stdio.c index ec3b6607..6b890832 100644 --- a/src/ao_stdio.c +++ b/src/ao_stdio.c @@ -69,7 +69,7 @@ ao_echo(void) return ao_stdios[ao_cur_stdio].echo; } -void +int8_t ao_add_stdio(char (*pollchar)(void), void (*putchar)(char), void (*flush)(void)) __reentrant @@ -80,5 +80,5 @@ ao_add_stdio(char (*pollchar)(void), ao_stdios[ao_num_stdios].putchar = putchar; ao_stdios[ao_num_stdios].flush = flush; ao_stdios[ao_num_stdios].echo = 1; - ao_num_stdios++; + return ao_num_stdios++; }