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

Commit aa570669 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

BTA_DM_GATT_OVER_(LE|SDP)_RES_EVT -> callback

Bug: 330675788
Flag: exempt, no logic changes
Test: mma -j32
Change-Id: I74a212c9c394242cfa4467611424d3fc8192444c
parent 880649ee
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -664,14 +664,12 @@ static void bta_dm_sdp_result(tBTA_DM_MSG* p_data) {
          log::info("GATT services discovered using SDP");

          // send all result back to app
          tBTA_DM_SEARCH result;
          result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr;
          bd_name_from_char_pointer(result.disc_ble_res.bd_name,
                                    bta_dm_get_remname());
          BD_NAME bd_name;
          strlcpy((char*)bd_name, bta_dm_get_remname(), BD_NAME_LEN + 1);

          result.disc_ble_res.services = &gatt_uuids;
          bta_dm_search_cb.service_search_cbacks.legacy(
              BTA_DM_GATT_OVER_SDP_RES_EVT, &result);
          bta_dm_search_cb.service_search_cbacks.on_gatt_results(
              bta_dm_search_cb.peer_bdaddr, bd_name, gatt_uuids,
              /* transport_le */ false);
        }
      } else {
        /* SDP_DB_FULL means some records with the
@@ -862,11 +860,7 @@ static void bta_dm_search_cmpl() {

  uint16_t conn_id = bta_dm_search_cb.conn_id;

  tBTA_DM_SEARCH result;
  std::vector<Uuid> gatt_services;
  result.disc_ble_res.services = &gatt_services;
  result.disc_ble_res.bd_addr = bta_dm_search_cb.peer_bdaddr;
  bd_name_from_char_pointer(result.disc_ble_res.bd_name, bta_dm_get_remname());

  bool send_gatt_results =
      bluetooth::common::init_flags::
@@ -907,10 +901,14 @@ static void bta_dm_search_cmpl() {

  // send all result back to app
  if (send_gatt_results) {
    if (bta_dm_search_cb.service_search_cbacks.legacy) {
    if (bta_dm_search_cb.service_search_cbacks.on_gatt_results) {
      log::info("Sending GATT results to upper layer");
      bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_GATT_OVER_LE_RES_EVT,
                                                    &result);

      BD_NAME bd_name;
      strlcpy((char*)bd_name, bta_dm_get_remname(), BD_NAME_LEN + 1);
      bta_dm_search_cb.service_search_cbacks.on_gatt_results(
          bta_dm_search_cb.peer_bdaddr, bd_name, gatt_services,
          /* transport_le */ true);
    }
  }

+11 −23
Original line number Diff line number Diff line
@@ -217,13 +217,10 @@ typedef enum : uint8_t {
  BTA_DM_INQ_RES_EVT = 0,   /* Inquiry result for a peer device. */
  BTA_DM_INQ_CMPL_EVT = 1,  /* Inquiry complete. */
  BTA_DM_DISC_RES_EVT = 2,  /* Service Discovery result for a peer device. */
  BTA_DM_GATT_OVER_LE_RES_EVT =
      3,                    /* GATT services over LE transport discovered */
  BTA_DM_DISC_CMPL_EVT = 4, /* Discovery complete. */
  BTA_DM_SEARCH_CANCEL_CMPL_EVT = 5, /* Search cancelled */
  BTA_DM_GATT_OVER_SDP_RES_EVT = 6,  /* GATT services over SDP discovered */
  BTA_DM_NAME_READ_EVT = 7,          /* Name read complete. */
  BTA_DM_OBSERVE_CMPL_EVT = 8,       /* Observe complete. */
  BTA_DM_DISC_CMPL_EVT = 3, /* Discovery complete. */
  BTA_DM_SEARCH_CANCEL_CMPL_EVT = 4, /* Search cancelled */
  BTA_DM_NAME_READ_EVT = 5,          /* Name read complete. */
  BTA_DM_OBSERVE_CMPL_EVT = 6,       /* Observe complete. */
} tBTA_DM_SEARCH_EVT;

