diff options
author | Keith Packard <keithp@keithp.com> | 2011-04-19 13:20:19 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-04-19 13:20:19 -0700 |
commit | e3d501940718428135e04995dff7fef691c08a20 (patch) | |
tree | b1b2cda9fed2f4c147ceb00a08fa83b49675cc98 /src | |
parent | 6b5957d5f6f8181da7be98c9bce49a0ec0b4a713 (diff) |
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 <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/ao.h | 2 | ||||
-rw-r--r-- | src/ao_btm.c | 41 | ||||
-rw-r--r-- | src/ao_stdio.c | 4 |
3 files changed, 23 insertions, 24 deletions
@@ -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++; } |