Loading system/bta/dm/bta_dm_disc.cc +51 −91 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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); } /* Discovers services on a remote device */ static void bta_dm_discover_services(tBTA_DM_API_DISCOVER& discover) { bta_dm_gattc_register(); log::verbose("BDA: {}, transport={}, state = {}", remote_bd_addr, transport, bta_dm_discovery_get_state()); RawAddress bd_addr = discover.bd_addr; tBT_TRANSPORT transport = (discover.transport == BT_TRANSPORT_AUTO) ? bta_dm_determine_discovery_transport(bd_addr) : discover.transport; bta_dm_discovery_cb.peer_bdaddr = remote_bd_addr; log::info("starting service discovery to: {}, transport: {}", bd_addr, bt_transport_text(transport)); 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; bool sdp_disable = HID_HostSDPDisable(remote_bd_addr); if (sdp_disable) log::debug("peer:{} with HIDSDPDisable attribute.", remote_bd_addr); bta_dm_discovery_cb.peer_bdaddr = bd_addr; /* if application wants to discover service and HIDSDPDisable attribute is false. Classic mouses with this attribute should not start SDP here, because the /* 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())); /* 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; if (HID_HostSDPDisable(bd_addr)) { log::info("peer:{} with HIDSDPDisable attribute.", 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; /* 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; } BTM_LogHistory( kBtmLogTag, bd_addr, "Discovery started ", base::StringPrintf("Transport:%s", bt_transport_text(transport).c_str())); 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); 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(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); btm_dm_start_gatt_discovery(bd_addr); 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); // transport == BT_TRANSPORT_BR_EDR /* 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; /* 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; bta_dm_disc_sm_execute(BTA_DM_DISCOVERY_RESULT_EVT, std::move(msg)); log::info("starting SDP discovery on {}", bd_addr); bta_dm_discovery_cb.sdp_results = false; bta_dm_find_services(bd_addr); } /******************************************************************************* Loading Loading @@ -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(); Loading Loading
system/bta/dm/bta_dm_disc.cc +51 −91 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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); } /* Discovers services on a remote device */ static void bta_dm_discover_services(tBTA_DM_API_DISCOVER& discover) { bta_dm_gattc_register(); log::verbose("BDA: {}, transport={}, state = {}", remote_bd_addr, transport, bta_dm_discovery_get_state()); RawAddress bd_addr = discover.bd_addr; tBT_TRANSPORT transport = (discover.transport == BT_TRANSPORT_AUTO) ? bta_dm_determine_discovery_transport(bd_addr) : discover.transport; bta_dm_discovery_cb.peer_bdaddr = remote_bd_addr; log::info("starting service discovery to: {}, transport: {}", bd_addr, bt_transport_text(transport)); 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; bool sdp_disable = HID_HostSDPDisable(remote_bd_addr); if (sdp_disable) log::debug("peer:{} with HIDSDPDisable attribute.", remote_bd_addr); bta_dm_discovery_cb.peer_bdaddr = bd_addr; /* if application wants to discover service and HIDSDPDisable attribute is false. Classic mouses with this attribute should not start SDP here, because the /* 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())); /* 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; if (HID_HostSDPDisable(bd_addr)) { log::info("peer:{} with HIDSDPDisable attribute.", 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; /* 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; } BTM_LogHistory( kBtmLogTag, bd_addr, "Discovery started ", base::StringPrintf("Transport:%s", bt_transport_text(transport).c_str())); 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); 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(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); btm_dm_start_gatt_discovery(bd_addr); 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); // transport == BT_TRANSPORT_BR_EDR /* 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; /* 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; bta_dm_disc_sm_execute(BTA_DM_DISCOVERY_RESULT_EVT, std::move(msg)); log::info("starting SDP discovery on {}", bd_addr); bta_dm_discovery_cb.sdp_results = false; bta_dm_find_services(bd_addr); } /******************************************************************************* Loading Loading @@ -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(); Loading