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

sd_ble_gap_connect NRF_ERROR_INVALID_PARAM whitelist

Hi every one.

I am developing on S130 SDK 11 and I try to use whitelist connection for optimisation. I have currently a working project which scan for 1 sec for any BLE and then try to connect each one by one and look for services and so on.

Today I want to optimise my solution so I want to use whitelist to speed up the connection time.

But I the function send me back NRF_ERROR_INVALID_PARAM 0x07 and I can't figure out why.

Could some one explain me what did I make wrong ?

ble_gap_addr_t* m_addrstoConnectList[BLE_GAP_WHITELIST_ADDR_MAX_COUNT];
PeerCtxt* m_peersToConnectStack[BLE_GAP_WHITELIST_ADDR_MAX_COUNT];
uint8_t m_peersToConnectStackCount;


m_scan_params.interval = BLE_SCAN_INTERVAL_U; //47 ms
m_scan_params.window = BLE_SCAN_WINDOW_U; //24 ms
m_scan_params.timeout = BLE_SCAN_DURATION_S; //1 s


m_gapConnParams.min_conn_interval = BLE_CONN_MIN_INTERVAL_U; //10 ms
m_gapConnParams.max_conn_interval = BLE_CONN_MAX_INTERVAL_U; //50 ms
m_gapConnParams.conn_sup_timeout = BLE_CONN_SUPERVISION_TIMEOUT_U; //500 ms
m_gapConnParams.slave_latency = 0;


uint32_t _ble_app_connectPeers(void) {
    uint32_t errorCode = 0;
    PeerCtxt* pPeer = NULL;
    ble_gap_whitelist_t whitelist = {0};
    whitelist.pp_addrs = m_addrstoConnectList;
    whitelist.addr_count = 0;
    for (uint8_t index = 0;index < m_peersToConnectStackCount;++index) {
        pPeer = (PeerCtxt*) m_peersToConnectStack[index];
        if (pPeer->isUsed) {
            m_addrstoConnectList[whitelist.addr_count] = &pPeer->peerAddr;
            whitelist.addr_count += 1;
        }
    }
    m_scan_params.selective = true;
    m_scan_params.p_whitelist = &whitelist;
    errorCode = sd_ble_gap_connect(NULL, &m_scan_params, &m_gapConnParams);
    return errorCode;
}
Related