From c0bdd5ce10743044abf7f134da340e0076979dcd Mon Sep 17 00:00:00 2001 From: Jack He Date: Tue, 10 Apr 2018 17:44:35 -0700 Subject: [PATCH] DM: Add error logs for failed discovery attempt Bug: 72817086 Test: make, no functional change Change-Id: I0df4efa62de00956eea1b5b5d244f4821bcaf6fc (cherry picked from commit a7ec19cd0e4c90fa33accc03a3ceef037ea38abd) --- bta/dm/bta_dm_act.cc | 9 ++++-- stack/btm/btm_inq.cc | 85 ++++++++++++++++++++++++++++++---------------------- 2 files changed, 55 insertions(+), 39 deletions(-) diff --git a/bta/dm/bta_dm_act.cc b/bta/dm/bta_dm_act.cc index 2b5ad073b..9ec15ac98 100644 --- a/bta/dm/bta_dm_act.cc +++ b/bta/dm/bta_dm_act.cc @@ -952,7 +952,7 @@ void bta_dm_ci_rmt_oob_act(std::unique_ptr msg) { * ******************************************************************************/ void bta_dm_search_start(tBTA_DM_MSG* p_data) { - tBTM_INQUIRY_CMPL result; + tBTM_INQUIRY_CMPL result = {}; size_t len = sizeof(Uuid) * p_data->search.num_uuid; bta_dm_gattc_register(); @@ -963,11 +963,12 @@ void bta_dm_search_start(tBTA_DM_MSG* p_data) { if (p_bta_dm_cfg->avoid_scatter && (p_data->search.rs_res == BTA_DM_RS_NONE) && bta_dm_check_av(BTA_DM_API_SEARCH_EVT)) { + LOG(INFO) << __func__ << ": delay search to avoid scatter"; memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH)); return; } - BTM_ClearInqDb(NULL); + BTM_ClearInqDb(nullptr); /* save search params */ bta_dm_search_cb.p_search_cback = p_data->search.p_cback; bta_dm_search_cb.services = p_data->search.services; @@ -975,7 +976,7 @@ void bta_dm_search_start(tBTA_DM_MSG* p_data) { osi_free_and_reset((void**)&bta_dm_search_cb.p_srvc_uuid); if ((bta_dm_search_cb.num_uuid = p_data->search.num_uuid) != 0 && - p_data->search.p_uuid != NULL) { + p_data->search.p_uuid != nullptr) { bta_dm_search_cb.p_srvc_uuid = (Uuid*)osi_malloc(len); *bta_dm_search_cb.p_srvc_uuid = *p_data->search.p_uuid; } @@ -984,6 +985,8 @@ void bta_dm_search_start(tBTA_DM_MSG* p_data) { APPL_TRACE_EVENT("%s status=%d", __func__, result.status); if (result.status != BTM_CMD_STARTED) { + LOG(ERROR) << __func__ << ": BTM_StartInquiry returned " + << std::to_string(result.status); result.num_resp = 0; bta_dm_inq_cmpl_cb((void*)&result); } diff --git a/stack/btm/btm_inq.cc b/stack/btm/btm_inq.cc index 1c495216f..bdcce381a 100644 --- a/stack/btm/btm_inq.cc +++ b/stack/btm/btm_inq.cc @@ -731,7 +731,6 @@ tBTM_STATUS BTM_CancelInquiry(void) { tBTM_STATUS BTM_StartInquiry(tBTM_INQ_PARMS* p_inqparms, tBTM_INQ_RESULTS_CB* p_results_cb, tBTM_CMPL_CB* p_cmpl_cb) { - tBTM_STATUS status = BTM_CMD_STARTED; tBTM_INQUIRY_VAR_ST* p_inq = &btm_cb.btm_inq_vars; BTM_TRACE_API("BTM_StartInquiry: mode: %d, dur: %d, rsps: %d, flt: %d", @@ -743,27 +742,34 @@ tBTM_STATUS BTM_StartInquiry(tBTM_INQ_PARMS* p_inqparms, if (p_inq->inq_active || p_inq->inqfilt_active) { /*check if LE observe is already running*/ if (p_inq->scan_type == INQ_LE_OBSERVE && - p_inq->p_inq_ble_results_cb != NULL) { + p_inq->p_inq_ble_results_cb != nullptr) { BTM_TRACE_API("BTM_StartInquiry: LE observe in progress"); p_inq->scan_type = INQ_GENERAL; p_inq->inq_active = BTM_INQUIRY_INACTIVE; btm_cb.ble_ctr_cb.inq_var.scan_type = BTM_BLE_SCAN_MODE_NONE; btm_send_hci_scan_enable(BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE); } else { - BTM_TRACE_API("BTM_StartInquiry: return BUSY"); + LOG(ERROR) << __func__ << ": BTM_BUSY"; return (BTM_BUSY); } - } else + } else { p_inq->scan_type = INQ_GENERAL; + } /*** Make sure the device is ready ***/ - if (!BTM_IsDeviceUp()) return (BTM_WRONG_MODE); + if (!BTM_IsDeviceUp()) { + LOG(ERROR) << __func__ << ": adapter is not up"; + return BTM_WRONG_MODE; + } if ((p_inqparms->mode & BTM_BR_INQUIRY_MASK) != BTM_GENERAL_INQUIRY && (p_inqparms->mode & BTM_BR_INQUIRY_MASK) != BTM_LIMITED_INQUIRY && (p_inqparms->mode & BTM_BLE_INQUIRY_MASK) != BTM_BLE_GENERAL_INQUIRY && - (p_inqparms->mode & BTM_BLE_INQUIRY_MASK) != BTM_BLE_LIMITED_INQUIRY) + (p_inqparms->mode & BTM_BLE_INQUIRY_MASK) != BTM_BLE_LIMITED_INQUIRY) { + LOG(ERROR) << __func__ << ": illegal inquiry mode " + << std::to_string(p_inqparms->mode); return (BTM_ILLEGAL_VALUE); + } /* Save the inquiry parameters to be used upon the completion of * setting/clearing the inquiry filter */ @@ -779,19 +785,20 @@ tBTM_STATUS BTM_StartInquiry(tBTM_INQ_PARMS* p_inqparms, BTM_TRACE_DEBUG("BTM_StartInquiry: p_inq->inq_active = 0x%02x", p_inq->inq_active); + tBTM_STATUS status = BTM_CMD_STARTED; /* start LE inquiry here if requested */ if ((p_inqparms->mode & BTM_BLE_INQUIRY_MASK)) { if (!controller_get_interface()->supports_ble()) { + LOG(ERROR) << __func__ << ": trying to do LE scan on a non-LE adapter"; p_inq->inqparms.mode &= ~BTM_BLE_INQUIRY_MASK; status = BTM_ILLEGAL_VALUE; - } - /* BLE for now does not support filter condition for inquiry */ - else { + } else { + /* BLE for now does not support filter condition for inquiry */ status = btm_ble_start_inquiry( (uint8_t)(p_inqparms->mode & BTM_BLE_INQUIRY_MASK), p_inqparms->duration); if (status != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("Err Starting LE Inquiry."); + LOG(ERROR) << __func__ << ": Error Starting LE Inquiry"; p_inq->inqparms.mode &= ~BTM_BLE_INQUIRY_MASK; } } @@ -801,41 +808,47 @@ tBTM_STATUS BTM_StartInquiry(tBTM_INQ_PARMS* p_inqparms, } /* we're done with this routine if BR/EDR inquiry is not desired. */ - if ((p_inqparms->mode & BTM_BR_INQUIRY_MASK) == BTM_INQUIRY_NONE) + if ((p_inqparms->mode & BTM_BR_INQUIRY_MASK) == BTM_INQUIRY_NONE) { return status; + } -/* BR/EDR inquiry portion */ - /* If a filter is specified, then save it for later and clear the current - filter. - The setting of the filter is done upon completion of clearing of the - previous - filter. - */ - switch (p_inqparms->filter_cond_type) { - case BTM_CLR_INQUIRY_FILTER: - p_inq->state = BTM_INQ_SET_FILT_STATE; - break; - - case BTM_FILTER_COND_DEVICE_CLASS: - case BTM_FILTER_COND_BD_ADDR: - /* The filter is not being used so simply clear it; - the inquiry can start after this operation */ - p_inq->state = BTM_INQ_CLR_FILT_STATE; - p_inqparms->filter_cond_type = BTM_CLR_INQUIRY_FILTER; - /* =============>>>> adding LE filtering here ????? */ - break; - - default: - return (BTM_ILLEGAL_VALUE); + /* BR/EDR inquiry portion */ + /* If a filter is specified, then save it for later and clear the current + filter. + The setting of the filter is done upon completion of clearing of the + previous + filter. + */ + switch (p_inqparms->filter_cond_type) { + case BTM_CLR_INQUIRY_FILTER: + p_inq->state = BTM_INQ_SET_FILT_STATE; + break; + + case BTM_FILTER_COND_DEVICE_CLASS: + case BTM_FILTER_COND_BD_ADDR: + /* The filter is not being used so simply clear it; + the inquiry can start after this operation */ + p_inq->state = BTM_INQ_CLR_FILT_STATE; + p_inqparms->filter_cond_type = BTM_CLR_INQUIRY_FILTER; + /* =============>>>> adding LE filtering here ????? */ + break; + + default: + LOG(ERROR) << __func__ << ": invalid filter condition type " + << std::to_string(p_inqparms->filter_cond_type); + return (BTM_ILLEGAL_VALUE); } /* Before beginning the inquiry the current filter must be cleared, so * initiate the command */ status = btm_set_inq_event_filter(p_inqparms->filter_cond_type, &p_inqparms->filter_cond); - if (status != BTM_CMD_STARTED) p_inq->state = BTM_INQ_INACTIVE_STATE; + if (status != BTM_CMD_STARTED) { + LOG(ERROR) << __func__ << ": failed to set inquiry event filter"; + p_inq->state = BTM_INQ_INACTIVE_STATE; + } - return (status); + return (status); } /******************************************************************************* -- 2.11.0