I am using NRF SDK 17.1.0
I inherited some legacy code that was a mess, and rewrote it.
Part 1 -
First I skipped the peer manager thinking it was not necessary.
Then I re-added the peer manager to a peripheral to allow faster reconnects in the event we lose connection.
It happens frequently. The device is frequently submerged in water. Without peer manager, reconnection was slow.
I first was using a manual deactivation of advertising on connect, and activation of advertising on disconnect, and if multiple centrals are nearby, I noticed some cross pairing issues.
Later, I noticed 3 things
- The legacy code I inherited never turned off advertising, tho I don't see it advertise in nrf connect while connected
- The legacy code I inherited was skipping
pm_handler_disconnect_on_sec_failure in the pm_evt_handler(), I re-enabled it
- I set config.ble_adv_on_disconnect_disabled to false
Between these 2 actions, it seems like the cross pairing issue is gone.
Question 1&2 - is this the correct way to handle advertise on disconnect? Should I never be turning off advertising after a connection is established?
Part 2 -
If a central is scanning and see's my peripheral, it tries to connect.
The central hammers the peripheral and I get an endless loop of
<warning> app: BLE_GAP_EVT_CONNECTED
<info> peer_manager_handler: Connection security failed: role: Peripheral, conn_handle: 0x0, procedure: Encryption, error: 4102
<warning> peer_manager_handler: Disconnecting conn_handle 0.
<warning> app: BLE_GAP_EVT_DISCONNECTED
I expect the security failure given that it isn't paired/bonded.
Question 3 - If I delete the bonds on the peripheral, start advertising (undirected) and want this new central to connect, It seems like it stops scanning and fails to connect.
I am trying to determine if this is a bug in my central or the peripheral. Still gathering data. Open to suggestions.
Thanks!