Loading system/stack/btm/btm_ble_gap.cc +11 −11 Original line number Diff line number Diff line Loading @@ -1696,21 +1696,21 @@ tBTM_STATUS btm_ble_read_remote_name(const RawAddress& remote_bda, } /* read remote device name using GATT procedure */ if (btm_cb.btm_inq_vars.remname_active) { if (btm_cb.btm_inq_vars.rnr.remname_active) { log::warn( "Unable to start GATT RNR procedure for peer:{} busy with peer:{}", remote_bda, btm_cb.btm_inq_vars.remname_bda); remote_bda, btm_cb.btm_inq_vars.rnr.remname_bda); return BTM_BUSY; } if (!GAP_BleReadPeerDevName(remote_bda, btm_ble_read_remote_name_cmpl)) return BTM_BUSY; btm_cb.btm_inq_vars.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.remname_active = true; btm_cb.btm_inq_vars.remname_bda = remote_bda; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_BLE; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.rnr.remname_active = true; btm_cb.btm_inq_vars.rnr.remname_bda = remote_bda; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BLE; alarm_set_on_mloop(btm_cb.btm_inq_vars.remote_name_timer, alarm_set_on_mloop(btm_cb.btm_inq_vars.rnr.remote_name_timer, BTM_EXT_BLE_RMT_NAME_TIMEOUT_MS, btm_inq_remote_name_timer_timeout, NULL); Loading @@ -1733,10 +1733,10 @@ bool btm_ble_cancel_remote_name(const RawAddress& remote_bda) { status = GAP_BleCancelReadPeerDevName(remote_bda); btm_cb.btm_inq_vars.remname_active = false; btm_cb.btm_inq_vars.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; alarm_cancel(btm_cb.btm_inq_vars.remote_name_timer); btm_cb.btm_inq_vars.rnr.remname_active = false; btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer); return status; } Loading system/stack/btm/btm_inq.cc +37 −35 Original line number Diff line number Diff line Loading @@ -859,14 +859,14 @@ tBTM_STATUS BTM_CancelRemoteDeviceName(void) { bool is_le; /* Make sure there is not already one in progress */ if (!btm_cb.btm_inq_vars.remname_active) { if (!btm_cb.btm_inq_vars.rnr.remname_active) { return (BTM_WRONG_MODE); } if (com::android::bluetooth::flags::rnr_store_device_type()) { is_le = (btm_cb.btm_inq_vars.remname_dev_type == BT_DEVICE_TYPE_BLE); is_le = (btm_cb.btm_inq_vars.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE); } else { is_le = BTM_UseLeLink(btm_cb.btm_inq_vars.remname_bda); is_le = BTM_UseLeLink(btm_cb.btm_inq_vars.rnr.remname_bda); } if (is_le) { Loading @@ -875,9 +875,9 @@ tBTM_STATUS BTM_CancelRemoteDeviceName(void) { btm_inq_rmt_name_failed_cancelled(); } else { bluetooth::shim::ACL_CancelRemoteNameRequest( btm_cb.btm_inq_vars.remname_bda); btm_cb.btm_inq_vars.rnr.remname_bda); if (com::android::bluetooth::flags::rnr_reset_state_at_cancel()) { btm_process_remote_name(&btm_cb.btm_inq_vars.remname_bda, nullptr, 0, btm_process_remote_name(&btm_cb.btm_inq_vars.rnr.remname_bda, nullptr, 0, HCI_ERR_UNSPECIFIED); } } Loading Loading @@ -1049,18 +1049,18 @@ void btm_inq_db_reset(void) { /* Cancel a remote name request if active, and notify the caller (if waiting) */ if (btm_cb.btm_inq_vars.remname_active) { alarm_cancel(btm_cb.btm_inq_vars.remote_name_timer); btm_cb.btm_inq_vars.remname_active = false; btm_cb.btm_inq_vars.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; if (btm_cb.btm_inq_vars.rnr.remname_active) { alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer); btm_cb.btm_inq_vars.rnr.remname_active = false; btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; if (btm_cb.btm_inq_vars.p_remname_cmpl_cb) { if (btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb) { rem_name.status = BTM_DEV_RESET; rem_name.hci_status = HCI_SUCCESS; (*btm_cb.btm_inq_vars.p_remname_cmpl_cb)(&rem_name); btm_cb.btm_inq_vars.p_remname_cmpl_cb = NULL; (*btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb)(&rem_name); btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = NULL; } } Loading Loading @@ -1876,7 +1876,7 @@ tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda, tBTM_NAME_CMPL_CB* p_cb) { /*** Make sure the device is ready ***/ if (!BTM_IsDeviceUp()) return (BTM_WRONG_MODE); if (btm_cb.btm_inq_vars.remname_active) { if (btm_cb.btm_inq_vars.rnr.remname_active) { return (BTM_BUSY); } else { /* If the database entry exists for the device, use its clock offset */ Loading Loading @@ -1915,14 +1915,15 @@ tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda, clock_offset); } btm_cb.btm_inq_vars.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.remname_bda = remote_bda; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.remname_active = true; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.rnr.remname_bda = remote_bda; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.rnr.remname_active = true; alarm_set_on_mloop(btm_cb.btm_inq_vars.remote_name_timer, timeout_ms, alarm_set_on_mloop(btm_cb.btm_inq_vars.rnr.remote_name_timer, timeout_ms, btm_inq_remote_name_timer_timeout, NULL); btm_cb.btm_inq_vars.rnr.remname_active = true; return BTM_CMD_STARTED; } } Loading @@ -1949,25 +1950,26 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn, bool on_le_link; if (com::android::bluetooth::flags::rnr_store_device_type()) { on_le_link = (btm_cb.btm_inq_vars.remname_dev_type == BT_DEVICE_TYPE_BLE); on_le_link = (btm_cb.btm_inq_vars.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE); } else { on_le_link = BTM_UseLeLink(btm_cb.btm_inq_vars.remname_bda); on_le_link = BTM_UseLeLink(btm_cb.btm_inq_vars.rnr.remname_bda); } /* If the inquire BDA and remote DBA are the same, then stop the timer and set * the active to false */ if (btm_cb.btm_inq_vars.remname_active) { if (btm_cb.btm_inq_vars.rnr.remname_active) { if (rem_name.bd_addr == RawAddress::kEmpty || rem_name.bd_addr == btm_cb.btm_inq_vars.remname_bda) { rem_name.bd_addr == btm_cb.btm_inq_vars.rnr.remname_bda) { log::info( "RNR received expected name bd_addr:{} hci_status:{} le_link:{}", rem_name.bd_addr.ToRedactedStringForLogging(), hci_status_code_text(hci_status), on_le_link); if (on_le_link && hci_status == HCI_ERR_UNSPECIFIED) { btm_ble_cancel_remote_name(btm_cb.btm_inq_vars.remname_bda); btm_ble_cancel_remote_name(btm_cb.btm_inq_vars.rnr.remname_bda); } alarm_cancel(btm_cb.btm_inq_vars.remote_name_timer); alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer); /* Clean up and return the status if the command was not successful */ /* Note: If part of the inquiry, the name is not stored, and the */ /* inquiry complete callback is called. */ Loading @@ -1985,12 +1987,12 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn, } } /* Reset the remote BDA and call callback if possible */ btm_cb.btm_inq_vars.remname_active = false; btm_cb.btm_inq_vars.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; btm_cb.btm_inq_vars.rnr.remname_active = false; btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; tBTM_NAME_CMPL_CB* p_cb = btm_cb.btm_inq_vars.p_remname_cmpl_cb; btm_cb.btm_inq_vars.p_remname_cmpl_cb = nullptr; tBTM_NAME_CMPL_CB* p_cb = btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = nullptr; if (p_cb) (p_cb)(&rem_name); } else { log::warn("RNR received UNKNOWN name bd_addr:{} hci_status:{} le_link:{}", Loading @@ -2002,9 +2004,9 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn, "RNR received UNEXPECTED name bd_addr:{} inq_addr:{} hci_status:{} " "le_link:{} rnr_active:{}", rem_name.bd_addr.ToRedactedStringForLogging(), btm_cb.btm_inq_vars.remname_bda.ToRedactedStringForLogging(), btm_cb.btm_inq_vars.rnr.remname_bda.ToRedactedStringForLogging(), hci_status_code_text(hci_status), on_le_link, btm_cb.btm_inq_vars.remname_active); btm_cb.btm_inq_vars.rnr.remname_active); } } Loading @@ -2024,10 +2026,10 @@ void btm_inq_remote_name_timer_timeout(void* /* data */) { * ******************************************************************************/ void btm_inq_rmt_name_failed_cancelled(void) { log::error("remname_active={}", btm_cb.btm_inq_vars.remname_active); log::error("remname_active={}", btm_cb.btm_inq_vars.rnr.remname_active); if (btm_cb.btm_inq_vars.remname_active) { btm_process_remote_name(&btm_cb.btm_inq_vars.remname_bda, NULL, 0, if (btm_cb.btm_inq_vars.rnr.remname_active) { btm_process_remote_name(&btm_cb.btm_inq_vars.rnr.remname_bda, NULL, 0, HCI_ERR_UNSPECIFIED); } Loading system/stack/btm/neighbor_inquiry.h +16 −16 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ #include <cstdint> #include "internal_include/bt_target.h" #include "macros.h" #include "osi/include/alarm.h" #include "stack/btm/btm_eir.h" Loading Loading @@ -210,9 +209,6 @@ typedef struct { typedef void(tBTM_NAME_CMPL_CB)(const tBTM_REMOTE_DEV_NAME*); struct tBTM_INQUIRY_VAR_ST { tBTM_NAME_CMPL_CB* p_remname_cmpl_cb; alarm_t* remote_name_timer; alarm_t* classic_inquiry_timer; uint16_t discoverable_mode; Loading @@ -224,9 +220,16 @@ struct tBTM_INQUIRY_VAR_ST { uint16_t inq_scan_type; uint16_t page_scan_type; /* current page scan type */ RawAddress remname_bda; /* Name of bd addr for active remote name request */ bool remname_active; /* State of a remote name request by external API */ tBT_DEVICE_TYPE remname_dev_type; /* Whether it's LE or BREDR name request */ struct { tBTM_NAME_CMPL_CB* p_remname_cmpl_cb{nullptr}; alarm_t* remote_name_timer{nullptr}; RawAddress remname_bda{}; /* Name of bd addr for active remote name request */ bool remname_active{ false}; /* State of a remote name request by external API */ tBT_DEVICE_TYPE remname_dev_type{ BT_DEVICE_TYPE_UNKNOWN}; /* Whether it's LE or BREDR name request */ } rnr; tBTM_CMPL_CB* p_inq_cmpl_cb; tBTM_INQ_RESULTS_CB* p_inq_results_cb; Loading @@ -253,11 +256,12 @@ struct tBTM_INQUIRY_VAR_ST { bool registered_for_hci_events; void Init() { p_remname_cmpl_cb = nullptr; alarm_free(remote_name_timer); alarm_free(rnr.remote_name_timer); alarm_free(classic_inquiry_timer); remote_name_timer = alarm_new("btm_inq.remote_name_timer"); rnr = {}; rnr.remote_name_timer = alarm_new("rnr.remote_name_timer"); classic_inquiry_timer = alarm_new("btm_inq.classic_inquiry_timer"); discoverable_mode = BTM_NON_DISCOVERABLE; Loading @@ -270,10 +274,6 @@ struct tBTM_INQUIRY_VAR_ST { inq_scan_type = BTM_SCAN_TYPE_STANDARD; page_scan_type = HCI_DEF_SCAN_TYPE; remname_bda = {}; remname_active = false; remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; p_inq_cmpl_cb = nullptr; p_inq_results_cb = nullptr; Loading @@ -288,7 +288,7 @@ struct tBTM_INQUIRY_VAR_ST { registered_for_hci_events = false; } void Free() { alarm_free(remote_name_timer); alarm_free(rnr.remote_name_timer); alarm_free(classic_inquiry_timer); } }; Loading system/stack/test/btm/stack_btm_inq_test.cc +25 −25 Original line number Diff line number Diff line Loading @@ -99,10 +99,10 @@ class BtmInqActiveTest : public BtmInqTest { gBTM_REMOTE_DEV_NAME = {}; gBTM_REMOTE_DEV_NAME_sent = false; btm_cb.btm_inq_vars.remname_active = true; btm_cb.btm_inq_vars.remname_bda = kRawAddress; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.p_remname_cmpl_cb = btm_cb.btm_inq_vars.rnr.remname_active = true; btm_cb.btm_inq_vars.rnr.remname_bda = kRawAddress; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = [](const tBTM_REMOTE_DEV_NAME* name) { gBTM_REMOTE_DEV_NAME = *name; gBTM_REMOTE_DEV_NAME_sent = true; Loading @@ -114,10 +114,10 @@ class BtmInqActiveTest : public BtmInqTest { TEST_F(BtmInqActiveTest, btm_process_remote_name__typical) { btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_SUCCESS); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -129,10 +129,10 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__typical) { TEST_F(BtmInqActiveTest, btm_process_remote_name__no_name) { btm_process_remote_name(&kRawAddress, nullptr, 0, HCI_SUCCESS); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -144,10 +144,10 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__no_name) { TEST_F(BtmInqActiveTest, btm_process_remote_name__bad_status) { btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_ERR_PAGE_TIMEOUT); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -159,10 +159,10 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__bad_status) { TEST_F(BtmInqActiveTest, btm_process_remote_name__no_address) { btm_process_remote_name(nullptr, kBdName, 0, HCI_SUCCESS); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -173,12 +173,12 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__no_address) { } TEST_F(BtmInqActiveTest, btm_process_remote_name__different_address) { btm_cb.btm_inq_vars.remname_bda = kRawAddress2; btm_cb.btm_inq_vars.rnr.remname_bda = kRawAddress2; btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_SUCCESS); ASSERT_TRUE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_TRUE(btm_cb.btm_inq_vars.remname_active); ASSERT_NE(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_NE(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_TRUE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_TRUE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_NE(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_NE(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(0, get_func_call_count("alarm_cancel")); ASSERT_FALSE(gBTM_REMOTE_DEV_NAME_sent); Loading system/stack/test/btm/stack_btm_test.cc +1 −1 Original line number Diff line number Diff line Loading @@ -305,5 +305,5 @@ TEST_F(StackBtmWithInitFreeTest, is_disconnect_reason_valid) { } TEST_F(StackBtmWithInitFreeTest, Init) { ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); } Loading
system/stack/btm/btm_ble_gap.cc +11 −11 Original line number Diff line number Diff line Loading @@ -1696,21 +1696,21 @@ tBTM_STATUS btm_ble_read_remote_name(const RawAddress& remote_bda, } /* read remote device name using GATT procedure */ if (btm_cb.btm_inq_vars.remname_active) { if (btm_cb.btm_inq_vars.rnr.remname_active) { log::warn( "Unable to start GATT RNR procedure for peer:{} busy with peer:{}", remote_bda, btm_cb.btm_inq_vars.remname_bda); remote_bda, btm_cb.btm_inq_vars.rnr.remname_bda); return BTM_BUSY; } if (!GAP_BleReadPeerDevName(remote_bda, btm_ble_read_remote_name_cmpl)) return BTM_BUSY; btm_cb.btm_inq_vars.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.remname_active = true; btm_cb.btm_inq_vars.remname_bda = remote_bda; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_BLE; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.rnr.remname_active = true; btm_cb.btm_inq_vars.rnr.remname_bda = remote_bda; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BLE; alarm_set_on_mloop(btm_cb.btm_inq_vars.remote_name_timer, alarm_set_on_mloop(btm_cb.btm_inq_vars.rnr.remote_name_timer, BTM_EXT_BLE_RMT_NAME_TIMEOUT_MS, btm_inq_remote_name_timer_timeout, NULL); Loading @@ -1733,10 +1733,10 @@ bool btm_ble_cancel_remote_name(const RawAddress& remote_bda) { status = GAP_BleCancelReadPeerDevName(remote_bda); btm_cb.btm_inq_vars.remname_active = false; btm_cb.btm_inq_vars.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; alarm_cancel(btm_cb.btm_inq_vars.remote_name_timer); btm_cb.btm_inq_vars.rnr.remname_active = false; btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer); return status; } Loading
system/stack/btm/btm_inq.cc +37 −35 Original line number Diff line number Diff line Loading @@ -859,14 +859,14 @@ tBTM_STATUS BTM_CancelRemoteDeviceName(void) { bool is_le; /* Make sure there is not already one in progress */ if (!btm_cb.btm_inq_vars.remname_active) { if (!btm_cb.btm_inq_vars.rnr.remname_active) { return (BTM_WRONG_MODE); } if (com::android::bluetooth::flags::rnr_store_device_type()) { is_le = (btm_cb.btm_inq_vars.remname_dev_type == BT_DEVICE_TYPE_BLE); is_le = (btm_cb.btm_inq_vars.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE); } else { is_le = BTM_UseLeLink(btm_cb.btm_inq_vars.remname_bda); is_le = BTM_UseLeLink(btm_cb.btm_inq_vars.rnr.remname_bda); } if (is_le) { Loading @@ -875,9 +875,9 @@ tBTM_STATUS BTM_CancelRemoteDeviceName(void) { btm_inq_rmt_name_failed_cancelled(); } else { bluetooth::shim::ACL_CancelRemoteNameRequest( btm_cb.btm_inq_vars.remname_bda); btm_cb.btm_inq_vars.rnr.remname_bda); if (com::android::bluetooth::flags::rnr_reset_state_at_cancel()) { btm_process_remote_name(&btm_cb.btm_inq_vars.remname_bda, nullptr, 0, btm_process_remote_name(&btm_cb.btm_inq_vars.rnr.remname_bda, nullptr, 0, HCI_ERR_UNSPECIFIED); } } Loading Loading @@ -1049,18 +1049,18 @@ void btm_inq_db_reset(void) { /* Cancel a remote name request if active, and notify the caller (if waiting) */ if (btm_cb.btm_inq_vars.remname_active) { alarm_cancel(btm_cb.btm_inq_vars.remote_name_timer); btm_cb.btm_inq_vars.remname_active = false; btm_cb.btm_inq_vars.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; if (btm_cb.btm_inq_vars.rnr.remname_active) { alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer); btm_cb.btm_inq_vars.rnr.remname_active = false; btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; if (btm_cb.btm_inq_vars.p_remname_cmpl_cb) { if (btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb) { rem_name.status = BTM_DEV_RESET; rem_name.hci_status = HCI_SUCCESS; (*btm_cb.btm_inq_vars.p_remname_cmpl_cb)(&rem_name); btm_cb.btm_inq_vars.p_remname_cmpl_cb = NULL; (*btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb)(&rem_name); btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = NULL; } } Loading Loading @@ -1876,7 +1876,7 @@ tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda, tBTM_NAME_CMPL_CB* p_cb) { /*** Make sure the device is ready ***/ if (!BTM_IsDeviceUp()) return (BTM_WRONG_MODE); if (btm_cb.btm_inq_vars.remname_active) { if (btm_cb.btm_inq_vars.rnr.remname_active) { return (BTM_BUSY); } else { /* If the database entry exists for the device, use its clock offset */ Loading Loading @@ -1915,14 +1915,15 @@ tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda, clock_offset); } btm_cb.btm_inq_vars.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.remname_bda = remote_bda; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.remname_active = true; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = p_cb; btm_cb.btm_inq_vars.rnr.remname_bda = remote_bda; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.rnr.remname_active = true; alarm_set_on_mloop(btm_cb.btm_inq_vars.remote_name_timer, timeout_ms, alarm_set_on_mloop(btm_cb.btm_inq_vars.rnr.remote_name_timer, timeout_ms, btm_inq_remote_name_timer_timeout, NULL); btm_cb.btm_inq_vars.rnr.remname_active = true; return BTM_CMD_STARTED; } } Loading @@ -1949,25 +1950,26 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn, bool on_le_link; if (com::android::bluetooth::flags::rnr_store_device_type()) { on_le_link = (btm_cb.btm_inq_vars.remname_dev_type == BT_DEVICE_TYPE_BLE); on_le_link = (btm_cb.btm_inq_vars.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE); } else { on_le_link = BTM_UseLeLink(btm_cb.btm_inq_vars.remname_bda); on_le_link = BTM_UseLeLink(btm_cb.btm_inq_vars.rnr.remname_bda); } /* If the inquire BDA and remote DBA are the same, then stop the timer and set * the active to false */ if (btm_cb.btm_inq_vars.remname_active) { if (btm_cb.btm_inq_vars.rnr.remname_active) { if (rem_name.bd_addr == RawAddress::kEmpty || rem_name.bd_addr == btm_cb.btm_inq_vars.remname_bda) { rem_name.bd_addr == btm_cb.btm_inq_vars.rnr.remname_bda) { log::info( "RNR received expected name bd_addr:{} hci_status:{} le_link:{}", rem_name.bd_addr.ToRedactedStringForLogging(), hci_status_code_text(hci_status), on_le_link); if (on_le_link && hci_status == HCI_ERR_UNSPECIFIED) { btm_ble_cancel_remote_name(btm_cb.btm_inq_vars.remname_bda); btm_ble_cancel_remote_name(btm_cb.btm_inq_vars.rnr.remname_bda); } alarm_cancel(btm_cb.btm_inq_vars.remote_name_timer); alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer); /* Clean up and return the status if the command was not successful */ /* Note: If part of the inquiry, the name is not stored, and the */ /* inquiry complete callback is called. */ Loading @@ -1985,12 +1987,12 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn, } } /* Reset the remote BDA and call callback if possible */ btm_cb.btm_inq_vars.remname_active = false; btm_cb.btm_inq_vars.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; btm_cb.btm_inq_vars.rnr.remname_active = false; btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; tBTM_NAME_CMPL_CB* p_cb = btm_cb.btm_inq_vars.p_remname_cmpl_cb; btm_cb.btm_inq_vars.p_remname_cmpl_cb = nullptr; tBTM_NAME_CMPL_CB* p_cb = btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = nullptr; if (p_cb) (p_cb)(&rem_name); } else { log::warn("RNR received UNKNOWN name bd_addr:{} hci_status:{} le_link:{}", Loading @@ -2002,9 +2004,9 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn, "RNR received UNEXPECTED name bd_addr:{} inq_addr:{} hci_status:{} " "le_link:{} rnr_active:{}", rem_name.bd_addr.ToRedactedStringForLogging(), btm_cb.btm_inq_vars.remname_bda.ToRedactedStringForLogging(), btm_cb.btm_inq_vars.rnr.remname_bda.ToRedactedStringForLogging(), hci_status_code_text(hci_status), on_le_link, btm_cb.btm_inq_vars.remname_active); btm_cb.btm_inq_vars.rnr.remname_active); } } Loading @@ -2024,10 +2026,10 @@ void btm_inq_remote_name_timer_timeout(void* /* data */) { * ******************************************************************************/ void btm_inq_rmt_name_failed_cancelled(void) { log::error("remname_active={}", btm_cb.btm_inq_vars.remname_active); log::error("remname_active={}", btm_cb.btm_inq_vars.rnr.remname_active); if (btm_cb.btm_inq_vars.remname_active) { btm_process_remote_name(&btm_cb.btm_inq_vars.remname_bda, NULL, 0, if (btm_cb.btm_inq_vars.rnr.remname_active) { btm_process_remote_name(&btm_cb.btm_inq_vars.rnr.remname_bda, NULL, 0, HCI_ERR_UNSPECIFIED); } Loading
system/stack/btm/neighbor_inquiry.h +16 −16 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ #include <cstdint> #include "internal_include/bt_target.h" #include "macros.h" #include "osi/include/alarm.h" #include "stack/btm/btm_eir.h" Loading Loading @@ -210,9 +209,6 @@ typedef struct { typedef void(tBTM_NAME_CMPL_CB)(const tBTM_REMOTE_DEV_NAME*); struct tBTM_INQUIRY_VAR_ST { tBTM_NAME_CMPL_CB* p_remname_cmpl_cb; alarm_t* remote_name_timer; alarm_t* classic_inquiry_timer; uint16_t discoverable_mode; Loading @@ -224,9 +220,16 @@ struct tBTM_INQUIRY_VAR_ST { uint16_t inq_scan_type; uint16_t page_scan_type; /* current page scan type */ RawAddress remname_bda; /* Name of bd addr for active remote name request */ bool remname_active; /* State of a remote name request by external API */ tBT_DEVICE_TYPE remname_dev_type; /* Whether it's LE or BREDR name request */ struct { tBTM_NAME_CMPL_CB* p_remname_cmpl_cb{nullptr}; alarm_t* remote_name_timer{nullptr}; RawAddress remname_bda{}; /* Name of bd addr for active remote name request */ bool remname_active{ false}; /* State of a remote name request by external API */ tBT_DEVICE_TYPE remname_dev_type{ BT_DEVICE_TYPE_UNKNOWN}; /* Whether it's LE or BREDR name request */ } rnr; tBTM_CMPL_CB* p_inq_cmpl_cb; tBTM_INQ_RESULTS_CB* p_inq_results_cb; Loading @@ -253,11 +256,12 @@ struct tBTM_INQUIRY_VAR_ST { bool registered_for_hci_events; void Init() { p_remname_cmpl_cb = nullptr; alarm_free(remote_name_timer); alarm_free(rnr.remote_name_timer); alarm_free(classic_inquiry_timer); remote_name_timer = alarm_new("btm_inq.remote_name_timer"); rnr = {}; rnr.remote_name_timer = alarm_new("rnr.remote_name_timer"); classic_inquiry_timer = alarm_new("btm_inq.classic_inquiry_timer"); discoverable_mode = BTM_NON_DISCOVERABLE; Loading @@ -270,10 +274,6 @@ struct tBTM_INQUIRY_VAR_ST { inq_scan_type = BTM_SCAN_TYPE_STANDARD; page_scan_type = HCI_DEF_SCAN_TYPE; remname_bda = {}; remname_active = false; remname_dev_type = BT_DEVICE_TYPE_UNKNOWN; p_inq_cmpl_cb = nullptr; p_inq_results_cb = nullptr; Loading @@ -288,7 +288,7 @@ struct tBTM_INQUIRY_VAR_ST { registered_for_hci_events = false; } void Free() { alarm_free(remote_name_timer); alarm_free(rnr.remote_name_timer); alarm_free(classic_inquiry_timer); } }; Loading
system/stack/test/btm/stack_btm_inq_test.cc +25 −25 Original line number Diff line number Diff line Loading @@ -99,10 +99,10 @@ class BtmInqActiveTest : public BtmInqTest { gBTM_REMOTE_DEV_NAME = {}; gBTM_REMOTE_DEV_NAME_sent = false; btm_cb.btm_inq_vars.remname_active = true; btm_cb.btm_inq_vars.remname_bda = kRawAddress; btm_cb.btm_inq_vars.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.p_remname_cmpl_cb = btm_cb.btm_inq_vars.rnr.remname_active = true; btm_cb.btm_inq_vars.rnr.remname_bda = kRawAddress; btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BREDR; btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = [](const tBTM_REMOTE_DEV_NAME* name) { gBTM_REMOTE_DEV_NAME = *name; gBTM_REMOTE_DEV_NAME_sent = true; Loading @@ -114,10 +114,10 @@ class BtmInqActiveTest : public BtmInqTest { TEST_F(BtmInqActiveTest, btm_process_remote_name__typical) { btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_SUCCESS); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -129,10 +129,10 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__typical) { TEST_F(BtmInqActiveTest, btm_process_remote_name__no_name) { btm_process_remote_name(&kRawAddress, nullptr, 0, HCI_SUCCESS); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -144,10 +144,10 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__no_name) { TEST_F(BtmInqActiveTest, btm_process_remote_name__bad_status) { btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_ERR_PAGE_TIMEOUT); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -159,10 +159,10 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__bad_status) { TEST_F(BtmInqActiveTest, btm_process_remote_name__no_address) { btm_process_remote_name(nullptr, kBdName, 0, HCI_SUCCESS); ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_EQ(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(1, get_func_call_count("alarm_cancel")); ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent); Loading @@ -173,12 +173,12 @@ TEST_F(BtmInqActiveTest, btm_process_remote_name__no_address) { } TEST_F(BtmInqActiveTest, btm_process_remote_name__different_address) { btm_cb.btm_inq_vars.remname_bda = kRawAddress2; btm_cb.btm_inq_vars.rnr.remname_bda = kRawAddress2; btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_SUCCESS); ASSERT_TRUE(btm_cb.btm_inq_vars.p_remname_cmpl_cb); ASSERT_TRUE(btm_cb.btm_inq_vars.remname_active); ASSERT_NE(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty); ASSERT_NE(btm_cb.btm_inq_vars.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_TRUE(btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb); ASSERT_TRUE(btm_cb.btm_inq_vars.rnr.remname_active); ASSERT_NE(btm_cb.btm_inq_vars.rnr.remname_bda, RawAddress::kEmpty); ASSERT_NE(btm_cb.btm_inq_vars.rnr.remname_dev_type, BT_DEVICE_TYPE_UNKNOWN); ASSERT_EQ(0, get_func_call_count("alarm_cancel")); ASSERT_FALSE(gBTM_REMOTE_DEV_NAME_sent); Loading
system/stack/test/btm/stack_btm_test.cc +1 −1 Original line number Diff line number Diff line Loading @@ -305,5 +305,5 @@ TEST_F(StackBtmWithInitFreeTest, is_disconnect_reason_valid) { } TEST_F(StackBtmWithInitFreeTest, Init) { ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active); ASSERT_FALSE(btm_cb.btm_inq_vars.rnr.remname_active); }