inline std::string bta_dm_search_evt_text(const tBTA_DM_SEARCH_EVT& event) {
@@ -231,10 +228,8 @@ inline std::string bta_dm_search_evt_text(const tBTA_DM_SEARCH_EVT& event) {
    CASE_RETURN_TEXT(BTA_DM_INQ_RES_EVT);
    CASE_RETURN_TEXT(BTA_DM_INQ_CMPL_EVT);
    CASE_RETURN_TEXT(BTA_DM_DISC_RES_EVT);
    CASE_RETURN_TEXT(BTA_DM_GATT_OVER_LE_RES_EVT);
    CASE_RETURN_TEXT(BTA_DM_DISC_CMPL_EVT);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_CANCEL_CMPL_EVT);
    CASE_RETURN_TEXT(BTA_DM_GATT_OVER_SDP_RES_EVT);
    CASE_RETURN_TEXT(BTA_DM_NAME_READ_EVT);
    CASE_RETURN_TEXT(BTA_DM_OBSERVE_CMPL_EVT);
    default:
@@ -287,27 +282,19 @@ typedef struct {
  tHCI_STATUS hci_status;
} tBTA_DM_DISC_RES;

/* Structure associated with tBTA_DM_DISC_BLE_RES */
typedef struct {
  RawAddress bd_addr; /* BD address peer device. */
  BD_NAME bd_name;  /* Name of peer device. */
  std::vector<bluetooth::Uuid>*
      services; /* GATT based Services UUID found on peer device. */
} tBTA_DM_DISC_BLE_RES;

/* Union of all search callback structures */
typedef union {
  tBTA_DM_INQ_RES inq_res;   /* Inquiry result for a peer device. */
  tBTA_DM_DISC_RES disc_res; /* Discovery result for a peer device. */
  tBTA_DM_DISC_BLE_RES
      disc_ble_res; /* discovery result for GATT based service */
  tBTA_DM_OBSERVE_CMPL observe_cmpl; /* Observe complete. */
} tBTA_DM_SEARCH;

/* Search callback */
typedef void(tBTA_DM_SEARCH_CBACK)(tBTA_DM_SEARCH_EVT event,
                                   tBTA_DM_SEARCH* p_data);

typedef void(tBTA_DM_GATT_DISC_CBACK)(RawAddress bd_addr, BD_NAME bd_name,
                                      std::vector<bluetooth::Uuid>& services,
                                      bool transport_le);
typedef void(tBTA_DM_DID_RES_CBACK)(RawAddress bd_addr, uint8_t vendor_id_src,
                                    uint16_t vendor_id, uint16_t product_id,
                                    uint16_t version);
@@ -318,6 +305,7 @@ typedef void(tBTA_DM_NAME_READ_CBACK)(RawAddress bd_addr,
struct service_discovery_callbacks {
  /* legacy callback I'll tear apart and get rid of */
  tBTA_DM_SEARCH_CBACK* legacy;
  tBTA_DM_GATT_DISC_CBACK* on_gatt_results;
  tBTA_DM_DID_RES_CBACK* on_did_received;
  tBTA_DM_NAME_READ_CBACK* on_name_read;
};
+3 −3
Original line number Diff line number Diff line
@@ -239,7 +239,7 @@ TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_AUTO) {
  bta_dm_disc_start_service_discovery(
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr,
       nullptr},
       nullptr, nullptr},
      kRawAddress, BT_TRANSPORT_AUTO);
}

@@ -247,7 +247,7 @@ TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_BR_EDR) {
  bta_dm_disc_start_service_discovery(
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr,
       nullptr},
       nullptr, nullptr},
      kRawAddress, BT_TRANSPORT_BR_EDR);
}

@@ -255,7 +255,7 @@ TEST_F(BtaInitializedTest,
       bta_dm_disc_start_service_discovery__BT_TRANSPORT_LE) {
  bta_dm_disc_start_service_discovery(
      {[](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {}, nullptr,
       nullptr},
       nullptr, nullptr},
      kRawAddress, BT_TRANSPORT_LE);
}

+0 −4
Original line number Diff line number Diff line
@@ -532,13 +532,9 @@ TEST_F(BtaDmTest, bta_dm_search_evt_text) {
      std::make_pair(BTA_DM_INQ_RES_EVT, "BTA_DM_INQ_RES_EVT"),
      std::make_pair(BTA_DM_INQ_CMPL_EVT, "BTA_DM_INQ_CMPL_EVT"),
      std::make_pair(BTA_DM_DISC_RES_EVT, "BTA_DM_DISC_RES_EVT"),
      std::make_pair(BTA_DM_GATT_OVER_LE_RES_EVT,
                     "BTA_DM_GATT_OVER_LE_RES_EVT"),
      std::make_pair(BTA_DM_DISC_CMPL_EVT, "BTA_DM_DISC_CMPL_EVT"),
      std::make_pair(BTA_DM_SEARCH_CANCEL_CMPL_EVT,
                     "BTA_DM_SEARCH_CANCEL_CMPL_EVT"),
      std::make_pair(BTA_DM_GATT_OVER_SDP_RES_EVT,
                     "BTA_DM_GATT_OVER_SDP_RES_EVT"),
      std::make_pair(BTA_DM_NAME_READ_EVT, "BTA_DM_NAME_READ_EVT"),
  };
  for (const auto& event : events) {
+144 −146
Original line number Diff line number Diff line
@@ -1915,18 +1915,23 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
      }
    } break;

    case BTA_DM_GATT_OVER_SDP_RES_EVT:
    case BTA_DM_GATT_OVER_LE_RES_EVT: {
    default: {
      ASSERTC(0, "unhandled search services event", event);
    } break;
  }
}

void btif_on_gatt_results(RawAddress bd_addr, BD_NAME bd_name,
                          std::vector<bluetooth::Uuid>& services,
                          bool transport_le) {
  int num_properties = 0;
  bt_property_t prop[2];
  std::vector<uint8_t> property_value;
  std::set<Uuid> uuids;
      RawAddress& bd_addr = p_data->disc_ble_res.bd_addr;
  RawAddress static_addr_copy = pairing_cb.static_bdaddr;
      bool lea_supported =
          is_le_audio_capable_during_service_discovery(bd_addr);
  bool lea_supported = is_le_audio_capable_during_service_discovery(bd_addr);

      if (event == BTA_DM_GATT_OVER_LE_RES_EVT) {
  if (transport_le) {
    log::info("New GATT over LE UUIDs for {}:",
              ADDRESS_TO_LOGGABLE_CSTR(bd_addr));
    BTM_LogHistory(kBtmLogTag, bd_addr,
@@ -1952,8 +1957,7 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
            FROM_HERE,
            base::BindOnce(
                [](RawAddress bd_addr) {
                      L2CA_LockBleConnParamsForProfileConnection(bd_addr,
                                                                 false);
                  L2CA_LockBleConnParamsForProfileConnection(bd_addr, false);
                },
                bd_addr),
            std::chrono::seconds(15));
@@ -1966,7 +1970,7 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
                   "Discovered GATT services using SDP transport");
  }

      for (Uuid uuid : *p_data->disc_ble_res.services) {
  for (Uuid uuid : services) {
    if (btif_is_interesting_le_service(uuid)) {
      if (btif_should_ignore_uuid(uuid)) {
        continue;
@@ -1983,7 +1987,7 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
    /* If services were returned as part of SDP discovery, we will
     * immediately send them with rest of SDP results in BTA_DM_DISC_RES_EVT
     */
        if (event == BTA_DM_GATT_OVER_SDP_RES_EVT) {
    if (!transport_le) {
      return;
    }

@@ -2053,38 +2057,31 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
  prop[0].len = Uuid::kNumBytes128 * uuids.size();

  /* Also write this to the NVRAM */
      bt_status_t ret =
          btif_storage_set_remote_device_property(&bd_addr, &prop[0]);
  bt_status_t ret = btif_storage_set_remote_device_property(&bd_addr, &prop[0]);
  ASSERTC(ret == BT_STATUS_SUCCESS, "storing remote services failed", ret);
  num_properties++;

  /* Remote name update */
      if (strnlen((const char*)p_data->disc_ble_res.bd_name, BD_NAME_LEN)) {
  if (strnlen((const char*)bd_name, BD_NAME_LEN)) {
    prop[1].type = BT_PROPERTY_BDNAME;
        prop[1].val = p_data->disc_ble_res.bd_name;
        prop[1].len = strnlen((char*)p_data->disc_ble_res.bd_name, BD_NAME_LEN);
    prop[1].val = bd_name;
    prop[1].len = strnlen((char*)bd_name, BD_NAME_LEN);

    ret = btif_storage_set_remote_device_property(&bd_addr, &prop[1]);
        ASSERTC(ret == BT_STATUS_SUCCESS,
                "failed to save remote device property", ret);
    ASSERTC(ret == BT_STATUS_SUCCESS, "failed to save remote device property",
            ret);
    num_properties++;
  }

  /* If services were returned as part of SDP discovery, we will immediately
   * send them with rest of SDP results in BTA_DM_DISC_RES_EVT */
      if (event == BTA_DM_GATT_OVER_SDP_RES_EVT) {
  if (!transport_le) {
    return;
  }

  /* Send the event to the BTIF */
  GetInterfaceToProfiles()->events->invoke_remote_device_properties_cb(
      BT_STATUS_SUCCESS, bd_addr, num_properties, prop);
    } break;

    default: {
      ASSERTC(0, "unhandled search services event", event);
    } break;
  }
}

void btif_on_name_read(RawAddress bd_addr, tHCI_ERROR_CODE hci_status,
@@ -3145,6 +3142,7 @@ void btif_dm_get_remote_services(RawAddress remote_addr, const int transport) {
  BTA_DmDiscover(remote_addr,
                 service_discovery_callbacks{
                     btif_dm_search_services_evt,
                     btif_on_gatt_results,
                     btif_on_did_received,
                     btif_on_name_read,
                 },
Loading