From: Keith Packard Date: Sun, 21 Apr 2013 03:05:01 +0000 (-0500) Subject: libaltos: Try Bluetooth open 5 times on EBUSY X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=af7a28494cb6c858013aba305061f73192b12b10;p=fw%2Faltos 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 --- 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