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

Commit 7b730bae authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by android-build-merger
Browse files

Use callbacks for LE filter functions (BTM layer)

am: 9180985c

Change-Id: I218fb9df79b2b4df4d8a1774273a951c63042772
parents b683b7e6 9180985c
Loading
Loading
Loading
Loading
+19 −49
Original line number Diff line number Diff line
@@ -1159,15 +1159,13 @@ void BTA_DmBleCfgFilterCondition(tBTM_BLE_SCAN_COND_OP action,
                                 tBTM_BLE_PF_COND_TYPE cond_type,
                                 tBTM_BLE_PF_FILT_INDEX filt_index,
                                 tBTM_BLE_PF_COND_PARAM* p_cond,
                                 tBTM_BLE_PF_CFG_CBACK* p_cmpl_cback,
                                 tBTM_BLE_REF_VALUE ref_value) {
                                 tBTM_BLE_PF_CFG_CBACK update_cb) {
  APPL_TRACE_API("BTA_DmBleCfgFilterCondition: %d, %d", action, cond_type);

  if (!p_cond) {
    do_in_bta_thread(
        FROM_HERE,
        base::Bind(base::IgnoreResult(&BTM_BleCfgFilterCondition), action,
                   cond_type, filt_index, nullptr, p_cmpl_cback, ref_value));
    do_in_bta_thread(FROM_HERE,
                     base::Bind(&BTM_BleCfgFilterCondition, action, cond_type,
                                filt_index, nullptr, update_cb));
  }

  uint16_t len = sizeof(tBTM_BLE_PF_COND_PARAM);
@@ -1244,19 +1242,18 @@ void BTA_DmBleCfgFilterCondition(tBTM_BLE_SCAN_COND_OP action,
  }

  do_in_bta_thread(
      FROM_HERE, base::Bind(base::IgnoreResult(&BTM_BleCfgFilterCondition),
                            action, cond_type, filt_index,
      FROM_HERE,
      base::Bind(&BTM_BleCfgFilterCondition, action, cond_type, filt_index,
                 base::Owned((tBTM_BLE_PF_COND_PARAM*)p_cond_param),
                            p_cmpl_cback, ref_value));
                 update_cb));
}

void BTA_DmBleScanFilterClear(tBTM_BLE_REF_VALUE ref_value,
                              tBTM_BLE_PF_FILT_INDEX filt_index,
                              tBTM_BLE_PF_CFG_CBACK* p_cmpl_cback) {
  do_in_bta_thread(FROM_HERE,
                   base::Bind(base::IgnoreResult(&BTM_BleCfgFilterCondition),
                              BTM_BLE_SCAN_COND_CLEAR, BTM_BLE_PF_TYPE_ALL,
                              filt_index, nullptr, p_cmpl_cback, ref_value));
void BTA_DmBleScanFilterClear(tBTM_BLE_PF_FILT_INDEX filt_index,
                              tBTM_BLE_PF_CFG_CBACK update_cb) {
  do_in_bta_thread(
      FROM_HERE,
      base::Bind(&BTM_BleCfgFilterCondition, BTM_BLE_SCAN_COND_CLEAR,
                 BTM_BLE_PF_TYPE_ALL, filt_index, nullptr, update_cb));
}

/*******************************************************************************
@@ -1268,22 +1265,19 @@ void BTA_DmBleScanFilterClear(tBTM_BLE_REF_VALUE ref_value,
 *
 * Parameters       filt_index - Filter index
 *                  p_filt_params -Filter parameters
 *                  ref_value - Reference value
 *                  action - Add, delete or clear
 *                  p_cmpl_back - Command completed callback
 *
 * Returns          void
 *                  cb - Command completed callback
 *
 ******************************************************************************/
void BTA_DmBleScanFilterSetup(
    uint8_t action, tBTM_BLE_PF_FILT_INDEX filt_index,
    std::unique_ptr<btgatt_filt_param_setup_t> p_filt_params,
    tBTM_BLE_PF_PARAM_CBACK p_cmpl_cback, tBTM_BLE_REF_VALUE ref_value) {
    tBTM_BLE_PF_PARAM_CB cb) {
  APPL_TRACE_API("%s: %d", __func__, action);

  do_in_bta_thread(FROM_HERE,
                   base::Bind(base::IgnoreResult(&BTM_BleAdvFilterParamSetup),
                              action, filt_index, base::Passed(&p_filt_params),
                              p_cmpl_cback, ref_value));
                   base::Bind(&BTM_BleAdvFilterParamSetup, action, filt_index,
                              base::Passed(&p_filt_params), cb));
}

