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

Commit 765b2c7f authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Split p_search_cback into device and service search callbacks

Each occurence of p_search_cback will be split in separate patch, to
ease reviewers. Therefore, this patch alone does not compile.

Wether device or service search is interested in given event is
determined by checking the btif_dm_search_services_evt and
btif_dm_search_devices_evt.

Flag: exempt trivial refactor
Bug: 330675788
Test: mma -j32
Change-Id: I7e73dce683e5cedaf8abb6963ee139700d3f377d
parent 95a357af
Loading
Loading
Loading
Loading
+34 −20
Original line number Diff line number Diff line
@@ -274,7 +274,7 @@ static void bta_dm_search_start(tBTA_DM_MSG* p_data) {

  get_btm_client_interface().db.BTM_ClearInqDb(nullptr);
  /* save search params */
  bta_dm_search_cb.p_search_cback = p_data->search.p_cback;
  bta_dm_search_cb.p_device_search_cback = p_data->search.p_cback;
  bta_dm_search_cb.services = p_data->search.services;

  const tBTM_STATUS btm_status =
@@ -341,7 +341,7 @@ static void bta_dm_discover(tBTA_DM_MSG* p_data) {

  bta_dm_gattc_register();

  bta_dm_search_cb.p_search_cback = p_data->discover.p_cback;
  bta_dm_search_cb.p_service_search_cback = p_data->discover.p_cback;
  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;
@@ -484,7 +484,8 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {
  }

  // Callback with this property
  if (bta_dm_search_cb.p_search_cback != nullptr) {
  if (bta_dm_search_cb.p_device_search_cback != nullptr ||
      bta_dm_search_cb.p_service_search_cback != nullptr) {
    tBTA_DM_SEARCH search_data = {
        .disc_res =  // tBTA_DM_DISC_RES
        {
@@ -502,7 +503,15 @@ static void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {
    if (remote_name_msg.hci_status == HCI_SUCCESS) {
      bd_name_copy(search_data.disc_res.bd_name, remote_name_msg.bd_name);
    }
    bta_dm_search_cb.p_search_cback(BTA_DM_NAME_READ_EVT, &search_data);
    // Both device and service search callbacks end up sending event to java.
    // It's enough to send callback to just one of them.
    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,
                                              &search_data);
    }
  } else {
    log::warn("Received remote name complete without callback");
  }
@@ -659,7 +668,7 @@ 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_search_cback(BTA_DM_GATT_OVER_SDP_RES_EVT,
          bta_dm_search_cb.p_service_search_cback(BTA_DM_GATT_OVER_SDP_RES_EVT,
                                                  &result);
        }
      } else {
@@ -726,7 +735,7 @@ 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_search_cback(BTA_DM_DID_RES_EVT, &result);
      bta_dm_search_cb.p_service_search_cback(BTA_DM_DID_RES_EVT, &result);
    }
#endif

@@ -838,7 +847,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_search_cback(BTA_DM_DID_RES_EVT, &result);
    bta_dm_search_cb.p_service_search_cback(BTA_DM_DID_RES_EVT, &result);
  }

  bta_dm_execute_queued_request();
@@ -904,11 +913,16 @@ 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) {
      log::info("Sending GATT results to upper layer");
    bta_dm_search_cb.p_search_cback(BTA_DM_GATT_OVER_LE_RES_EVT, &result);
      bta_dm_search_cb.p_service_search_cback(BTA_DM_GATT_OVER_LE_RES_EVT,
                                              &result);
    }
  }

  bta_dm_search_cb.p_search_cback(BTA_DM_DISC_CMPL_EVT, nullptr);
  if (bta_dm_search_cb.p_device_search_cback) {
    bta_dm_search_cb.p_device_search_cback(BTA_DM_DISC_CMPL_EVT, nullptr);
  }
  bta_dm_search_cb.gatt_disc_active = false;

