Implement RSSI scan filter
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / services / adapter / bt-service-core-adapter-le.c
index c2a9748..d16e6ae 100644 (file)
@@ -618,7 +618,7 @@ static gboolean __bt_check_scan_result_uuid(const char *adv_data,
        return FALSE;
 }
 
-static gboolean __bt_check_scan_result_with_filter(const char *device_address,
+static gboolean __bt_check_scan_result_with_filter(const char *device_address, int rssi,
                const char *adv_data, int adv_data_len,
                const char *scan_data, int scan_data_len,
                const bt_adapter_le_scanner_t *scanner)
@@ -890,6 +890,13 @@ static gboolean __bt_check_scan_result_with_filter(const char *device_address,
                                continue;
                }
 
+               /* Check RSSI filter */
+               if (filter_data->added_features &
+                       BLUETOOTH_LE_SCAN_FILTER_FEATURE_RSSI_HIGH_THRESHOLD) {
+                       if (rssi < filter_data->rssi_high_threshold)
+                               continue;
+               }
+
                BT_INFO("The scan result is conformable.");
                return TRUE;
        }
@@ -932,7 +939,7 @@ static void __bt_le_handle_device_found(event_ble_scan_result_info *scan_result)
                if (scanner->is_scanning == FALSE)
                        continue;
 
-               if (__bt_check_scan_result_with_filter(address, (const char *)adv_ind_data,
+               if (__bt_check_scan_result_with_filter(address, scan_result->rssi, (const char *)adv_ind_data,
                                adv_ind_len, (const char *)scan_resp_data, scan_resp_len, scanner) == FALSE)
                        continue;
 
@@ -1989,7 +1996,8 @@ int _bt_register_scan_filter(const char *sender, bluetooth_le_scan_filter_t *fil
                                                .service_data_mask = filter->service_data_mask.data.data, .service_data_mask_len = filter->service_data_mask.data_len,
                                                .manufacturer_id = filter->manufacturer_id, .manufacturer_data = filter->manufacturer_data.data.data,
                                                .manufacturer_data_len = filter->manufacturer_data.data_len, .manufacturer_data_mask = filter->manufacturer_data_mask.data.data,
-                                               .manufacturer_data_mask_len = filter->manufacturer_data_mask.data_len , .added_features = filter->added_features
+                                               .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);