From b6da4c4d2b61ea8d69c055924953d1100b422f8c Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Thu, 31 Jan 2013 13:40:54 -0600 Subject: [PATCH] core: Refactor passive scanning stopping into its own function --- src/adapter.c | 95 +++++++++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 40 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index bac345d84..2cb92cac0 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1179,6 +1179,60 @@ static void trigger_passive_scanning(struct btd_adapter *adapter) passive_scanning_timeout, adapter); } +static void stop_passive_scanning_complete(uint8_t status, uint16_t length, + const void *param, void *user_data) +{ + struct btd_adapter *adapter = user_data; + struct btd_device *dev; + int err; + + dev = adapter->connect_le; + adapter->connect_le = NULL; + + if (status != MGMT_STATUS_SUCCESS) { + error("Stopping passive scanning failed: %s", + mgmt_errstr(status)); + return; + } + + adapter->discovery_type = 0x00; + adapter->discovery_enable = 0x00; + + if (!dev) { + DBG("Device removed while stopping passive scanning"); + trigger_passive_scanning(adapter); + return; + } + + err = device_connect_le(dev); + if (err < 0) { + error("LE auto connection failed: %s (%d)", + strerror(-err), -err); + trigger_passive_scanning(adapter); + } +} + +static void stop_passive_scanning(struct btd_adapter *adapter) +{ + struct mgmt_cp_stop_discovery cp; + + DBG(""); + + /* If there are any normal discovery clients passive scanning + * wont be running */ + if (adapter->discovery_list) + return; + + if (adapter->discovery_enable == 0x00) + return; + + cp.type = adapter->discovery_type; + + mgmt_send(adapter->mgmt, MGMT_OP_STOP_DISCOVERY, + adapter->dev_id, sizeof(cp), &cp, + stop_passive_scanning_complete, adapter, NULL); +} + static void cancel_passive_scanning(struct btd_adapter *adapter) { if (!(adapter->current_settings & MGMT_SETTING_LE)) @@ -4002,39 +4056,6 @@ static void confirm_name(struct btd_adapter *adapter, const bdaddr_t *bdaddr, confirm_name_timeout, adapter); } -static void stop_passive_scanning_complete(uint8_t status, uint16_t length, - const void *param, void *user_data) -{ - struct btd_adapter *adapter = user_data; - struct btd_device *dev; - int err; - - dev = adapter->connect_le; - adapter->connect_le = NULL; - - if (status != MGMT_STATUS_SUCCESS) { - error("Stopping passive scanning failed: %s", - mgmt_errstr(status)); - return; - } - - adapter->discovery_type = 0x00; - adapter->discovery_enable = 0x00; - - if (!dev) { - DBG("Device removed while stopping passive scanning"); - trigger_passive_scanning(adapter); - return; - } - - err = device_connect_le(dev); - if (err < 0) { - error("LE auto connection failed: %s (%d)", - strerror(-err), -err); - trigger_passive_scanning(adapter); - } -} - static void update_found_devices(struct btd_adapter *adapter, const bdaddr_t *bdaddr, uint8_t bdaddr_type, int8_t rssi, @@ -4142,14 +4163,8 @@ connect_le: */ if (device_is_le(dev) && !device_is_connected(dev) && g_slist_find(adapter->connect_list, dev)) { - struct mgmt_cp_stop_discovery cp; - adapter->connect_le = dev; - - cp.type = adapter->discovery_type; - mgmt_send(adapter->mgmt, MGMT_OP_STOP_DISCOVERY, - adapter->dev_id, sizeof(cp), &cp, - stop_passive_scanning_complete, adapter, NULL); + stop_passive_scanning(adapter); } } -- 2.47.3