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