Modify platform scan filter logic 92/275492/2 submit/tizen/20220531.044319 submit/tizen/20220601.225953
authorWootak Jung <wootak.jung@samsung.com>
Thu, 26 May 2022 01:05:03 +0000 (10:05 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Thu, 26 May 2022 01:08:51 +0000 (10:08 +0900)
Add vendor filter flag
Don't request filter operation to oal if vendor filter not supported

Change-Id: Idcdca2f1b98ed9d079035a5d00641628fb17e4f5

bt-service/services/adapter/bt-service-core-adapter-le.c

index 0917fd266af2c4fec687efbdbf08a9dc9837a2ec..f2e38a00b347a9584cf0cafba178e6279476392b 100644 (file)
@@ -60,12 +60,13 @@ typedef struct {
        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;
@@ -1111,6 +1112,12 @@ static void __bt_le_event_handler(int event_type, gpointer event_data)
                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");
 
@@ -2036,11 +2043,12 @@ int _bt_register_scan_filter(const char *sender, bluetooth_le_scan_filter_t *fil
                                                .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);
@@ -2081,10 +2089,11 @@ int _bt_unregister_all_scan_filters(const char* 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);
@@ -2130,9 +2139,11 @@ int _bt_start_le_scan(const char *sender, uid_t uid, pid_t pid)
                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");
@@ -2156,9 +2167,11 @@ int _bt_start_le_scan(const char *sender, uid_t uid, pid_t pid)
                        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;
                }
        }
@@ -2271,9 +2284,11 @@ void _bt_hold_le_scan(void)
                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");
+               }
        }
 }
 
@@ -2299,9 +2314,11 @@ void _bt_restart_le_scan(void)
        _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);