EQ and Tone Control Commands¶
Command Set Scope¶
Applicability
This page contains the EQ and tone control business commands, 31 in total (15 active + 16 disabled with code points reserved). Each function has one command code per transport (HID code = UART code + 0x4A) with one-to-one semantic correspondence:
- UART serial format (command 0x40-0x5E): little-endian frames, see EQ UART Base Protocol
- USB HID format (command headers 0x8A-0xA6; band count commands use 0xB3/0xB4 — HID headers from 0xA7 onward are already used by firmware upgrade commands, so they do not follow the +0x4A mapping): 64-byte packets, see USB HID Base Protocol
This page is same-source maintained with the "Product Control Commands" chapter of product datasheets. Product firmwares may support different command subsets; refer to the product datasheet.
Command Overview¶
| UART Command | HID Command | Name | Function |
|---|---|---|---|
| 0x40 | 0x8A | SET_EQ_MODE | Switch EQ Mode |
| 0x41 | 0x8B | GET_EQ_MODE | Get EQ Mode Information |
| 0x42 | 0x8C | SET_MODE_GAIN_AND_NAME | Set Mode Overall Gain and Name |
| 0x43 | 0x8D | SET_EQ_PARAMS | Send EQ Parameters |
| 0x44 | 0x8E | GET_EQ_PARAMS | Read EQ Parameters |
| 0x45 | 0x8F | GET_DEVICE_INFO | Get Device Information |
| 0x46 | 0x90 | RESET_EQ_PARAMS | Reset EQ Parameters |
| 0x47 | 0x91 | GET_EQ_MODE_COUNT | Get Total EQ Mode Count |
| 0x48 | 0x92 | SET_AND_SAVE_EQ_MODE | Set and Save EQ Mode |
| 0x49 | 0x93 | SET_VOLUME | Set Volume Level (Disabled) |
| 0x4A | 0x94 | GET_VOLUME | Get Volume Level (Disabled) |
| 0x4B | 0x95 | GET_LED_INFO | Get LED Information (Disabled) |
| 0x4C | 0x96 | SET_LED_SWITCH | Set LED Switch (Disabled) |
| 0x4D | 0x97 | GET_LED_SWITCH | Get LED Switch (Disabled) |
| 0x4E | 0x98 | GET_LED_STATUS | Get LED Status (Disabled) |
| 0x4F | 0x99 | GET_LED_COUNT | Get LED Count (Disabled) |
| 0x50 | 0x9A | GET_UAC_MODE_INFO | Get UAC Mode Information (Disabled) |
| 0x51 | 0x9B | SET_UAC_MODE | Set UAC Mode (Disabled) |
| 0x52 | 0x9C | GET_CURRENT_UAC_MODE | Get Current UAC Mode (Disabled) |
| 0x53 | 0x9D | SET_EQ_ENABLE | Set EQ Enable Switch |
| 0x54 | 0x9E | GET_EQ_ENABLE | Get EQ Enable Switch |
| 0x55 | 0x9F | GET_SAMPLE_FORMAT | Get Sample Rate and Format |
| 0x56 | 0xA0 | SET_GAIN_MODE | Set Gain Mode (Disabled) |
| 0x57 | 0xA1 | GET_GAIN_MODE | Get Gain Mode (Disabled) |
| 0x58 | 0xA2 | SET_FILTER_MODE | Set Filter Mode (Disabled) |
| 0x59 | 0xA3 | GET_FILTER_MODE | Get Filter Mode (Disabled) |
| 0x5A | 0xA4 | SET_GAME_MODE | Set Game Mode (Disabled) |
| 0x5B | 0xA5 | GET_GAME_MODE | Get Game Mode (Disabled) |
| 0x5C | 0xA6 | GET_FIRMWARE_VERSION | Get Firmware Version |
| 0x5D | 0xB3 | SET_EQ_BAND_COUNT | Set EQ Band Count |
| 0x5E | 0xB4 | GET_EQ_BAND_COUNT | Get EQ Band Count |
Disabled Commands (Code Points Reserved)¶
The following commands are disabled; XU316 no longer responds to them. Their code points are reserved to prevent reuse by new commands. Do not use them in new host/MCU programs:
| Command | Original Function | Reason for Deactivation |
|---|---|---|
| 0x49-0x4A | Set/Get volume level | Feature not wired to physical layer; volume is managed by the system's existing volume channel |
| 0x4B-0x4F | LED information/switch/status/count queries | Feature not wired to physical layer |
| 0x50-0x52 | UAC mode query/switch | Redundant with the standard protocol mode switching mechanism (0x03/0x23/0x04) |
| 0x56-0x5B | Gain/filter/game mode set and query | Feature not wired to physical layer — DAC is controlled by MCU (gain/filter switching is implemented on the MCU side); game mode is disabled in UAC2 images |
Historical Reference
The byte-level formats of disabled commands are retained in the command details below (marked【Disabled】), for reference when maintaining legacy host programs only.
Command Details¶
Each command below shows the UART serial format first, then the USB HID format; semantics are identical.
Switch EQ Mode(SET_EQ_MODE,UART 0x40 / HID 0x8A)¶
UART serial format (command 0x40):
Function: Switch current EQ mode
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x40 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Mode Value (0-6: Presets, 7-9: User)
6 | 1 | Checksum| Checksum
Device Processing:
- Directly sets
g_current_eq_mode = data[5] - Does not involve parameter transmission or calculation
USB HID format (command header 0x8A):
Function: Switch current EQ mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8A |
| 3 | 1 | mode | Mode value (0-6: preset modes, 7-9: user modes) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Get EQ Mode Information(GET_EQ_MODE,UART 0x41 / HID 0x8B)¶
UART serial format (command 0x41):
Function: Read EQ mode information
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x41 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Mode Value (0-9: Valid mode, 0xFF: Get current info)
6 | 1 | Checksum| Checksum
Device Processing:
- If mode is 0xFF, returns current mode value, overall gain, and mode name.
- If mode is a valid value (0-9), returns specified mode value, overall gain, and mode name.
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x41 | Command Code
4 | 1 | 0x15 | Data Length (21 bytes)
5 | 1 | uint8 | Mode Value (Current or specified)
6-9 | 4 | int32 | Gain Value (Range 0 to -50dB, signed integer)
10-25 | 16 | char | Mode Name (UTF-8 encoded, 16 bytes)
26 | 1 | Checksum| Checksum
Usage Notes:
- When sending mode=0xFF, returns information for the currently active EQ mode.
- When sending mode=0-9, returns gain and name information for the specified mode (does not switch current mode).
USB HID format (command header 0x8B):
Function: Get current mode value, overall gain, and mode name
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8B |
| 3 | 1 | mode | Mode value (0-9: specified mode; 0xFF: get current mode info) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8B (echo) |
| 3 | 1 | mode | Current mode value |
| 4-7 | 4 | gain | Overall gain (int32, little endian, range -50dB ~ 0dB) |
| 8-23 | 16 | name | Mode name (UTF-8 string) |
| 24-63 | 40 | reserved | Reserved fields (fill with 0) |
Usage Notes:
- Send
mode = 0xFFto return the currently active EQ mode information - Send
mode = 0-9to return the specified mode gain and name (does not switch the current mode)
Set Mode Overall Gain and Name(SET_MODE_GAIN_AND_NAME,UART 0x42 / HID 0x8C)¶
UART serial format (command 0x42):
Function: Set EQ mode overall gain and name
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x42 | Command Code
4 | 1 | 0x15 | Data Length (21 bytes)
5 | 1 | uint8 | Mode Value (0-9)
6-9 | 4 | int32 | Gain Value (Range 0 to -50dB, signed integer)
10-25 | 16 | char | Mode Name (UTF-8 encoded, 16 bytes)
26 | 1 | Checksum| Checksum
Device Processing:
- Parses mode value, gain value, and mode name.
- Sets the specified mode's EQ overall gain and name for all sample rates' left and right channels.
- Supports all sample rates: 44100, 48000, 88200, 96000, 176400, 192000 Hz.
USB HID format (command header 0x8C):
Function: Set overall gain and name for target mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8C |
| 3 | 1 | mode | Target mode value (0-9) |
| 4-7 | 4 | gain | Overall gain (int32, little endian, range -50dB ~ 0dB) |
| 8-23 | 16 | name | Mode name (UTF-8 string) |
| 24-63 | 40 | reserved | Reserved fields (fill with 0) |
Send EQ Parameters(SET_EQ_PARAMS,UART 0x43 / HID 0x8D)¶
UART serial format (command 0x43):
Function: Send parameters for a single filter
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x43 | Command Code
4 | 1 | 0x13 | Data Length (19 bytes: 1 mode + 1 index + 1 type + 4 floats totaling 16 bytes)
5 | 1 | uint8 | Mode Value (0-9)
6 | 1 | uint8 | Filter Band Index (0-7)
7 | 1 | uint8 | Filter Type
8-11 | 4 | float | Center Frequency (Hz)
12-15 | 4 | float | Q Value
16-19 | 4 | float | Bandwidth (Hz)
20-23 | 4 | float | Gain (dB)
24 | 1 | Checksum| Checksum
Filter Type Codes:
| Code | Filter Type |
|---|---|
| 0x00 | Bypass Filter |
| 0x01 | All Pass Filter |
| 0x02 | Peak Filter |
| 0x03 | Low Pass Filter |
| 0x04 | High Pass Filter |
| 0x05 | Band Pass Filter |
| 0x06 | Band Reject Filter |
| 0x07 | Notch Filter |
| 0x08 | Constant Q Filter |
| 0x09 | Low Shelf Filter |
| 0x0A | High Shelf Filter |
Device Processing:
- Parses parameters and stores them into the corresponding mode for all sample rates.
- Calls
eq_calculate_coefficients_from_params()to calculate coefficients. - Stores calculated coefficients into the corresponding mode for all sample rates.
- Automatically applies to all sample rates: 44100, 48000, 88200, 96000, 176400, 192000 Hz.
USB HID format (command header 0x8D):
Function: Send single filter parameters
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8D |
| 3 | 1 | mode | Mode value (0-9) |
| 4 | 1 | band | Filter index (0-7) |
| 5 | 1 | type | Filter type code |
| 6-9 | 4 | freq | Center frequency Hz (float, little endian) |
| 10-13 | 4 | q | Q value (float, little endian) |
| 14-17 | 4 | bw | Bandwidth Hz (float, little endian) |
| 18-21 | 4 | gain | Gain dB (float, little endian) |
| 22-63 | 42 | reserved | Reserved fields (fill with 0) |
Filter Type Codes:
| Code | Type | Code | Type |
|---|---|---|---|
| 0x00 | Bypass | 0x06 | Band Reject |
| 0x01 | All Pass | 0x07 | Notch |
| 0x02 | Peak | 0x08 | Constant Q |
| 0x03 | Low Pass | 0x09 | Low Shelf |
| 0x04 | High Pass | 0x0A | High Shelf |
| 0x05 | Band Pass |
Data Format Notes:
Floating Point and Byte Order
- All floating-point numbers follow IEEE 754 float standard with little endian byte order
- All multi-byte integers use Little Endian byte order
Read EQ Parameters(GET_EQ_PARAMS,UART 0x44 / HID 0x8E)¶
UART serial format (command 0x44):
Function: Read parameters of a single filter
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x44 | Command Code
4 | 1 | 0x02 | Data Length
5 | 1 | uint8 | Mode Value (0-9)
6 | 1 | uint8 | EQ Index (0-7)
7 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x44 | Command Code
4 | 1 | 0x13 | Data Length (19 bytes: 1 mode + 1 index + 1 type + 4 floats totaling 16 bytes)
5 | 1 | uint8 | Mode Value (0-9)
6 | 1 | uint8 | Filter Band Index (0-7)
7 | 1 | uint8 | Filter Type
8-11 | 4 | float | Center Frequency (Hz)
12-15 | 4 | float | Q Value
16-19 | 4 | float | Bandwidth (Hz)
20-23 | 4 | float | Gain (dB)
24 | 1 | Checksum| Checksum
USB HID format (command header 0x8E):
Function: Read parameters of specified filter
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8E |
| 3 | 1 | mode | Mode value (0-9) |
| 4 | 1 | band | Filter index (0-7) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8E (echo) |
| 3 | 1 | mode | Mode value |
| 4 | 1 | band | Filter index |
| 5 | 1 | type | Filter type code |
| 6-9 | 4 | freq | Center frequency Hz (float, little endian) |
| 10-13 | 4 | q | Q value (float, little endian) |
| 14-17 | 4 | bw | Bandwidth Hz (float, little endian) |
| 18-21 | 4 | gain | Gain dB (float, little endian) |
| 22-63 | 41 | reserved | Reserved fields (fill with 0) |
Get Device Information(GET_DEVICE_INFO,UART 0x45 / HID 0x8F)¶
UART serial format (command 0x45):
Function: Get device basic information
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x45 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x45 | Command Code
4 | 1 | 0x34 | Data Length (52 bytes: 2 PID + 2 VID + 16 Product + 16 Vendor + 16 SN)
5-6 | 2 | uint16 | Product ID (PID, Little Endian)
7-8 | 2 | uint16 | Vendor ID (VID, Little Endian)
9-24 | 16 | char | Product String (UTF-8, 16 bytes)
25-40 | 16 | char | Vendor String (UTF-8, 16 bytes)
41-56 | 16 | char | Serial Number String (UTF-8, 16 bytes)
57 | 1 | Checksum| Checksum
USB HID format (command header 0x8F):
Function: Get basic device identification information
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8F |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x8F (echo) |
| 3-4 | 2 | pid | Product ID (uint16, little endian) |
| 5-6 | 2 | vid | Vendor ID (uint16, little endian) |
| 7-22 | 16 | product | Product string (UTF-8) |
| 23-38 | 16 | vendor | Vendor string (UTF-8) |
| 39-54 | 16 | sn | Serial number string (UTF-8) |
| 55-63 | 9 | reserved | Reserved fields (fill with 0) |
Reset EQ Parameters(RESET_EQ_PARAMS,UART 0x46 / HID 0x90)¶
UART serial format (command 0x46):
Function: Delete customer-customized EQ parameters and restore preset parameters
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x46 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Mode Number (0-9, 0xFF means restore all including EQ params, overall gain, mode name)
6 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x46 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Status Code (0x00=Success, 0x01=Failure)
6 | 1 | Checksum| Checksum
Device Processing:
- Deletes the EQ parameter file stored in Flash for the specified mode.
- Deletes the gain and mode name Flash storage file.
- Restores the header file preset parameters for that mode.
- If mode number is 0xFF, resets all modes.
- Returns operation status.
USB HID format (command header 0x90):
Function: Reset EQ parameters for specified mode or all modes
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x90 |
| 3 | 1 | mode | Mode number (0-9, 0xFF = reset all modes) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x90 (echo) |
| 3 | 1 | status | Status code (0x00=success, 0x01=failure) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Get Total EQ Mode Count(GET_EQ_MODE_COUNT,UART 0x47 / HID 0x91)¶
UART serial format (command 0x47):
Function: Get the total number of predefined plus user modes (excluding disabled modes)
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x47 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x57 | Command Code (Note: Matches Chinese doc which says 0x57 here, likely typo in doc but preserving)
4 | 1 | 0x02 | Data Length (2 bytes)
5 | 1 | uint8 | Total Modes (Currently 10, containing 0-9 total 10 modes)
6 | 1 | uint8 | Predefined Mode Count (Currently 7, containing 0-6 total 7 preset modes)
7 | 1 | Checksum| Checksum
USB HID format (command header 0x91):
Function: Get total EQ modes and preset mode count (excluding disabled modes)
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x91 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x91 (echo) |
| 3 | 1 | total | Total modes (e.g., 0-9 means 10 modes) |
| 4 | 1 | preset_total | Preset mode count (e.g., 0-6 means 7 presets) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Set and Save EQ Mode(SET_AND_SAVE_EQ_MODE,UART 0x48 / HID 0x92)¶
UART serial format (command 0x48):
Function: Set current EQ mode and save to Flash, automatically restore on power-on
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x48 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Mode Value (0-9: 0-6 presets, 7-9 user modes)
6 | 1 | Checksum| Checksum
Device Processing:
- Saves mode value to Flash.
- Automatically reads and restores this mode from Flash on power-on.
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x48 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Status Code (0x00=Success, 0x01=Failure)
6 | 1 | Checksum| Checksum
USB HID format (command header 0x92):
Function: Set current EQ mode and save to Flash, automatically restored on power up
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x92 |
| 3 | 1 | mode | Mode value (0-6: preset modes, 7-9: user modes) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x92 (echo) |
| 3 | 1 | status | Status code (0x00=success, 0x01=failure) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Set Volume Level(SET_VOLUME,UART 0x49 / HID 0x93)【Disabled·Code Point Reserved】¶
UART serial format (command 0x49):
Function: Set device volume level
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x49 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Volume Level (0-60: 0=Min, 60=Max)
6 | 1 | Checksum| Checksum
Parameter Description:
- Volume Level Range: 0-60 (Total 61 levels)
- Description: Controls device output volume level
- 0: Minimum Volume (approx -127.5dB)
- 60: Maximum Volume (0dB)
- Approximately 2dB attenuation change per level
Device Processing:
- Parameter will be automatically saved to Flash via existing periodic save mechanism.
- If parameter exceeds range (>60), firmware will reject setting and return false.
USB HID format (command header 0x93):
Function: Set device output volume level
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x93 |
| 3 | 1 | volume | Volume level (0-60) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Parameter Description:
- Volume level range: 0-60 (total 61 levels)
- 0: Minimum volume (approx -127.5dB)
- 60: Maximum volume (0dB)
- Approximately 2dB attenuation change per level
Device Processing: - Parameters are automatically saved to Flash via existing timed save mechanism - If parameter is out of range (>60), firmware will reject the setting and return false
Return Value: No direct return value. To confirm volume setting, use GET_VOLUME (0x94) command.
Get Volume Level(GET_VOLUME,UART 0x4A / HID 0x94)【Disabled·Code Point Reserved】¶
UART serial format (command 0x4A):
Function: Read device current volume level
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4A | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4A | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Current Volume Level (0-60)
6 | 1 | Checksum| Checksum
USB HID format (command header 0x94):
Function: Read current device volume level
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x94 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x94 (echo) |
| 3 | 1 | volume | Current volume level (0-60) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Get LED Information(GET_LED_INFO,UART 0x4B / HID 0x95)【Disabled·Code Point Reserved】¶
UART serial format (command 0x4B):
Function: Read LED index and LED name
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4B | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | LED Index (0-7, current device only has 1 LED, index 0)
6 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4B | Command Code
4 | 1 | 0x11 | Data Length (17 bytes)
5 | 1 | uint8 | LED Index (0-7)
6-21 | 16 | char | LED Name (UTF-8 encoded, 16 bytes)
22 | 1 | Checksum| Checksum
USB HID format (command header 0x95):
Function: Read LED index and LED name
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x95 |
| 3 | 1 | led_index | LED index (0-7) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x95 (echo) |
| 3 | 1 | led_index | LED index (0-7) |
| 4-19 | 16 | led_name | LED name (UTF-8 string) |
| 20-63 | 44 | reserved | Reserved fields (fill with 0) |
Set LED Switch(SET_LED_SWITCH,UART 0x4C / HID 0x96)【Disabled·Code Point Reserved】¶
UART serial format (command 0x4C):
Function: Set LED switch state
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4C | Command Code
4 | 1 | 0x02 | Data Length
5 | 1 | uint8 | LED Index (0-7, current device only has 1 LED, index 0)
6 | 1 | uint8 | LED Switch (0=OFF, 1=ON)
7 | 1 | Checksum| Checksum
Device Processing:
- When LED switch is OFF, all LED outputs are disabled, no LED is displayed.
- When LED switch is ON, LED displays normally.
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4C | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Status Code (0x00=Success, 0x01=Failure)
6 | 1 | Checksum| Checksum
USB HID format (command header 0x96):
Function: Set LED switch status
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x96 |
| 3 | 1 | led_index | LED index (0-7) |
| 4 | 1 | onoff | LED switch (0=OFF, 1=ON) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x96 (echo) |
| 3 | 1 | status | Status code (0x00=success, 0x01=failure) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Get LED Switch(GET_LED_SWITCH,UART 0x4D / HID 0x97)【Disabled·Code Point Reserved】¶
UART serial format (command 0x4D):
Function: Read LED switch state
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4D | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | LED Index (0-7, current device only has 1 LED, index 0)
6 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4D | Command Code
4 | 1 | 0x02 | Data Length
5 | 1 | uint8 | LED Index (0-7)
6 | 1 | uint8 | LED Switch (0=OFF, 1=ON)
7 | 1 | Checksum| Checksum
USB HID format (command header 0x97):
Function: Read LED switch status
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x97 |
| 3 | 1 | led_index | LED index (0-7) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x97 (echo) |
| 3 | 1 | led_index | LED index (0-7) |
| 4 | 1 | onoff | LED switch (0=OFF, 1=ON) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Get LED Status(GET_LED_STATUS,UART 0x4E / HID 0x98)【Disabled·Code Point Reserved】¶
UART serial format (command 0x4E):
Function: Read LED RGB color and status
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4E | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | LED Index (0-7, current device only has 1 LED, index 0)
6 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4E | Command Code
4 | 1 | 0x05 | Data Length
5 | 1 | uint8 | LED Index (0-7)
6 | 1 | uint8 | R Color Value (0-255)
7 | 1 | uint8 | G Color Value (0-255)
8 | 1 | uint8 | B Color Value (0-255)
9 | 1 | uint8 | LED Status (0=Off, 1=Solid, 2=Slow Blink, 3=Fast Blink, 4=Breathe)
10 | 1 | Checksum| Checksum
LED Status Enum:
- 0: LED_STATUS_OFF (Off)
- 1: LED_STATUS_SOLID (Solid On)
- 2: LED_STATUS_SLOW_BLINK (Slow Blink)
- 3: LED_STATUS_FAST_BLINK (Fast Blink)
- 4: LED_STATUS_BREATHE (Breathe)
Note:
- RGB color values are converted based on current LED color definition (active low).
- LED status is determined based on current LED display mode (solid/blink).
USB HID format (command header 0x98):
Function: Read LED RGB color and display status
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x98 |
| 3 | 1 | led_index | LED index (0-7) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x98 (echo) |
| 3 | 1 | led_index | LED index (0-7) |
| 4 | 1 | r | R color value (0-255) |
| 5 | 1 | g | G color value (0-255) |
| 6 | 1 | b | B color value (0-255) |
| 7 | 1 | led_status | LED status (0=Off, 1=Solid, 2=Slow Flash, 3=Fast Flash, 4=Breathing) |
| 8-63 | 56 | reserved | Reserved fields (fill with 0) |
LED Status Enumeration: - 0: LED_STATUS_OFF (Off) - 1: LED_STATUS_SOLID (Solid) - 2: LED_STATUS_SLOW_BLINK (Slow Flash) - 3: LED_STATUS_FAST_BLINK (Fast Flash) - 4: LED_STATUS_BREATHE (Breathing)
Note
- RGB color values are based on current LED color definition conversion (active low)
- LED status is based on current LED display mode (solid/blinking) judgment
Get LED Count(GET_LED_COUNT,UART 0x4F / HID 0x99)【Disabled·Code Point Reserved】¶
UART serial format (command 0x4F):
Function: Read total number of LEDs supported by device
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4F | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x4F | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Total LEDs (Current device is 1)
6 | 1 | Checksum| Checksum
Device Processing:
- Returns total number of LEDs supported by device.
- Current device only has 1 LED, so returns 1.
- LED index range is 0 to (Total LEDs - 1).
USB HID format (command header 0x99):
Function: Read total number of LEDs supported by device
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x99 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x99 (echo) |
| 3 | 1 | led_total | Total LEDs |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Get UAC Mode Information(GET_UAC_MODE_INFO,UART 0x50 / HID 0x9A)【Disabled·Code Point Reserved】¶
UART serial format (command 0x50):
Function: Read UAC mode count and mode name list
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x50 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x50 | Command Code
4 | 1 | 0x11 | Data Length (17 bytes)
5 | 1 | uint8 | Total UAC Modes (Currently 2, containing UAC1.0 and UAC2.0)
6-13 | 8 | char | Mode 0 Name (UTF-8, 8 bytes, e.g., "UAC2.0")
14-21 | 8 | char | Mode 1 Name (UTF-8, 8 bytes, e.g., "UAC1.0")
22 | 1 | Checksum| Checksum
Device Processing:
- Returns total UAC modes (currently 2).
- Returns name for each mode (max 8 chars).
- Mode 0 corresponds to UAC2.0, Mode 1 corresponds to UAC1.0.
USB HID format (command header 0x9A):
Function: Read UAC mode count and name list
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9A |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9A (echo) |
| 3 | 1 | count | Total UAC modes (e.g., 2) |
| 4-11 | 8 | name0 | Mode 0 name (UTF-8, max 8 bytes) |
| 12-19 | 8 | name1 | Mode 1 name (UTF-8, max 8 bytes) |
| 20-63 | 44 | reserved | Reserved fields (fill with 0) |
Set UAC Mode(SET_UAC_MODE,UART 0x51 / HID 0x9B)【Disabled·Code Point Reserved】¶
UART serial format (command 0x51):
Function: Set UAC mode (UAC1.0 or UAC2.0)
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x51 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | UAC Mode Value (0=UAC2.0, 1=UAC1.0)
6 | 1 | Checksum| Checksum
Device Processing:
- Sets UAC mode and reboots device.
- Note: Device will not return a response after reboot.
USB HID format (command header 0x9B):
Function: Set UAC mode (UAC1.0/UAC2.0)
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9B |
| 3 | 1 | uac_mode | UAC mode value (0=UAC2.0, 1=UAC1.0) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Device Processing:
- Note: Device will not send response after reboot
Get Current UAC Mode(GET_CURRENT_UAC_MODE,UART 0x52 / HID 0x9C)【Disabled·Code Point Reserved】¶
UART serial format (command 0x52):
Function: Read current UAC mode
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x52 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x52 | Command Code
4 | 1 | 0x09 | Data Length (9 bytes)
5 | 1 | uint8 | Current UAC Mode Value (0=UAC2.0, 1=UAC1.0)
6-13 | 8 | char | Current UAC Mode Name (UTF-8, 8 bytes, e.g., "UAC2.0" or "UAC1.0")
14 | 1 | Checksum| Checksum
Device Processing:
- Returns current UAC mode name (max 8 chars).
USB HID format (command header 0x9C):
Function: Read current UAC mode and name
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9C |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9C (echo) |
| 3 | 1 | uac_mode | Current UAC mode (0=UAC2.0, 1=UAC1.0) |
| 4-11 | 8 | name | Current mode name (UTF-8, max 8 bytes) |
| 12-63 | 52 | reserved | Reserved fields (fill with 0) |
Set EQ Enable Switch(SET_EQ_ENABLE,UART 0x53 / HID 0x9D)¶
UART serial format (command 0x53):
Function: Set EQ enable switch (Enable/Disable)
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x53 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | EQ Enable Switch (0=OFF Disable, 1=ON Enable)
6 | 1 | Checksum| Checksum
Device Processing:
- Only saves EQ enable status to Flash (independent file storage), does not affect saved modes.
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x53 | Command Code
4 | 1 | 0x02 | Data Length
5 | 1 | uint8 | Status Code (0x00=Success, 0x01=Failure)
6 | 1 | uint8 | Current EQ Enable Status (0=OFF, 1=ON)
7 | 1 | Checksum| Checksum
USB HID format (command header 0x9D):
Function: Set EQ enable switch (enable/disable)
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9D |
| 3 | 1 | enable | EQ enable switch (0=OFF, 1=ON) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9D (echo) |
| 3 | 1 | status | Status code (0x00=success, 0x01=failure) |
| 4 | 1 | enable | Current EQ enable status (0=OFF, 1=ON) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Get EQ Enable Switch(GET_EQ_ENABLE,UART 0x54 / HID 0x9E)¶
UART serial format (command 0x54):
Function: Read EQ enable switch status
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x54 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x54 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | EQ Enable Switch Status (0=OFF Disable, 1=ON Enable)
6 | 1 | Checksum| Checksum
Device Processing:
- Returns current EQ enable switch status (0=OFF, 1=ON).
USB HID format (command header 0x9E):
Function: Read current EQ enable status
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9E |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9E (echo) |
| 3 | 1 | enable | Current EQ enable status (0=OFF, 1=ON) |
| 4 | 1 | saved_mode | Saved mode value (0-9, 0xFF = not saved) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Get Sample Rate and Format(GET_SAMPLE_FORMAT,UART 0x55 / HID 0x9F)¶
UART serial format (command 0x55):
Function: Read current sample rate and DSD mode
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x55 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x55 | Command Code
4 | 1 | 0x05 | Data Length (5 bytes)
5-8 | 4 | uint32 | Sample Rate (samFreq, Little Endian, Unit: Hz)
9 | 1 | uint8 | DSD Mode (dsdMode: 0=PCM, 1=DOP, 2=Native DSD)
10 | 1 | Checksum| Checksum
Device Processing:
- Returns current sample rate (32-bit unsigned integer, Little Endian, Unit: Hz).
- Returns DSD mode (0 means PCM format, >0 means DSD format).
- Device will automatically report this information when sample rate or DSD mode changes (proactively sent via UART).
Auto-Report Mechanism:
- Device monitors sample rate and DSD mode changes.
- When these values change, device automatically constructs 0x55 response packet and sends via UART.
USB HID format (command header 0x9F):
Function: Read current sampling rate, DSD mode, and DAC sampling resolution
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9F |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0x9F (echo) |
| 3-6 | 4 | sample_rate | Sampling rate (uint32, little endian, unit: Hz) |
| 7 | 1 | dsd_mode | DSD mode (0=PCM, 1=DOP, 2=Native DSD) |
| 8-62 | 55 | reserved | Reserved fields (fill with 0) |
Auto-Report Mechanism: - Device monitors changes in sampling rate and DSD mode - When these values change, device automatically constructs 0x9F response packet and reports via HID status report - Host can receive these auto-reported status changes via HID GET_REPORT
Set Gain Mode(SET_GAIN_MODE,UART 0x56 / HID 0xA0)【Disabled·Code Point Reserved】¶
UART serial format (command 0x56):
Function: Set gain mode
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x56 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Gain Mode Value (0=Low Impedance, 1=High Impedance)
6 | 1 | Checksum| Checksum
Parameter Description:
- Gain Mode Range: 0-1
- Description: Controls device gain level
- 0: Low Impedance Mode (Suitable for high sensitivity headphones)
- 1: High Impedance Mode (Suitable for high impedance headphones)
Device Processing:
- Parameter will be automatically saved to Flash via existing periodic save mechanism.
USB HID format (command header 0xA0):
Function: Set gain mode (low impedance/high impedance)
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA0 |
| 3 | 1 | gain_mode | Gain mode (0=Low Impedance, 1=High Impedance) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Parameter Description: - 0: Low impedance mode (suitable for high sensitivity headphones) - 1: High impedance mode (suitable for high impedance headphones)
Return Value: No direct return value. To confirm gain mode setting, use GET_GAIN_MODE (0xA1) command.
Get Gain Mode(GET_GAIN_MODE,UART 0x57 / HID 0xA1)【Disabled·Code Point Reserved】¶
UART serial format (command 0x57):
Function: Read device current gain mode
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x57 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x57 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Current Gain Mode (0=Low Impedance, 1=High Impedance)
6 | 1 | Checksum| Checksum
USB HID format (command header 0xA1):
Function: Read current device gain mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA1 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA1 (echo) |
| 3 | 1 | gain_mode | Current gain mode (0=Low Impedance, 1=High Impedance) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Set Filter Mode(SET_FILTER_MODE,UART 0x58 / HID 0xA2)【Disabled·Code Point Reserved】¶
UART serial format (command 0x58):
Function: Set filter mode
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x58 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Filter Mode Value (0-7: 8 filter modes)
6 | 1 | Checksum| Checksum
Parameter Description:
- Filter Mode Range: 0-7 (Total 8 modes)
- Description: Select DAC digital filter type
- 0: Minimum Phase filter (default)
- 1: Linear Phase Apodizing Fast Roll-off filter
- 2: Linear phase fast roll-off filter
- 3: Linear Phase Fast Roll-off low-ripple filter
- 4: Linear phase slow roll-off filter
- 5: Minimum phase fast roll-off filter
- 6: Minimum phase slow roll-off filter
- 7: Minimum Phase Fast Roll-Off Low Dispersion
Device Processing:
- Parameter will be automatically saved to Flash via existing periodic save mechanism.
- If parameter exceeds range (>7), firmware will reject setting and return false.
USB HID format (command header 0xA2):
Function: Set DAC digital filter mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA2 |
| 3 | 1 | filter_mode | Filter mode value (0-7) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Filter Mode Definitions: - 0: Minimum Phase filter (default) - 1: Linear Phase Apodizing Fast Roll-off filter - 2: Linear phase fast roll-off filter - 3: Linear Phase Fast Roll-off low-ripple filter - 4: Linear phase slow roll-off filter - 5: Minimum phase fast roll-off filter - 6: Minimum phase slow roll-off filter - 7: Minimum Phase Fast Roll-Off Low Dispersion
Return Value: No direct return value. To confirm filter mode setting, use GET_FILTER_MODE (0xA3) command.
Get Filter Mode(GET_FILTER_MODE,UART 0x59 / HID 0xA3)【Disabled·Code Point Reserved】¶
UART serial format (command 0x59):
Function: Read device current filter mode
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x59 | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x59 | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Current Filter Mode (0-7)
6 | 1 | Checksum| Checksum
USB HID format (command header 0xA3):
Function: Read current device filter mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA3 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA3 (echo) |
| 3 | 1 | filter_mode | Current filter mode (0-7) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Set Game Mode(SET_GAME_MODE,UART 0x5A / HID 0xA4)【Disabled·Code Point Reserved】¶
UART serial format (command 0x5A):
Function: Set game mode
Direction: Host→Device
Data Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5A | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Game Mode Value (0=No effect, 1=FPS, 2=Virtual 7.1)
6 | 1 | Checksum| Checksum
Parameter Description:
- Game Mode Range: 0-2
- Description: Select game audio effect mode
- 0: No effect (Standard Stereo)
- 1: FPS Mode (Enhanced Positioning)
- 2: Virtual 7.1 (Surround Sound Effect)
Device Processing:
- Parameter will be automatically saved to Flash via existing periodic save mechanism.
- If parameter exceeds range (>2), firmware will reject setting and return false.
USB HID format (command header 0xA4):
Function: Set game audio mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA4 |
| 3 | 1 | game_mode | Game mode (0=No effect, 1=FPS, 2=Virtual 7.1) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Game Mode Definitions: - 0: No effect (standard stereo) - 1: FPS mode (enhanced positioning) - 2: Virtual 7.1 (surround sound effect)
Return Value: No direct return value. To confirm game mode setting, use GET_GAME_MODE (0xA5) command.
Get Game Mode(GET_GAME_MODE,UART 0x5B / HID 0xA5)【Disabled·Code Point Reserved】¶
UART serial format (command 0x5B):
Function: Read device current game mode
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5B | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5B | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Current Game Mode (0=No effect, 1=FPS, 2=Virtual 7.1)
6 | 1 | Checksum| Checksum
USB HID format (command header 0xA5):
Function: Read current device game mode
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA5 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA5 (echo) |
| 3 | 1 | game_mode | Current game mode (0=No effect, 1=FPS, 2=Virtual 7.1) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Get Firmware Version(GET_FIRMWARE_VERSION,UART 0x5C / HID 0xA6)¶
UART serial format (command 0x5C):
Function: Read device firmware version number
Direction: Host→Device
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5C | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5C | Command Code
4 | 1 | 0x03 | Data Length (3 bytes)
5 | 1 | uint8 | Major Version (BCD, e.g., 0x01 means 1)
6 | 1 | uint8 | Minor Version (BCD, e.g., 0x00 means 0)
7 | 1 | uint8 | Revision Version (BCD, e.g., 0x0C means 12)
8 | 1 | Checksum| Checksum
Version Number Format:
- Version number uses BCD (Binary Coded Decimal) format.
- 3 bytes represent: Major Version, Minor Version, Revision Version.
- Example: 0x01 0x00 0x0C means version 1.0.12.
USB HID format (command header 0xA6):
Function: Read device firmware version (BCD format)
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA6 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xA6 (echo) |
| 3 | 1 | major | Major version (BCD format) |
| 4 | 1 | minor | Minor version (BCD format) |
| 5 | 1 | patch | Patch version (BCD format) |
| 6-63 | 58 | reserved | Reserved fields (fill with 0) |
Version Format Description: - Version uses BCD (Binary Coded Decimal) format - 3 bytes represent: major version, minor version, patch version - Example: 0x01 0x00 0x0C represents version 1.0.12
Set EQ Band Count(SET_EQ_BAND_COUNT,UART 0x5D / HID 0xB3)¶
UART serial format (command 0x5D):
Function: Set EQ band count and save to Flash, controlling the number of DSP cores participating in EQ processing
Direction: MCU→XU316
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5D | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | EQ Band Count (8/16/24/32)
6 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5D | Command Code
4 | 1 | 0x02 | Data Length
5 | 1 | uint8 | Status Code (0x00=Success, 0x01=Failure)
6 | 1 | uint8 | Current EQ Band Count (read back actual effective value)
7 | 1 | Checksum| Checksum
Parameter Description:
- Band Count Values: Only 8, 16, 24, and 32 are supported; other values are rejected by XU316.
- Processing Resource Mapping:
- 8 bands: 1 DSP core participates in processing
- 16 bands: 2 DSP cores participate in processing
- 24 bands: 3 DSP cores participate in processing
- 32 bands: All 4 DSP cores participate in processing (default)
XU316 Processing:
- Validates band count value (only 8/16/24/32 accepted; invalid values return failure status).
- Switches the number of DSP cores participating in EQ processing.
- Band count setting is saved to Flash and automatically restored on power-on.
- The "Current EQ Band Count" in the response is the read-back actual effective value for MCU confirmation.
Relation to Parameter Storage:
- Switching band count does not delete stored filter parameters.
- When switching from a high to a low band count, Band parameters beyond the current count are retained but do not participate in processing; they automatically take effect again when switching back to a higher count.
Response Example:
MCU Send Example:
Field Breakdown (Send)
| Field | Length | Example Value | Description |
|---|---|---|---|
| Frame Header | 2 bytes | 55 AA | Fixed frame header, marks the start of a protocol frame |
| Version | 1 byte | 00 | Protocol version number, fixed to 0x00 in this protocol |
| Command | 1 byte | 5D | "Set EQ Band Count" command |
| Data Length | 1 byte | 01 | 1 byte of data follows |
| EQ Band Count | 1 byte | 10 | Hex 0x10, i.e. decimal 16; set to 16 bands (2 DSP cores participate in processing) |
| Checksum | 1 byte | 6D | Sum of all bytes from 55 through the band count, modulo 256 |
Field Breakdown (Response)
| Byte Segment | Length | Example | Description |
|---|---|---|---|
| Frame Header | 2 bytes | 55 AA | Fixed frame header indicating start of a protocol frame |
| Version | 1 byte | 00 | Protocol version, fixed to 0x00 in this protocol |
| Command | 1 byte | 5D | Response for the "Set EQ Band Count" command |
| Data Length | 1 byte | 02 | 2 data bytes follow |
| Status Code | 1 byte | 00 | 0x00 indicates success (only 8/16/24/32 accepted; invalid values return failure) |
| Current EQ Band Count | 1 byte | 10 | Read-back actual effective value: 16 bands |
| Checksum | 1 byte | 6E | Sum of all bytes from 55 to the band count byte, modulo 256 |
USB HID format (command header 0xB3):
Function: Set EQ band count, supports dynamic switching among 8/16/24/32 bands, controls number of DSP cores participating in processing
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xB3 |
| 3 | 1 | band_count | EQ band count (8/16/24/32) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
EQ Band Count Definitions: - 8: Only Core0 participates in processing - 16: Core0 + Core1 participate in processing - 24: Core0 + Core1 + Core2 participate in processing - 32: All 4 cores participate in processing
Device Processing: - Only accepts 8, 16, 24, 32; other values are rejected - Saved to Flash (independent file eq_band_cnt), restored on power-up - After setting, triggers parameter sync to tile1, cores on tile1 not participating in processing bypass audio
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xB3 (echo) |
| 3 | 1 | status | Status code (0x00=success, 0x01=failure) |
| 4 | 1 | band_count | Current EQ band count (8/16/24/32) |
| 5-63 | 59 | reserved | Reserved fields (fill with 0) |
Note: HID headers from 0xA7 onward are used for firmware upgrade; band count commands use 0xB3/0xB4 and do not follow the +0x4A mapping.
Get EQ Band Count(GET_EQ_BAND_COUNT,UART 0x5E / HID 0xB4)¶
UART serial format (command 0x5E):
Function: Read XU316 current EQ band count
Direction: MCU→XU316
Request Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5E | Command Code
4 | 1 | 0x00 | Data Length
5 | 1 | Checksum| Checksum
Response Packet Format:
Byte Pos | Length | Content | Description
---------|--------|---------|------
0 | 1 | 0x55 | Header 1
1 | 1 | 0xAA | Header 2
2 | 1 | 0x00 | Version
3 | 1 | 0x5E | Command Code
4 | 1 | 0x01 | Data Length
5 | 1 | uint8 | Current EQ Band Count (8/16/24/32, default 32)
6 | 1 | Checksum| Checksum
Function Description:
- Returns the currently effective EQ band count (8/16/24/32, default 32)
MCU Send Example:
| Byte Segment | Length | Example | Description |
|---|---|---|---|
| Frame Header | 2 bytes | 55 AA | Fixed frame header indicating start of a protocol frame |
| Version | 1 byte | 00 | Protocol version, fixed to 0x00 in this protocol |
| Command | 1 byte | 5E | Current command is "Get EQ Band Count" |
| Data Length | 1 byte | 00 | This command carries no data |
| Checksum | 1 byte | 5D | Sum of all bytes from 55 to the data length byte, modulo 256 |
XU316 Response Example:
| Byte Segment | Length | Example | Description |
|---|---|---|---|
| Frame Header | 2 bytes | 55 AA | Fixed frame header indicating start of a protocol frame |
| Version | 1 byte | 00 | Protocol version, fixed to 0x00 in this protocol |
| Command | 1 byte | 5E | Response for the "Get EQ Band Count" command |
| Data Length | 1 byte | 01 | 1 data byte follows |
| Current EQ Band Count | 1 byte | 20 | Hex 0x20 = decimal 32, indicating 32 bands (default) |
| Checksum | 1 byte | 7E | Sum of all bytes from 55 to the band count byte, modulo 256 |
USB HID format (command header 0xB4):
Function: Read current EQ band count
Request Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xB4 |
| 3-63 | 61 | reserved | Reserved fields (fill with 0) |
Response Format (64 bytes):
| Offset | Length | Field Name | Description |
|---|---|---|---|
| 0 | 1 | report_id | Fixed value: 0x01 |
| 1 | 1 | sync_header | Sync header: 0x77 |
| 2 | 1 | cmd_header | Command header: 0xB4 (echo) |
| 3 | 1 | band_count | Current EQ band count (8/16/24/32) |
| 4-63 | 60 | reserved | Reserved fields (fill with 0) |
Preset Mode Definitions¶
| Mode Index | Mode Name | Purpose | Type |
|---|---|---|---|
| 0 | JAZZ | Optimized for jazz | Preset |
| 1 | POP | Optimized for pop | Preset |
| 2 | ROCK | Optimized for rock | Preset |
| 3 | CLASSIC | Optimized for classical | Preset |
| 4 | R&B | Optimized for rhythm music | Preset |
| 5 | 3A Game | Optimized for 3A games | Preset |
| 6 | FPS | Optimized for FPS games | Preset |
| 7 | User 1 | User-defined mode 1 | User |
| 8 | User 2 | User-defined mode 2 | User |
| 9 | User 3 | User-defined mode 3 | User |
Mode Characteristics
- Preset modes: factory presets, cannot be modified, optimized for specific music types
- User modes: support custom parameters, can be saved and reset
Parameter Constraints¶
Protocol Limitations and Constraints
Hardware limitations
- Filter band count: supports 8/16/24/32 (set via 0x5D, query via 0x5E; saved to Flash and restored on power-on, default 32 = all 4 DSP cores participating; only these four values are accepted, invalid values are rejected)
- Mode count: 10 modes, 0-9 (modes 0-6 preset, 7-9 user; filter states are automatically cleared on mode switching)
- Sample rate support: 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz (device capability, independent of protocol fields)
Parameter ranges
| Parameter | Range | Format |
|---|---|---|
| Center frequency (freq) | 20Hz - 20kHz | float (little-endian) |
| Q value (q) | 0.1 - 30.0 | float (little-endian) |
| Bandwidth (bw) | 1Hz - 20kHz | float (little-endian) |
| Gain (gain) | -24dB - +24dB | float (little-endian) |
| Overall gain (mode gain) | -50dB - 0dB | int32 (little-endian) |
Typical Configuration Flows¶
Mode Switching Flow¶
- Send SET_EQ_MODE to switch mode (UART 0x40 / HID 0x8A)
- Device updates internal mode state
- Send GET_EQ_MODE to confirm (UART 0x41 / HID 0x8B)
- Device responds with current mode state
Parameter Setting Flow¶
- Send SET_EQ_MODE to switch to the target mode (UART 0x40 / HID 0x8A)
- Send the 8 filter parameter commands one by one (UART 0x43 / HID 0x8D)
- Device receives and updates internal parameter cache
- Optional: send GET_EQ_PARAMS to verify (UART 0x44 / HID 0x8E)
Parameter Reading Flow¶
- Send SET_EQ_MODE to switch to the target mode (UART 0x40 / HID 0x8A)
- Send the GET_EQ_PARAMS request (UART 0x44 / HID 0x8E)
- Device prepares response data
- Read the response
Notes
- Timing: wait for the device to finish processing before sending the next command (5ms+ interval recommended)
- Data integrity: parameters of all filters within the currently effective band count must be sent, even if some filters are unused (band count is managed and queried via 0x5D/0x5E, default 32)
- Mode sync: after setting a mode, read it back to ensure synchronization
- Parameter validation: overall gain (0x42) accepts -50 to 0 dB, out-of-range values are clamped to the boundary then stored; filter parameters (0x43) are validity-checked only — any NaN/Inf parameter or zero center frequency causes the whole frame to be rejected (status code 0x01); EQ band count (0x5D) accepts only 8/16/24/32
- Device-side coefficient calculation: the host only sends parameters (freq/q/bw/gain); XU316 calculates filter coefficients in real time (with dynamic bshift calculation to ensure coefficient precision)
- Checksum: every command must carry a correct checksum — the low 8 bits of the sum of all bytes from frame header to end of data

