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

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

Merge "Use RepeatingCallback instead of function pointer and void* data" into main

parents c9403a4c 66ebf754
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@

#define LOG_TAG "bt_bta_gattc"

#include <base/bind.h>
#include <base/strings/string_number_conversions.h>
#include <base/strings/stringprintf.h>
#include <bluetooth/log.h>
@@ -342,9 +343,9 @@ descriptor_discovery_done:
}

/* Process the discovery result from sdp */
void bta_gattc_sdp_callback(const RawAddress& /* bd_addr */,
                            tSDP_STATUS sdp_status, const void* user_data) {
  tBTA_GATTC_CB_DATA* cb_data = (tBTA_GATTC_CB_DATA*)user_data;
void bta_gattc_sdp_callback(tBTA_GATTC_CB_DATA* cb_data,
                            const RawAddress& /* bd_addr */,
                            tSDP_STATUS sdp_status) {
  tBTA_GATTC_SERV* p_srvc_cb = bta_gattc_find_scb_by_cid(cb_data->sdp_conn_id);

  if (p_srvc_cb == nullptr) {
@@ -440,8 +441,8 @@ static tGATT_STATUS bta_gattc_sdp_service_disc(uint16_t conn_id,
  };

  if (!get_legacy_stack_sdp_api()->service.SDP_ServiceSearchAttributeRequest2(
          p_server_cb->server_bda, cb_data->p_sdp_db, &bta_gattc_sdp_callback,
          const_cast<const void*>(static_cast<void*>(cb_data)))) {
          p_server_cb->server_bda, cb_data->p_sdp_db,
          base::BindRepeating(bta_gattc_sdp_callback, cb_data))) {
    log::warn("Unable to start SDP service search attribute request peer:{}",
              p_server_cb->server_bda);
    osi_free(cb_data);
+5 −5
Original line number Diff line number Diff line
@@ -61,14 +61,14 @@ using namespace bluetooth;
 * Returns          void
 *
 ******************************************************************************/
static void bta_hf_client_sdp_cback(const RawAddress& /* bd_addr */,
                                    tSDP_STATUS status, const void* data) {
static void bta_hf_client_sdp_cback(tBTA_HF_CLIENT_CB* client_cb,
                                    const RawAddress& /* bd_addr */,
                                    tSDP_STATUS status) {
  uint16_t event;
  tBTA_HF_CLIENT_DISC_RESULT* p_buf = (tBTA_HF_CLIENT_DISC_RESULT*)osi_malloc(
      sizeof(tBTA_HF_CLIENT_DISC_RESULT));

  log::verbose("bta_hf_client_sdp_cback status:0x{:x}", status);
  tBTA_HF_CLIENT_CB* client_cb = (tBTA_HF_CLIENT_CB*)data;

  /* set event according to int/acp */
  if (client_cb->role == BTA_HF_CLIENT_ACP)
@@ -359,8 +359,8 @@ void bta_hf_client_do_disc(tBTA_HF_CLIENT_CB* client_cb) {
    /*Service discovery not initiated */
    db_inited =
        get_legacy_stack_sdp_api()->service.SDP_ServiceSearchAttributeRequest2(
            client_cb->peer_addr, client_cb->p_disc_db, bta_hf_client_sdp_cback,
            (void*)client_cb);
            client_cb->peer_addr, client_cb->p_disc_db,
            base::BindRepeating(&bta_hf_client_sdp_cback, client_cb));
  }

  if (!db_inited) {
+9 −17
Original line number Diff line number Diff line
@@ -792,9 +792,9 @@ void bta_jv_free_scn(tBTA_JV_CONN_TYPE type /* One of BTA_JV_CONN_TYPE_ */,
 * Returns      void
 *
 ******************************************************************************/
static void bta_jv_start_discovery_cback(const RawAddress& bd_addr,
                                         tSDP_RESULT result,
                                         const void* user_data) {
static void bta_jv_start_discovery_cback(uint32_t rfcomm_slot_id,
                                         const RawAddress& bd_addr,
                                         tSDP_RESULT result) {
  if (!bta_jv_cb.sdp_cb.sdp_active) {
    log::warn(
        "Received unexpected service discovery callback bd_addr:{} result:{}",
@@ -809,7 +809,6 @@ static void bta_jv_start_discovery_cback(const RawAddress& bd_addr,
  }

  if (bta_jv_cb.p_dm_cback) {
    const uint32_t rfcomm_slot_id = *static_cast<const uint32_t*>(user_data);
    tBTA_JV bta_jv = {
        .disc_comp =
            {
@@ -855,8 +854,6 @@ static void bta_jv_start_discovery_cback(const RawAddress& bd_addr,
        "result:{}",
        bd_addr, sdp_result_text(result));
  }
  // User data memory is allocated in `bta_jv_start_discovery`
  osi_free(const_cast<void*>(user_data));
  bta_jv_cb.sdp_cb = {};
}

@@ -905,16 +902,10 @@ void bta_jv_start_discovery(const RawAddress& bd_addr, uint16_t num_uuid,
      .uuid = uuid_list[0],
  };

  // NOTE: This gets freed on the callback or when discovery failed to start
  uint32_t* rfcomm_slot_id_copy = (uint32_t*)osi_malloc(sizeof(uint32_t));
  *rfcomm_slot_id_copy = rfcomm_slot_id;

  // user_data memory is freed in `bta_jv_start_discovery_cback` callback
  if (!get_legacy_stack_sdp_api()->service.SDP_ServiceSearchAttributeRequest2(
          bd_addr, p_bta_jv_cfg->p_sdp_db, bta_jv_start_discovery_cback,
          (const void*)rfcomm_slot_id_copy)) {
          bd_addr, p_bta_jv_cfg->p_sdp_db,
          base::BindRepeating(&bta_jv_start_discovery_cback, rfcomm_slot_id))) {
    bta_jv_cb.sdp_cb = {};
    osi_free(rfcomm_slot_id_copy);
    log::warn(
        "Unable to original service discovery bd_addr:{} num:uuid:{} "
        "rfcomm_slot_id:{}",
@@ -2083,9 +2074,10 @@ static void bta_jv_reset_sniff_timer(tBTA_JV_PM_CB* p_cb) {

namespace bluetooth::legacy::testing {

void bta_jv_start_discovery_cback(const RawAddress& bd_addr, tSDP_RESULT result,
                                  const void* user_data) {
  ::bta_jv_start_discovery_cback(bd_addr, result, user_data);
void bta_jv_start_discovery_cback(uint32_t rfcomm_slot_id,
                                  const RawAddress& bd_addr,
                                  tSDP_RESULT result) {
  ::bta_jv_start_discovery_cback(rfcomm_slot_id, bd_addr, result);
}

}  // namespace bluetooth::legacy::testing
+8 −13
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
 *  This file contains action functions for SDP search.
 ******************************************************************************/

#include <base/bind.h>
#include <bluetooth/log.h>
#include <frameworks/proto_logging/stats/enums/bluetooth/enums.pb.h>
#include <hardware/bt_sdp.h>
@@ -550,8 +551,8 @@ static void bta_create_raw_sdp_record(bluetooth_sdp_record* record,
}

/** Callback from btm after search is completed */
static void bta_sdp_search_cback(const RawAddress& /* bd_addr */,
                                 tSDP_RESULT result, const void* user_data) {
static void bta_sdp_search_cback(Uuid uuid, const RawAddress& /* bd_addr */,
                                 tSDP_RESULT result) {
  tBTA_SDP_STATUS status = BTA_SDP_FAILURE;
  int count = 0;
  log::verbose("res: 0x{:x}", result);
@@ -560,8 +561,6 @@ static void bta_sdp_search_cback(const RawAddress& /* bd_addr */,

  if (bta_sdp_cb.p_dm_cback == NULL) return;

  Uuid& uuid = *(reinterpret_cast<Uuid*>(const_cast<void*>(user_data)));

  tBTA_SDP_SEARCH_COMP evt_data;
  memset(&evt_data, 0, sizeof(evt_data));
  evt_data.remote_addr = bta_sdp_cb.remote_addr;
@@ -636,8 +635,6 @@ static void bta_sdp_search_cback(const RawAddress& /* bd_addr */,
  bta_sdp_cb.p_dm_cback(BTA_SDP_SEARCH_COMP_EVT, &bta_sdp, (void*)&uuid);
  bluetooth::shim::CountCounterMetrics(
      android::bluetooth::CodePathCounterKeyEnum::SDP_SUCCESS, 1);
  osi_free(const_cast<void*>(
      user_data));  // We no longer need the user data to track the search
}

/*******************************************************************************
@@ -699,11 +696,9 @@ void bta_sdp_search(const RawAddress bd_addr, const bluetooth::Uuid uuid) {
    log::warn("Unable to initialize SDP service search db peer:{}", bd_addr);
  }

  Uuid* bta_sdp_search_uuid = (Uuid*)osi_malloc(sizeof(Uuid));
  *bta_sdp_search_uuid = uuid;
  if (!get_legacy_stack_sdp_api()->service.SDP_ServiceSearchAttributeRequest2(
          bd_addr, p_bta_sdp_cfg->p_sdp_db, bta_sdp_search_cback,
          (void*)bta_sdp_search_uuid)) {
          bd_addr, p_bta_sdp_cfg->p_sdp_db,
          base::BindRepeating(bta_sdp_search_cback, uuid))) {
    log::warn("Unable to start SDP service search attribute request peer:{}",
              bd_addr);
    bta_sdp_cb.sdp_active = false;
@@ -763,9 +758,9 @@ void bta_create_dip_sdp_record(bluetooth_sdp_record* record,
  ::bta_create_dip_sdp_record(record, p_rec);
}

void bta_sdp_search_cback(const RawAddress& bd_addr, tSDP_RESULT result,
                          const void* user_data) {
  ::bta_sdp_search_cback(bd_addr, result, user_data);
void bta_sdp_search_cback(Uuid uuid, const RawAddress& bd_addr,
                          tSDP_RESULT result) {
  ::bta_sdp_search_cback(uuid, bd_addr, result);
}

}  // namespace testing
+4 −7
Original line number Diff line number Diff line
@@ -107,8 +107,8 @@ namespace testing {

void bta_create_dip_sdp_record(bluetooth_sdp_record* record,
                               tSDP_DISC_REC* p_rec);
void bta_sdp_search_cback(const RawAddress& bd_addr, tSDP_RESULT result,
                          const void* user_data);
void bta_sdp_search_cback(Uuid uuid, const RawAddress& bd_addr,
                          tSDP_RESULT result);

}  // namespace testing
}  // namespace bluetooth
@@ -208,9 +208,6 @@ TEST_F(BtaDipTest, test_invalid_size_checks) {


TEST_F(BtaDipTest, test_bta_sdp_search_cback) {
  Uuid* userdata = (Uuid*)malloc(sizeof(Uuid));

  memcpy(userdata, &UUID_DIP, sizeof(UUID_DIP));
  bluetooth::testing::bta_sdp_search_cback(RawAddress::kEmpty, SDP_SUCCESS,
                                           userdata);
  bluetooth::testing::bta_sdp_search_cback(UUID_DIP, RawAddress::kEmpty,
                                           SDP_SUCCESS);
}
Loading