Dear Nordic Developer Zone,
I am using nRF51822 with softdevice.
I don't understand very well the advertising mode "whitelist". My target is to be able to connect with only one paired iPhone.
So, the first time I power on the nRF51822, I advertise without restriction and all centrals can be pairing with the device. But when a central has been paired, the nRF51822 advertises using the whitelist mode.
I thought that only the paired iPhone will see the device advertisement due to the whitelist, but I read somewhere on that the whitelist is only used in the LL (link layer) of the nRF51822 to accept or not the connection of the central.
Here is the behaviour I don't understand : When my first iPhone is paired to the nRF51822 and it advertises with whitelist mode, I am able to connect and pair another iPhone to my nRF51822.
I am sure that I don't understand something pretty obvious because I didn't find anything about that on that forum.
Is there someone to help me?
Should I modify MAX_NUM_MASTER_WHITE_LIST and MAX_BONDS_IN_FLASH constants to allow only one central in the whitelist?
Here is the code I am using to choose the advertising mode:
/**@brief Start advertising.
*/
void ble_kernel_advertising_start(void)
{
uint32_t err_code;
ble_gap_adv_params_t adv_params;
ble_gap_whitelist_t whitelist;
ble_gap_addr_t peer_address;
// Initialise advertising parameters (used when starting advertising)
memset(&adv_params, 0, sizeof(adv_params));
adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;
adv_params.p_peer_addr = NULL;// Undirected advertisement
adv_params.p_whitelist = NULL;
adv_params.fp = BLE_GAP_ADV_FP_ANY;
adv_params.interval = APP_ADV_INTERVAL;
adv_params.timeout = APP_ADV_TIMEOUT_IN_SECONDS;
err_code = ble_bondmngr_whitelist_get(&whitelist);
APP_ERROR_CHECK(err_code);
if (whitelist.irk_count != 0)
{
adv_params.fp = BLE_GAP_ADV_FP_FILTER_BOTH;
adv_params.p_whitelist = &whitelist;
advertising_init(BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED);
}
else
{
advertising_init(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
}
err_code = sd_ble_gap_adv_start(&adv_params);
APP_ERROR_CHECK(err_code);
}