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

Commit 8aec345e authored by Wei Wang's avatar Wei Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix issues with manufacturer ID prefix scan filter." into lmp-dev

parents ba8ca9df bde610b3
Loading
Loading
Loading
Loading
+33 −5
Original line number Diff line number Diff line
@@ -2165,21 +2165,46 @@ void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action,
    tBTA_DM_API_CFG_FILTER_COND *p_msg;
    APPL_TRACE_API ("BTA_DmBleCfgFilterCondition: %d, %d", action, cond_type);

    UINT16  len = sizeof(tBTA_DM_API_CFG_FILTER_COND) + sizeof(tBTA_DM_BLE_PF_COND_PARAM) + \
                BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_PF_STR_LEN_MAX + sizeof(tBTA_DM_BLE_PF_COND_MASK);

    UINT16  len = sizeof(tBTA_DM_API_CFG_FILTER_COND) +
                  sizeof(tBTA_DM_BLE_PF_COND_PARAM);
    UINT8 *p;

    if (NULL != p_cond)
    {
        switch(cond_type)
        {
            case BTA_DM_BLE_PF_SRVC_DATA_PATTERN:
            case BTA_DM_BLE_PF_MANU_DATA:
                /* Length of pattern and pattern mask and other elements in */
                /* tBTA_DM_BLE_PF_MANU_COND */
                len += ((p_cond->manu_data.data_len) * 2) +
                        sizeof(UINT16) + sizeof(UINT16) + sizeof(UINT8);
                break;

            case BTA_DM_BLE_PF_LOCAL_NAME:
                len += ((p_cond->local_name.data_len) + sizeof(UINT8));
                break;

            case BTM_BLE_PF_SRVC_UUID:
            case BTM_BLE_PF_SRVC_SOL_UUID:
                len += sizeof(tBLE_BD_ADDR) + sizeof(tBTA_DM_BLE_PF_COND_MASK);
                break;

            default:
                break;
        }
    }

    if ((p_msg = (tBTA_DM_API_CFG_FILTER_COND *) GKI_getbuf(len)) != NULL)
    {
        memset (p_msg, 0, len);

        p_msg->hdr.event        = BTA_DM_API_CFG_FILTER_COND_EVT;
        p_msg->action           = action;
        p_msg->cond_type        = cond_type;
        p_msg->filt_index       = filt_index;
        p_msg->p_filt_cfg_cback = p_cmpl_cback;
        p_msg->ref_value        = ref_value;

        if (p_cond)
        {
            p_msg->p_cond_param = (tBTA_DM_BLE_PF_COND_PARAM *)(p_msg + 1);
@@ -2211,10 +2236,13 @@ void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action,
            else if (cond_type == BTA_DM_BLE_PF_LOCAL_NAME)
            {
                p_msg->p_cond_param->local_name.p_data = p;
                p_msg->p_cond_param->local_name.data_len =
                    p_cond->local_name.data_len;
                memcpy(p_msg->p_cond_param->local_name.p_data,
                    p_cond->local_name.p_data, p_cond->local_name.data_len);
            }
            else if ((cond_type == BTM_BLE_PF_SRVC_UUID || cond_type == BTM_BLE_PF_SRVC_SOL_UUID))
            else if ((cond_type == BTM_BLE_PF_SRVC_UUID
                || cond_type == BTM_BLE_PF_SRVC_SOL_UUID))
            {
                if (p_cond->srvc_uuid.p_target_addr != NULL)
                {
+12 −0
Original line number Diff line number Diff line
@@ -1986,6 +1986,7 @@ static bt_status_t btif_gattc_scan_filter_param_setup(int client_if, int action,
    CHECK_BTGATT_INIT();
    BTIF_TRACE_DEBUG("%s", __FUNCTION__);
    btgatt_adv_filter_cb_t btif_filt_cb;
    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
    btif_filt_cb.action = action;
    btif_filt_cb.client_if = client_if;
    btif_filt_cb.filt_index = filt_index;
@@ -2011,6 +2012,7 @@ static bt_status_t btif_gattc_scan_filter_add_remove(int client_if, int action,
{
    CHECK_BTGATT_INIT();
    btgatt_adv_filter_cb_t btif_filt_cb;
    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
    BTIF_TRACE_DEBUG("%s, %d, %d", __FUNCTION__, action, filt_type);

    /* If data is passed, both mask and data have to be the same length */
@@ -2050,6 +2052,7 @@ static bt_status_t btif_gattc_scan_filter_clear(int client_if, int filt_index)
    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, filt_index);

    btgatt_adv_filter_cb_t btif_filt_cb;
    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
    btif_filt_cb.client_if = client_if;
    btif_filt_cb.filt_index = filt_index;
    btif_filt_cb.action = BTA_DM_BLE_SCAN_COND_CLEAR;
@@ -2064,6 +2067,7 @@ static bt_status_t btif_gattc_scan_filter_enable(int client_if, bool enable)
    BTIF_TRACE_DEBUG("%s, %d", __FUNCTION__, enable);

    btgatt_adv_filter_cb_t btif_filt_cb;
    memset(&btif_filt_cb, 0, sizeof(btgatt_adv_filter_cb_t));
    btif_filt_cb.client_if = client_if;
    if (true == enable)
        action = 1;
@@ -2098,6 +2102,7 @@ static bt_status_t btif_gattc_multi_adv_enable(int client_if, int min_interval,
{
    CHECK_BTGATT_INIT();
    btgatt_multi_adv_inst_cb adv_cb;
    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
    adv_cb.client_if = (uint8_t) client_if;

    adv_cb.param.adv_int_min = min_interval;
@@ -2116,6 +2121,7 @@ static bt_status_t btif_gattc_multi_adv_update(int client_if, int min_interval,
{
    CHECK_BTGATT_INIT();
    btgatt_multi_adv_inst_cb adv_cb;
    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
    adv_cb.client_if = (uint8_t) client_if;

    adv_cb.param.adv_int_min = min_interval;
@@ -2141,6 +2147,7 @@ static bt_status_t btif_gattc_multi_adv_setdata(int client_if, bool set_scan_rsp
    bt_status_t status =0;

    btif_adv_data_t multi_adv_data_inst;
    memset(&multi_adv_data_inst, 0, sizeof(btif_adv_data_t));

    btif_gattc_adv_data_packager(client_if, set_scan_rsp, include_name, incl_txpower,
        min_interval, max_interval, appearance, manufacturer_len, manufacturer_data,
@@ -2165,6 +2172,7 @@ static bt_status_t btif_gattc_multi_adv_disable(int client_if)
{
    CHECK_BTGATT_INIT();
    btgatt_multi_adv_inst_cb adv_cb;
    memset(&adv_cb, 0, sizeof(btgatt_multi_adv_inst_cb));
    adv_cb.client_if = (uint8_t) client_if;

    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_ADV_INSTANCE_DISABLE,
@@ -2176,6 +2184,7 @@ static bt_status_t btif_gattc_cfg_storage(int client_if,int batch_scan_full_max,
{
    CHECK_BTGATT_INIT();
    btgatt_batch_track_cb_t bt_scan_cb;
    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
    bt_scan_cb.client_if = (uint8_t) client_if;
    bt_scan_cb.batch_scan_full_max = batch_scan_full_max;
    bt_scan_cb.batch_scan_trunc_max = batch_scan_trunc_max;
@@ -2189,6 +2198,7 @@ static bt_status_t btif_gattc_enb_batch_scan(int client_if,int scan_mode, int sc
{
    CHECK_BTGATT_INIT();
    btgatt_batch_track_cb_t bt_scan_cb;
    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
    bt_scan_cb.client_if = (uint8_t) client_if;
    bt_scan_cb.scan_mode = scan_mode;
    bt_scan_cb.scan_interval = scan_interval;
@@ -2203,6 +2213,7 @@ static bt_status_t btif_gattc_dis_batch_scan(int client_if)
{
    CHECK_BTGATT_INIT();
    btgatt_batch_track_cb_t bt_scan_cb;
    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
    bt_scan_cb.client_if = (uint8_t) client_if;
    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_DISABLE_BATCH_SCAN,
                                 (char*) &bt_scan_cb, sizeof(btgatt_batch_track_cb_t), NULL);
@@ -2212,6 +2223,7 @@ static bt_status_t btif_gattc_read_batch_scan_reports(int client_if, int scan_mo
{
    CHECK_BTGATT_INIT();
    btgatt_batch_track_cb_t bt_scan_cb;
    memset(&bt_scan_cb, 0, sizeof(btgatt_batch_track_cb_t));
    bt_scan_cb.client_if = (uint8_t) client_if;
    bt_scan_cb.scan_mode = scan_mode;
    return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_READ_BATCH_SCAN_REPORTS,
+32 −22
Original line number Diff line number Diff line
@@ -542,7 +542,7 @@ tBTM_STATUS btm_ble_update_pf_manu_data(tBTM_BLE_SCAN_COND_OP action,
          len = BTM_BLE_ADV_FILT_META_HDR_LENGTH;
    tBTM_STATUS st = BTM_ILLEGAL_VALUE;

    if (NULL!= p_data && 0 == p_data->manu_data.data_len && 0 == p_data->srvc_data.data_len)
    if (NULL == p_data)
        return st;

    memset(param, 0, BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_PF_STR_LEN_MAX
@@ -562,8 +562,7 @@ tBTM_STATUS btm_ble_update_pf_manu_data(tBTM_BLE_SCAN_COND_OP action,
    /* Filter index */
    UINT8_TO_STREAM(p, filt_index);

    if (BTM_BLE_SCAN_COND_ADD == action ||
        BTM_BLE_SCAN_COND_DELETE == action)
    if (BTM_BLE_SCAN_COND_ADD == action || BTM_BLE_SCAN_COND_DELETE == action)
    {
        if (BTM_BLE_PF_SRVC_DATA_PATTERN == cond_type)
        {
@@ -585,15 +584,23 @@ tBTM_STATUS btm_ble_update_pf_manu_data(tBTM_BLE_SCAN_COND_OP action,
        else
        {
            if (NULL == p_manu_data)
            {
                BTM_TRACE_ERROR("btm_ble_update_pf_manu_data - No manuf data");
                return st;
            }
            BTM_TRACE_EVENT("btm_ble_update_pf_manu_data length: %d",
                                    p_manu_data->data_len);
            if (p_manu_data->data_len > (BTM_BLE_PF_STR_LEN_MAX - 2))
                p_manu_data->data_len = (BTM_BLE_PF_STR_LEN_MAX - 2);

            UINT16_TO_STREAM(p, p_manu_data->company_id);

           if (p_manu_data->data_len > 0)
            if (p_manu_data->data_len > 0 && p_manu_data->p_pattern_mask != NULL)
            {
                ARRAY_TO_STREAM(p, p_manu_data->p_pattern, p_manu_data->data_len);
                len += (p_manu_data->data_len + 2);
            }
            else
                len += 2;

            if (p_manu_data->company_id_mask != 0)
            {
@@ -604,10 +611,13 @@ tBTM_STATUS btm_ble_update_pf_manu_data(tBTM_BLE_SCAN_COND_OP action,
                memset(p, 0xff, 2);
                p += 2;
            }
            len += 2;

           if (p_manu_data->data_len > 0)
            if (p_manu_data->data_len > 0 && p_manu_data->p_pattern_mask != NULL)
            {
                ARRAY_TO_STREAM(p, p_manu_data->p_pattern_mask, p_manu_data->data_len);
           len += (p_manu_data->data_len + 2);
                len += (p_manu_data->data_len);
            }

            BTM_TRACE_DEBUG("Manuf data length: %d", len);
        }