Hearable Controls
Hearable controls on Fast Pair aim to provide better access controls for important Hearable features on Android. A new message group Hearable controls inside Message Stream has been added to achieve this.
Message Group Name | Value |
---|---|
Hearable control | 0x08 |
Active noise control
Active noise control is becoming a prominent feature for premium headphones. On the Seeker side, Fast Pair will have the UI and logic to set, get and save the state, and the state will be stored on the Provider side. It is mandatory for provider to send Session Nonce when event stream is connected. To achieve this, below message codes are defined:
Message Code Name | Value | Sender | Responder | MAC | ACK |
---|---|---|---|---|---|
Get ANC state | 0x11 | Seeker | Provider | N | N |
Set ANC state | 0x12 | Seeker | Provider | Y | Y |
Notify ANC state | 0x13 | Provider | Seeker | N | N |
When a Seeker connects to a Provider, or when a Provider receives a "Get ANC state" message, the Provider can Notify the ANC state to let the Seeker know its ANC capability and its stored state. The message is as follow:
Byte | Data Type | Description | Value |
---|---|---|---|
0 | uint8 | Hearable control | 0x08 |
1 | uint8 | Notify ANC state | 0x13 |
2 - 3 | uint16 | Additional data length | 0x04 |
4 - 7 | ANC control data | varies |
ANC control data
Byte | Data Type | Description | Value |
---|---|---|---|
0 | uint8 | Version code | varies,0x02 for this version |
1 | Flags | UI toggles Each mode is enabled (1) or disabled (0) according to the value of its flag bit, as follows: Bit 0 (MSB): transparent Bit 1: Reserved (Set bit to 0) Bit 2: off Bit 3: Reserved (Set bit to 0) Bit 4: ANC |
varies |
2 | Flags | Settable toggles Any or all of the UI toggle bits above may also be set here, to indicate which are currently enabled. |
varies |
3 | Flags | Current state Only one bit can be set |
varies |
The Seeker will show the toggle UI according to the ANC control data.
Example 1: The Provider supports 3-way ANC: transparent - off - ANC & buds are on-head, all modes are settable now, and current state is off:
Byte | Data Type | Description | Value |
---|---|---|---|
0 | uint8 | Version code | 0x01 |
1 | Flags | UI toggles | 0b10101000 |
2 | Flags | Settable toggles | 0b10101000 |
3 | Flags | Current state | 0b00100000 |
Example 2: The Provider supports 3-way ANC: transparent - off - ANC, only one bud is on-head now or no buds is on-head, so no modes are settable, and the current state is off:
Byte | Data Type | Description | Value |
---|---|---|---|
0 | uint8 | Version code | 0x01 |
1 | Flags | UI toggle | 0b10101000 |
2 | Flags | Settable toggle | 0b00000000 |
3 | Flags | Current state | 0b00100000 |
If the user switches the toggle, the Seeker will set the current state to the Provider as follow:
Byte | Data Type | Description | Value |
---|---|---|---|
0 | uint8 | Hearable control | 0x08 |
1 | uint8 | Set ANC state | 0x12 |
2 - 3 | uint16 | Additional data length | varies, 0x04 or 0x14 |
4 | uint8 | Seeker Version code | varies, 0x01 or 0x02 |
5 | Flags | ANC Settable modes (UI toggle) | varies |
6 | Flags | ANC Enabled modes (Settable toggle) | varies |
7 | Flags | New ANC mode index (New state) | varies |
8 - 23 | Reserved | varies |
The byte 4 - 7 is actually ANC control data sent from Seeker side. If additional length value is set as 0x14, the reserved bytes 8-23 would be present and on receipt of these bytes, the provider should ignore them. If additional length value is set as 0x04, there are no reserved bytes present.
When a Provider receives a "Set ANC state" message, it should Acknowledge, and Notify ANC state to all connected Seekers. If the user changes the setting via headset gesture or companion application, the Provider should also send notification to all connected Seekers.