Files
librepods/docs/control_commands.md
Kavish Devar 650b128d5d docs: change section title in control cmd doc
Updated section title from 'Control Commands' to 'Identifiers and details'.
2025-09-29 17:18:37 +05:30

6.9 KiB

Control Commands

AACP uses opcode 9 for control commands. opcodes are 16 bit integers that specify the kind of action being done. The length of a control command is fixed to 7 bytes + 4 bytes header (04 00 04 00)

An AACP packet is formated as:

04 00 04 00 [opcode, little endian] [data]

So, our control commands becomes

04 00 04 00 09 00 [identifier] [data1] [data2] [data3] [data4]

Bytes that are not used are set to 0x00. From what I've observed, the data3 and data4 are never used, and hence always zero. And, the data2 is usually used when the configuration can be different for the two buds: like, to change the long press mode. Or, if there can be two "state" variables for the same feature: like the Hearing Aid feature.

Identifiers and details

Command identifier Description
0x01 Mic Mode
0x05 Button Send Mode
0x06 Owns connection
0x0A Ear Detection
0x12 VoiceTrigger for Siri
0x14 SingleClickMode
0x15 DoubleClickMode
0x16 ClickHoldMode
0x17 DoubleClickInterval
0x18 ClickHoldInterval
0x1A ListeningModeConfigs
0x1B OneBudANCMode
0x1C CrownRotationDirection
0x0D ListeningMode
0x1E AutoAnswerMode
0x1F Chime Volume
0x20 Connect Automatically
0x23 VolumeSwipeInterval
0x24 Call Management Config
0x25 VolumeSwipeMode
0x26 Adaptive Volume Config
0x27 Software Mute config
0x28 Conversation Detect config
0x29 SSL
0x2C Hearing Aid Enrolled and Hearing Aid Enabled
0x2E AutoANC Strength
0x2F HPS Gain Swipe
0x30 HRM enable/disable state
0x31 In Case Tone config
0x32 Siri Multitone config
0x33 Hearing Assist config
0x34 Allow Off Option for Listening Mode config
0x35 Sleep Detection config
0x36 Allow Auto Connect
0x37 PPE Toggle config
0x38 Personal Protective Equipment Cap Level config
0x39 Raw Gestures config
0x3A Temporary Pairing Config
0x3B Dynamic End of Charge config
0x3C System Siri message config
0x3D Hearing Aid Generic config
0x3E Uplink EQ Bud config
0x3F Uplink EQ Source config
0x40 In Case Tone Volume
0x41 Disable Button Input config

Command Details

0x01 - Mic Mode

Format: Single value (1 byte) Values: 0x00 = Automatic, 0x01 = Right, 0x02 = Left.

0x05 - Button Send Mode

Format: Single value (1 byte) Additional notes: Logged as "Set Button Send Mode: %d". May involve context updates for button handling.

0x06 - Owns connection

Format: Single value (1 byte) Values: 0x01 = own, 0x00 = doesn't own.

0x0A - Ear Detection

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled.

0x12 - VoiceTrigger for Siri

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled.

0x14 - SingleClickMode

Format: Single value (1 byte)

0x15 - DoubleClickMode

Format: Single value (1 byte)

0x16 - ClickHoldMode

Format: Two values (2 bytes; First byte = right bud, Second byte = left bud).
Values: 0x01 = Noise control, 0x05 = Siri.

0x17 - DoubleClickInterval

Format: Single value (1 byte) Values: 0x00 = Default, 0x01 = Slower, 0x02 = Slowest.

0x18 - ClickHoldInterval

Format: Single value (1 byte) Values: 0x00 = Default, 0x01 = Slower, 0x02 = Slowest.

0x1A - ListeningModeConfigs

Format: Single value (1 byte) Values: Bitmask, Off mode = 0x01, ANC=0x02, Transparency = 0x04, Adaptive = 0x08.

0x1B - OneBudANCMode

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x1C - CrownRotationDirection

Format: Single value (1 byte) Values: 0x01 = reversed, 0x02 = default.

0x0D - ListeningMode

Format: Single value (1 byte) Values: 1 = Off, 2 = noise cancellation, 3 = transparency, 4 = adaptive.

0x1E - AutoAnswerMode

Format: Single value (1 byte)

0x1F - Chime Volume

Format: Single value (1 byte) Values: 0 to 100.

0x20 - Connect Automatically

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled.

0x23 - VolumeSwipeInterval

Format: Single value (1 byte) Values: 0x00 = Default, 0x01 = Longer, 0x02 = Longest.

0x24 - Call Management Config

Format: Single value (1 byte)

0x25 - VolumeSwipeMode

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x26 - Adaptive Volume Config

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x27 - Software Mute config

Format: Single value (1 byte)

0x28 - Conversation Detect config

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x29 - SSL

Format: Single value (1 byte)

0x2C - Hearing Aid Enrolled and Hearing Aid Enabled

Format: Two values (2 bytes; First byte - enrolled, Second byte = enabled) Values: 0x01 = enabled, 0x02 = disabled

0x2E - AutoANC Strength

Format: Single value (1 byte) Values: 0 to 100.

0x2F - HPS Gain Swipe (swipe to adjust amplification)

Format: Single value (1 byte)

0x30 - HRM enable/disable state

Format: Single value (1 byte)

0x31 - In Case Tone config

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x32 - Siri Multitone config

Format: Single value (1 byte)

0x33 - Hearing Assist config

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x34 - Allow Off Option for Listening Mode config

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x35 - Sleep Detection config

Format: Single value (1 byte) Values: 0x01 = enabled, 0x02 = disabled

0x36 - Allow Auto Connect

Format: Single value (1 byte) Values: 0x01 = allow, 0x02 = disallow

0x37 - PPE Toggle config

Format: Single value (1 byte)

0x38 - Personal Protective Equipment Cap Level config

Format: Single value (1 byte)

0x39 - Raw Gestures config

Format: Single value (1 byte) Values: Bitmask, single press = 0x01, double press = 0x02, triple press = 0x04, long press = 0x08.

0x3A - Temporary Pairing Config

Format: Single value (1 byte) Values: 0x01 = Temporary, 0x02 = Permanent

0x3B - Dynamic End of Charge config

Format: Single value (1 byte)

0x3C - System Siri message config

Format: Single value (1 byte)

0x3D - Hearing Aid Generic config

Format: Single value (1 byte)

Format: Single value (1 byte)

Format: Single value (1 byte)

0x40 - In Case Tone Volume

Format: Single value (1 byte) Values: 0 to 100.

0x41 - Disable Button Input config

Format: Single value (1 byte)

Note

  • These identifiers have been extracted from the iOS 19.1 Beta (23B5044l)'s bluetooth stack.
  • I have already added the ranges of values a command takes that I know of. Feel free to experiment by sending the packets for which the range/values are not given here.