Files
phaten-audio/en/docs/dev_doc/EQ_Protocols/EQ_HID_Protocol.md

232 lines
7.4 KiB
Markdown
Raw Normal View History

2025-12-31 18:12:27 +08:00
---
title: Zero-Code Firmware Series EQ HID Control Protocol and Command Set
description: EQ HID control protocol for zero-code firmware series devices, including message structure, command set, and field descriptions for mode switching, parameter read/write, and device information retrieval.
keywords: EQ, HID, Control Protocol, Command Set, USB HID, XU316, Zero-Code Firmware, Phaten Audio
---
--8<-- "common/phaten_xmos_support_img.md"
# Zero-Code Firmware Series EQ HID Control Protocol and Command Set
## 1. Protocol Foundation Specifications
### 1.1 Underlying Communication Protocol
Based on USB HID (Human Interface Device) protocol.
| Parameter | Value |
| :--- | :--- |
| Report ID | 0x01 |
| Packet Size | 64 bytes |
| Transfer Direction | Bidirectional (Host <-> Device) |
### 1.2 Message Format and Data Transmission
**Common Message Format**
All commands and responses follow the Report structure below:
| Field | Bytes | Description |
| :--- | :--- | :--- |
| Report ID | 1 | Fixed as `0x01` |
| Sync Header | 1 | Fixed as `0x77` (command start identifier) |
| Command Code | 1 | Indicates specific operation (e.g., `0x8A`) |
| Data Area | 61 | Specific data content (unused bytes typically filled with 0) |
**Data Transmission Notes**
* **Byte Order**: All multi-byte data is transmitted in **Little Endian** mode.
* **Floating Point**: Follows IEEE 754 float format.
---
## 2. Protocol Command Set
### 2.1 Command Classification Overview
| Command Code | Command Description | Direction | Function |
| :--- | :--- | :--- | :--- |
| **0x8A** | SET_EQ_MODE | Host→Device | Switch current EQ mode |
| **0x8B** | GET_EQ_MODE | Host→Device | Get current EQ mode information (mode number, gain, name) |
| **0x8C** | SET_MODE_GAIN_AND_NAME | Host→Device | Set overall gain and name for specified mode |
| **0x8D** | SET_EQ_PARAMS | Host→Device | Send single filter parameters |
| **0x8E** | GET_EQ_PARAMS | Host→Device | Read single filter parameters |
| **0x8F** | GET_DEVICE_INFO | Host→Device | Get device basic information (PID, VID, SN, etc.) |
| **0x90** | RESET_EQ_PARAMS | Host→Device | Reset EQ parameters (restore presets) |
---
## 3. Basic Function Command Details
### 3.1 Switch EQ Mode (0x8A)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x8A` | Command code |
| 3 | 1 | `Mode` | Mode value<br>0-5: Preset modes<br>6-8: User modes<br>9: Bypass |
| 4-63 | 60 | `Reserved` | Reserved bytes (0x00) |
---
### 3.2 Get Current EQ Mode Information (0x8B)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x8B` | Command code |
| 3-63 | 61 | `Reserved` | Reserved bytes (0x00) |
**Device Returns (Response)**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header 1 |
| 2 | 1 | `0x8B` | Sync header 2 (echo command code) |
| 3 | 1 | `Mode` | Current mode value |
| 4-7 | 4 | `Gain` | Overall gain (int32, little endian, range 0~-50dB) |
| 8-23 | 16 | `Name` | Mode name (UTF-8 string) |
| 24-63 | 40 | `Reserved` | Reserved bytes |
---
### 3.3 Set Mode Overall Gain and Name (0x8C)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x8C` | Command code |
| 3 | 1 | `Mode` | Target mode value (0-9) |
| 4-7 | 4 | `Gain` | Overall gain (int32, little endian) |
| 8-23 | 16 | `Name` | Mode name (UTF-8 string) |
| 24-63 | 40 | `Reserved` | Reserved bytes |
---
### 3.4 Send EQ Parameters (0x8D)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x8D` | Command code |
| 3 | 1 | `Mode` | Mode value (0-9) |
| 4 | 1 | `Band` | Filter index (0-7) |
| 5 | 1 | `Type` | Filter type (see table below) |
| 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 bytes |
**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 | | |
---
### 3.5 Read EQ Parameters (0x8E)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x8E` | Command code |
| 3 | 1 | `Mode` | Mode value (0-9) |
| 4 | 1 | `Band` | Filter index (0-7) |
| 5-63 | 59 | `Reserved` | Reserved bytes |
**Device Returns (Response)**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header 1 |
| 2 | 1 | `0x8E` | Sync header 2 (echo command code) |
| 3 | 1 | `Mode` | Mode value |
| 4 | 1 | `Band` | Filter index |
| 5 | 1 | `Type` | Filter type |
| 6-9 | 4 | `Freq` | Center frequency (float, little endian) |
| 10-13 | 4 | `Q` | Q value (float, little endian) |
| 14-17 | 4 | `BW` | Bandwidth (float, little endian) |
| 18-21 | 4 | `Gain` | Gain (float, little endian) |
| 22-63 | 41 | `Reserved` | Reserved bytes |
---
### 3.6 Get Device Information (0x8F)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x8F` | Command code |
| 3-63 | 61 | `Reserved` | Reserved bytes |
**Device Returns (Response)**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header 1 |
| 2 | 1 | `0x8F` | Sync header 2 (echo command code) |
| 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 bytes |
---
### 3.7 Reset EQ Parameters (0x90)
**Host Sends**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header |
| 2 | 1 | `0x90` | Command code |
| 3 | 1 | `Mode` | Mode number (0-9)<br>`0xFF` indicates reset all modes |
| 4-63 | 60 | `Reserved` | Reserved bytes |
**Device Returns (Response)**
| Byte Position | Length | Content | Description |
| :--- | :--- | :--- | :--- |
| 0 | 1 | `0x01` | Report ID |
| 1 | 1 | `0x77` | Sync header 1 |
| 2 | 1 | `0x90` | Sync header 2 (echo command code) |
| 3 | 1 | `Status` | Status code (0x00=success, 0x01=failure) |
| 4-63 | 60 | `Reserved` | Reserved bytes |
## Inquiries and Feedback
<details>
<summary>Click to expand inquiry and feedback form</summary>
--8<-- "common/customer_form.md"
</details>