X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fbt%2Fbt_bluez.c;h=f64ba59db9f32a6bffc2dfa78475693eb764ff3f;hb=82b9f3d116ce0c982291a2dfdd15cd8a1c4cc16e;hp=167216087133ba60c8aa6371444183aa30ee220b;hpb=0f92d5db036e266a04edfdfe5b7c8cefd7ff2193;p=libsigrok.git diff --git a/src/bt/bt_bluez.c b/src/bt/bt_bluez.c index 16721608..f64ba59d 100644 --- a/src/bt/bt_bluez.c +++ b/src/bt/bt_bluez.c @@ -87,10 +87,9 @@ #include #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 @@ -668,6 +667,7 @@ SR_PRIV int sr_bt_connect_ble(struct sr_bt_desc *desc) struct sockaddr_l2 sl2; bdaddr_t mac; int s, ret; + gint64 deadline; if (!desc) return -1; @@ -710,6 +710,8 @@ SR_PRIV int sr_bt_connect_ble(struct sr_bt_desc *desc) } } + 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; @@ -745,6 +747,10 @@ SR_PRIV int sr_bt_connect_ble(struct sr_bt_desc *desc) 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;