I have been trying to tackle this problem for sometime and its getting the best of me, I will do my best to describe it comprehensviely:
We have a application on the CSR101X that uses Just Works pairing and works well with both IOS and Android. However, after completing a OTAU(V7) The bonding information stored in the NVM ie. Div, BDaddress, CCCD states etc are all lost! We also lose the LTKs from the SMP persistent stores. This means that a pre-bonded smartphone can no longer connect to our application because we no longer have their info (bdaddres, div etc.).
What is interesting is that the OTAU reads the IRK and merges it with the new image so that the IRK remains after the OTAU which means that any pre-bonded devices can resolve the private resolvable address ie. Think they are already bonded.
After the OTAU when an exisiting bonded device connects we get a SM_DIV_APPROVE_IND and because we no longer have the smartphones info we send a div revoked. This can be seen on the frontline scanner as LL_ENC_REJ so we know that the LTK is being revoked however, Android seems to be smart enough to recognise that the LL_ENC_REJ means it needs to re-bond and works as expected however, IOS seems to ignore this and stays in the connected state but cannot send data because of the insufficent encryption.
I was enquiring if there is anyway to force IOS to re-bond?
We have done some analyising today of the traffic and it would appear that the private resolvable address actaul resolves to the BDaddress in the .keyr file.
This would explain why IOS gets so confused as its the same address on both versions of firmware (old and updated) however, it would still be nice to be able to 'force' IOS into re-pairing with the board rather than fooling the IOS into thinking its a whole new device.