Change Capabilities at Runtime

Since new features (e.g. dynamic buffer sizing) can be enabled by upgrading firmware on the Provider, we want to provide a way to get the capabilities of the Provider at runtime. To avoid repeatedly querying capabilities, first, the Provider should send the firmware revision to the Seeker via message stream when connected. So we add a new message code to the existing message group, device information event.

Message Group Name Value
Device information event 0x03
Message Code Name Value
Firmware revision 0x09

Upon getting the firmware revision code, the Seeker shall check it against the cached one. If the firmware revision has been changed, the Seeker will update the firmware revision of the cache and query the capabilities via Message Stream.

We also allow the Provider to directly push capabilities to the Seeker without a request first, because we imagine that, in the future, more sophisticated devices (maybe Android-based) will do dynamic configuration based on flags for the same firmware revision.

So we add below a new message group and message codes.

Message Group Name Value
Device capability sync event 0x06
Message Code Name Value
Request capability update (sent from Seeker) 0x01
FMDN tracking 0x03

Upon receiving 0x0601,

  • if the Provider has enabled support for FMDN tracking, it should respond as below:
Octet Data Type Description Value
0 uint8 Device capability sync event 0x06
1 uint8 FMDN tracking 0x03
2 - 3 uint16 Additional data length 0x0007
4 uint8 FMDN provisioning state 0x00 if unprovisioned; 0x01 if provisioned by any account
5 - 10 uint8[] The current BLE MAC address of the device varies