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

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

Merge "BTA: turn service discovery events into callbacks" into main

parents a20f46b5 cb342d7d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -111,9 +111,10 @@ void BTA_DmSearchCancel(void) { bta_dm_disc_stop_device_discovery(); }
 * Returns          void
 *
 ******************************************************************************/
void BTA_DmDiscover(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
void BTA_DmDiscover(const RawAddress& bd_addr,
                    service_discovery_callbacks cbacks,
                    tBT_TRANSPORT transport) {
  bta_dm_disc_start_service_discovery(p_cback, bd_addr, transport);
  bta_dm_disc_start_service_discovery(cbacks, bd_addr, transport);
}

/*******************************************************************************
+20 −19
Original line number Diff line number Diff line
@@ -341,7 +341,7 @@ static void bta_dm_discover(tBTA_DM_MSG* p_data) {

  bta_dm_gattc_register();

  bta_dm_search_cb.p_service_search_cback = p_data->discover.p_cback;
  bta_dm_search_cb.service_search_cbacks = p_data->discover.cbacks;
  bta_dm_search_cb.services_to_search = bta_dm_search_cb.services;
  bta_dm_search_cb.service_index = 0;
  bta_dm_search_cb.services_found = 0;
@@ -485,7 +485,7 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {

  // Callback with this property
  if (bta_dm_search_cb.p_device_search_cback != nullptr ||
      bta_dm_search_cb.p_service_search_cback != nullptr) {
      bta_dm_search_cb.service_search_cbacks.legacy != nullptr) {
    tBTA_DM_SEARCH search_data = {
        .disc_res =  // tBTA_DM_DISC_RES
        {
@@ -508,8 +508,8 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {
    if (bta_dm_search_cb.p_device_search_cback != nullptr) {
      bta_dm_search_cb.p_device_search_cback(BTA_DM_NAME_READ_EVT,
                                             &search_data);
    } else if (bta_dm_search_cb.p_service_search_cback != nullptr) {
      bta_dm_search_cb.p_service_search_cback(BTA_DM_NAME_READ_EVT,
    } else if (bta_dm_search_cb.service_search_cbacks.legacy != nullptr) {
      bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_NAME_READ_EVT,
                                                    &search_data);
    }
  } else {
@@ -668,8 +668,8 @@ static void bta_dm_sdp_result(tBTA_DM_MSG* p_data) {
                                    bta_dm_get_remname());

          result.disc_ble_res.services = &gatt_uuids;
          bta_dm_search_cb.p_service_search_cback(BTA_DM_GATT_OVER_SDP_RES_EVT,
                                                  &result);
          bta_dm_search_cb.service_search_cbacks.legacy(
              BTA_DM_GATT_OVER_SDP_RES_EVT, &result);
        }
      } else {
        /* SDP_DB_FULL means some records with the
@@ -735,7 +735,8 @@ static void bta_dm_sdp_result(tBTA_DM_MSG* p_data) {
      result.did_res.vendor_id = di_record.rec.vendor;
      result.did_res.product_id = di_record.rec.product;
      result.did_res.version = di_record.rec.version;
      bta_dm_search_cb.p_service_search_cback(BTA_DM_DID_RES_EVT, &result);
      bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_DID_RES_EVT,
                                                    &result);
    }
#endif

@@ -847,7 +848,7 @@ static void bta_dm_read_dis_cmpl(const RawAddress& addr,
    result.did_res.vendor_id = p_dis_value->pnp_id.vendor_id;
    result.did_res.product_id = p_dis_value->pnp_id.product_id;
    result.did_res.version = p_dis_value->pnp_id.product_version;
    bta_dm_search_cb.p_service_search_cback(BTA_DM_DID_RES_EVT, &result);
    bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_DID_RES_EVT, &result);
  }

  bta_dm_execute_queued_request();
@@ -913,9 +914,9 @@ static void bta_dm_search_cmpl() {

  // send all result back to app
  if (send_gatt_results) {
    if (bta_dm_search_cb.p_service_search_cback) {
    if (bta_dm_search_cb.service_search_cbacks.legacy) {
      log::info("Sending GATT results to upper layer");
      bta_dm_search_cb.p_service_search_cback(BTA_DM_GATT_OVER_LE_RES_EVT,
      bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_GATT_OVER_LE_RES_EVT,
                                                    &result);
    }
  }
@@ -958,7 +959,7 @@ static void bta_dm_disc_result(tBTA_DM_MSG* p_data) {
  if (!is_gatt_over_ble && (bta_dm_search_cb.services &
                            ((BTA_ALL_SERVICE_MASK | BTA_USER_SERVICE_MASK) &
                             ~BTA_BLE_SERVICE_MASK)))
    bta_dm_search_cb.p_service_search_cback(BTA_DM_DISC_RES_EVT,
    bta_dm_search_cb.service_search_cbacks.legacy(BTA_DM_DISC_RES_EVT,
                                                  &p_data->disc_result.result);

  get_gatt_interface().BTA_GATTC_CancelOpen(0, bta_dm_search_cb.peer_bdaddr,
@@ -985,9 +986,9 @@ static void bta_dm_search_result(tBTA_DM_MSG* p_data) {
  if ((!bta_dm_search_cb.services) ||
      ((bta_dm_search_cb.services) &&
       (p_data->disc_result.result.disc_res.services))) {
    if (bta_dm_search_cb.p_service_search_cback) {
      bta_dm_search_cb.p_service_search_cback(BTA_DM_DISC_RES_EVT,
                                              &p_data->disc_result.result);
    if (bta_dm_search_cb.service_search_cbacks.legacy) {
      bta_dm_search_cb.service_search_cbacks.legacy(
          BTA_DM_DISC_RES_EVT, &p_data->disc_result.result);
    } else {
      log::warn("Received search result without valid callback");
    }
@@ -2400,7 +2401,7 @@ void bta_dm_disc_stop_device_discovery() {
  bta_sys_sendmsg(p_msg);
}

void bta_dm_disc_start_service_discovery(tBTA_DM_SEARCH_CBACK* p_cback,
void bta_dm_disc_start_service_discovery(service_discovery_callbacks cbacks,
                                         const RawAddress& bd_addr,
                                         tBT_TRANSPORT transport) {
  tBTA_DM_API_DISCOVER* p_msg =
@@ -2409,7 +2410,7 @@ void bta_dm_disc_start_service_discovery(tBTA_DM_SEARCH_CBACK* p_cback,
  p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT;
  p_msg->bd_addr = bd_addr;
  p_msg->transport = transport;
  p_msg->p_cback = p_cback;
  p_msg->cbacks = cbacks;

  bta_sys_sendmsg(p_msg);
}
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ void bta_dm_disc_start_device_discovery(tBTA_DM_SEARCH_CBACK*);
void bta_dm_disc_stop_device_discovery();

// Bta service discovery start and stop entry points
void bta_dm_disc_start_service_discovery(tBTA_DM_SEARCH_CBACK*,
void bta_dm_disc_start_service_discovery(service_discovery_callbacks cbacks,
                                         const RawAddress& bd_addr,
                                         tBT_TRANSPORT transport);
void bta_dm_disc_stop_service_discovery(const RawAddress& bd_addr,
+2 −2
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ typedef struct {
typedef struct {
  BT_HDR_RIGID hdr;
  RawAddress bd_addr;
  tBTA_DM_SEARCH_CBACK* p_cback;
  service_discovery_callbacks cbacks;
  tBT_TRANSPORT transport;
} tBTA_DM_API_DISCOVER;

@@ -155,7 +155,7 @@ inline std::string bta_dm_state_text(const tBTA_DM_STATE& state) {
/* DM search control block */
typedef struct {
  tBTA_DM_SEARCH_CBACK* p_device_search_cback;
  tBTA_DM_SEARCH_CBACK* p_service_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;
+6 −2
Original line number Diff line number Diff line
@@ -319,6 +319,10 @@ typedef union {
/* Search callback */
typedef void(tBTA_DM_SEARCH_CBACK)(tBTA_DM_SEARCH_EVT event,
                                   tBTA_DM_SEARCH* p_data);
struct service_discovery_callbacks {
  /* legacy callback I'll tear apart and get rid of */
  tBTA_DM_SEARCH_CBACK* legacy;
};

/* Execute call back */
typedef void(tBTA_DM_EXEC_CBACK)(void* p_param);
@@ -580,8 +584,8 @@ void BTA_DmSearchCancel(void);
 * Returns          void
 *
 ******************************************************************************/
void BTA_DmDiscover(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
                    tBT_TRANSPORT transport);
void BTA_DmDiscover(const RawAddress& bd_addr,
                    service_discovery_callbacks cback, tBT_TRANSPORT transport);

/*******************************************************************************
 *
Loading