/*******************************************************************************
@@ -1309,30 +1303,6 @@ void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK* p_cmpl_cback) {
  bta_sys_sendmsg(p_msg);
}

/*******************************************************************************
 *
 * Function         BTA_DmEnableScanFilter
 *
 * Description      This function is called to enable the adv data payload
 *                  filter
 *
 * Parameters       action - enable or disable the APCF feature
 *                  p_cmpl_cback - Command completed callback
 *                  ref_value - Reference value
 *
 * Returns          void
 *
 ******************************************************************************/
void BTA_DmEnableScanFilter(uint8_t action,
                            tBTM_BLE_PF_STATUS_CBACK* p_cmpl_cback,
                            tBTM_BLE_REF_VALUE ref_value) {
  APPL_TRACE_API("%s: %d", __func__, action);
  do_in_bta_thread(
      FROM_HERE,
      base::Bind(base::IgnoreResult(&BTM_BleEnableDisableFilterFeature), action,
                 p_cmpl_cback, ref_value));
}

/*******************************************************************************
 *
 * Function         BTA_DmBleUpdateConnectionParams
+11 −34
Original line number Diff line number Diff line
@@ -1835,24 +1835,6 @@ extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type,
 ******************************************************************************/
extern void BTA_DmBleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value);

/*******************************************************************************
 *
 * Function         BTA_DmEnableScanFilter
 *
 * Description      This function is called to enable the adv data payload
 *                  filter
 *
 * Parameters       action - enable or disable the APCF feature
 *                  p_cmpl_cback - Command completed callback
 *                  ref_value - Reference value
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_DmEnableScanFilter(uint8_t action,
                                   tBTM_BLE_PF_STATUS_CBACK* p_cmpl_cback,
                                   tBTM_BLE_REF_VALUE ref_value);

/*******************************************************************************
 *
 * Function         BTA_DmBleScanFilterSetup
@@ -1863,15 +1845,13 @@ extern void BTA_DmEnableScanFilter(uint8_t action,
 *                  p_filt_params -Filter parameters
 *                  ref_value - Reference value
 *                  action - Add, delete or clear
 *                  p_cmpl_back - Command completed callback
 *
 * Returns          void
 *                  cb - Command completed callback
 *
 ******************************************************************************/
extern void BTA_DmBleScanFilterSetup(
    uint8_t action, tBTM_BLE_PF_FILT_INDEX filt_index,
    std::unique_ptr<btgatt_filt_param_setup_t> p_filt_params,
    tBTM_BLE_PF_PARAM_CBACK p_cmpl_cback, tBTM_BLE_REF_VALUE ref_value);
    tBTM_BLE_PF_PARAM_CB cb);

