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>
ao_add_stdio(char (*pollchar)(void),
void (*putchar)(char) __reentrant,
void (*flush)(void)) __reentrant;
ao_add_stdio(char (*pollchar)(void),
void (*putchar)(char) __reentrant,
void (*flush)(void)) __reentrant;
int ao_btm_ptr;
char ao_btm_dir;
int ao_btm_ptr;
char ao_btm_dir;
-uint8_t ao_btm_send_chars = 0;
-
void
ao_btm_putchar(char c);
void
ao_btm_putchar(char c);
+/*
+ * Set the stdio echo for the bluetooth link
+ */
void
ao_btm_echo(uint8_t echo)
{
void
ao_btm_echo(uint8_t echo)
{
ao_cmd_lex();
}
ao_cmd_status = 0;
ao_cmd_lex();
}
ao_cmd_status = 0;
- return !ao_btm_connected;
void
ao_btm_putchar(char 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);
+ if (!ao_btm_running)
+ ao_delay(1);
uint8_t
ao_btm_set_name(void)
{
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';
char c;
int n;
ao_btm_string("ATN=TeleBT-");
*--s = '\0';
n = ao_serial_number;
do {
*--s = '0' + n % 10;
n = ao_serial_number;
do {
*--s = '0' + n % 10;
/*
* A thread to initialize the bluetooth device and
* hang around to blink the LED when connected
/*
* A thread to initialize the bluetooth device and
* hang around to blink the LED when connected
- 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));
/*
ao_delay(AO_SEC_TO_TICKS(3));
/*
/* Turn off status reporting */
ao_btm_cmd("ATQ1\r");
/* 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)
ao_btm_running = 1;
for (;;) {
while (!ao_btm_connected && !ao_btm_chat)
return ao_stdios[ao_cur_stdio].echo;
}
return ao_stdios[ao_cur_stdio].echo;
}
ao_add_stdio(char (*pollchar)(void),
void (*putchar)(char),
void (*flush)(void)) __reentrant
ao_add_stdio(char (*pollchar)(void),
void (*putchar)(char),
void (*flush)(void)) __reentrant
ao_stdios[ao_num_stdios].putchar = putchar;
ao_stdios[ao_num_stdios].flush = flush;
ao_stdios[ao_num_stdios].echo = 1;
ao_stdios[ao_num_stdios].putchar = putchar;
ao_stdios[ao_num_stdios].flush = flush;
ao_stdios[ao_num_stdios].echo = 1;
+ return ao_num_stdios++;