This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Misunderstanding about adertising mode "Whitelist"

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);    
}

Parents
  • Use SDK6.0 and SD7.0, still have this issue.

    void advertising_start(void) { uint32_t err_code;

    // Initialize advertising parameters (used when starting advertising).
    memset(&m_adv_params, 0, sizeof(m_adv_params));
    
    m_adv_params.type        = BLE_GAP_ADV_TYPE_ADV_IND;
    m_adv_params.p_peer_addr = NULL;    // Undirected advertisement.
    m_adv_params.interval    = APP_ADV_INTERVAL;
    m_adv_params.timeout     = APP_ADV_TIMEOUT_IN_SECONDS;
      
    
    ble_gap_whitelist_t  whitelist;
    ble_gap_addr_t       * p_whitelist_addr[BLE_GAP_WHITELIST_ADDR_MAX_COUNT];
    ble_gap_irk_t        * p_whitelist_irk[BLE_GAP_WHITELIST_IRK_MAX_COUNT];
            
    whitelist.addr_count = BLE_GAP_WHITELIST_ADDR_MAX_COUNT;
    whitelist.irk_count  = BLE_GAP_WHITELIST_IRK_MAX_COUNT;
    whitelist.pp_addrs   = p_whitelist_addr;
    whitelist.pp_irks    = p_whitelist_irk;
            
    err_code = dm_whitelist_create(&m_app_handle, &whitelist);
    APP_ERROR_CHECK(err_code);
            
    if ((whitelist.addr_count != 0) || (whitelist.irk_count != 0))
    {
        m_adv_params.fp          = BLE_GAP_ADV_FP_FILTER_BOTH;
        m_adv_params.p_whitelist = &whitelist;
        advertising_init(BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED);    
    }
    else
    {
        m_adv_params.fp          = BLE_GAP_ADV_FP_ANY;
        m_adv_params.p_whitelist = NULL;
        advertising_init(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
    }
    
    
    err_code = sd_ble_gap_adv_start(&m_adv_params);
    APP_ERROR_CHECK(err_code);
    

    }

  • Patch in SDK6.0, use SD7.0: The issue 1 and 2 are fixed.

Reply Children
No Data
Related