diff options
author | Kausik Sinnaswamy <kausik@broadcom.com> | 2012-04-13 17:32:14 +0530 |
---|---|---|
committer | Matthew Xie <mattx@google.com> | 2012-07-14 11:19:16 -0700 |
commit | a9a2e99c49b43c64a5bec3a9f9bb636a6c95c9d5 (patch) | |
tree | 7d1a3bfa95637a16a46d0afd5ef8288f1fd9e2e1 | |
parent | d9798df11d1061760f03577f93a8083492bb1582 (diff) | |
download | external_bluetooth_bluedroid-a9a2e99c49b43c64a5bec3a9f9bb636a6c95c9d5.zip external_bluetooth_bluedroid-a9a2e99c49b43c64a5bec3a9f9bb636a6c95c9d5.tar.gz external_bluetooth_bluedroid-a9a2e99c49b43c64a5bec3a9f9bb636a6c95c9d5.tar.bz2 |
Handle the scenario to cancel discovery when inquiry has completed but
remote name fetch is in progress
Change-Id: Ie9de5256f616d35a4dba32302a3c61842924d5c5
-rwxr-xr-x | btif/src/btif_dm.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c index 265b5af..62f247c 100755 --- a/btif/src/btif_dm.c +++ b/btif/src/btif_dm.c @@ -96,6 +96,9 @@ typedef struct { #define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id)) +/* This flag will be true if HCI_Inquiry is in progress */ +static BOOLEAN btif_dm_inquiry_in_progress = FALSE; + /****************************************************************************** ** Static functions ******************************************************************************/ @@ -740,6 +743,22 @@ static void btif_dm_search_devices_evt (UINT16 event, char *p_param) HAL_CBACK(bt_hal_cbacks, discovery_state_changed_cb, BT_DISCOVERY_STOPPED); } break; + case BTA_DM_SEARCH_CANCEL_CMPL_EVT: + { + /* if inquiry is not in progress and we get a cancel event, then + * it means we are done with inquiry, but remote_name fetches are in + * progress + * + * if inquiry is in progress, then we don't want to act on this cancel_cmpl_evt + * but instead wait for the cancel_cmpl_evt via the Busy Level + * + */ + if (btif_dm_inquiry_in_progress == FALSE) + { + HAL_CBACK(bt_hal_cbacks, discovery_state_changed_cb, BT_DISCOVERY_STOPPED); + } + } + break; } } @@ -976,10 +995,17 @@ static void btif_dm_upstreams_evt(UINT16 event, char* p_param) { HAL_CBACK(bt_hal_cbacks, discovery_state_changed_cb, BT_DISCOVERY_STARTED); - } else if (busy_level == BTM_BL_INQUIRY_CANCELLED) + btif_dm_inquiry_in_progress = TRUE; + } + else if (busy_level == BTM_BL_INQUIRY_CANCELLED) { HAL_CBACK(bt_hal_cbacks, discovery_state_changed_cb, BT_DISCOVERY_STOPPED); + btif_dm_inquiry_in_progress = FALSE; + } + else if (busy_level == BTM_BL_INQUIRY_COMPLETE) + { + btif_dm_inquiry_in_progress = FALSE; } } }break; @@ -1183,6 +1209,8 @@ bt_status_t btif_dm_start_discovery(void) inq_params.filter_type = BTA_DM_INQ_CLR; /* TODO: Filter device by BDA needs to be implemented here */ + /* Will be enabled to TRUE once inquiry busy level has been received */ + btif_dm_inquiry_in_progress = FALSE; /* find nearby devices */ BTA_DmSearch(&inq_params, services, bte_search_devices_evt); |