pm_peer_id_t im_peer_id_get_by_master_id(ble_gap_master_id_t * p_master_id) { ret_code_t err_code; // For each stored peer, check if the master_id match p_master_id pm_peer_id_t compared_peer_id = pdb_next_peer_id_get(PM_PEER_ID_INVALID); while (compared_peer_id != PM_PEER_ID_INVALID) { pm_peer_data_flash_t compared_data; ble_gap_master_id_t const * p_compared_master_id; err_code = pdb_read_buf_get(compared_peer_id, PM_PEER_DATA_ID_BONDING, &compared_data, NULL); if (err_code == NRF_SUCCESS) { p_compared_master_id = &compared_data.p_bonding_data->own_ltk.master_id; if (im_master_ids_compare(p_master_id, p_compared_master_id)) { // If a matching master_id is found return the peer_id return compared_peer_id; } p_compared_master_id = &compared_data.p_bonding_data->peer_ltk.master_id; if (im_master_ids_compare(p_master_id, p_compared_master_id)) { // If a matching master_id is found return the peer_id return compared_peer_id; } } compared_peer_id = pdb_next_peer_id_get(compared_peer_id); } // If no matching master_id is found return the PM_PEER_ID_INVALID return PM_PEER_ID_INVALID; }
pm_peer_id_t im_peer_id_get_by_master_id(ble_gap_master_id_t * p_master_id) { pm_peer_id_t peer_id; pm_peer_data_flash_t peer_data; NRF_PM_DEBUG_CHECK(m_module_initialized); NRF_PM_DEBUG_CHECK(p_master_id != NULL); pds_peer_data_iterate_prepare(); // For each stored peer, check if the master_id matches p_master_id while (pds_peer_data_iterate(PM_PEER_DATA_ID_BONDING, &peer_id, &peer_data)) { if (im_master_ids_compare(p_master_id, &peer_data.p_bonding_data->own_ltk.master_id) || im_master_ids_compare(p_master_id, &peer_data.p_bonding_data->peer_ltk.master_id)) { // If a matching master ID is found then return the peer ID. return peer_id; } } // If no matching master ID is found return PM_PEER_ID_INVALID. return PM_PEER_ID_INVALID; }