OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_NAME = 0x10, /**< device name */
OAL_BLE_SCAN_FILTER_FEATURE_MANUFACTURER_DATA = 0x20, /**< manufacturer data */
OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_DATA = 0x40, /**< service data */
+ OAL_BLE_SCAN_FILTER_FEATURE_RSSI_HIGH_THRESHOLD = 0x80, /**< rssi high threshold */
} oal_ble_scan_filter_feature_t;
/** GATT value type used in response to remote read requests */
int manufacturer_data_len;
uint8_t* manufacturer_data_mask;
int manufacturer_data_mask_len;
+ int rssi_high_threshold;
} oal_ble_scan_filter_t;
typedef struct {
feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_MANUFACTURER_DATA;
}
+ if (filter_data->added_features & OAL_BLE_SCAN_FILTER_FEATURE_RSSI_HIGH_THRESHOLD) {
+ scan_filter_setup.rssi_high_thres = filter_data->rssi_high_threshold;
+ feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_RSSI_HIGH_THRESHOLD;
+ }
BT_DBG("Filter selection 0x%.2x", feature_selection);
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)
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;
}
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;
.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);
BLUETOOTH_LE_SCAN_FILTER_FEATURE_DEVICE_NAME = 0x10, /**< device name */
BLUETOOTH_LE_SCAN_FILTER_FEATURE_MANUFACTURER_DATA = 0x20, /**< manufacturer data */
BLUETOOTH_LE_SCAN_FILTER_FEATURE_SERVICE_DATA = 0x40, /**< service data */
+ BLUETOOTH_LE_SCAN_FILTER_FEATURE_RSSI_HIGH_THRESHOLD = 0x80, /**< rssi high threshold */
} bluetooth_le_scan_filter_feature_t;
/**
int manufacturer_id; /**< manufacturer ID */
bluetooth_le_advertising_data_t manufacturer_data; /**< manufacturer data */
bluetooth_le_advertising_data_t manufacturer_data_mask; /**< manufacturer data mask */
+ int rssi_high_threshold; /**< rssi high threshold */
} bluetooth_le_scan_filter_t;
typedef struct {