I have 2 custom boards running as BLE central/peripheral.
The peripheral is running the beacon broadcast example from SDK 17, ble_app_beacon.
The central is running custom firmware talking to the soft device API directly (not using nRF SDK).
I have setup scanning successfully without any filter policy and have confirmed I can observe the broadcasts from ble_app_beacon.
I would like the to limit the adverts that are discovered by the central using a whitelist, so I then attempted to add a whitelist to the central as follows:
gapScanParams.extended = 0
gapScanParams.report_incomplete_evts = 0;
gapScanParams.active = (IsActive == 1) ? 1: 0;
gapScanParams.filter_policy = BLE_GAP_SCAN_FP_WHITELIST;
gapScanParams.scan_phys = BLE_GAP_PHY_1MBPS;
gapScanParams.interval = 50;
gapScanParams.window = 50;
gapScanParams.timeout = Timeout;
gapScanParams.channel_mask[0] = 0x00;
gapScanParams.channel_mask[1] = 0x00;
gapScanParams.channel_mask[2] = 0x00;
gapScanParams.channel_mask[3] = 0x00;
gapScanParams.channel_mask[4] = 0x00;
ble_gap_addr_t wl_addr_array[BLE_GAP_WHITELIST_ADDR_MAX_COUNT];
wl_addr_array[0].addr_type = BLE_GAP_ADDR_TYPE_PUBLIC;
wl_addr_array[0].addr_id_peer = 0;
wl_addr_array[0].addr[0] = 0x24;
wl_addr_array[0].addr[1] = 0xDE;
wl_addr_array[0].addr[2] = 0x6F;
wl_addr_array[0].addr[3] = 0xE8;
wl_addr_array[0].addr[4] = 0x26;
wl_addr_array[0].addr[5] = 0xEA;
ble_gap_addr_t * p_wl_addrs_array[BLE_GAP_WHITELIST_ADDR_MAX_COUNT];
for (uint8_t i = 0; i < BLE_GAP_WHITELIST_ADDR_MAX_COUNT; ++i)
{
p_wl_addrs_array[i] = &wl_addr_array[i];
}
ble_gap_addr_t * * pp_wl_addrs = p_wl_addrs_array;
uint32_t err_code = sd_ble_gap_whitelist_set((ble_gap_addr_t const * *)pp_wl_addrs, 1);
APP_ERROR_CHECK(err_code);
BleData.p_data = BleScanBuffer;
BleData.len = sizeof(BleScanBuffer);
err_code = sd_ble_gap_scan_start(&gapScanParams, &BleData);
APP_ERROR_CHECK(err_code);
The calls to sd_ble_gap_whitelist_set and sd_ble_gap_scan_start complete successfully, but I don't receive any 'BLE_GAP_EVT_ADV_REPORT' events.
The ble_app_beacon adverts are setup to use a public address. The advertising type is BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and the flags are set to BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE.
Can anyone tell me what I've missed?
Cheers