summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-04-19 13:20:19 -0700
committerKeith Packard <keithp@keithp.com>2011-04-19 13:20:19 -0700
commite3d501940718428135e04995dff7fef691c08a20 (patch)
treeb1b2cda9fed2f4c147ceb00a08fa83b49675cc98 /src
parent6b5957d5f6f8181da7be98c9bce49a0ec0b4a713 (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.h2
-rw-r--r--src/ao_btm.c41
-rw-r--r--src/ao_stdio.c4
3 files changed, 23 insertions, 24 deletions
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++;
}