From 4a1da92a175a8e3cf4a55e53a40a06d02193cdf4 Mon Sep 17 00:00:00 2001 From: Lukasz Rymanowski Date: Fri, 11 Apr 2014 11:24:58 +0200 Subject: [PATCH] android/gatt: Fix for scan non discoverable devices With this patch Android framework will not be notified with non-discoverable LE devices. --- android/bluetooth.c | 10 ++++++++-- android/bluetooth.h | 2 +- android/gatt.c | 5 +++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/android/bluetooth.c b/android/bluetooth.c index 4e4397a3e..dfc929dae 100644 --- a/android/bluetooth.c +++ b/android/bluetooth.c @@ -1362,8 +1362,14 @@ static void update_found_device(const bdaddr_t *bdaddr, uint8_t bdaddr_type, eir_data_free(&eir); /* Notify Gatt if its registered for LE events */ - if (bdaddr_type != BDADDR_BREDR && gatt_device_found_cb) - gatt_device_found_cb(bdaddr, bdaddr_type, rssi, data_len, data); + if (bdaddr_type != BDADDR_BREDR && gatt_device_found_cb) { + bool discoverable; + + discoverable = eir.flags & (EIR_LIM_DISC | EIR_GEN_DISC); + + gatt_device_found_cb(bdaddr, bdaddr_type, rssi, data_len, data, + discoverable); + } if (dev->bond_state != HAL_BOND_STATE_BONDED) cache_device(dev); diff --git a/android/bluetooth.h b/android/bluetooth.h index 8dbc623a0..807ebe79a 100644 --- a/android/bluetooth.h +++ b/android/bluetooth.h @@ -37,7 +37,7 @@ void bt_adapter_remove_record(uint32_t handle); typedef void (*bt_le_device_found)(const bdaddr_t *addr, uint8_t addr_type, int rssi, uint16_t eir_len, - const void *eir); + const void *eir, bool discoverable); bool bt_le_discovery_start(bt_le_device_found cb); typedef void (*bt_le_discovery_stopped)(void); diff --git a/android/gatt.c b/android/gatt.c index 12c35ca93..e74a60ca1 100644 --- a/android/gatt.c +++ b/android/gatt.c @@ -721,13 +721,14 @@ static bool is_device_wating_for_connect(const bdaddr_t *addr, static void le_device_found_handler(const bdaddr_t *addr, uint8_t addr_type, int rssi, uint16_t eir_len, - const void *eir) + const void *eir, + bool discoverable) { uint8_t buf[IPC_MTU]; struct hal_ev_gatt_client_scan_result *ev = (void *) buf; char bda[18]; - if (!scanning) + if (!scanning || !discoverable) goto connect; ba2str(addr, bda); -- 2.47.3