int adv_inst_max;
int rpa_offloading;
int max_filter;
+ bool vendor_filter;
int le_2m_phy;
int le_coded_phy;
} bt_adapter_le_feature_info_t;
/* Set Default values */
-static bt_adapter_le_feature_info_t le_feature_info = {1, 0, 0, 0, 0};
+static bt_adapter_le_feature_info_t le_feature_info = {1, 0, 0, false, 0, 0};
typedef struct {
int adv_handle;
le_feature_info.le_coded_phy = le_features->le_coded_phy_support;
le_feature_info.max_filter = le_features->max_adv_filter;
+ if (le_feature_info.max_filter == 0) {
+ BT_INFO("vendor scan filter not supported. bt-service will do that");
+ le_feature_info.max_filter = 16;
+ le_feature_info.vendor_filter = false;
+ }
+
BT_INFO("Adapter LE 2M PHY Support [%s]", le_feature_info.le_2m_phy ? "TRUE" : "FALSE");
BT_INFO("Adapter LE CODED PHY Support [%s]", le_feature_info.le_coded_phy ? "TRUE" : "FALSE");
.manufacturer_data_mask_len = filter->manufacturer_data_mask.data_len , .added_features = filter->added_features,
.rssi_high_threshold = filter->rssi_high_threshold
};
- ret = gattc_register_scan_filter(&filter_data);
-
- if (OAL_STATUS_SUCCESS != ret) {
- BT_ERR("gattc_register_scan_filter failed");
- return _bt_convert_oal_status_to_bt_error(ret);
+ if (le_feature_info.vendor_filter == true) {
+ ret = gattc_register_scan_filter(&filter_data);
+ if (OAL_STATUS_SUCCESS != ret) {
+ BT_ERR("gattc_register_scan_filter failed");
+ return _bt_convert_oal_status_to_bt_error(ret);
+ }
}
scanner = __bt_find_scanner_from_list(sender);
for (l = scanner->filter_list; l != NULL; l = g_slist_next(l)) {
filter_data = l->data;
- ret = gattc_unregister_scan_filter(filter_data->slot_id);
-
- if (OAL_STATUS_SUCCESS != ret)
- BT_ERR("gattc_unregister_scan_filter failed for slot_id = [%d]", filter_data->slot_id);
+ if (le_feature_info.vendor_filter == true) {
+ ret = gattc_unregister_scan_filter(filter_data->slot_id);
+ if (OAL_STATUS_SUCCESS != ret)
+ BT_ERR("gattc_unregister_scan_filter failed for slot_id = [%d]", filter_data->slot_id);
+ }
}
g_slist_free_full(scanner->filter_list, g_free);
if (scan_filter_enabled == TRUE) {
if (scanner->filter_list == NULL) {
BT_INFO("Disable LE Scan Filter");
- ret = gattc_disable_scan_filter(0);
- if (ret != OAL_STATUS_SUCCESS)
- BT_ERR("gattc_disable_scan_filter failed");
+ if (le_feature_info.vendor_filter == true) {
+ ret = gattc_disable_scan_filter(0);
+ if (ret != OAL_STATUS_SUCCESS)
+ BT_ERR("gattc_disable_scan_filter failed");
+ }
scan_filter_enabled = FALSE;
} else {
BT_INFO("LE Filter Scan is continue");
scan_filter_enabled = FALSE;
} else {
BT_INFO("Enable LE Scan Filter");
- ret = gattc_enable_scan_filter(0);
- if (ret != OAL_STATUS_SUCCESS)
- BT_ERR("gattc_enable_scan_filter failed");
+ if (le_feature_info.vendor_filter == true) {
+ ret = gattc_enable_scan_filter(0);
+ if (ret != OAL_STATUS_SUCCESS)
+ BT_ERR("gattc_enable_scan_filter failed");
+ }
scan_filter_enabled = TRUE;
}
}
BT_ERR("gattc_stop_le_discovery failed");
if (scan_filter_enabled == TRUE) {
- ret = gattc_disable_scan_filter(0);
- if (ret != OAL_STATUS_SUCCESS)
- BT_ERR("gattc_disable_scan_filter failed");
+ if (le_feature_info.vendor_filter == true) {
+ ret = gattc_disable_scan_filter(0);
+ if (ret != OAL_STATUS_SUCCESS)
+ BT_ERR("gattc_disable_scan_filter failed");
+ }
}
}
_bt_set_scan_parameters(&le_scan_params);
if (scan_filter_enabled == TRUE) {
- ret = gattc_enable_scan_filter(0);
- if (ret != OAL_STATUS_SUCCESS)
- BT_ERR("gattc_enable_scan_filter failed");
+ if (le_feature_info.vendor_filter == true) {
+ ret = gattc_enable_scan_filter(0);
+ if (ret != OAL_STATUS_SUCCESS)
+ BT_ERR("gattc_enable_scan_filter failed");
+ }
}
ret = gattc_start_le_discovery(g_gatt_client_id);