Loading system/bta/dm/bta_dm_disc.cc +68 −87 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -281,7 +282,6 @@ static void bta_dm_search_start(tBTA_DM_API_SEARCH& search) { get_btm_client_interface().db.BTM_ClearInqDb(nullptr); /* save search params */ bta_dm_search_cb.p_device_search_cback = search.p_cback; bta_dm_search_cb.services = 0; /* device search, do not discover services */ const tBTM_STATUS btm_status = BTM_StartInquiry(bta_dm_inq_results_cb, bta_dm_inq_cmpl_cb); Loading Loading @@ -342,13 +342,10 @@ static void bta_dm_search_cancel() { * ******************************************************************************/ static void bta_dm_discover(tBTA_DM_API_DISCOVER& discover) { /* save the search condition */ bta_dm_search_cb.services = BTA_ALL_SERVICE_MASK; bta_dm_gattc_register(); bta_dm_search_cb.service_search_cbacks = discover.cbacks; bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; bta_dm_search_cb.services_to_search = BTA_ALL_SERVICE_MASK; bta_dm_search_cb.service_index = 0; bta_dm_search_cb.services_found = 0; bta_dm_search_cb.peer_name[0] = 0; Loading @@ -362,7 +359,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); } /******************************************************************************* Loading Loading @@ -459,14 +456,13 @@ 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; bta_dm_search_cmpl(); } } Loading Loading @@ -511,10 +507,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: Loading Loading @@ -662,11 +660,7 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { /* transport_le */ false); } } else { /* SDP_DB_FULL means some records with the required attributes were received */ if (((sdp_event.sdp_result == SDP_DB_FULL) && bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || (p_sdp_rec != NULL)) { if ((p_sdp_rec != NULL)) { if (service != UUID_SERVCLASS_PNP_INFORMATION) { bta_dm_search_cb.services_found |= (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( Loading @@ -680,8 +674,7 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { } } if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK && bta_dm_search_cb.services_to_search == 0) { if (bta_dm_search_cb.services_to_search == 0) { bta_dm_search_cb.service_index++; } else /* regular one service per search or PNP search */ break; Loading @@ -691,7 +684,6 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { log::verbose("services_found = {:04x}", bta_dm_search_cb.services_found); /* Collect the 128-bit services here and put them into the list */ if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { p_sdp_rec = NULL; do { /* find a service record, report it */ Loading @@ -700,14 +692,12 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { if (p_sdp_rec) { // SDP_FindServiceUUIDInRec_128bit is used only once, refactor? Uuid temp_uuid; if (get_legacy_stack_sdp_api() ->record.SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { if (get_legacy_stack_sdp_api()->record.SDP_FindServiceUUIDInRec_128bit( p_sdp_rec, &temp_uuid)) { uuid_list.push_back(temp_uuid); } } } while (p_sdp_rec); } if (bluetooth::common::init_flags:: dynamic_avrcp_version_enhancement_is_enabled() && Loading Loading @@ -925,9 +915,7 @@ static void bta_dm_disc_result(tBTA_DM_SVC_RES& disc_result) { bool is_gatt_over_ble = ((disc_result.device_type & BT_DEVICE_TYPE_BLE) != 0); /* if any BR/EDR service discovery has been done, report the event */ if (!is_gatt_over_ble && (bta_dm_search_cb.services & ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK) & ~BTA_BLE_SERVICE_MASK))) { if (!is_gatt_over_ble) { auto& r = disc_result; bta_dm_search_cb.service_search_cbacks.on_service_discovery_results( r.bd_addr, r.services, r.device_type, r.uuids, r.result, r.hci_status); Loading @@ -949,13 +937,9 @@ static void bta_dm_disc_result(tBTA_DM_SVC_RES& disc_result) { * ******************************************************************************/ static void bta_dm_search_result(tBTA_DM_SVC_RES& disc_result) { log::verbose("searching:0x{:04x}, result:0x{:04x}", bta_dm_search_cb.services, disc_result.services); log::verbose("result:0x{:04x}", disc_result.services); /* call back if application wants name discovery or found services that * application is searching */ if ((!bta_dm_search_cb.services) || ((bta_dm_search_cb.services) && (disc_result.services))) { if (disc_result.services) { if (bta_dm_search_cb.service_search_cbacks.on_service_discovery_results) { auto& r = disc_result; bta_dm_search_cb.service_search_cbacks.on_service_discovery_results( Loading Loading @@ -1142,10 +1126,8 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { bta_dm_search_cb.service_index))) { bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_DM_SDP_DB_SIZE); log::verbose("bta_dm_search_cb.services = {:04x}***********", bta_dm_search_cb.services); /* try to search all services by search based on L2CAP UUID */ if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { log::info("services_to_search={:08x}", bta_dm_search_cb.services_to_search); if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { Loading @@ -1155,22 +1137,6 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { uuid = Uuid::From16Bit(UUID_PROTOCOL_L2CAP); bta_dm_search_cb.services_to_search = 0; } } else { /* for LE only profile */ if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]); bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); } else { /* remove the service from services to be searched */ bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]); } } log::info("search UUID = {}", uuid.ToString()); get_legacy_stack_sdp_api()->service.SDP_InitDiscoveryDb( Loading Loading @@ -1235,19 +1201,16 @@ 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 */ bta_dm_search_cb.services = 0; post_disc_evt(BTA_DM_SEARCH_CMPL_EVT, nullptr); } } /******************************************************************************* * * Function bta_dm_discover_device * Function bta_dm_determine_discovery_transport * * Description Starts name and service discovery on the device * Loading Loading @@ -1280,7 +1243,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); Loading Loading @@ -1344,6 +1307,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.", Loading @@ -1354,7 +1343,7 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) { 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 (bta_dm_search_cb.services && !sdp_disable) { if (!sdp_disable) { BTM_LogHistory(kBtmLogTag, remote_bd_addr, "Discovery started ", base::StringPrintf("Transport:%s", bt_transport_text(transport).c_str())); Loading @@ -1362,7 +1351,7 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) { /* initialize variables */ bta_dm_search_cb.service_index = 0; bta_dm_search_cb.services_found = 0; bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; bta_dm_search_cb.services_to_search = BTA_ALL_SERVICE_MASK; /* if seaching with EIR is not completed */ if (bta_dm_search_cb.services_to_search) { Loading @@ -1376,14 +1365,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) { Loading @@ -1405,7 +1386,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); Loading system/bta/dm/bta_dm_disc_int.h +0 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ typedef struct { tBTA_DM_SEARCH_CBACK* p_device_search_cback; service_discovery_callbacks service_search_cbacks; tBTM_INQ_INFO* p_btm_inq_info; tBTA_SERVICE_MASK services; tBTA_SERVICE_MASK services_to_search; tBTA_SERVICE_MASK services_found; tSDP_DISCOVERY_DB* p_sdp_db; Loading Loading
system/bta/dm/bta_dm_disc.cc +68 −87 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -281,7 +282,6 @@ static void bta_dm_search_start(tBTA_DM_API_SEARCH& search) { get_btm_client_interface().db.BTM_ClearInqDb(nullptr); /* save search params */ bta_dm_search_cb.p_device_search_cback = search.p_cback; bta_dm_search_cb.services = 0; /* device search, do not discover services */ const tBTM_STATUS btm_status = BTM_StartInquiry(bta_dm_inq_results_cb, bta_dm_inq_cmpl_cb); Loading Loading @@ -342,13 +342,10 @@ static void bta_dm_search_cancel() { * ******************************************************************************/ static void bta_dm_discover(tBTA_DM_API_DISCOVER& discover) { /* save the search condition */ bta_dm_search_cb.services = BTA_ALL_SERVICE_MASK; bta_dm_gattc_register(); bta_dm_search_cb.service_search_cbacks = discover.cbacks; bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; bta_dm_search_cb.services_to_search = BTA_ALL_SERVICE_MASK; bta_dm_search_cb.service_index = 0; bta_dm_search_cb.services_found = 0; bta_dm_search_cb.peer_name[0] = 0; Loading @@ -362,7 +359,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); } /******************************************************************************* Loading Loading @@ -459,14 +456,13 @@ 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; bta_dm_search_cmpl(); } } Loading Loading @@ -511,10 +507,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: Loading Loading @@ -662,11 +660,7 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { /* transport_le */ false); } } else { /* SDP_DB_FULL means some records with the required attributes were received */ if (((sdp_event.sdp_result == SDP_DB_FULL) && bta_dm_search_cb.services != BTA_ALL_SERVICE_MASK) || (p_sdp_rec != NULL)) { if ((p_sdp_rec != NULL)) { if (service != UUID_SERVCLASS_PNP_INFORMATION) { bta_dm_search_cb.services_found |= (tBTA_SERVICE_MASK)(BTA_SERVICE_ID_TO_SERVICE_MASK( Loading @@ -680,8 +674,7 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { } } if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK && bta_dm_search_cb.services_to_search == 0) { if (bta_dm_search_cb.services_to_search == 0) { bta_dm_search_cb.service_index++; } else /* regular one service per search or PNP search */ break; Loading @@ -691,7 +684,6 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { log::verbose("services_found = {:04x}", bta_dm_search_cb.services_found); /* Collect the 128-bit services here and put them into the list */ if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { p_sdp_rec = NULL; do { /* find a service record, report it */ Loading @@ -700,14 +692,12 @@ static void bta_dm_sdp_result(tBTA_DM_SDP_RESULT& sdp_event) { if (p_sdp_rec) { // SDP_FindServiceUUIDInRec_128bit is used only once, refactor? Uuid temp_uuid; if (get_legacy_stack_sdp_api() ->record.SDP_FindServiceUUIDInRec_128bit(p_sdp_rec, &temp_uuid)) { if (get_legacy_stack_sdp_api()->record.SDP_FindServiceUUIDInRec_128bit( p_sdp_rec, &temp_uuid)) { uuid_list.push_back(temp_uuid); } } } while (p_sdp_rec); } if (bluetooth::common::init_flags:: dynamic_avrcp_version_enhancement_is_enabled() && Loading Loading @@ -925,9 +915,7 @@ static void bta_dm_disc_result(tBTA_DM_SVC_RES& disc_result) { bool is_gatt_over_ble = ((disc_result.device_type & BT_DEVICE_TYPE_BLE) != 0); /* if any BR/EDR service discovery has been done, report the event */ if (!is_gatt_over_ble && (bta_dm_search_cb.services & ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK) & ~BTA_BLE_SERVICE_MASK))) { if (!is_gatt_over_ble) { auto& r = disc_result; bta_dm_search_cb.service_search_cbacks.on_service_discovery_results( r.bd_addr, r.services, r.device_type, r.uuids, r.result, r.hci_status); Loading @@ -949,13 +937,9 @@ static void bta_dm_disc_result(tBTA_DM_SVC_RES& disc_result) { * ******************************************************************************/ static void bta_dm_search_result(tBTA_DM_SVC_RES& disc_result) { log::verbose("searching:0x{:04x}, result:0x{:04x}", bta_dm_search_cb.services, disc_result.services); log::verbose("result:0x{:04x}", disc_result.services); /* call back if application wants name discovery or found services that * application is searching */ if ((!bta_dm_search_cb.services) || ((bta_dm_search_cb.services) && (disc_result.services))) { if (disc_result.services) { if (bta_dm_search_cb.service_search_cbacks.on_service_discovery_results) { auto& r = disc_result; bta_dm_search_cb.service_search_cbacks.on_service_discovery_results( Loading Loading @@ -1142,10 +1126,8 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { bta_dm_search_cb.service_index))) { bta_dm_search_cb.p_sdp_db = (tSDP_DISCOVERY_DB*)osi_malloc(BTA_DM_SDP_DB_SIZE); log::verbose("bta_dm_search_cb.services = {:04x}***********", bta_dm_search_cb.services); /* try to search all services by search based on L2CAP UUID */ if (bta_dm_search_cb.services == BTA_ALL_SERVICE_MASK) { log::info("services_to_search={:08x}", bta_dm_search_cb.services_to_search); if (bta_dm_search_cb.services_to_search & BTA_RES_SERVICE_MASK) { Loading @@ -1155,22 +1137,6 @@ static void bta_dm_find_services(const RawAddress& bd_addr) { uuid = Uuid::From16Bit(UUID_PROTOCOL_L2CAP); bta_dm_search_cb.services_to_search = 0; } } else { /* for LE only profile */ if (bta_dm_search_cb.service_index == BTA_BLE_SERVICE_ID) { uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]); bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); } else { /* remove the service from services to be searched */ bta_dm_search_cb.services_to_search &= (tBTA_SERVICE_MASK)(~( BTA_SERVICE_ID_TO_SERVICE_MASK(bta_dm_search_cb.service_index))); uuid = Uuid::From16Bit( bta_service_id_to_uuid_lkup_tbl[bta_dm_search_cb.service_index]); } } log::info("search UUID = {}", uuid.ToString()); get_legacy_stack_sdp_api()->service.SDP_InitDiscoveryDb( Loading Loading @@ -1235,19 +1201,16 @@ 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 */ bta_dm_search_cb.services = 0; post_disc_evt(BTA_DM_SEARCH_CMPL_EVT, nullptr); } } /******************************************************************************* * * Function bta_dm_discover_device * Function bta_dm_determine_discovery_transport * * Description Starts name and service discovery on the device * Loading Loading @@ -1280,7 +1243,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); Loading Loading @@ -1344,6 +1307,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.", Loading @@ -1354,7 +1343,7 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) { 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 (bta_dm_search_cb.services && !sdp_disable) { if (!sdp_disable) { BTM_LogHistory(kBtmLogTag, remote_bd_addr, "Discovery started ", base::StringPrintf("Transport:%s", bt_transport_text(transport).c_str())); Loading @@ -1362,7 +1351,7 @@ static void bta_dm_discover_device(const RawAddress& remote_bd_addr) { /* initialize variables */ bta_dm_search_cb.service_index = 0; bta_dm_search_cb.services_found = 0; bta_dm_search_cb.services_to_search = bta_dm_search_cb.services; bta_dm_search_cb.services_to_search = BTA_ALL_SERVICE_MASK; /* if seaching with EIR is not completed */ if (bta_dm_search_cb.services_to_search) { Loading @@ -1376,14 +1365,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) { Loading @@ -1405,7 +1386,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); Loading
system/bta/dm/bta_dm_disc_int.h +0 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,6 @@ typedef struct { tBTA_DM_SEARCH_CBACK* p_device_search_cback; service_discovery_callbacks service_search_cbacks; tBTM_INQ_INFO* p_btm_inq_info; tBTA_SERVICE_MASK services; tBTA_SERVICE_MASK services_to_search; tBTA_SERVICE_MASK services_found; tSDP_DISCOVERY_DB* p_sdp_db; Loading