Skip to content

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 = 0xFF to return the currently active EQ mode information
  • Send mode = 0-9 to 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:

  1. Parses mode value, gain value, and mode name.
  2. Sets the specified mode's EQ overall gain and name for all sample rates' left and right channels.
  3. 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:

  1. Parses parameters and stores them into the corresponding mode for all sample rates.
  2. Calls eq_calculate_coefficients_from_params() to calculate coefficients.
  3. Stores calculated coefficients into the corresponding mode for all sample rates.
  4. 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:

  1. Deletes the EQ parameter file stored in Flash for the specified mode.
  2. Deletes the gain and mode name Flash storage file.
  3. Restores the header file preset parameters for that mode.
  4. If mode number is 0xFF, resets all modes.
  5. 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:

55 AA 00 5D 02 00 10 6E

MCU Send Example:

55 AA 00 5D 01 10 6D

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:

55 AA 00 5E 00 5D
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:

55 AA 00 5E 01 20 7E
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

  1. Send SET_EQ_MODE to switch mode (UART 0x40 / HID 0x8A)
  2. Device updates internal mode state
  3. Send GET_EQ_MODE to confirm (UART 0x41 / HID 0x8B)
  4. Device responds with current mode state

Parameter Setting Flow

  1. Send SET_EQ_MODE to switch to the target mode (UART 0x40 / HID 0x8A)
  2. Send the 8 filter parameter commands one by one (UART 0x43 / HID 0x8D)
  3. Device receives and updates internal parameter cache
  4. Optional: send GET_EQ_PARAMS to verify (UART 0x44 / HID 0x8E)

Parameter Reading Flow

  1. Send SET_EQ_MODE to switch to the target mode (UART 0x40 / HID 0x8A)
  2. Send the GET_EQ_PARAMS request (UART 0x44 / HID 0x8E)
  3. Device prepares response data
  4. Read the response

Notes

  1. Timing: wait for the device to finish processing before sending the next command (5ms+ interval recommended)
  2. 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)
  3. Mode sync: after setting a mode, read it back to ensure synchronization
  4. 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
  5. 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)
  6. 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

Consultation and Feedback

Click to expand consultation and feedback form
×

Notice

Company Name:

Email Address:

Subject:

Message: