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

Commit 347bf7c2 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by Andre Eisenbach
Browse files

BLE scan filter setup simplification (2/3)

Bug: 30622771
Test: sl4a BleScanTest
Change-Id: I55e6c201849a057995c0c6fda1c52af826749922
parent 7da9a697
Loading
Loading
Loading
Loading
+13 −25
Original line number Diff line number Diff line
@@ -4660,36 +4660,24 @@ void bta_dm_enable_scan_filter(tBTA_DM_MSG* p_data) {
 * Parameters:
 *
 ******************************************************************************/
void bta_dm_scan_filter_param_setup(tBTA_DM_MSG* p_data) {
  tBTM_STATUS st = BTM_MODE_UNSUPPORTED;
  tBTA_STATUS status = BTA_FAILURE;

void bta_dm_scan_filter_param_setup(
    uint8_t action, tBTA_DM_BLE_PF_FILT_INDEX filt_index,
    std::unique_ptr<btgatt_filt_param_setup_t> filt_params,
    std::unique_ptr<tBLE_BD_ADDR> p_target,
    tBTA_DM_BLE_PF_PARAM_CBACK p_filt_param_cback,
    tBTA_DM_BLE_REF_VALUE ref_value) {
  tBTM_BLE_VSC_CB cmn_vsc_cb;

  APPL_TRACE_DEBUG("bta_dm_scan_filter_param_setup");
  BTM_BleGetVendorCapabilities(&cmn_vsc_cb);
  if (0 != cmn_vsc_cb.filter_support) {
    st = BTM_BleAdvFilterParamSetup(
        p_data->ble_scan_filt_param_setup.action,
        p_data->ble_scan_filt_param_setup.filt_index,
        (tBTM_BLE_PF_FILT_PARAMS*)&p_data->ble_scan_filt_param_setup
            .filt_params,
        p_data->ble_scan_filt_param_setup.p_target,
        p_data->ble_scan_filt_param_setup.p_filt_param_cback,
        p_data->ble_scan_filt_param_setup.ref_value);
    if (st == BTM_CMD_STARTED) {
      bta_dm_cb.p_scan_filt_param_cback =
          p_data->ble_scan_filt_param_setup.p_filt_param_cback;
  if (0 == cmn_vsc_cb.filter_support) {
    if (p_filt_param_cback)
      p_filt_param_cback(BTA_DM_BLE_PF_ENABLE_EVT, 0, ref_value, BTA_FAILURE);

    return;
  }
  }

  if (p_data->ble_scan_filt_param_setup.p_filt_param_cback)
    p_data->ble_scan_filt_param_setup.p_filt_param_cback(
        BTA_DM_BLE_PF_ENABLE_EVT, 0,
        p_data->ble_scan_filt_param_setup.ref_value, status);

  return;
  BTM_BleAdvFilterParamSetup(action, filt_index, filt_params.get(),
                             p_target.get(), p_filt_param_cback, ref_value);
}
#endif

+11 −38
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
 *  This is the API implementation file for the BTA device manager.
 *
 ******************************************************************************/
#include <base/bind_helpers.h>
#include <string.h>

#include "bt_common.h"
@@ -1343,47 +1344,19 @@ void BTA_DmBleCfgFilterCondition(
 * Returns          void
 *
 ******************************************************************************/
void BTA_DmBleScanFilterSetup(
    uint8_t action, tBTA_DM_BLE_PF_FILT_INDEX filt_index,
    std::unique_ptr<btgatt_filt_param_setup_t> p_filt_params,
    std::unique_ptr<tBLE_BD_ADDR> p_target,
    tBTA_DM_BLE_PF_PARAM_CBACK p_cmpl_cback, tBTA_DM_BLE_REF_VALUE ref_value) {
#if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE)
void BTA_DmBleScanFilterSetup(uint8_t action,
                              tBTA_DM_BLE_PF_FILT_INDEX filt_index,
                              tBTA_DM_BLE_PF_FILT_PARAMS* p_filt_params,
                              tBLE_BD_ADDR* p_target,
                              tBTA_DM_BLE_PF_PARAM_CBACK* p_cmpl_cback,
                              tBTA_DM_BLE_REF_VALUE ref_value) {
  const size_t len =
      sizeof(tBTA_DM_API_SCAN_FILTER_PARAM_SETUP) + sizeof(tBLE_BD_ADDR);
  tBTA_DM_API_SCAN_FILTER_PARAM_SETUP* p_msg =
      (tBTA_DM_API_SCAN_FILTER_PARAM_SETUP*)osi_calloc(len);

  APPL_TRACE_API("%s: %d", __func__, action);

  p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_SETUP_EVT;
  p_msg->action = action;
  p_msg->filt_index = filt_index;
  if (p_filt_params) {
    memcpy(&p_msg->filt_params, p_filt_params,
           sizeof(tBTA_DM_BLE_PF_FILT_PARAMS));
  }
  p_msg->p_filt_param_cback = p_cmpl_cback;
  p_msg->ref_value = ref_value;

  if (p_target) {
    p_msg->p_target = (tBLE_BD_ADDR*)(p_msg + 1);
    memcpy(p_msg->p_target, p_target, sizeof(tBLE_BD_ADDR));
  }

  bta_sys_sendmsg(p_msg);
}
#else
void BTA_DmBleScanFilterSetup(
    UNUSED_ATTR uint8_t action,
    UNUSED_ATTR tBTA_DM_BLE_PF_FILT_INDEX filt_index,
    UNUSED_ATTR tBTA_DM_BLE_PF_FILT_PARAMS* p_filt_params,
    UNUSED_ATTR tBLE_BD_ADDR* p_target,
    UNUSED_ATTR tBTA_DM_BLE_PF_PARAM_CBACK* p_cmpl_cback,
    UNUSED_ATTR tBTA_DM_BLE_REF_VALUE ref_value)
}
  do_in_bta_thread(
      FROM_HERE, base::Bind(&bta_dm_scan_filter_param_setup, action, filt_index,
                            base::Passed(&p_filt_params),
                            base::Passed(&p_target), p_cmpl_cback, ref_value));
#endif
}

/*******************************************************************************
 *
+7 −13
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#ifndef BTA_DM_INT_H
#define BTA_DM_INT_H

#include <memory>
#include "bt_target.h"
#include "bta_sys.h"

@@ -92,7 +93,6 @@ enum {

#if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE)
  BTA_DM_API_CFG_FILTER_COND_EVT,
  BTA_DM_API_SCAN_FILTER_SETUP_EVT,
  BTA_DM_API_SCAN_FILTER_ENABLE_EVT,
#endif
  BTA_DM_API_BLE_SETUP_STORAGE_EVT,
@@ -510,15 +510,6 @@ typedef struct {
  tBTA_DM_BLE_REF_VALUE ref_value;
} tBTA_DM_API_ENABLE_SCAN_FILTER;

typedef struct {
  BT_HDR hdr;
  uint8_t action;
  tBTA_DM_BLE_PF_FILT_INDEX filt_index;
  tBTA_DM_BLE_PF_FILT_PARAMS filt_params;
  tBLE_BD_ADDR* p_target;
  tBTA_DM_BLE_PF_PARAM_CBACK* p_filt_param_cback;
  tBTA_DM_BLE_REF_VALUE ref_value;
} tBTA_DM_API_SCAN_FILTER_PARAM_SETUP;
#endif

/* union of all data types */
@@ -581,7 +572,6 @@ typedef union {
  tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy;
  tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy;
#if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE)
  tBTA_DM_API_SCAN_FILTER_PARAM_SETUP ble_scan_filt_param_setup;
  tBTA_DM_API_CFG_FILTER_COND ble_cfg_filter_cond;
  tBTA_DM_API_ENABLE_SCAN_FILTER ble_enable_scan_filt;
#endif
@@ -701,7 +691,6 @@ typedef struct {
  tBTA_BLE_SCAN_SETUP_CBACK* p_setup_cback;
  tBTA_DM_BLE_PF_CFG_CBACK* p_scan_filt_cfg_cback;
  tBTA_DM_BLE_PF_STATUS_CBACK* p_scan_filt_status_cback;
  tBTA_DM_BLE_PF_PARAM_CBACK* p_scan_filt_param_cback;
  tBTA_BLE_ENERGY_INFO_CBACK* p_energy_info_cback;
  uint16_t state;
  bool disabling;
@@ -927,7 +916,12 @@ extern void bta_dm_ble_set_data_length(tBTA_DM_MSG* p_data);

#if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE)
extern void bta_dm_cfg_filter_cond(tBTA_DM_MSG* p_data);
extern void bta_dm_scan_filter_param_setup(tBTA_DM_MSG* p_data);
extern void bta_dm_scan_filter_param_setup(
    uint8_t action, tBTA_DM_BLE_PF_FILT_INDEX filt_index,
    std::unique_ptr<btgatt_filt_param_setup_t> filt_params,
    std::unique_ptr<tBLE_BD_ADDR> p_target,
    tBTA_DM_BLE_PF_PARAM_CBACK p_filt_param_cback,
    tBTA_DM_BLE_REF_VALUE ref_value);
extern void bta_dm_enable_scan_filter(tBTA_DM_MSG* p_data);
#endif

+0 −1
Original line number Diff line number Diff line
@@ -86,7 +86,6 @@ const tBTA_DM_ACTION bta_dm_action[] = {
    bta_dm_ble_set_data_length, /* BTA_DM_API_SET_DATA_LENGTH_EVT */
#if (BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE)
    bta_dm_cfg_filter_cond,         /* BTA_DM_API_CFG_FILTER_COND_EVT */
    bta_dm_scan_filter_param_setup, /* BTA_DM_API_SCAN_FILTER_SETUP_EVT */
    bta_dm_enable_scan_filter,      /* BTA_DM_API_SCAN_FILTER_ENABLE_EVT */
#endif
    bta_dm_ble_setup_storage,      /* BTA_DM_API_BLE_SETUP_STORAGE_EVT */
+7 −37
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
#ifndef BTA_API_H
#define BTA_API_H

#include <hardware/bt_common_types.h>
#include <memory>
#include "bt_target.h"
#include "bt_types.h"
#include "btm_api.h"
@@ -820,41 +822,10 @@ typedef void(tBTA_DM_BLE_PF_PARAM_CBACK)(uint8_t action_type,
typedef void(tBTA_DM_BLE_PF_STATUS_CBACK)(uint8_t action, tBTA_STATUS status,
                                          tBTA_DM_BLE_REF_VALUE ref_value);

#define BTA_DM_BLE_PF_BRDCAST_ADDR_FILT 1
#define BTA_DM_BLE_PF_SERV_DATA_CHG_FILT 2
#define BTA_DM_BLE_PF_SERV_UUID 4
#define BTA_DM_BLE_PF_SERV_SOLC_UUID 8
#define BTA_DM_BLE_PF_LOC_NAME_CHECK 16
#define BTA_DM_BLE_PF_MANUF_NAME_CHECK 32
#define BTA_DM_BLE_PF_SERV_DATA_CHECK 64
typedef uint16_t tBTA_DM_BLE_PF_FEAT_SEL;

#define BTA_DM_BLE_PF_LIST_LOGIC_OR 1
#define BTA_DM_BLE_PF_LIST_LOGIC_AND 2
typedef uint16_t tBTA_DM_BLE_PF_LIST_LOGIC_TYPE;

#define BTA_DM_BLE_PF_FILT_LOGIC_OR 0
#define BTA_DM_BLE_PF_FILT_LOGIC_AND 1
typedef uint16_t tBTA_DM_BLE_PF_FILT_LOGIC_TYPE;

typedef uint8_t tBTA_DM_BLE_PF_RSSI_THRESHOLD;
typedef uint8_t tBTA_DM_BLE_PF_DELIVERY_MODE;
typedef uint16_t tBTA_DM_BLE_PF_TIMEOUT;
typedef uint8_t tBTA_DM_BLE_PF_TIMEOUT_CNT;
typedef uint16_t tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES;

typedef struct {
  tBTA_DM_BLE_PF_FEAT_SEL feat_seln;
  tBTA_DM_BLE_PF_LIST_LOGIC_TYPE list_logic_type;
  tBTA_DM_BLE_PF_FILT_LOGIC_TYPE filt_logic_type;
  tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_high_thres;
  tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_low_thres;
  tBTA_DM_BLE_PF_DELIVERY_MODE dely_mode;
  tBTA_DM_BLE_PF_TIMEOUT found_timeout;
  tBTA_DM_BLE_PF_TIMEOUT lost_timeout;
  tBTA_DM_BLE_PF_TIMEOUT_CNT found_timeout_cnt;
  tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES num_of_tracking_entries;
} tBTA_DM_BLE_PF_FILT_PARAMS;

/* Search callback events */
#define BTA_DM_INQ_RES_EVT 0  /* Inquiry result for a peer device. */
@@ -2030,12 +2001,11 @@ extern void BTA_DmEnableScanFilter(uint8_t action,
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_DmBleScanFilterSetup(uint8_t action,
                                     tBTA_DM_BLE_PF_FILT_INDEX filt_index,
                                     tBTA_DM_BLE_PF_FILT_PARAMS* p_filt_params,
                                     tBLE_BD_ADDR* p_target,
                                     tBTA_DM_BLE_PF_PARAM_CBACK* p_cmpl_cback,
                                     tBTA_DM_BLE_REF_VALUE ref_value);
extern void BTA_DmBleScanFilterSetup(
    uint8_t action, tBTA_DM_BLE_PF_FILT_INDEX filt_index,
    std::unique_ptr<btgatt_filt_param_setup_t> p_filt_params,
    std::unique_ptr<tBLE_BD_ADDR> p_target,
    tBTA_DM_BLE_PF_PARAM_CBACK p_cmpl_cback, tBTA_DM_BLE_REF_VALUE ref_value);

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