#include <libsigrok/libsigrok.h>
#include "libsigrok-internal.h"
-/** @cond PRIVATE */
#define LOG_PREFIX "bt-bluez"
-/** @endcond */
+#define CONNECT_BLE_TIMEOUT 20 /* Connect timeout in seconds. */
#define STORE_MAC_REVERSE 1
#define ACCEPT_NONSEP_MAC 1
char addr[20];
rc = hci_devinfo(idx, &info);
- sr_dbg("DIAG: hci_devinfo(%zu) => rc %d", idx, rc);
+ sr_spew("DIAG: hci_devinfo(%zu) => rc %d", idx, rc);
if (rc < 0)
return NULL;
rc = ba2str(&info.bdaddr, addr);
- sr_dbg("DIAG: ba2str() => rc %d", rc);
+ sr_spew("DIAG: ba2str() => rc %d", rc);
if (rc < 0)
return NULL;
id = hci_get_route(NULL);
}
if (id < 0) {
- sr_spew("devid failed");
+ sr_err("devid failed");
return -1;
}
desc->devid = id;
struct sockaddr_l2 sl2;
bdaddr_t mac;
int s, ret;
+ gint64 deadline;
if (!desc)
return -1;
}
}
+ deadline = g_get_monotonic_time();
+ deadline += CONNECT_BLE_TIMEOUT * 1000 * 1000;
str2ba(desc->remote_addr, &mac);
memcpy(&sl2.l2_bdaddr, &mac, sizeof(sl2.l2_bdaddr));
sl2.l2_bdaddr_type = BDADDR_LE_PUBLIC;
continue;
if (!(fds[0].revents & POLLOUT))
continue;
+ if (g_get_monotonic_time() >= deadline) {
+ sr_warn("Connect attempt timed out");
+ return SR_ERR_IO;
+ }
} while (1);
memset(fds, 0, sizeof(fds));
fds[0].fd = s;