Loading system/stack/btm/btm_inq.cc +19 −104 Original line number Diff line number Diff line Loading @@ -1439,16 +1439,11 @@ static void btm_process_inq_results_standard(const uint8_t* p, * 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_rssi(const uint8_t* p, uint8_t hci_evt_len, uint8_t inq_res_mode) { static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len) { uint8_t num_resp, xx; RawAddress bda; tINQ_DB_ENT* p_i; Loading Loading @@ -1476,19 +1471,7 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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 @@ -1504,15 +1487,9 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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); Loading @@ -1533,13 +1510,6 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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; Loading @@ -1553,20 +1523,15 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, } /* 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) { /* Save the info */ Loading @@ -1584,17 +1549,7 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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_WITH_RSSI]++; } p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR; Loading @@ -1611,13 +1566,6 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, } 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 p_eir_data = NULL; /* If a callback is registered, call it with the results */ Loading @@ -1639,17 +1587,11 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, * 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_extended(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; Loading Loading @@ -1677,7 +1619,7 @@ static void btm_process_inq_results_extended(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; Loading @@ -1688,13 +1630,6 @@ static void btm_process_inq_results_extended(const uint8_t* p, 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); return; } } btm_cb.neighbor.classic_inquiry.results += num_resp; Loading @@ -1705,15 +1640,9 @@ static void btm_process_inq_results_extended(const uint8_t* 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); Loading @@ -1737,7 +1666,7 @@ static void btm_process_inq_results_extended(const uint8_t* p, /* 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)) { else if (p_i) { p_cur = &p_i->inq_info.results; update = true; } Loading @@ -1764,10 +1693,7 @@ static void btm_process_inq_results_extended(const uint8_t* p, 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) { /* Save the info */ Loading @@ -1785,17 +1711,7 @@ static void btm_process_inq_results_extended(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_EXTENDED]++; } p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR; Loading @@ -1812,14 +1728,13 @@ static void btm_process_inq_results_extended(const uint8_t* p, } 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 p_eir_data = NULL; } /* If a callback is registered, call it with the results */ if (p_inq_results_cb) { Loading Loading @@ -1854,10 +1769,10 @@ void btm_process_inq_results(const uint8_t* p, uint8_t hci_evt_len, 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); btm_process_inq_results_rssi(p, hci_evt_len); break; case BTM_INQ_RESULT_EXTENDED: btm_process_inq_results_extended(p, hci_evt_len, BTM_INQ_RESULT_EXTENDED); btm_process_inq_results_extended(p, hci_evt_len); break; } } Loading Loading
system/stack/btm/btm_inq.cc +19 −104 Original line number Diff line number Diff line Loading @@ -1439,16 +1439,11 @@ static void btm_process_inq_results_standard(const uint8_t* p, * 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_rssi(const uint8_t* p, uint8_t hci_evt_len, uint8_t inq_res_mode) { static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len) { uint8_t num_resp, xx; RawAddress bda; tINQ_DB_ENT* p_i; Loading Loading @@ -1476,19 +1471,7 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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 @@ -1504,15 +1487,9 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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); Loading @@ -1533,13 +1510,6 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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; Loading @@ -1553,20 +1523,15 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, } /* 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) { /* Save the info */ Loading @@ -1584,17 +1549,7 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, 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_WITH_RSSI]++; } p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR; Loading @@ -1611,13 +1566,6 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, } 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 p_eir_data = NULL; /* If a callback is registered, call it with the results */ Loading @@ -1639,17 +1587,11 @@ static void btm_process_inq_results_rssi(const uint8_t* p, uint8_t hci_evt_len, * 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_extended(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; Loading Loading @@ -1677,7 +1619,7 @@ static void btm_process_inq_results_extended(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; Loading @@ -1688,13 +1630,6 @@ static void btm_process_inq_results_extended(const uint8_t* p, 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); return; } } btm_cb.neighbor.classic_inquiry.results += num_resp; Loading @@ -1705,15 +1640,9 @@ static void btm_process_inq_results_extended(const uint8_t* 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); Loading @@ -1737,7 +1666,7 @@ static void btm_process_inq_results_extended(const uint8_t* p, /* 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)) { else if (p_i) { p_cur = &p_i->inq_info.results; update = true; } Loading @@ -1764,10 +1693,7 @@ static void btm_process_inq_results_extended(const uint8_t* p, 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) { /* Save the info */ Loading @@ -1785,17 +1711,7 @@ static void btm_process_inq_results_extended(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_EXTENDED]++; } p_cur->inq_result_type |= BT_DEVICE_TYPE_BREDR; Loading @@ -1812,14 +1728,13 @@ static void btm_process_inq_results_extended(const uint8_t* p, } 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 p_eir_data = NULL; } /* If a callback is registered, call it with the results */ if (p_inq_results_cb) { Loading Loading @@ -1854,10 +1769,10 @@ void btm_process_inq_results(const uint8_t* p, uint8_t hci_evt_len, 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); btm_process_inq_results_rssi(p, hci_evt_len); break; case BTM_INQ_RESULT_EXTENDED: btm_process_inq_results_extended(p, hci_evt_len, BTM_INQ_RESULT_EXTENDED); btm_process_inq_results_extended(p, hci_evt_len); break; } } Loading