Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26cf46c7 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Move callback for GATT discovered through SDP to bta_dm_disc_result

Bug: 330675788
Bug: 335732980
Flag: com.android.bluetooth.flags.separate_service_and_device_discovery
Test: mma -j32
Change-Id: I0ed77a3ddd696cb61c8eb26d1524a7eca253ee99
parent d362b840
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -399,6 +399,8 @@ static void bta_dm_sdp_result(tSDP_STATUS sdp_result) {
  if ((sdp_result == SDP_SUCCESS) || (sdp_result == SDP_NO_RECS_MATCH) ||
      (sdp_result == SDP_DB_FULL)) {
    log::verbose("sdp_result::0x{:x}", sdp_result);
    std::vector<Uuid> gatt_uuids;

    do {
      p_sdp_rec = NULL;
      if (bta_dm_discovery_cb.service_index == (BTA_USER_SERVICE_ID + 1)) {
@@ -419,9 +421,6 @@ static void bta_dm_sdp_result(tSDP_STATUS sdp_result) {
       * service UUID */
      if (bta_dm_discovery_cb.service_index == BTA_MAX_SERVICE_ID) {
        /* all GATT based services */

        std::vector<Uuid> gatt_uuids;

        do {
          /* find a service record, report it */
          p_sdp_rec = get_legacy_stack_sdp_api()->db.SDP_FindServiceInDb(
@@ -437,11 +436,6 @@ static void bta_dm_sdp_result(tSDP_STATUS sdp_result) {

        if (!gatt_uuids.empty()) {
          log::info("GATT services discovered using SDP");

          // send all result back to app
          bta_dm_discovery_cb.service_search_cbacks.on_gatt_results(
              bta_dm_discovery_cb.peer_bdaddr, BD_NAME{}, gatt_uuids,
              /* transport_le */ false);
        }
      } else {
        if ((p_sdp_rec != NULL)) {
@@ -518,6 +512,7 @@ static void bta_dm_sdp_result(tSDP_STATUS sdp_result) {

      disc_result.result = BTA_SUCCESS;
      disc_result.uuids = std::move(uuid_list);
      disc_result.gatt_uuids = std::move(gatt_uuids);
      // Copy the raw_data to the discovery result structure
      if (bta_dm_discovery_cb.p_sdp_db != NULL &&
          bta_dm_discovery_cb.p_sdp_db->raw_used != 0 &&
@@ -602,15 +597,17 @@ static void bta_dm_read_dis_cmpl(const RawAddress& addr,
static void bta_dm_disc_result(tBTA_DM_SVC_RES& disc_result) {
  log::verbose("");

  /* disc_res.device_type is set only when GATT discovery is finished in
   * bta_dm_gatt_disc_complete */
  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) {
  if (!disc_result.is_gatt_over_ble) {
    auto& r = disc_result;
    if (!r.gatt_uuids.empty()) {
      log::info("Sending GATT services discovered using SDP");
      // send GATT result back to app, if any
      bta_dm_discovery_cb.service_search_cbacks.on_gatt_results(
          r.bd_addr, BD_NAME{}, r.gatt_uuids, /* transport_le */ false);
    }
    bta_dm_discovery_cb.service_search_cbacks.on_service_discovery_results(
        r.bd_addr, r.services, r.device_type, r.uuids, r.result, r.hci_status);
        r.bd_addr, r.services, r.uuids, r.result, r.hci_status);
  } else {
    GAP_BleReadPeerPrefConnParams(bta_dm_discovery_cb.peer_bdaddr);

@@ -928,7 +925,7 @@ static void bta_dm_gatt_disc_complete(uint16_t conn_id, tGATT_STATUS status) {
      std::make_unique<tBTA_DM_MSG>(tBTA_DM_SVC_RES{
          .bd_addr = bta_dm_discovery_cb.peer_bdaddr,
          .services = bta_dm_discovery_cb.services_found,
          .device_type = BT_DEVICE_TYPE_BLE,
          .is_gatt_over_ble = true,
          .gatt_uuids = std::move(gatt_services),
          .result = (status == GATT_SUCCESS) ? BTA_SUCCESS : BTA_FAILURE}));

+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ typedef struct {
typedef struct {
  RawAddress bd_addr;          /* BD address peer device. */
  tBTA_SERVICE_MASK services;  /* Services found on peer device. */
  tBT_DEVICE_TYPE device_type; /* device type in case it is BLE device */
  bool is_gatt_over_ble;
  std::vector<bluetooth::Uuid> uuids;
  std::vector<bluetooth::Uuid> gatt_uuids;
  tBTA_STATUS result;
+1 −1
Original line number Diff line number Diff line
@@ -920,7 +920,7 @@ static void bta_dm_disc_result(tBTA_DM_SVC_RES& disc_result) {
  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);
        r.bd_addr, r.services, r.uuids, r.result, r.hci_status);
  }

  /* Services were discovered while device search is in progress.
+0 −1
Original line number Diff line number Diff line
@@ -297,7 +297,6 @@ typedef void(tBTA_DM_NAME_READ_CBACK)(RawAddress bd_addr,
                                      tHCI_ERROR_CODE hci_status,
                                      const BD_NAME bd_name);
typedef void(tBTA_DM_DISC_CBACK)(RawAddress bd_addr, tBTA_SERVICE_MASK services,
                                 tBT_DEVICE_TYPE device_type,
                                 const std::vector<bluetooth::Uuid>& uuids,
                                 tBTA_STATUS result, tHCI_STATUS hci_status);
struct service_discovery_callbacks {
+6 −6
Original line number Diff line number Diff line
@@ -177,8 +177,8 @@ TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_AUTO) {
  bta_dm_disc_start_service_discovery(
      {nullptr, nullptr, nullptr,
       [](RawAddress, tBTA_SERVICE_MASK, tBT_DEVICE_TYPE,
          const std::vector<bluetooth::Uuid>&, tBTA_STATUS, tHCI_STATUS) {}},
       [](RawAddress, tBTA_SERVICE_MASK, const std::vector<bluetooth::Uuid>&,
          tBTA_STATUS, tHCI_STATUS) {}},
      kRawAddress, BT_TRANSPORT_AUTO);
}

@@ -186,8 +186,8 @@ TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_BR_EDR) {
  bta_dm_disc_start_service_discovery(
      {nullptr, nullptr, nullptr,
       [](RawAddress, tBTA_SERVICE_MASK, tBT_DEVICE_TYPE,
          const std::vector<bluetooth::Uuid>&, tBTA_STATUS, tHCI_STATUS) {}},
       [](RawAddress, tBTA_SERVICE_MASK, const std::vector<bluetooth::Uuid>&,
          tBTA_STATUS, tHCI_STATUS) {}},
      kRawAddress, BT_TRANSPORT_BR_EDR);
}

@@ -195,8 +195,8 @@ TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_LE) {
  bta_dm_disc_start_service_discovery(
      {nullptr, nullptr, nullptr,
       [](RawAddress, tBTA_SERVICE_MASK, tBT_DEVICE_TYPE,
          const std::vector<bluetooth::Uuid>&, tBTA_STATUS, tHCI_STATUS) {}},
       [](RawAddress, tBTA_SERVICE_MASK, const std::vector<bluetooth::Uuid>&,
          tBTA_STATUS, tHCI_STATUS) {}},
      kRawAddress, BT_TRANSPORT_LE);
}

Loading