#if TARGET_FLOSS
@@ -944,7 +958,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_search_cback(BTA_DM_DISC_RES_EVT,
    bta_dm_search_cb.p_service_search_cback(BTA_DM_DISC_RES_EVT,
                                            &p_data->disc_result.result);

  get_gatt_interface().BTA_GATTC_CancelOpen(0, bta_dm_search_cb.peer_bdaddr,
@@ -971,8 +985,8 @@ 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_search_cback) {
      bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT,
    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);
    } else {
      log::warn("Received search result without valid callback");
@@ -1125,8 +1139,8 @@ static void bta_dm_search_clear_queue() {
 *
 ******************************************************************************/
static void bta_dm_search_cancel_notify() {
  if (bta_dm_search_cb.p_search_cback) {
    bta_dm_search_cb.p_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL);
  if (bta_dm_search_cb.p_device_search_cback) {
    bta_dm_search_cb.p_device_search_cback(BTA_DM_SEARCH_CANCEL_CMPL_EVT, NULL);
  }
  switch (bta_dm_search_get_state()) {
    case BTA_DM_SEARCH_ACTIVE:
@@ -1511,8 +1525,8 @@ static void bta_dm_inq_results_cb(tBTM_INQ_RESULTS* p_inq, const uint8_t* p_eir,
    result.inq_res.remt_name_not_required = false;
  }

  if (bta_dm_search_cb.p_search_cback)
    bta_dm_search_cb.p_search_cback(BTA_DM_INQ_RES_EVT, &result);
  if (bta_dm_search_cb.p_device_search_cback)
    bta_dm_search_cb.p_device_search_cback(BTA_DM_INQ_RES_EVT, &result);

  if (p_inq_info) {
    /* application indicates if it knows the remote name, inside the callback
+2 −1
Original line number Diff line number Diff line
@@ -154,7 +154,8 @@ inline std::string bta_dm_state_text(const tBTA_DM_STATE& state) {

/* DM search control block */
typedef struct {
  tBTA_DM_SEARCH_CBACK* p_search_cback;
  tBTA_DM_SEARCH_CBACK* p_device_search_cback;
  tBTA_DM_SEARCH_CBACK* p_service_search_cback;
  tBTM_INQ_INFO* p_btm_inq_info;
  tBTA_SERVICE_MASK services;
  tBTA_SERVICE_MASK services_to_search;
+2 −1
Original line number Diff line number Diff line
@@ -405,7 +405,8 @@ TEST_F(BtaDmTest, bta_dm_remname_cback__typical) {
TEST_F(BtaDmTest, bta_dm_remname_cback__wrong_address) {
  tBTA_DM_SEARCH_CB search_cb =
      bluetooth::legacy::testing::bta_dm_disc_get_search_cb();
  search_cb.p_search_cback = nullptr;
  search_cb.p_device_search_cback = nullptr;
  search_cb.p_service_search_cback = nullptr;
  search_cb.peer_bdaddr = kRawAddress;
  search_cb.name_discover_done = false;
  bluetooth::legacy::testing::bta_dm_disc_search_cb(search_cb);
+0 −14
Original line number Diff line number Diff line
@@ -1685,9 +1685,6 @@ static void btif_dm_search_devices_evt(tBTA_DM_SEARCH_EVT event,
      }
    } break;

    case BTA_DM_INQ_CMPL_EVT: {
      /* do nothing */
    } break;
    case BTA_DM_DISC_CMPL_EVT: {
      GetInterfaceToProfiles()->events->invoke_discovery_state_changed_cb(
          BT_DISCOVERY_STOPPED);
@@ -1707,9 +1704,6 @@ static void btif_dm_search_devices_evt(tBTA_DM_SEARCH_EVT event,
            BT_DISCOVERY_STOPPED);
      }
    } break;
    case BTA_DM_GATT_OVER_LE_RES_EVT:
    case BTA_DM_DID_RES_EVT:
    case BTA_DM_GATT_OVER_SDP_RES_EVT:
    default:
      log::warn("Unhandled event:{}", bta_dm_search_evt_text(event));
      break;
@@ -1935,14 +1929,6 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
      }
    } break;

    case BTA_DM_DISC_CMPL_EVT:
      /* fixme */
      break;

    case BTA_DM_SEARCH_CANCEL_CMPL_EVT:
      /* no-op */
      break;

    case BTA_DM_GATT_OVER_SDP_RES_EVT:
    case BTA_DM_GATT_OVER_LE_RES_EVT: {
      int num_properties = 0;