diff --git a/docs/control_commands.md b/docs/control_commands.md index 7996f7d..2b8211c 100644 --- a/docs/control_commands.md +++ b/docs/control_commands.md @@ -4,7 +4,7 @@ AACP uses opcode `9` for control commands. opcodes are 16 bit integers that spec An AACP packet is formated as: -`04 00 04 00 [opcode, little endianness] [data]` +`04 00 04 00 [opcode, little endian] [data]` So, our control commands becomes @@ -15,53 +15,220 @@ So, our control commands becomes 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. ## Control Commands -These commands -| Command identifier | Description | Format | -|--------------|---------------------|--------| -| 0x01 | Mic Mode | Single value (1 byte): `0x00` = Automatic, `0x01` = Right, `0x02` = Left | -| 0x05 | Button Send Mode | Single value (1 byte) | -| 0x06 | Has ownership | Single value (1 byte): `0x01` = own, `0x00` = doesn't own | -| 0x0A | Ear Detection | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x12 | VoiceTrigger for Siri | Single Value (1 byte): `0x01` = enabled, `0x01` = disabled | -| 0x14 | SingleClickMode | Single value (1 byte) | -| 0x15 | DoubleClickMode | Single value (1 byte) | -| 0x16 | ClickHoldMode | Two values (2 bytes; First byte = right bud Second byte = for left): `0x01` = Noise control `0x05` = Siri | -| 0x17 | DoubleClickInterval | Single value (1 byte): 0x00 = Default, `0x01` = Slower, `0x02` = Slowest| -| 0x18 | ClickHoldInterval | Single value (1 byte): 0x00 = Default, `0x01` = Slower, `0x02` = Slowest| -| 0x1A | ListeningModeConfigs | Single value (1 byte): bitmask, Off mode = `0x01`, ANC=`0x02`, Transparency = 0x04, Adaptive = `0x08` | -| 0x1B | OneBudANCMode | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x1C | CrownRotationDirection | Single value (1 byte): `0x01` = reversed, `0x02` = default | -| 0x0D | ListeningMode | Single value (1 byte): 1 = Off, 2 = noise cancellation, 3 = transparency, 4 = adaptive | -| 0x1E | AutoAnswerMode | Single value (1 byte) | -| 0x1F | Chime Volume | Single value (1 byte): 0 to 100| -| 0x20 | Connect Automatically | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x23 | VolumeSwipeInterval | Single value (1 byte): 0x00 = Default, `0x01` = Longer, `0x02` = Longest | -| 0x24 | Call Management Config | Single value (1 byte) | -| 0x25 | VolumeSwipeMode | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x26 | Adaptive Volume Config | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x27 | Software Mute config | Single value (1 byte) | -| 0x28 | Conversation Detect config | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x29 | SSL | Single value (1 byte) | -| 0x2C | Hearing Aid Enrolled and Hearing Aid Enabled | Two values (2 bytes; First byte - enrolled, Second byte = enabled): `0x01` = enabled, `0x02` = disabled | -| 0x2E | AutoANC Strength | Single value (1 byte): 0 to 100| -| 0x2F | HPS Gain Swipe | Single value (1 byte) | -| 0x30 | HRM enable/disable state | Single value (1 byte) | -| 0x31 | In Case Tone config | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x32 | Siri Multitone config | Single value (1 byte) | -| 0x33 | Hearing Assist config | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x34 | Allow Off Option for Listening Mode config | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x35 | Sleep Detection config | Single value (1 byte): `0x01` = enabled, `0x02` = disabled | -| 0x36 | Allow Auto Connect | Single value (1 byte): `0x01` = allow, `0x02` = disallow | -| 0x39 | Raw Gestures config | Single value (1 byte): bitmask, single press = `0x01`, double press = `0x02`, triple press = `0x04`, long press = `0x08` | -| 0x3C | System Siri message config | Single value (1 byte) | -| 0x3E | Uplink EQ Bud config | Single value (1 byte) | -| 0x3F | Uplink EQ Source config | Single value (1 byte) | -| 0x40 | In Case Tone Volume | Single value (1 byte): 0 to 100 | -| 0x41 | Disable Button Input config | Single value (1 byte) | +| 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) + +### 0x3E - Uplink EQ Bud config +Format: Single value (1 byte) + +### 0x3F - Uplink EQ Source config +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 macOS 15.4 Beta (24E5238a)'s bluetooth stack. -> - I have already added the ranges of values a command takes that I know of. Feel free to experiemnt by sending the packets for which the range/values are not given here. +> - 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.