From 460c3614e0f60bc8e70dba5e8513104cee3aae38 Mon Sep 17 00:00:00 2001 From: Jakub Pawlowski Date: Mon, 22 Apr 2024 19:34:08 +0200 Subject: Style improvements in bta_dm_discover_services Bug: 330675788 Bug: 335732980 Flag: com.android.bluetooth.flags.separate_service_and_device_discovery Test: mma -j32 Change-Id: I4abc1a3db6f09d1e60f913a9c61beafdec208744 --- system/bta/dm/bta_dm_disc.cc | 142 ++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 91 deletions(-) diff --git a/system/bta/dm/bta_dm_disc.cc b/system/bta/dm/bta_dm_disc.cc index acdbe2534a..a86b3d5e04 100644 --- a/system/bta/dm/bta_dm_disc.cc +++ b/system/bta/dm/bta_dm_disc.cc @@ -90,8 +90,6 @@ static void bta_dm_gatt_disc_complete(uint16_t conn_id, tGATT_STATUS status); static void bta_dm_find_services(const RawAddress& bd_addr); static void bta_dm_sdp_callback(const RawAddress& bd_addr, tSDP_STATUS sdp_status); -static void bta_dm_discover_services(const RawAddress& remote_bd_addr, - tBT_TRANSPORT transport); static void bta_dm_disable_disc(void); static void bta_dm_gattc_register(void); static void btm_dm_start_gatt_discovery(const RawAddress& bd_addr); @@ -281,30 +279,6 @@ static tBTA_DM_SERVICE_DISCOVERY_STATE bta_dm_discovery_get_state() { // TODO. Currently we did nothing static void bta_dm_discovery_cancel() {} -/******************************************************************************* - * - * Function bta_dm_discover - * - * Description Discovers services on a remote device - * - * - * Returns void - * - ******************************************************************************/ -static void bta_dm_discover(tBTA_DM_API_DISCOVER& discover) { - bta_dm_gattc_register(); - - bta_dm_discovery_cb.service_search_cbacks = discover.cbacks; - bta_dm_discovery_cb.services_to_search = BTA_ALL_SERVICE_MASK; - bta_dm_discovery_cb.service_index = 0; - bta_dm_discovery_cb.services_found = 0; - - log::info( - "bta_dm_discovery: starting service discovery to {} , transport: {}", - discover.bd_addr, bt_transport_text(discover.transport)); - bta_dm_discover_services(discover.bd_addr, discover.transport); -} - /******************************************************************************* * * Function bta_dm_disable_search_and_disc @@ -861,79 +835,65 @@ static tBT_TRANSPORT bta_dm_determine_discovery_transport( return BT_TRANSPORT_BR_EDR; } -static void bta_dm_discover_services(const RawAddress& remote_bd_addr, - tBT_TRANSPORT transport) { - if (transport == BT_TRANSPORT_AUTO) { - transport = bta_dm_determine_discovery_transport(remote_bd_addr); - } - - log::verbose("BDA: {}, transport={}, state = {}", remote_bd_addr, transport, - bta_dm_discovery_get_state()); +/* Discovers services on a remote device */ +static void bta_dm_discover_services(tBTA_DM_API_DISCOVER& discover) { + bta_dm_gattc_register(); - bta_dm_discovery_cb.peer_bdaddr = remote_bd_addr; + RawAddress bd_addr = discover.bd_addr; + tBT_TRANSPORT transport = (discover.transport == BT_TRANSPORT_AUTO) + ? bta_dm_determine_discovery_transport(bd_addr) + : discover.transport; - bool sdp_disable = HID_HostSDPDisable(remote_bd_addr); - if (sdp_disable) - log::debug("peer:{} with HIDSDPDisable attribute.", remote_bd_addr); + log::info("starting service discovery to: {}, transport: {}", bd_addr, + bt_transport_text(transport)); - /* if application wants to discover service and HIDSDPDisable attribute is - false. - Classic mouses with this attribute should not start SDP here, because the - SDP has been done during bonding. SDP request here will interleave with - connections to the Control or Interrupt channels */ - if (!sdp_disable) { - BTM_LogHistory(kBtmLogTag, remote_bd_addr, "Discovery started ", - base::StringPrintf("Transport:%s", - bt_transport_text(transport).c_str())); + bta_dm_discovery_cb.service_search_cbacks = discover.cbacks; + bta_dm_discovery_cb.services_to_search = BTA_ALL_SERVICE_MASK; + bta_dm_discovery_cb.service_index = 0; + bta_dm_discovery_cb.services_found = 0; - /* initialize variables */ - bta_dm_discovery_cb.service_index = 0; - bta_dm_discovery_cb.services_found = 0; - bta_dm_discovery_cb.services_to_search = BTA_ALL_SERVICE_MASK; + bta_dm_discovery_cb.peer_bdaddr = bd_addr; - /* if seaching with EIR is not completed */ - if (bta_dm_discovery_cb.services_to_search) { - /* check whether connection already exists to the device - if connection exists, we don't have to wait for ACL - link to go down to start search on next device */ - if (transport == BT_TRANSPORT_BR_EDR) { - if (get_btm_client_interface().peer.BTM_IsAclConnectionUp( - bta_dm_discovery_cb.peer_bdaddr, BT_TRANSPORT_BR_EDR)) - bta_dm_discovery_cb.wait_disc = false; - else - bta_dm_discovery_cb.wait_disc = true; - } + /* Classic mouses with this attribute should not start SDP here, because the + SDP has been done during bonding. SDP request here will interleave with + connections to the Control or Interrupt channels */ + if (HID_HostSDPDisable(bd_addr)) { + log::info("peer:{} with HIDSDPDisable attribute.", bd_addr); - if (transport == BT_TRANSPORT_LE) { - if (bta_dm_discovery_cb.services_to_search & BTA_BLE_SERVICE_MASK) { - log::info("bta_dm_discovery: starting GATT discovery on {}", - bta_dm_discovery_cb.peer_bdaddr); - // set the raw data buffer here - memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); - /* start GATT for service discovery */ - btm_dm_start_gatt_discovery(bta_dm_discovery_cb.peer_bdaddr); - return; - } - } else { - log::info("bta_dm_discovery: starting SDP discovery on {}", - bta_dm_discovery_cb.peer_bdaddr); - bta_dm_discovery_cb.sdp_results = false; - bta_dm_find_services(bta_dm_discovery_cb.peer_bdaddr); - return; - } - } + /* service discovery is done for this device */ + bta_dm_disc_sm_execute( + BTA_DM_DISCOVERY_RESULT_EVT, + std::make_unique(tBTA_DM_SVC_RES{ + .bd_addr = bd_addr, .services = 0, .result = BTA_SUCCESS})); + return; } - /* service discovery is done for this device */ - auto msg = std::make_unique(tBTA_DM_SVC_RES{}); - auto& svc_result = std::get(*msg); - - /* initialize the data structure */ - svc_result.result = BTA_SUCCESS; - svc_result.services = bta_dm_discovery_cb.services_found; - svc_result.bd_addr = bta_dm_discovery_cb.peer_bdaddr; + BTM_LogHistory( + kBtmLogTag, bd_addr, "Discovery started ", + base::StringPrintf("Transport:%s", bt_transport_text(transport).c_str())); - bta_dm_disc_sm_execute(BTA_DM_DISCOVERY_RESULT_EVT, std::move(msg)); + if (transport == BT_TRANSPORT_LE) { + log::info("starting GATT discovery on {}", bd_addr); + // set the raw data buffer here + memset(g_disc_raw_data_buf, 0, sizeof(g_disc_raw_data_buf)); + /* start GATT for service discovery */ + btm_dm_start_gatt_discovery(bd_addr); + return; + } + // transport == BT_TRANSPORT_BR_EDR + + /* check whether connection already exists to the device + if connection exists, we don't have to wait for ACL + link to go down to start search on next device */ + if (get_btm_client_interface().peer.BTM_IsAclConnectionUp( + bd_addr, BT_TRANSPORT_BR_EDR)) + bta_dm_discovery_cb.wait_disc = false; + else + bta_dm_discovery_cb.wait_disc = true; + + log::info("starting SDP discovery on {}", bd_addr); + bta_dm_discovery_cb.sdp_results = false; + bta_dm_find_services(bd_addr); } /******************************************************************************* @@ -1270,7 +1230,7 @@ static void bta_dm_disc_sm_execute(tBTA_DM_DISC_EVT event, log::assert_that(std::holds_alternative(*msg), "bad message type: {}", msg->index()); - bta_dm_discover(std::get(*msg)); + bta_dm_discover_services(std::get(*msg)); break; case BTA_DM_SDP_RESULT_EVT: bta_dm_free_sdp_db(); -- cgit v1.2.3-59-g8ed1b