#define NUM_STATUS_STRING (sizeof status_strings/sizeof status_strings[0])
static char ao_rn_buffer[64];
-static int ao_rn_buf_cnt, ao_rn_buf_ptr;
+static size_t ao_rn_buf_cnt, ao_rn_buf_ptr;
static int ao_rn_draining;
static AO_TICK_TYPE ao_rn_buf_time;
* disabled due to a firmware bug. So, this code finds those in the
* input and strips them out.
*/
-int
+static int
_ao_wrap_rn_pollchar(void)
{
int c = AO_READ_AGAIN;
/* If we filled the buffer, just give up */
ao_rn_draining = 1;
} else {
- ao_rn_buffer[ao_rn_buf_cnt++] = c;
+ ao_rn_buffer[ao_rn_buf_cnt++] = (char) c;
for (i = 0; i < NUM_STATUS_STRING; i++) {
- int cmp = strlen(status_strings[i]);
+ size_t cmp = strlen(status_strings[i]);
if (cmp >= ao_rn_buf_cnt)
cmp = ao_rn_buf_cnt-1;
if (memcmp(ao_rn_buffer+1, status_strings[i], cmp) == 0)
ao_rn_draining = 1;
}
} else if (c == STATUS_CHAR) {
- ao_rn_buffer[0] = c;
+ ao_rn_buffer[0] = (char) c;
ao_rn_buf_cnt = 1;
ao_rn_buf_ptr = 0;
ao_rn_buf_time = ao_time();
ao_arch_release_interrupts();
return AO_READ_AGAIN;
}
- _ao_serial_rn_sleep_for(delay);
+ _ao_serial_rn_sleep_for((AO_TICK_TYPE) delay);
}
ao_arch_release_interrupts();
return c;
}
static int
-ao_rn_wait_for(int timeout, char *match)
+ao_rn_wait_for(AO_TICK_TYPE timeout, char *match)
{
char reply[AO_RN_MAX_REPLY_LEN + 1];
- int match_len = strlen(match);
+ size_t match_len = strlen(match);
AO_TICK_TYPE giveup_time = ao_time() + timeout;
int c;
}
static int
-ao_rn_set_name(void)
+ao_rn_set_name(char *name)
{
- char sn[8];
- char *s = sn + 8;
- int n;
-
// ao_rn_dbg("set name...\n");
- *--s = '\0';
- n = ao_serial_number;
- do {
- *--s = '0' + n % 10;
- } while (n /= 10);
- ao_rn_send_cmd(AO_RN_SET_NAME_CMD "TeleBT-", s);
+ ao_rn_send_cmd(AO_RN_SET_NAME_CMD, name);
return ao_rn_wait_status();
}
ao_wakeup(&ao_rn_connected);
}
+#ifndef ao_bt_panic
static void
ao_bt_panic(int where)
{
int i;
for (;;) {
- for (i = 0; i < 50; i++) {
- ao_led_toggle(AO_BT_LED);
+ for (i = 0; i < 25; i++) {
+ ao_led_for(AO_BT_LED, AO_MS_TO_TICKS(10));
ao_delay(AO_MS_TO_TICKS(10));
}
- ao_led_off(AO_BT_LED);
ao_delay(AO_MS_TO_TICKS(500));
for (i = 0; i < where; i++) {
ao_led_for(AO_BT_LED, AO_MS_TO_TICKS(200));
}
}
}
+#endif
static uint8_t ao_rn_stdio;
/*
* Set the stdio echo for the bluetooth link
*/
-void
+static void
ao_rn_echo(uint8_t echo)
{
ao_stdios[ao_rn_stdio].echo = echo;
ao_rn(void)
{
int status = AO_RN_ERROR;
- char name[17];
+ char have_name[17], want_name[17];
int i;
ao_rn_dbg("ao_rn top\n");
/* Check to see if the name is already set and assume
* that the device is ready to go
*/
- status = ao_rn_get_name(name, sizeof (name));
+ status = ao_rn_get_name(have_name, sizeof (have_name));
if (status != AO_RN_OK) {
ao_rn_dbg("get name failed\n");
- status = ao_rn_get_name(name, sizeof (name));
+ status = ao_rn_get_name(have_name, sizeof (have_name));
if (status != AO_RN_OK)
continue;
}
+ snprintf(want_name, sizeof(want_name), "TeleBT-%u", ao_serial_number);
- if (strncmp(name, "TeleBT-", 7) == 0) {
+ if (strcmp(have_name, want_name) == 0) {
ao_rn_dbg("name is set\n");
status = AO_RN_OK;
break;
/* Finally, set the name. Doing this last makes it possible to check
* if the whole sequence has been done
*/
- if (ao_rn_set_name() != AO_RN_OK) {
+ if (ao_rn_set_name(want_name) != AO_RN_OK) {
ao_rn_dbg("set name failed\n");
continue;
}
ao_rn_factory(void)
{
int i;
- int v = 0;
+ uint8_t v = 0;
/*
* Factory reset. Flip pin P3_1 5 times within the first five
v = 1-v;
ao_delay(AO_MS_TO_TICKS(50));
ao_gpio_set(AO_RN_P3_1_PORT, AO_RN_P3_1_PIN, v);
- ao_led_toggle(AO_BT_LED);
+ if (v)
+ ao_led_on(AO_BT_LED);
+ else
+ ao_led_off(AO_BT_LED);
}
/* And let P3_1 float again */