Central whitelist without peer manager

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

Parents Reply Children
Related