summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-04-20 22:05:01 -0500
committerKeith Packard <keithp@keithp.com>2013-04-20 22:05:01 -0500
commitaf7a28494cb6c858013aba305061f73192b12b10 (patch)
tree334e1a20b7cbbe77c043aeb404d997a06de5645b
parent76fba00fd3706b29c8d9d4057a45729ca8c78fc3 (diff)
libaltos: Try Bluetooth open 5 times on EBUSY
After closing Bluetooth, it can take a second before the device is up for another connection. Hang around retrying a few times. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--libaltos/libaltos.c29
-rw-r--r--src/stm-bringup/Makefile6
-rw-r--r--src/stm/Makefile.defs6
3 files changed, 25 insertions, 16 deletions
diff --git a/libaltos/libaltos.c b/libaltos/libaltos.c
index ad03e638..69a6735f 100644
--- a/libaltos/libaltos.c
+++ b/libaltos/libaltos.c
@@ -736,30 +736,35 @@ struct altos_file *
altos_bt_open(struct altos_bt_device *device)
{
struct sockaddr_rc addr = { 0 };
- int s, status;
+ int status, i;
struct altos_file *file;
file = calloc(1, sizeof (struct altos_file));
if (!file)
goto no_file;
- file->fd = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
- if (file->fd < 0) {
- altos_set_last_posix_error();
- goto no_sock;
- }
-
addr.rc_family = AF_BLUETOOTH;
addr.rc_channel = 1;
str2ba(device->addr, &addr.rc_bdaddr);
- status = connect(file->fd,
- (struct sockaddr *)&addr,
- sizeof(addr));
+ for (i = 0; i < 5; i++) {
+ file->fd = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
+ if (file->fd < 0) {
+ altos_set_last_posix_error();
+ goto no_sock;
+ }
+
+ status = connect(file->fd,
+ (struct sockaddr *)&addr,
+ sizeof(addr));
+ if (status >= 0 || errno != EBUSY)
+ break;
+ close(file->fd);
+ usleep(100 * 1000);
+ }
if (status < 0) {
altos_set_last_posix_error();
goto no_link;
}
- sleep(1);
#ifdef USE_POLL
pipe(file->pipe);
@@ -768,7 +773,7 @@ altos_bt_open(struct altos_bt_device *device)
#endif
return file;
no_link:
- close(s);
+ close(file->fd);
no_sock:
free(file);
no_file:
diff --git a/src/stm-bringup/Makefile b/src/stm-bringup/Makefile
index 5cc94bd9..f4e77046 100644
--- a/src/stm-bringup/Makefile
+++ b/src/stm-bringup/Makefile
@@ -8,8 +8,10 @@ endif
CC=arm-none-eabi-gcc
OBJCOPY=arm-none-eabi-objcopy
-PDCLIB=/home/keithp/sat
-C_LIB=$(PDCLIB)/lib/pdclib.a
+#PDCLIB=/home/keithp/sat
+#C_LIB=$(PDCLIB)/lib/pdclib.a
+PDCLIB=/opt/sat
+C_LIB=$(PDCLIB)/lib/pdclib-cortex-m3.a
C_INC=-I$(PDCLIB)/include
DEF_CFLAGS=-g -std=gnu99 -Os -mlittle-endian -mthumb -ffreestanding -nostdlib -I. -I../../src/stm $(C_INC)
diff --git a/src/stm/Makefile.defs b/src/stm/Makefile.defs
index 04404cdc..e4a154c5 100644
--- a/src/stm/Makefile.defs
+++ b/src/stm/Makefile.defs
@@ -8,8 +8,10 @@ vpath matrix.5c ../kalman
vpath ao-make-product.5c ../util
CC=arm-none-eabi-gcc
-SAT=/home/keithp/sat
-SAT_CLIB=$(SAT)/lib/pdclib.a
+#SAT=/home/keithp/sat
+#SAT_CLIB=$(SAT)/lib/pdclib.a
+SAT=/opt/sat
+SAT_CLIB=$(SAT)/lib/pdclib-cortex-m3.a
SAT_CFLAGS=-I$(SAT)/include
ifndef VERSION