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

Commit 2b019843 authored by Jakub Pawłowski's avatar Jakub Pawłowski Committed by Gerrit Code Review
Browse files

Merge "Move callback for GATT discovered through SDP to bta_dm_disc_result" into main

parents 5c87e0ef 26cf46c7
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