/*******************************************************************************
 *
@@ -1884,22 +1864,19 @@ extern void BTA_DmBleScanFilterSetup(
 *                  cond_type: filter condition type
 *                  filt_index - Filter index
 *                  p_cond: filter condition parameter
 *                  p_cmpl_back - Command completed callback
 *                  ref_value - Reference value
 *                  cb - Command completed callback
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_DmBleCfgFilterCondition(tBTM_BLE_SCAN_COND_OP action,
                                        tBTM_BLE_PF_COND_TYPE cond_type,
                                        tBTM_BLE_PF_FILT_INDEX filt_index,
                                        tBTM_BLE_PF_COND_PARAM* p_cond,
                                        tBTM_BLE_PF_CFG_CBACK* p_cmpl_cback,
                                        tBTM_BLE_REF_VALUE ref_value);
extern void BTA_DmBleCfgFilterCondition(
    tBTM_BLE_SCAN_COND_OP action, tBTM_BLE_PF_COND_TYPE cond_type,
    tBTM_BLE_PF_FILT_INDEX filt_index, tBTM_BLE_PF_COND_PARAM* p_cond,
    base::Callback<void(uint8_t, uint8_t, uint8_t)> cb);

extern void BTA_DmBleScanFilterClear(tBTM_BLE_REF_VALUE ref_value,
extern void BTA_DmBleScanFilterClear(
    tBTM_BLE_PF_FILT_INDEX filt_index,
                                     tBTM_BLE_PF_CFG_CBACK* p_cmpl_cback);
    base::Callback<void(uint8_t, uint8_t, uint8_t)> cb);

/*******************************************************************************
 *
+47 −35
Original line number Diff line number Diff line
@@ -185,24 +185,22 @@ void bta_scan_param_setup_cb(tGATT_IF client_if, tBTM_STATUS status) {
                    btif_gattc_translate_btm_status(status));
}

void bta_scan_filt_cfg_cb(tBTM_BLE_PF_ACTION action,
                          tBTM_BLE_SCAN_COND_OP cfg_op,
                          tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status,
                          tBTM_BLE_REF_VALUE ref_value) {
  SCAN_CBACK_IN_JNI(scan_filter_cfg_cb, action, ref_value, status, cfg_op,
void bta_scan_filt_cfg_cb(uint8_t filt_type, uint8_t client_if,
                          tBTM_BLE_PF_AVBL_SPACE avbl_space,
                          tBTM_BLE_PF_ACTION action, tBTA_STATUS status) {
  SCAN_CBACK_IN_JNI(scan_filter_cfg_cb, action, client_if, status, filt_type,
                    avbl_space);
}

void bta_scan_filt_param_setup_cb(uint8_t action_type,
void bta_scan_filt_param_setup_cb(tBTM_BLE_REF_VALUE ref_value,
                                  tBTM_BLE_PF_AVBL_SPACE avbl_space,
                                  tBTM_BLE_REF_VALUE ref_value,
                                  tBTA_STATUS status) {
                                  uint8_t action_type, tBTA_STATUS status) {
  SCAN_CBACK_IN_JNI(scan_filter_param_cb, action_type, ref_value, status,
                    avbl_space);
}

void bta_scan_filt_status_cb(uint8_t action, tBTA_STATUS status,
                             tBTM_BLE_REF_VALUE ref_value) {
void bta_scan_filt_status_cb(tBTM_BLE_REF_VALUE ref_value, uint8_t action,
                             tBTA_STATUS status) {
  SCAN_CBACK_IN_JNI(scan_filter_status_cb, action, ref_value, status);
}

@@ -364,8 +362,9 @@ void btif_gattc_scan_filter_add_srvc_uuid(tBT_UUID uuid,
  cond.srvc_uuid.uuid = uuid;
  cond.srvc_uuid.p_uuid_mask = p_uuid_mask;

  BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond,
                              &bta_scan_filt_cfg_cb, client_if);
  BTA_DmBleCfgFilterCondition(
      action, filt_type, filt_index, &cond,
      Bind(&bta_scan_filt_cfg_cb, filt_type, client_if));
}

void btif_gattc_scan_filter_add_local_name(vector<uint8_t> data, int action,
@@ -376,8 +375,9 @@ void btif_gattc_scan_filter_add_local_name(vector<uint8_t> data, int action,

  cond.local_name.data_len = data.size();
  cond.local_name.p_data = const_cast<uint8_t*>(data.data());
  BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond,
                              &bta_scan_filt_cfg_cb, client_if);
  BTA_DmBleCfgFilterCondition(
      action, filt_type, filt_index, &cond,
      Bind(&bta_scan_filt_cfg_cb, filt_type, client_if));
}

void btif_gattc_scan_filter_add_manu_data(int company_id, int company_id_mask,
@@ -393,8 +393,9 @@ void btif_gattc_scan_filter_add_manu_data(int company_id, int company_id_mask,
  cond.manu_data.data_len = pattern.size();
  cond.manu_data.p_pattern = const_cast<uint8_t*>(pattern.data());
  cond.manu_data.p_pattern_mask = const_cast<uint8_t*>(pattern_mask.data());
  BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond,
                              &bta_scan_filt_cfg_cb, client_if);
  BTA_DmBleCfgFilterCondition(
      action, filt_type, filt_index, &cond,
      Bind(&bta_scan_filt_cfg_cb, filt_type, client_if));
}

void btif_gattc_scan_filter_add_data_pattern(vector<uint8_t> pattern,
@@ -407,8 +408,9 @@ void btif_gattc_scan_filter_add_data_pattern(vector<uint8_t> pattern,
  cond.srvc_data.data_len = pattern.size();
  cond.srvc_data.p_pattern = const_cast<uint8_t*>(pattern.data());
  cond.srvc_data.p_pattern_mask = const_cast<uint8_t*>(pattern_mask.data());
  BTA_DmBleCfgFilterCondition(action, filt_type, filt_index, &cond,
                              &bta_scan_filt_cfg_cb, client_if);
  BTA_DmBleCfgFilterCondition(
      action, filt_type, filt_index, &cond,
      Bind(&bta_scan_filt_cfg_cb, filt_type, client_if));
}

class BleScannerInterfaceImpl : public BleScannerInterface {
@@ -459,10 +461,9 @@ class BleScannerInterfaceImpl : public BleScannerInterface {
            BTA_DmBleTrackAdvertiser(client_if, bta_track_adv_event_cb);
          }

          BTA_DmBleScanFilterSetup(action, filt_index,
                                   std::move(adv_filt_param),
                                   bta_scan_filt_param_setup_cb, client_if);

          BTA_DmBleScanFilterSetup(
              action, filt_index, std::move(adv_filt_param),
              base::Bind(&bta_scan_filt_param_setup_cb, client_if));
        },
        client_if, action, filt_index, base::Passed(&filt_param)));
  }
@@ -487,16 +488,17 @@ class BleScannerInterfaceImpl : public BleScannerInterface {

        bdcpy(cond->target_addr.bda, bd_addr->address);
        cond->target_addr.type = addr_type;
        do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, action, filt_type,
                              filt_index, base::Owned(cond),
                              &bta_scan_filt_cfg_cb, client_if));
        do_in_jni_thread(
            Bind(&BTA_DmBleCfgFilterCondition, action, filt_type, filt_index,
                 base::Owned(cond),
                 Bind(&bta_scan_filt_cfg_cb, filt_type, client_if)));
        return;
      }

      case BTM_BLE_PF_SRVC_DATA:
        do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, action, filt_type,
                              filt_index, nullptr, &bta_scan_filt_cfg_cb,
                              client_if));
        do_in_jni_thread(
            Bind(&BTA_DmBleCfgFilterCondition, action, filt_type, filt_index,
                 nullptr, Bind(&bta_scan_filt_cfg_cb, filt_type, client_if)));
        return;

      case BTM_BLE_PF_SRVC_UUID: {
@@ -526,9 +528,10 @@ class BleScannerInterfaceImpl : public BleScannerInterface {
        cond->solicitate_uuid.cond_logic = BTM_BLE_PF_LOGIC_AND;
        btif_to_bta_uuid(&cond->solicitate_uuid.uuid, p_uuid);

        do_in_jni_thread(Bind(&BTA_DmBleCfgFilterCondition, action, filt_type,
                              filt_index, base::Owned(cond),
                              &bta_scan_filt_cfg_cb, client_if));
        do_in_jni_thread(
            Bind(&BTA_DmBleCfgFilterCondition, action, filt_type, filt_index,
                 base::Owned(cond),
                 Bind(&bta_scan_filt_cfg_cb, filt_type, client_if)));
        return;
      }

@@ -561,16 +564,25 @@ class BleScannerInterfaceImpl : public BleScannerInterface {

  void ScanFilterClear(int client_if, int filter_index) override {
    BTIF_TRACE_DEBUG("%s: filter_index: %d", __func__, filter_index);
    do_in_jni_thread(Bind(&BTA_DmBleScanFilterClear, client_if, filter_index,
                          &bta_scan_filt_cfg_cb));

    do_in_jni_thread(
        Bind(&BTA_DmBleScanFilterClear, filter_index,
             Bind(&bta_scan_filt_cfg_cb, BTM_BLE_PF_TYPE_ALL, client_if)));
  }

  void ScanFilterEnable(int client_if, bool enable) override {
    BTIF_TRACE_DEBUG("%s: enable: %d", __func__, enable);

    uint8_t action = enable ? 1 : 0;
    do_in_jni_thread(Bind(&BTA_DmEnableScanFilter, action,
                          &bta_scan_filt_status_cb, client_if));
    do_in_jni_thread(Bind(
        [](int client_if, bool action) {
          do_in_bta_thread(
              FROM_HERE,
              base::Bind(&BTM_BleEnableDisableFilterFeature, action,
                         base::Bind(&bta_scan_filt_status_cb, client_if)));

        },
        client_if, action));
  }

  void SetScanParameters(int client_if, int scan_interval,
+10 −21
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@

#include "btif_dm.h"

#include <base/bind.h>
#include <base/logging.h>
#include <signal.h>
#include <stdio.h>
@@ -228,10 +229,8 @@ static void btif_dm_ble_key_nc_req_evt(tBTA_DM_SP_KEY_NOTIF* p_notif_req);
static void btif_dm_ble_oob_req_evt(tBTA_DM_SP_RMT_OOB* req_oob_type);
static void btif_dm_ble_sc_oob_req_evt(tBTA_DM_SP_RMT_OOB* req_oob_type);

static void bte_scan_filt_param_cfg_evt(uint8_t action_type,
                                        tBTM_BLE_PF_AVBL_SPACE avbl_space,
                                        tBTM_BLE_REF_VALUE ref_value,
                                        tBTA_STATUS status);
static void bte_scan_filt_param_cfg_evt(uint8_t action_type, uint8_t avbl_space,
                                        uint8_t ref_value, uint8_t status);

static char* btif_get_default_local_name();

@@ -1347,7 +1346,7 @@ static void btif_dm_search_devices_evt(uint16_t event, char* p_param) {

    case BTA_DM_INQ_CMPL_EVT: {
      BTA_DmBleScanFilterSetup(BTM_BLE_SCAN_COND_DELETE, 0, nullptr,
                               bte_scan_filt_param_cfg_evt, 0);
                               base::Bind(&bte_scan_filt_param_cfg_evt, 0));
    } break;
    case BTA_DM_DISC_CMPL_EVT: {
      HAL_CBACK(bt_hal_cbacks, discovery_state_changed_cb,
@@ -1367,7 +1366,7 @@ static void btif_dm_search_devices_evt(uint16_t event, char* p_param) {
        btgatt_filt_param_setup_t adv_filt_param;
        memset(&adv_filt_param, 0, sizeof(btgatt_filt_param_setup_t));
        BTA_DmBleScanFilterSetup(BTM_BLE_SCAN_COND_DELETE, 0, nullptr,
                                 bte_scan_filt_param_cfg_evt, 0);
                                 base::Bind(&bte_scan_filt_param_cfg_evt, 0));
        HAL_CBACK(bt_hal_cbacks, discovery_state_changed_cb,
                  BT_DISCOVERY_STOPPED);
      }
@@ -2118,19 +2117,9 @@ static void bta_energy_info_cb(tBTA_DM_BLE_TX_TIME_MS tx_time,
                        NULL);
}

/*******************************************************************************
 *
 * Function         bte_scan_filt_param_cfg_evt
 *
 * Description      Scan filter param config event
 *
 * Returns          void
 *
 ******************************************************************************/
