/**@brief Function for providing peer information to DFU for re-establishing bonded connection in * DFU mode. */ static void dfu_app_set_peer_data(void) { uint32_t err_code; dm_sec_keyset_t key_set; /** [DFU bond sharing] */ err_code = dm_distributed_keys_get(&m_dm_handle, &key_set); APP_ERROR_CHECK(err_code); m_peer_data.addr = key_set.keys_central.p_id_key->id_addr_info; m_peer_data.enc_info = *key_set.keys_central.enc_key.p_enc_info; m_peer_data.irk = key_set.keys_central.p_id_key->id_info; err_code = dfu_ble_svc_set_peer_data(&m_peer_data); APP_ERROR_CHECK(err_code); /** [DFU bond sharing] */ }
/**@brief Function for providing peer information to DFU for re-establishing a bonded connection in * DFU mode. * * @param[in] conn_handle Connection handle for the connection requesting DFU mode. */ static void dfu_app_peer_data_set(uint16_t conn_handle) { uint32_t err_code; dm_sec_keyset_t key_set; uint32_t app_context_data = 0; dm_application_context_t app_context; /** [DFU bond sharing] */ err_code = dm_handle_get(conn_handle, &m_dm_handle); if (err_code == NRF_SUCCESS) { err_code = dm_distributed_keys_get(&m_dm_handle, &key_set); if (err_code == NRF_SUCCESS) { APP_ERROR_CHECK(err_code); m_peer_data.addr = key_set.keys_central.p_id_key->id_addr_info; m_peer_data.irk = key_set.keys_central.p_id_key->id_info; m_peer_data.enc_key.enc_info = key_set.keys_periph.enc_key.p_enc_key->enc_info; m_peer_data.enc_key.master_id = key_set.keys_periph.enc_key.p_enc_key->master_id; err_code = dfu_ble_svc_peer_data_set(&m_peer_data); APP_ERROR_CHECK(err_code); app_context_data = (DFU_APP_ATT_TABLE_CHANGED << DFU_APP_ATT_TABLE_POS); app_context.len = sizeof(app_context_data); app_context.p_data = (uint8_t *)&app_context_data; app_context.flags = 0; err_code = dm_application_context_set(&m_dm_handle, &app_context); APP_ERROR_CHECK(err_code); } else { // Keys were not available, thus we have a non-encrypted connection. err_code = dm_peer_addr_get(&m_dm_handle, &m_peer_data.addr); APP_ERROR_CHECK(err_code); err_code = dfu_ble_svc_peer_data_set(&m_peer_data); APP_ERROR_CHECK(err_code); } } /** [DFU bond sharing] */ }