Loading system/bta/dm/bta_dm_api.c +33 −5 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading system/btif/src/btif_gatt_client.c +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 */ Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -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, Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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, Loading system/stack/btm/btm_ble_adv_filter.c +32 −22 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) { Loading @@ -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) { Loading @@ -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); } Loading Loading
system/bta/dm/bta_dm_api.c +33 −5 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading
system/btif/src/btif_gatt_client.c +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 */ Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading @@ -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, Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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, Loading
system/stack/btm/btm_ble_adv_filter.c +32 −22 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) { Loading @@ -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) { Loading @@ -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); } Loading