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

BLE peripheral with multiple centrals and peer manager

Hello,

I am developing application which allows multiple central devices (phones) connect to a single peripheral device (custom board with nRF52840). I took example from /ble_peripheral/experimental/ble_app_multiperipheral as reference for my project. So far I have succeeded in connecting multiple centrals to the board and reading services and characteristics.

Also I need to have one service with public characteristics and another one - with private. I don't use bonding, I use SEC_JUST_WORKS with custom PIN code. Before experimenting with central count, I used module ble_advertising for more simple setup. My app with private, public characteristics was working fine.

Now I use ble setup code from the mentioned example. Using peer manager causes application to crash with code NRF_ERROR_INVALID_STATE on first connection event. How should I setup peer manager to work with multiple centrals?

Here is my current initialization code for peer manager:

static void peer_manager_init(void)
{
    ble_gap_sec_params_t sec_param;
    ret_code_t           err_code;

    err_code = pm_init();
    APP_ERROR_CHECK(err_code);

    memset(&sec_param, 0, sizeof(ble_gap_sec_params_t));

    // Security parameters to be used for all security procedures.
    sec_param.bond           = SEC_PARAM_BOND;
    sec_param.mitm           = SEC_PARAM_MITM;
    sec_param.lesc           = SEC_PARAM_LESC;
    sec_param.keypress       = SEC_PARAM_KEYPRESS;
    sec_param.io_caps        = SEC_PARAM_IO_CAPABILITIES;
    sec_param.oob            = SEC_PARAM_OOB;
    sec_param.min_key_size   = SEC_PARAM_MIN_KEY_SIZE;
    sec_param.max_key_size   = SEC_PARAM_MAX_KEY_SIZE;
    sec_param.kdist_own.enc  = 0;
    sec_param.kdist_own.id   = 0;
    sec_param.kdist_peer.enc = 0;
    sec_param.kdist_peer.id  = 0;

    err_code = pm_sec_params_set(&sec_param);
    APP_ERROR_CHECK(err_code);

    err_code = pm_register(pm_evt_handler);
    APP_ERROR_CHECK(err_code);
}
 

Parents Reply Children
No Data
Related