summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/bta/dm/bta_dm_disc.cc57
1 files changed, 39 insertions, 18 deletions
diff --git a/system/bta/dm/bta_dm_disc.cc b/system/bta/dm/bta_dm_disc.cc
index 9521e688dc..79f77d2645 100644
--- a/system/bta/dm/bta_dm_disc.cc
+++ b/system/bta/dm/bta_dm_disc.cc
@@ -100,7 +100,8 @@ static void bta_dm_sdp_callback(const RawAddress& bd_addr,
static void bta_dm_search_timer_cback(void* data);
static bool bta_dm_read_remote_device_name(const RawAddress& bd_addr,
tBT_TRANSPORT transport);
-static void bta_dm_discover_device(const RawAddress& remote_bd_addr);
+static void bta_dm_discover_name(const RawAddress& remote_bd_addr);
+static void bta_dm_discover_services(const RawAddress& remote_bd_addr);
static void bta_dm_disable_search_and_disc(void);
@@ -362,7 +363,7 @@ static void bta_dm_discover(tBTA_DM_API_DISCOVER& discover) {
"bta_dm_discovery: starting service discovery to {} , transport: {}",
ADDRESS_TO_LOGGABLE_CSTR(discover.bd_addr),
bt_transport_text(discover.transport));
- bta_dm_discover_device(discover.bd_addr);
+ bta_dm_discover_services(discover.bd_addr);
}
/*******************************************************************************
@@ -459,11 +460,11 @@ static void bta_dm_inq_cmpl() {
bta_dm_search_cb.p_btm_inq_info =
get_btm_client_interface().db.BTM_InqDbFirst();
if (bta_dm_search_cb.p_btm_inq_info != NULL) {
- /* start name and service discovery from the first device on inquiry result
+ /* start name discovery from the first device on inquiry result
*/
bta_dm_search_cb.name_discover_done = false;
bta_dm_search_cb.peer_name[0] = 0;
- bta_dm_discover_device(
+ bta_dm_discover_name(
bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr);
} else {
bta_dm_search_cb.services = 0;
@@ -511,10 +512,12 @@ static void bta_dm_remote_name_cmpl(
switch (bta_dm_search_get_state()) {
case BTA_DM_SEARCH_ACTIVE:
- bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr);
+ bta_dm_discover_name(bta_dm_search_cb.peer_bdaddr);
break;
case BTA_DM_DISCOVER_ACTIVE:
- bta_dm_discover_device(remote_name_msg.bd_addr);
+ /* TODO: Get rid of this case when Name and Service discovery state
+ * machines are separated */
+ bta_dm_discover_name(remote_name_msg.bd_addr);
break;
case BTA_DM_SEARCH_IDLE:
case BTA_DM_SEARCH_CANCELLING:
@@ -1235,7 +1238,7 @@ static void bta_dm_discover_next_device(void) {
if (bta_dm_search_cb.p_btm_inq_info != NULL) {
bta_dm_search_cb.name_discover_done = false;
bta_dm_search_cb.peer_name[0] = 0;
- bta_dm_discover_device(
+ bta_dm_discover_name(
bta_dm_search_cb.p_btm_inq_info->results.remote_bd_addr);
} else {
/* no devices, search complete */
@@ -1247,7 +1250,7 @@ static void bta_dm_discover_next_device(void) {
/*******************************************************************************
*
- * Function bta_dm_discover_device
+ * Function bta_dm_determine_discovery_transport
*
* Description Starts name and service discovery on the device
*
@@ -1280,7 +1283,7 @@ static tBT_TRANSPORT bta_dm_determine_discovery_transport(
return transport;
}
-static void bta_dm_discover_device(const RawAddress& remote_bd_addr) {
+static void bta_dm_discover_name(const RawAddress& remote_bd_addr) {
const tBT_TRANSPORT transport =
bta_dm_determine_discovery_transport(remote_bd_addr);
@@ -1344,6 +1347,32 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) {
/* Reset transport state for next discovery */
bta_dm_search_cb.transport = BT_TRANSPORT_AUTO;
+ /* name 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_search_cb.services_found;
+ svc_result.bd_addr = bta_dm_search_cb.peer_bdaddr;
+
+ /* TODO: name and service discovery should use different event */
+ bta_dm_search_sm_execute(BTA_DM_DISCOVERY_RESULT_EVT, std::move(msg));
+}
+
+static void bta_dm_discover_services(const RawAddress& remote_bd_addr) {
+ const tBT_TRANSPORT transport =
+ bta_dm_determine_discovery_transport(remote_bd_addr);
+
+ log::verbose("BDA: {}, transport={}, state = {}",
+ ADDRESS_TO_LOGGABLE_STR(remote_bd_addr), transport,
+ bta_dm_search_get_state());
+
+ bta_dm_search_cb.peer_bdaddr = remote_bd_addr;
+
+ /* Reset transport state for next discovery */
+ bta_dm_search_cb.transport = BT_TRANSPORT_AUTO;
+
bool sdp_disable = HID_HostSDPDisable(remote_bd_addr);
if (sdp_disable)
log::debug("peer:{} with HIDSDPDisable attribute.",
@@ -1376,14 +1405,6 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) {
else
bta_dm_search_cb.wait_disc = true;
}
- if (bta_dm_search_cb.p_btm_inq_info) {
- log::verbose(
- "p_btm_inq_info 0x{} results.device_type 0x{:x} services_to_search "
- "0x{:x}",
- fmt::ptr(bta_dm_search_cb.p_btm_inq_info),
- bta_dm_search_cb.p_btm_inq_info->results.device_type,
- bta_dm_search_cb.services_to_search);
- }
if (transport == BT_TRANSPORT_LE) {
if (bta_dm_search_cb.services_to_search & BTA_BLE_SERVICE_MASK) {
@@ -1405,7 +1426,7 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) {
}
}
- /* name discovery and service discovery are done for this device */
+ /* 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);