summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/bta/dm/bta_dm_disc.cc142
1 files 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);
@@ -283,30 +281,6 @@ 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
*
* Description Cancels an ongoing search or discovery for devices in case
@@ -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_MSG>(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_MSG>(tBTA_DM_SVC_RES{});
- auto& svc_result = std::get<tBTA_DM_SVC_RES>(*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<tBTA_DM_API_DISCOVER>(*msg),
"bad message type: {}", msg->index());
- bta_dm_discover(std::get<tBTA_DM_API_DISCOVER>(*msg));
+ bta_dm_discover_services(std::get<tBTA_DM_API_DISCOVER>(*msg));
break;
case BTA_DM_SDP_RESULT_EVT:
bta_dm_free_sdp_db();