static void bte_scan_filt_param_cfg_evt(uint8_t action_type,
                                        tBTM_BLE_PF_AVBL_SPACE avbl_space,
                                        tBTM_BLE_REF_VALUE ref_value,
                                        tBTA_STATUS status) {
/* Scan filter param config event */
static void bte_scan_filt_param_cfg_evt(uint8_t ref_value, uint8_t avbl_space,
                                        uint8_t action_type, uint8_t status) {
  /* This event occurs on calling BTA_DmBleCfgFilterCondition internally,
  ** and that is why there is no HAL callback
  */
@@ -2164,7 +2153,7 @@ bt_status_t btif_dm_start_discovery(void) {

  /* Cleanup anything remaining on index 0 */
  BTA_DmBleScanFilterSetup(BTM_BLE_SCAN_COND_DELETE, 0, nullptr,
                           bte_scan_filt_param_cfg_evt, 0);
                           base::Bind(&bte_scan_filt_param_cfg_evt, 0));

  auto adv_filt_param = std::make_unique<btgatt_filt_param_setup_t>();
  /* Add an allow-all filter on index 0*/
@@ -2175,7 +2164,7 @@ bt_status_t btif_dm_start_discovery(void) {
  adv_filt_param->rssi_low_thres = LOWEST_RSSI_VALUE;
  adv_filt_param->rssi_high_thres = LOWEST_RSSI_VALUE;
  BTA_DmBleScanFilterSetup(BTM_BLE_SCAN_COND_ADD, 0, std::move(adv_filt_param),
                           bte_scan_filt_param_cfg_evt, 0);
                           base::Bind(&bte_scan_filt_param_cfg_evt, 0));

  /* TODO: Do we need to handle multiple inquiries at the same time? */

+172 −349

File changed.

Preview size limit exceeded, changes collapsed.

Loading