Loading system/stack/btm/btm_inq.cc +10 −91 Original line number Diff line number Diff line Loading @@ -1279,28 +1279,20 @@ tINQ_DB_ENT* btm_inq_db_new(const RawAddress& p_bda, bool is_ble) { * from the device. It updates the inquiry database. If the * inquiry database is full, the oldest entry is discarded. * * Parameters inq_res_mode - BTM_INQ_RESULT_STANDARD * BTM_INQ_RESULT_WITH_RSSI * BTM_INQ_RESULT_EXTENDED * * Returns void * ******************************************************************************/ static void btm_process_inq_results_standard(const uint8_t* p, uint8_t hci_evt_len, uint8_t inq_res_mode) { uint8_t hci_evt_len) { uint8_t num_resp, xx; RawAddress bda; tINQ_DB_ENT* p_i; tBTM_INQ_RESULTS* p_cur = NULL; bool is_new = true; bool update = false; int8_t i_rssi; tBTM_INQ_RESULTS_CB* p_inq_results_cb = btm_cb.btm_inq_vars.p_inq_results_cb; uint8_t page_scan_rep_mode = 0; uint8_t page_scan_per_mode = 0; uint8_t page_scan_mode = 0; uint8_t rssi = 0; DEV_CLASS dc; uint16_t clock_offset; const uint8_t* p_eir_data = NULL; Loading @@ -1316,19 +1308,7 @@ static void btm_process_inq_results_standard(const uint8_t* p, STREAM_TO_UINT8(num_resp, p); if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) { if (num_resp > 1) { log::error("extended results ({}) > 1", num_resp); return; } constexpr uint16_t extended_inquiry_result_size = 254; if (hci_evt_len - 1 != extended_inquiry_result_size) { log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len); return; } } else if (inq_res_mode == BTM_INQ_RESULT_STANDARD || inq_res_mode == BTM_INQ_RESULT_WITH_RSSI) { { constexpr uint16_t inquiry_result_size = 14; if (hci_evt_len < num_resp * inquiry_result_size) { log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len); Loading @@ -1338,56 +1318,18 @@ static void btm_process_inq_results_standard(const uint8_t* p, btm_cb.neighbor.classic_inquiry.results += num_resp; for (xx = 0; xx < num_resp; xx++) { update = false; /* Extract inquiry results */ STREAM_TO_BDADDR(bda, p); STREAM_TO_UINT8(page_scan_rep_mode, p); STREAM_TO_UINT8(page_scan_per_mode, p); if (inq_res_mode == BTM_INQ_RESULT_STANDARD) { STREAM_TO_UINT8(page_scan_mode, p); } STREAM_TO_DEVCLASS(dc, p); STREAM_TO_UINT16(clock_offset, p); if (inq_res_mode != BTM_INQ_RESULT_STANDARD) { STREAM_TO_UINT8(rssi, p); } p_i = btm_inq_db_find(bda); /* Check if this address has already been processed for this inquiry */ if (btm_inq_find_bdaddr(bda)) { /* log::verbose("BDA seen before {}", ADDRESS_TO_LOGGABLE_CSTR(bda)); */ /* By default suppose no update needed */ i_rssi = (int8_t)rssi; /* If this new RSSI is higher than the last one */ if ((rssi != 0) && p_i && (i_rssi > p_i->inq_info.results.rssi || p_i->inq_info.results.rssi == 0 /* BR/EDR inquiry information update */ || (p_i->inq_info.results.device_type & BT_DEVICE_TYPE_BREDR) != 0)) { p_cur = &p_i->inq_info.results; log::verbose("update RSSI new:{}, old:{}", i_rssi, p_cur->rssi); p_cur->rssi = i_rssi; update = true; } /* If we received a second Extended Inq Event for an already */ /* discovered device, this is because for the first one EIR was not received */ else if ((inq_res_mode == BTM_INQ_RESULT_EXTENDED) && (p_i)) { p_cur = &p_i->inq_info.results; update = true; } /* If no update needed continue with next response (if any) */ else continue; } /* If existing entry, use that, else get a new one (possibly reusing the * oldest) */ if (p_i == NULL) { Loading @@ -1396,19 +1338,13 @@ static void btm_process_inq_results_standard(const uint8_t* p, } /* If an entry for the device already exists, overwrite it ONLY if it is from a previous inquiry. (Ignore it if it is a duplicate response from the same inquiry. from a previous inquiry. (Ignore it if it is a duplicate response from the same inquiry. */ else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter && (p_i->inq_info.results.device_type == BT_DEVICE_TYPE_BREDR)) is_new = false; /* keep updating RSSI to have latest value */ if (inq_res_mode != BTM_INQ_RESULT_STANDARD) p_i->inq_info.results.rssi = (int8_t)rssi; else p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI; if (is_new) { Loading @@ -1427,17 +1363,7 @@ static void btm_process_inq_results_standard(const uint8_t* p, if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { /* A new response was found */ btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; switch (static_cast<tBTM_INQ_RESULT>(inq_res_mode)) { case BTM_INQ_RESULT_STANDARD: case BTM_INQ_RESULT_WITH_RSSI: case BTM_INQ_RESULT_EXTENDED: btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[inq_res_mode]++; break; case BTM_INQ_RES_IGNORE_RSSI: btm_cb.btm_inq_vars.inq_cmpl_info .resp_type[BTM_INQ_RESULT_STANDARD]++; break; } btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[BTM_INQ_RESULT_STANDARD]++; } p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR; Loading @@ -1453,14 +1379,7 @@ static void btm_process_inq_results_standard(const uint8_t* p, p_i->inq_info.appl_knows_rem_name = false; } if (is_new || update) { if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) { memset(p_cur->eir_uuid, 0, BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS / 8)); /* set bit map of UUID list from received EIR */ btm_set_eir_uuid(p, p_cur); p_eir_data = p; } else if (is_new) { p_eir_data = NULL; /* If a callback is registered, call it with the results */ Loading Loading @@ -1894,7 +1813,7 @@ void btm_process_inq_results(const uint8_t* p, uint8_t hci_evt_len, uint8_t inq_res_mode) { switch (inq_res_mode) { case BTM_INQ_RESULT_STANDARD: btm_process_inq_results_standard(p, hci_evt_len, BTM_INQ_RESULT_STANDARD); btm_process_inq_results_standard(p, hci_evt_len); break; case BTM_INQ_RESULT_WITH_RSSI: btm_process_inq_results_rssi(p, hci_evt_len, BTM_INQ_RESULT_WITH_RSSI); Loading Loading
system/stack/btm/btm_inq.cc +10 −91 Original line number Diff line number Diff line Loading @@ -1279,28 +1279,20 @@ tINQ_DB_ENT* btm_inq_db_new(const RawAddress& p_bda, bool is_ble) { * from the device. It updates the inquiry database. If the * inquiry database is full, the oldest entry is discarded. * * Parameters inq_res_mode - BTM_INQ_RESULT_STANDARD * BTM_INQ_RESULT_WITH_RSSI * BTM_INQ_RESULT_EXTENDED * * Returns void * ******************************************************************************/ static void btm_process_inq_results_standard(const uint8_t* p, uint8_t hci_evt_len, uint8_t inq_res_mode) { uint8_t hci_evt_len) { uint8_t num_resp, xx; RawAddress bda; tINQ_DB_ENT* p_i; tBTM_INQ_RESULTS* p_cur = NULL; bool is_new = true; bool update = false; int8_t i_rssi; tBTM_INQ_RESULTS_CB* p_inq_results_cb = btm_cb.btm_inq_vars.p_inq_results_cb; uint8_t page_scan_rep_mode = 0; uint8_t page_scan_per_mode = 0; uint8_t page_scan_mode = 0; uint8_t rssi = 0; DEV_CLASS dc; uint16_t clock_offset; const uint8_t* p_eir_data = NULL; Loading @@ -1316,19 +1308,7 @@ static void btm_process_inq_results_standard(const uint8_t* p, STREAM_TO_UINT8(num_resp, p); if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) { if (num_resp > 1) { log::error("extended results ({}) > 1", num_resp); return; } constexpr uint16_t extended_inquiry_result_size = 254; if (hci_evt_len - 1 != extended_inquiry_result_size) { log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len); return; } } else if (inq_res_mode == BTM_INQ_RESULT_STANDARD || inq_res_mode == BTM_INQ_RESULT_WITH_RSSI) { { constexpr uint16_t inquiry_result_size = 14; if (hci_evt_len < num_resp * inquiry_result_size) { log::error("can't fit {} results in {} bytes", num_resp, hci_evt_len); Loading @@ -1338,56 +1318,18 @@ static void btm_process_inq_results_standard(const uint8_t* p, btm_cb.neighbor.classic_inquiry.results += num_resp; for (xx = 0; xx < num_resp; xx++) { update = false; /* Extract inquiry results */ STREAM_TO_BDADDR(bda, p); STREAM_TO_UINT8(page_scan_rep_mode, p); STREAM_TO_UINT8(page_scan_per_mode, p); if (inq_res_mode == BTM_INQ_RESULT_STANDARD) { STREAM_TO_UINT8(page_scan_mode, p); } STREAM_TO_DEVCLASS(dc, p); STREAM_TO_UINT16(clock_offset, p); if (inq_res_mode != BTM_INQ_RESULT_STANDARD) { STREAM_TO_UINT8(rssi, p); } p_i = btm_inq_db_find(bda); /* Check if this address has already been processed for this inquiry */ if (btm_inq_find_bdaddr(bda)) { /* log::verbose("BDA seen before {}", ADDRESS_TO_LOGGABLE_CSTR(bda)); */ /* By default suppose no update needed */ i_rssi = (int8_t)rssi; /* If this new RSSI is higher than the last one */ if ((rssi != 0) && p_i && (i_rssi > p_i->inq_info.results.rssi || p_i->inq_info.results.rssi == 0 /* BR/EDR inquiry information update */ || (p_i->inq_info.results.device_type & BT_DEVICE_TYPE_BREDR) != 0)) { p_cur = &p_i->inq_info.results; log::verbose("update RSSI new:{}, old:{}", i_rssi, p_cur->rssi); p_cur->rssi = i_rssi; update = true; } /* If we received a second Extended Inq Event for an already */ /* discovered device, this is because for the first one EIR was not received */ else if ((inq_res_mode == BTM_INQ_RESULT_EXTENDED) && (p_i)) { p_cur = &p_i->inq_info.results; update = true; } /* If no update needed continue with next response (if any) */ else continue; } /* If existing entry, use that, else get a new one (possibly reusing the * oldest) */ if (p_i == NULL) { Loading @@ -1396,19 +1338,13 @@ static void btm_process_inq_results_standard(const uint8_t* p, } /* If an entry for the device already exists, overwrite it ONLY if it is from a previous inquiry. (Ignore it if it is a duplicate response from the same inquiry. from a previous inquiry. (Ignore it if it is a duplicate response from the same inquiry. */ else if (p_i->inq_count == btm_cb.btm_inq_vars.inq_counter && (p_i->inq_info.results.device_type == BT_DEVICE_TYPE_BREDR)) is_new = false; /* keep updating RSSI to have latest value */ if (inq_res_mode != BTM_INQ_RESULT_STANDARD) p_i->inq_info.results.rssi = (int8_t)rssi; else p_i->inq_info.results.rssi = BTM_INQ_RES_IGNORE_RSSI; if (is_new) { Loading @@ -1427,17 +1363,7 @@ static void btm_process_inq_results_standard(const uint8_t* p, if (p_i->inq_count != btm_cb.btm_inq_vars.inq_counter) { /* A new response was found */ btm_cb.btm_inq_vars.inq_cmpl_info.num_resp++; switch (static_cast<tBTM_INQ_RESULT>(inq_res_mode)) { case BTM_INQ_RESULT_STANDARD: case BTM_INQ_RESULT_WITH_RSSI: case BTM_INQ_RESULT_EXTENDED: btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[inq_res_mode]++; break; case BTM_INQ_RES_IGNORE_RSSI: btm_cb.btm_inq_vars.inq_cmpl_info .resp_type[BTM_INQ_RESULT_STANDARD]++; break; } btm_cb.btm_inq_vars.inq_cmpl_info.resp_type[BTM_INQ_RESULT_STANDARD]++; } p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR; Loading @@ -1453,14 +1379,7 @@ static void btm_process_inq_results_standard(const uint8_t* p, p_i->inq_info.appl_knows_rem_name = false; } if (is_new || update) { if (inq_res_mode == BTM_INQ_RESULT_EXTENDED) { memset(p_cur->eir_uuid, 0, BTM_EIR_SERVICE_ARRAY_SIZE * (BTM_EIR_ARRAY_BITS / 8)); /* set bit map of UUID list from received EIR */ btm_set_eir_uuid(p, p_cur); p_eir_data = p; } else if (is_new) { p_eir_data = NULL; /* If a callback is registered, call it with the results */ Loading Loading @@ -1894,7 +1813,7 @@ void btm_process_inq_results(const uint8_t* p, uint8_t hci_evt_len, uint8_t inq_res_mode) { switch (inq_res_mode) { case BTM_INQ_RESULT_STANDARD: btm_process_inq_results_standard(p, hci_evt_len, BTM_INQ_RESULT_STANDARD); btm_process_inq_results_standard(p, hci_evt_len); break; case BTM_INQ_RESULT_WITH_RSSI: btm_process_inq_results_rssi(p, hci_evt_len, BTM_INQ_RESULT_WITH_RSSI); Loading