ret_code_t pds_register(pds_evt_handler_t evt_handler) { if (m_pds.n_registrants >= MAX_REGISTRANTS) { return NRF_ERROR_NO_MEM; } VERIFY_PARAM_NOT_NULL(evt_handler); if (!MODULE_INITIALIZED) { ret_code_t retval; internal_state_reset(&m_pds); peer_id_init(); retval = fds_register(fds_evt_handler); if (retval != FDS_SUCCESS) { return NRF_ERROR_NO_MEM; } retval = fds_init(); if (retval != FDS_SUCCESS) { return NRF_ERROR_INTERNAL; } } m_pds.evt_handlers[m_pds.n_registrants] = evt_handler; m_pds.n_registrants += 1; return NRF_SUCCESS; }
ret_code_t pds_init() { ret_code_t ret; // Check for re-initialization if debugging. NRF_PM_DEBUG_CHECK(!m_module_initialized); ret = fds_register(fds_evt_handler); if (ret != NRF_SUCCESS) { return NRF_ERROR_INTERNAL; } ret = fds_init(); if (ret != NRF_SUCCESS) { return NRF_ERROR_STORAGE_FULL; } peer_id_init(); peer_ids_load(); m_module_initialized = true; return NRF_SUCCESS; }
/**@brief Function for the Peer Manager initialization. * * @param[in] erase_bonds Indicates whether bonding information should be cleared from * persistent storage during initialization of the Peer Manager. */ static void peer_manager_init(bool erase_bonds) { ble_gap_sec_params_t sec_params; ret_code_t err_code; err_code = pm_init(); APP_ERROR_CHECK(err_code); if (erase_bonds) { (void) pm_peers_delete(); } memset(&sec_params, 0, sizeof(ble_gap_sec_params_t)); // Security parameters to be used for all security procedures. sec_params.bond = SEC_PARAMS_BOND; sec_params.mitm = SEC_PARAMS_MITM; sec_params.lesc = SEC_PARAMS_LESC; sec_params.keypress = SEC_PARAMS_KEYPRESS; sec_params.io_caps = SEC_PARAMS_IO_CAPABILITIES; sec_params.oob = SEC_PARAMS_OOB; sec_params.min_key_size = SEC_PARAMS_MIN_KEY_SIZE; sec_params.max_key_size = SEC_PARAMS_MAX_KEY_SIZE; sec_params.kdist_own.enc = 1; sec_params.kdist_own.id = 1; sec_params.kdist_peer.enc = 1; sec_params.kdist_peer.id = 1; err_code = pm_sec_params_set(&sec_params); APP_ERROR_CHECK(err_code); err_code = pm_register(pm_evt_handler); APP_ERROR_CHECK(err_code); err_code = fds_register(fds_evt_handler); APP_ERROR_CHECK(err_code); ecc_init(); #if LESC_DEBUG_MODE memcpy(m_lesc_sk.sk, m_debug_lesc_sk.sk, BLE_GAP_LESC_P256_SK_LEN); err_code = ecc_p256_public_key_compute((uint8_t *) m_lesc_sk.sk, m_lesc_pk.pk); APP_ERROR_CHECK(err_code); #else err_code = ecc_p256_keypair_gen(m_lesc_sk.sk, m_lesc_pk.pk); APP_ERROR_CHECK(err_code); #endif /* Set the public key */ err_code = pm_lesc_public_key_set(&m_lesc_pk); APP_ERROR_CHECK(err_code); }
/**@brief Function for the Peer Manager initialization. * * @param[in] erase_bonds Indicates whether bonding information should be cleared from * persistent storage during initialization of the Peer Manager. */ static void peer_manager_init(bool erase_bonds) { ble_gap_sec_params_t sec_param; ret_code_t err_code; err_code = pm_init(); APP_ERROR_CHECK(err_code); if (erase_bonds) { err_code = pm_peers_delete(); 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.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 = 1; sec_param.kdist_own.id = 1; sec_param.kdist_peer.enc = 1; sec_param.kdist_peer.id = 1; 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); err_code = fds_register(fds_evt_handler); APP_ERROR_CHECK(err_code); }