Hi Brian,
You would need to capture the bonding process (from before bonding to after bonding) so that the sniffer gets the key.
From the log I can see that the app tried request a service discovery but we don't know if the phone actually did a service discovery or not. The sniffer trace would reveal this.
From your log, I can see that the app was trying to write to a descriptor (that it thought was a characteristic) and the phone replied with GATT WRITE NOT PERMIT. It's most likely the attributable issue.
One solution you can think of is to match the bootloader attribute table with your application attribute table (or at least put the DFU services to the top of your application, you still need the DFU buttonless service in addition). So that when you switch between bootloader and application there isn't any different. Then no new service discovery needed.
Hi Hung Bui,
After moving the DFU service to the top of the application we're seeing more stable DFU behavior with Android. Thanks for the suggestion. We will test with a number of devices to verify that this is a solution.
We have not tried duplicating the GATT table in the bootloader. We are resistant to that since it seems like more of a workaround for an incorrect central implementation than we'd like to use.
Good to hear Brian.
And you are right, if the central react to service changed indication properly, we wouldn't have to do that. But you never know, especially on Android, many vendors have pretty poor stack implemented.
Good to hear Brian.
And you are right, if the central react to service changed indication properly, we wouldn't have to do that. But you never know, especially on Android, many vendors have pretty poor stack implemented.