Hi All,
I'm currently using SDK12 for nRF52832. In my BLE peripheral project I store central address who engaged my device to listen for ANCS notifications. This address is used to decide if ANCS resubscription is needed for a reconnected device.
I use im_ble_addr_get() to get that address and it works in most cases. Problem occurs when I call im_ble_addr_get() for just bonded peer to get its address. After bonding the peer address is changed (I don't really know why), but im_ble_addr_get() still produces an old address.
I made my function to get correct address right after bonding:
static void ble_get_real_address(uint16_t peer_id, ble_gap_addr_t *addr)
{
pm_peer_data_t peer_data;
pm_peer_data_bonding_t bond_data;
peer_data.p_bonding_data = &bond_data;
uint32_t const buf_size = sizeof(bond_data);
pds_peer_data_read(peer_id, PM_PEER_DATA_ID_BONDING, &peer_data, &buf_size);
*addr = bond_data.peer_id.id_addr_info;
}
static void pm_evt_handler(pm_evt_t const * p_evt)
{
....
case PM_EVT_PEER_DATA_UPDATE_SUCCEEDED:
if (p_evt->params.peer_data_update_succeeded.data_id == PM_PEER_DATA_ID_BONDING)
ble_get_real_address(p_evt->peer_id, &real_central_addr);
break;
}
So my questions are:
1) is it correct way to get peer address? may be I missed another more suitable function?
2) if yes, should im_ble_addr_get() work right after bonding? may be I missed another call to get m_connections[] (id_manager.c) updated after receiving bonding done event?
3) if I'am right, does this issue fixed in latest SDK (15)?
Thanks in advance!