Example:nRF5_SDK_15.2.0_9412b96\examples\ble_peripheral\ble_app_ancs_c\pca10040e\s112\arm4
Example:nRF5_SDK_15.2.0_9412b96\examples\ble_peripheral\ble_app_ancs_c\pca10040e\s112\arm4
Hi,
The SDK examples will reject bond refresh by default. Please have a look at my answers in this thread, they explain how you can override this: https://devzone.nordicsemi.com/f/nordic-q-a/38663/keep-getting-failed-to-secure-connection-error/158087#158087
I modified the following places. After the pairing is successful, I forgot the device in the Bluetooth settings of the iphone. After the new pairing is successful, I will turn off the Bluetooth of the iphone, and then open the Bluetooth of the iphone. The ancs of the iphone cannot be reconnected automatically. How to solve this problem?
I forgot my device and re-paired it. After I quit the bluetooth page of my phone, the connection was automatically disconnected
Hi,
m_whitelist_peer_cnt should not be incremented if you get BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE so the code should have been something like this instead:
// Note: You should check on what kind of white list policy your application should use. if ( p_evt->params.peer_data_update_succeeded.flash_changed && (p_evt->params.peer_data_update_succeeded.data_id == PM_PEER_DATA_ID_BONDING)) { NRF_LOG_DEBUG("New Bond, add the peer to the whitelist if possible"); NRF_LOG_DEBUG("\tm_whitelist_peer_cnt %d, MAX_PEERS_WLIST %d", m_whitelist_peer_cnt + 1, BLE_GAP_WHITELIST_ADDR_MAX_COUNT); if (m_whitelist_peer_cnt < BLE_GAP_WHITELIST_ADDR_MAX_COUNT) { // Bonded to a new peer, add it to the whitelist. m_whitelist_peers[m_whitelist_peer_cnt++] = p_evt->peer_id; // The whitelist has been modified, update it in the Peer Manager. ret = pm_device_identities_list_set(m_whitelist_peers, m_whitelist_peer_cnt); if (ret == BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE) { m_whitelist_peers[--m_whitelist_peer_cnt] = PM_PEER_ID_INVALID; } else if (ret != NRF_ERROR_NOT_SUPPORTED) { APP_ERROR_CHECK(ret); } ret = pm_whitelist_set(m_whitelist_peers, m_whitelist_peer_cnt); APP_ERROR_CHECK(ret); NRF_LOG_HEXDUMP_INFO(m_whitelist_peers, sizeof(m_whitelist_peers)); }
Regarding the re-connect issue, I see the same here. After bond refresh I need to manually re-connect to the ANCS. However, autoconnect seems to work fine after that. This might be an iOS limitation.
Hi,
m_whitelist_peer_cnt should not be incremented if you get BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE so the code should have been something like this instead:
// Note: You should check on what kind of white list policy your application should use. if ( p_evt->params.peer_data_update_succeeded.flash_changed && (p_evt->params.peer_data_update_succeeded.data_id == PM_PEER_DATA_ID_BONDING)) { NRF_LOG_DEBUG("New Bond, add the peer to the whitelist if possible"); NRF_LOG_DEBUG("\tm_whitelist_peer_cnt %d, MAX_PEERS_WLIST %d", m_whitelist_peer_cnt + 1, BLE_GAP_WHITELIST_ADDR_MAX_COUNT); if (m_whitelist_peer_cnt < BLE_GAP_WHITELIST_ADDR_MAX_COUNT) { // Bonded to a new peer, add it to the whitelist. m_whitelist_peers[m_whitelist_peer_cnt++] = p_evt->peer_id; // The whitelist has been modified, update it in the Peer Manager. ret = pm_device_identities_list_set(m_whitelist_peers, m_whitelist_peer_cnt); if (ret == BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE) { m_whitelist_peers[--m_whitelist_peer_cnt] = PM_PEER_ID_INVALID; } else if (ret != NRF_ERROR_NOT_SUPPORTED) { APP_ERROR_CHECK(ret); } ret = pm_whitelist_set(m_whitelist_peers, m_whitelist_peer_cnt); APP_ERROR_CHECK(ret); NRF_LOG_HEXDUMP_INFO(m_whitelist_peers, sizeof(m_whitelist_peers)); }
Regarding the re-connect issue, I see the same here. After bond refresh I need to manually re-connect to the ANCS. However, autoconnect seems to work fine after that. This might be an iOS limitation.
I use 52810 development board, 15.2 SDK, S112 project, has been changed according to the requirements. After forgetting the device on the iphone, I paired it in Bluetooth. After successfully exiting the Bluetooth interface, ANCs automatically disconnected.
The bottom of the list is to exit the bluetooth page of the phone after the new pairing