summaryrefslogtreecommitdiff
path: root/src/ao_btm.c
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/ao_btm.c
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/ao_btm.c')
-rw-r--r--src/ao_btm.c41
1 files changed, 20 insertions, 21 deletions
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)