Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Static / programmable whitelist

Hi,

Is it possible to add a static bluetooth address to the whitelist?

I am using SDK 14.2.0, device is nrf52832 + peer manager.

BR

bjarke

Parents
  • Hi,

    Whitelist can be used both by peripheral (to filter which centrals can connect) and by central (to filter what peripherals to connect to.) I assume that you need this for a peripheral.

    If you use the Advertising Module then it is your responsibility to provide a whitelist on the BLE_ADV_EVT_WHITELIST_REQUEST event.

    You may then choose to fetch a whitelist from peer manager using pm_whitelist_get(), as is done for instance in the HID Mouse Application example.

    Or, in your case, you may make a whitelist manually using any Bluetooth addresses that you would like. The whitelist is an array of ble_gap_addr_t structures and an array of ble_gap_irk_t structures. (The IRK structure is only needed for resolvable addresses, not for static ones.)

    In any case you must reply to the whitelist request event with a call to ble_advertising_whitelist_reply(), where you provide the whitelist.

    Regards,
    Terje

Reply
  • Hi,

    Whitelist can be used both by peripheral (to filter which centrals can connect) and by central (to filter what peripherals to connect to.) I assume that you need this for a peripheral.

    If you use the Advertising Module then it is your responsibility to provide a whitelist on the BLE_ADV_EVT_WHITELIST_REQUEST event.

    You may then choose to fetch a whitelist from peer manager using pm_whitelist_get(), as is done for instance in the HID Mouse Application example.

    Or, in your case, you may make a whitelist manually using any Bluetooth addresses that you would like. The whitelist is an array of ble_gap_addr_t structures and an array of ble_gap_irk_t structures. (The IRK structure is only needed for resolvable addresses, not for static ones.)

    In any case you must reply to the whitelist request event with a call to ble_advertising_whitelist_reply(), where you provide the whitelist.

    Regards,
    Terje

Children
  • Hi,

    I have tried to send a static address using the ble_advertising_whitelist_reply(), However I can't get it to work.

    Setting up static addr:

    ble_gap_addr_t public_device[1] = {{
        .addr_type = BLE_GAP_ADDR_TYPE_PUBLIC,
        .addr = {0x8d, 0xaa, 0xa4, 0x2d, 0x65, 0x94}, // samsung tablet
    }};
    
    ble_gap_addr_t const * whitelist_addrs = &public_device;
    
    irk_cnt = 0;
    addr_cnt = 1;
    
    err_code = ble_advertising_whitelist_reply(&m_advertising,
        &whitelist_addrs,
        addr_cnt,
        whitelist_irks,
        irk_cnt);

    err_code return is 0

    However advertising never starts.

    If I replace the static addr with the pm_whitelist_get(whitelist_addr, &addr_cnt, whitelist_irks,  &irk_cnt); it works.

    Is there a connection between whitelist, advertising and peer manager behind the scene?

    Regards

    Bjarke

  • Hi again,

    Look at similar problem 

    https://devzone.nordicsemi.com/f/nordic-q-a/18463/setting-up-whitelist-in-sdk-v12-2-0

    I tried to reproduce...

    If I use

    ble_gap_addr_t whitelist_addr = {1, BLE_GAP_ADDR_TYPE_PUBLIC, {0x8d,0xaa,0xa4,0x2d,0x65,0x94}};
    const ble_gap_addr_t      *p_whitelist_addr[] = {&whitelist_addr};
    err_code = sd_ble_gap_whitelist_set(p_whitelist_addr, 1);
    
    APP_ERROR_CHECK(err_code);
    err_code = ble_advertising_whitelist_reply(&m_advertising,
    								p_whitelist_addr[0],
    								1,
    								NULL,
    								0);

    I do get fast advertising with whitelist, but somehow the address?(I suppose) is wrong, cause I cannot connect.

    Changing p_whitelist_addr[0] to NULL does not do anything.

    BR

    bjarke

  • Hi,

    I have been looking at ble_advertising.c, and can see that for Softdevice >2, the adresses are not used in the ble_advertising_whitelist_reply(...

    from ble_advertising.c:

    uint32_t ble_advertising_whitelist_reply(ble_advertising_t * const p_advertising,
                                             ble_gap_addr_t    const * p_gap_addrs,
                                             uint32_t               addr_cnt,
                                             ble_gap_irk_t  const * p_gap_irks,
                                             uint32_t               irk_cnt)
    {
        if (!p_advertising->whitelist_reply_expected)
        {
            return NRF_ERROR_INVALID_STATE;
        }
    
        p_advertising->whitelist_reply_expected = false;
    
        #if (NRF_SD_BLE_API_VERSION <= 2)
    
            p_advertising->whitelist.addr_count = addr_cnt;
            p_advertising->whitelist.irk_count  = irk_cnt;
    
            for (uint32_t i = 0; i < addr_cnt; i++)
            {
                *p_advertising->whitelist.pp_addrs[i] = p_gap_addrs[i];
            }
    
            for (uint32_t i = 0; i < irk_cnt; i++)
            {
                *p_advertising->whitelist.pp_irks[i] = p_gap_irks[i];
            }
    
        #else
    
            p_advertising->whitelist_in_use = ((addr_cnt > 0) || (irk_cnt > 0));
    
        #endif
    
        return NRF_SUCCESS;
    }
    

    Any ideas?

    Regards

  • Hi Terje,

    I can't get it to work with SDK 14 and softdevice 5. It seems that whitelist depends on peer manager and the creation of a peer ID. But I cant get a static address set and whitelisted.

    Regards

    Bjarke

  • Hi,

    I am very sorry for not getting back to you previously. I was out-of-office for some time lately.

    Sadly it looks like Peer Manager is not designed to work together with a custom whitelist. From Peer Manager documentation: "Note that if you include the Peer Manager in an application and want to use whitelisting, the whitelist must be created by the Peer Manager." I will do some investigation into what is possible, and see if the whitelist functionality within Peer Manager can be altered or disabled, or if there is some way to get Peer Manager to accept a non-peer address for the whitelist. I should have a clear answer within a couple of days, and hopefully a working example.

    Regards,
    Terje

Related