Other Parts Discussed in Thread: SYSCONFIG
We are using the CC2652RB in a peripheral device based on the SimplePeripheral example, currently with SDK v4.20. We have a one-to-many use case where a multitude of cell phones as centrals will connect to our peripheral over time. We therefore do not use pairing or bonding. Our problem is that after a firmware update in which we added some new characteristics to our proprietary Bluetooth service, any iOS device that had previously connected to any of our devices acted as if the new characteristics did not exist. It seems as though the phone cached the attribute table and refuses to rediscover the now-different list.
I know that there is a "Service Changed" characteristic as part of the GATT Service as laid out in the Bluetooth Core Specification, and Apple's Accessory Design Guidelines state that it shall be used if the service may ever be changed. However, it also specifies that this is for bonded devices, and the change is communicated via an indication on reconnection. As we do not use bonding, and a non-bonded device would not be able to receive an indication immediately on connection, we were under the impression that we did not need this Service Changed characteristic, nor would it even work if we added it.
But, we are desperate for a solution here, so we're willing to try it unless someone has a better idea. So, my questions:
- Is there a better way to do this? How can a TI BLE device get iOS to rediscover an updated list of characteristics?
- Does the Service Changed characteristic work for non-bonded connections?
- How would one add the Service Changed characteristic using the TI libraries? In the "related question" to which I linked this post, a workaround was given for a bug in a previous SDK. That post is a year and a half old, however, and mentioned that a fix should be available later last year. So what is the procedure now?
- The "related question" also mentions that adding this characteristic adds a large chunk of code to the image size for the COC stuff; is there a way to just get the characteristic without the indications? Since we're not using bonding and the indications likely wouldn't work anyway, can we just try adding the characteristic to see if that's good enough for iOS to not cache the service and actually do discovery?