This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Central scanning with whitelist

Hello,

I have an application to develop in which Central device is scanning with use of whitelist if it is not connected but have saved peers.  If peer list is empty, device shouldn't scan at all and if user will choose proximity pairing mode - it should scan for every peripheral with specified name.

I have implemented it basing on ble_app_hrs_c example and after connection to peripheral device, peer manager is returning an error NRF_ERROR_NOT_FOUND when callingpm_whitelist_set function. In function whitelist_load() from ble_app_hrs_c example it looks following:

static void whitelist_load()
{
    ret_code_t   ret;
    pm_peer_id_t peers[8];
    uint32_t     peer_cnt;

    memset(peers, PM_PEER_ID_INVALID, sizeof(peers));
    peer_cnt = (sizeof(peers) / sizeof(pm_peer_id_t));

    // Load all peers from flash and whitelist them.
    peer_list_get(peers, &peer_cnt);

    /* HERE in my application I am checking detected peers list.
       peer number prints out as 1 and peer list contain one
       peer with index 0 */

    NRF_LOG_INFO("Get peer list");
    ret = pm_whitelist_set(peers, peer_cnt);
    /* HERE error is returned */
    APP_ERROR_CHECK(ret);

    NRF_LOG_INFO("Whitelist done!");
    // Setup the device identies list.
    // Some SoftDevices do not support this feature.
    ret = pm_device_identities_list_set(peers, peer_cnt);
    if (ret != NRF_ERROR_NOT_SUPPORTED)
    {
        APP_ERROR_CHECK(ret);
    }
}

So there is one peer and even pm_peer_count() function returns 1 but for some reason pm_whitelist_set() function has problem in finding it.

Could you help me in this case or provide some simple example of application where Central is switching between those 3 states (No scanning, scanning with whitelist, normal scan with filters)

Best regards

Related