Stay organized with collections
Save and categorize content based on your preferences.
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 |
FHN tracking |
0x03 |
Upon receiving 0x0601
,
- if the Provider has enabled support for FHN tracking, it should respond as
below:
Octet |
Data Type |
Description |
Value |
0 |
uint8 |
Device capability sync event |
0x06 |
1 |
uint8 |
FHN tracking |
0x03 |
2 - 3 |
uint16 |
Additional data length |
0x0007 |
4 |
uint8 |
FHN provisioning state |
0x00 if unprovisioned; 0x01 if provisioned by any account |
5 - 10 |
uint8[] |
The current BLE MAC address of the device |
varies |
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-12 UTC.
[null,null,["Last updated 2025-08-12 UTC."],[[["\u003cp\u003eFirmware revision is communicated from Provider to Seeker upon connection to allow for capability updates.\u003c/p\u003e\n"],["\u003cp\u003eSeeker triggers capability updates when a new firmware revision is detected or can request updates directly.\u003c/p\u003e\n"],["\u003cp\u003eProvider can proactively push capability updates to the Seeker without a prior request.\u003c/p\u003e\n"],["\u003cp\u003eA new message group and codes are introduced to support device capability synchronization and FMDN tracking.\u003c/p\u003e\n"],["\u003cp\u003eFMDN tracking capability allows the Seeker to know the provisioning status and BLE MAC address of the Provider.\u003c/p\u003e\n"]]],[],null,["Change Capabilities at Runtime\n------------------------------\n\nSince new features (e.g. dynamic buffer sizing) can be enabled by upgrading\nfirmware on the Provider, we want to provide a way to get the capabilities of\nthe Provider at runtime.\nTo avoid repeatedly querying capabilities, first, the Provider should send the\nfirmware revision to the Seeker via message stream when connected. So we add a\nnew message code to the existing message group, device information event.\n\n| Message Group Name | Value |\n|--------------------------|-------|\n| Device information event | 0x03 |\n\n| Message Code Name | Value |\n|-------------------|-------|\n| Firmware revision | 0x09 |\n\nUpon getting the firmware revision code, the Seeker shall check it against the\ncached one. If the firmware revision has been changed, the Seeker will update\nthe firmware revision of the cache and query the capabilities via Message\nStream.\n\nWe also allow the Provider to directly push capabilities to the Seeker without\na request first, because we imagine that, in the future, more sophisticated\ndevices (maybe Android-based) will do dynamic configuration based on\nflags for the same firmware revision.\n\nSo we add below a new message group and message codes.\n\n| Message Group Name | Value |\n|------------------------------|-------|\n| Device capability sync event | 0x06 |\n\n| Message Code Name | Value |\n|----------------------------------------------|-------|\n| Request capability update (sent from Seeker) | 0x01 |\n| FHN tracking | 0x03 |\n\nUpon receiving `0x0601`,\n\n- if the Provider has enabled support for FHN tracking, it should respond as below:\n\n| Octet | Data Type | Description | Value |\n|--------|-----------|-------------------------------------------|-----------------------------------------------------------|\n| 0 | uint8 | Device capability sync event | 0x06 |\n| 1 | uint8 | FHN tracking | 0x03 |\n| 2 - 3 | uint16 | Additional data length | 0x0007 |\n| 4 | uint8 | FHN provisioning state | 0x00 if unprovisioned; 0x01 if provisioned by any account |\n| 5 - 10 | uint8\\[\\] | The current BLE MAC address of the device | *varies* |"]]