Files
phaten-audio/zh/docs/dev_doc/protocols/XMOS_EQ_HID_Protocol.md

1149 lines
41 KiB
Markdown
Raw Normal View History

2025-08-19 18:13:48 +08:00
---
title: XMOS EQ HID 通信协议规范
2025-12-25 14:21:26 +08:00
description: 适用于免开发固件系列设备的 EQ HID 控制协议,包含报文结构、命令集与字段说明,用于模式切换、参数读写与设备信息获取。
keywords: EQ, HID, 控制协议, 命令集, USB HID, XU316,免开发固件, Phaten Audio
2025-08-19 18:13:48 +08:00
authors:
- admin
tags:
- 协议
- XMOS
- EQ
- HID
search:
boost: 2
---
# XMOS EQ HID 通信协议规范
--8<-- "common/phaten_xmos_support_img.md"
## 协议概述 :material-file-document-outline:
!!! abstract "功能定位与范围"
本文档详细描述了XMOS EQ HID设备与PC端GUI软件之间的通信协议。该协议提供了EQ模式控制、参数设置和设备信息获取的完整功能集。
## 一、协议基础规范 :material-connection:
### 1.1 底层通信协议
**基于USB HID (Human Interface Device) 协议**
| 参数 | 值 |
|:---------------:|:--------------------:|
| 传输方式 | USB HID |
| 数据包大小 | 64字节包含1字节Report ID 0x01 |
| 有效数据 | 63字节 |
| 字节序 | 小端序Little Endian |
2025-12-25 14:21:26 +08:00
| 同步头 | 0x77固定第1字节Report ID 为第0字节 |
2025-08-19 18:13:48 +08:00
### 1.2 HID设备识别
| 参数 | 值 | 说明 |
|:----------:|:--------:|:-----------------------------------------:|
| Usage Page | 0xff82 或 0xff83 | HID设备类型标识 |
2025-12-25 14:21:26 +08:00
| Report ID | 0x01 | 发送时作为第一个字节第0字节 |
2025-08-19 18:13:48 +08:00
| 传输模式 | 非阻塞模式 | 避免GUI卡顿 |
### 1.3 通信机制
!!! warning "数据传输说明"
- 所有数据均采用小端序Little Endian传输
2025-12-25 14:21:26 +08:00
- 同步头 0x77 固定在第 1 字节(第 0 字节为 Report ID = 0x01
2025-08-19 18:13:48 +08:00
- 建议命令间隔5ms以上避免设备处理不及时
2025-12-31 18:12:27 +08:00
### 1.4 数据包结构
!!! note "64字节数据包约定"
- PC发送与设备响应均使用固定长度 64 字节
- 第0字节固定为 `report_id = 0x01`
- 第1字节固定为 `sync_header = 0x77`
- 第2字节为 `cmd_header`(命令头)
- 其余未使用字节填充 0
2025-08-19 18:13:48 +08:00
## 二、协议命令集 :material-code-tags:
### 2.1 命令分类概览
!!! note "命令使用说明"
2025-12-25 14:21:26 +08:00
1. 所有命令必须包含 Report ID 0x01第0字节与同步头 0x77第1字节
2. 数据包总长度固定为 64 字节(含 Report ID
2025-08-19 18:13:48 +08:00
3. 未使用的字节必须填充为0
#### 2.1.1 命令头定义
| 命令头 | 命令名称 | 功能描述 | 方向 |
|:------:|:--------:|:--------:|:----:|
2025-12-25 14:21:26 +08:00
| 0x8A | SET_EQ_MODE | 切换当前的 EQ 模式 | PC → 设备 |
| 0x8B | GET_EQ_MODE | 获取当前 EQ 模式信息(模式号、增益、名称) | PC → 设备 |
| 0x8C | SET_MODE_GAIN_AND_NAME | 设置指定模式的整体增益和名称 | PC → 设备 |
| 0x8D | SET_EQ_PARAMS | 发送单个滤波器的参数 | PC → 设备 |
| 0x8E | GET_EQ_PARAMS | 读取单个滤波器的参数 | PC ↔ 设备 |
| 0x8F | GET_DEVICE_INFO | 获取设备基础信息PID/VID/SN | PC ↔ 设备 |
| 0x90 | RESET_EQ_PARAMS | 复位 EQ 参数(恢复预设) | PC ↔ 设备 |
2025-12-31 18:12:27 +08:00
| 0x91 | GET_EQ_MODE_COUNT | 获取 EQ 模式数量信息 | PC ↔ 设备 |
| 0x92 | SET_AND_SAVE_EQ_MODE | 设置并保存 EQ 模式 | PC ↔ 设备 |
| 0x93 | SET_VOLUME | 设置设备音量级别 | PC → 设备 |
| 0x94 | GET_VOLUME | 获取设备音量级别 | PC ↔ 设备 |
| 0x95 | GET_LED_INFO | 获取 LED 信息(索引与名称) | PC ↔ 设备 |
| 0x96 | SET_LED_SWITCH | 设置 LED 开关 | PC ↔ 设备 |
| 0x97 | GET_LED_SWITCH | 获取 LED 开关状态 | PC ↔ 设备 |
| 0x98 | GET_LED_STATUS | 获取 LED 状态RGB/显示状态) | PC ↔ 设备 |
| 0x99 | GET_LED_COUNT | 获取 LED 总数 | PC ↔ 设备 |
| 0x9A | GET_UAC_MODE_INFO | 获取 UAC 模式信息(数量与名称) | PC ↔ 设备 |
| 0x9B | SET_UAC_MODE | 设置 UAC 模式 | PC → 设备 |
| 0x9C | GET_CURRENT_UAC_MODE | 获取当前 UAC 模式 | PC ↔ 设备 |
| 0x9D | SET_EQ_ENABLE | 设置 EQ 使能开关 | PC ↔ 设备 |
| 0x9E | GET_EQ_ENABLE | 获取 EQ 使能开关 | PC ↔ 设备 |
| 0x9F | GET_SAMPLE_FORMAT | 获取采样率与格式 | PC ↔ 设备 |
| 0xA0 | SET_GAIN_MODE | 设置增益模式 | PC → 设备 |
| 0xA1 | GET_GAIN_MODE | 获取增益模式 | PC ↔ 设备 |
| 0xA2 | SET_FILTER_MODE | 设置滤波器模式 | PC → 设备 |
| 0xA3 | GET_FILTER_MODE | 获取滤波器模式 | PC ↔ 设备 |
| 0xA4 | SET_GAME_MODE | 设置游戏模式 | PC → 设备 |
| 0xA5 | GET_GAME_MODE | 获取游戏模式 | PC ↔ 设备 |
| 0xA6 | GET_FIRMWARE_VERSION | 获取固件版本号 | PC ↔ 设备 |
2026-03-27 11:18:00 +08:00
| 0xA7 | SET_EQ_BAND_COUNT | 设置 EQ 段数 | PC → 设备 |
| 0xA8 | GET_EQ_BAND_COUNT | 获取 EQ 段数 | PC ↔ 设备 |
2026-03-09 16:50:37 +08:00
| 0xB0 | SET_EX3D_CMD | 发送 EX3D 命令(封装所有 EX3D SET 命令) | PC ↔ 设备 |
| 0xB1 | GET_EX3D_CMD | 读取 EX3D 参数(封装所有 EX3D GET 命令) | PC ↔ 设备 |
| 0x80 | SET_UPSAMPLE | 设置采样率升频开关 | PC → 设备 |
| 0x81 | GET_UPSAMPLE | 获取采样率升频状态 | PC ↔ 设备 |
2025-08-19 18:13:48 +08:00
### 2.2 详细命令格式
2025-12-25 14:21:26 +08:00
#### 2.2.1 切换 EQ 模式0x8A
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 切换当前的 EQ 模式
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8A |
2025-12-31 18:12:27 +08:00
| 3 | 1 | mode | 模式值0-6 为预设模式7-9 为用户模式) |
2025-12-25 14:21:26 +08:00
| 4-63 | 60 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
#### 2.2.2 获取当前 EQ 模式信息0x8B
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 获取当前模式值、整体增益与模式名称
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8B |
2025-12-31 18:12:27 +08:00
| 3 | 1 | mode | 模式值0-9: 指定模式0xFF: 获取当前模式信息) |
| 4-63 | 60 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**响应格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8B回显 |
| 3 | 1 | mode | 当前模式值 |
| 4-7 | 4 | gain | 整体增益int32, 小端序,范围 -50dB ~ 0dB |
| 8-23 | 16 | name | 模式名称UTF-8 字符串) |
| 24-63 | 40 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-31 18:12:27 +08:00
**使用说明**:
- 发送 `mode = 0xFF` 时,返回当前激活的 EQ 模式信息
- 发送 `mode = 0-9` 时,返回指定模式的增益与名称(不切换当前模式)
2025-12-25 14:21:26 +08:00
#### 2.2.3 设置模式整体增益和名称0x8C
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 设置目标模式的整体增益和名称
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8C |
| 3 | 1 | mode | 目标模式值0-9 |
| 4-7 | 4 | gain | 整体增益int32, 小端序) |
| 8-23 | 16 | name | 模式名称UTF-8 字符串) |
| 24-63 | 40 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
#### 2.2.4 设置 EQ 参数0x8D
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 发送单个滤波器的参数
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8D |
| 3 | 1 | mode | 模式值0-9 |
| 4 | 1 | band | 滤波器索引0-7 |
| 5 | 1 | type | 滤波器类型码 |
| 6-9 | 4 | freq | 中心频率 Hzfloat, 小端序) |
| 10-13 | 4 | q | Q 值float, 小端序) |
| 14-17 | 4 | bw | 带宽 Hzfloat, 小端序) |
| 18-21 | 4 | gain | 增益 dBfloat, 小端序) |
| 22-63 | 42 | reserved | 保留字段填充0 |
**滤波器类型码**:
| 代码 | 类型 | 代码 | 类型 |
|:----:|:----:|:----:|:----:|
| 0x00 | Bypass | 0x06 | 带阻Band Reject |
| 0x01 | 全通All Pass | 0x07 | 陷波Notch |
| 0x02 | 峰值Peak | 0x08 | 恒定QConstant Q |
| 0x03 | 低通Low Pass | 0x09 | 低架Low Shelf |
| 0x04 | 高通High Pass | 0x0A | 高架High Shelf |
| 0x05 | 带通Band Pass | | |
**数值格式说明**:
!!! info "浮点数与字节序"
- 所有浮点数遵循 IEEE 754 float采用小端序
- 所有多字节整数均采用小端序Little Endian
#### 2.2.5 读取 EQ 参数0x8E
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 读取指定滤波器的参数
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8E |
| 3 | 1 | mode | 模式值0-9 |
| 4 | 1 | band | 滤波器索引0-7 |
| 5-63 | 59 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**响应格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8E回显 |
| 3 | 1 | mode | 模式值 |
| 4 | 1 | band | 滤波器索引 |
| 5 | 1 | type | 滤波器类型码 |
| 6-9 | 4 | freq | 中心频率 Hzfloat, 小端序) |
| 10-13 | 4 | q | Q 值float, 小端序) |
| 14-17 | 4 | bw | 带宽 Hzfloat, 小端序) |
| 18-21 | 4 | gain | 增益 dBfloat, 小端序) |
| 22-63 | 41 | reserved | 保留字段填充0 |
#### 2.2.6 获取设备信息0x8F
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 获取设备的基本标识信息
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8F |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x8F回显 |
| 3-4 | 2 | pid | 产品IDuint16, 小端序) |
| 5-6 | 2 | vid | 厂商IDuint16, 小端序) |
| 7-22 | 16 | product | 产品字符串UTF-8 |
| 23-38 | 16 | vendor | 厂商字符串UTF-8 |
| 39-54 | 16 | sn | 序列号字符串UTF-8 |
| 55-63 | 9 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
#### 2.2.7 复位 EQ 参数0x90
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**功能说明**: 复位指定模式或全部模式的 EQ 参数
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**请求格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x90 |
| 3 | 1 | mode | 模式号0-90xFF 表示复位所有模式) |
| 4-63 | 60 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
2025-12-25 14:21:26 +08:00
**响应格式64 字节)**:
2025-08-19 18:13:48 +08:00
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
2025-12-25 14:21:26 +08:00
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x90回显 |
| 3 | 1 | status | 状态码0x00=成功, 0x01=失败) |
| 4-63 | 60 | reserved | 保留字段填充0 |
2025-12-31 18:12:27 +08:00
#### 2.2.8 获取 EQ 模式数量信息0x91
**功能说明**: 获取 EQ 模式总数与预定义模式数量(不包含禁用模式)
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x91 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x91回显 |
| 3 | 1 | total | 模式总数(示例:包含 0-9 共 10 个模式) |
| 4 | 1 | preset_total | 预定义模式数量(示例:包含 0-6 共 7 个预设模式) |
| 5-63 | 59 | reserved | 保留字段填充0 |
#### 2.2.9 设置并保存 EQ 模式0x92
**功能说明**: 设置当前 EQ 模式并保存到 Flash开机时自动恢复
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x92 |
| 3 | 1 | mode | 模式值文档示例0-90-6预设7-9用户 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x92回显 |
| 3 | 1 | status | 状态码0x00=成功, 0x01=失败) |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.10 设置音量级别0x93
**功能说明**: 设置设备输出音量级别
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x93 |
| 3 | 1 | volume | 音量级别0-60 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**参数说明**:
- 音量级别范围0-60共61级
- 0最小音量约 -127.5dB
- 60最大音量0dB
#### 2.2.11 获取音量级别0x94
**功能说明**: 读取设备当前音量级别
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x94 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x94回显 |
| 3 | 1 | volume | 当前音量级别0-60 |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.12 获取 LED 信息0x95
**功能说明**: 读取 LED 索引与 LED 名称
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x95 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x95回显 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4-19 | 16 | led_name | LED 名称UTF-8 字符串) |
| 20-63 | 44 | reserved | 保留字段填充0 |
#### 2.2.13 设置 LED 开关0x96
**功能说明**: 设置 LED 开关状态
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x96 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4 | 1 | onoff | LED 开关0=OFF, 1=ON |
| 5-63 | 59 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x96回显 |
| 3 | 1 | status | 状态码0x00=成功, 0x01=失败) |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.14 获取 LED 开关状态0x97
**功能说明**: 读取 LED 开关状态
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x97 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x97回显 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4 | 1 | onoff | LED 开关0=OFF, 1=ON |
| 5-63 | 59 | reserved | 保留字段填充0 |
#### 2.2.15 获取 LED 状态0x98
**功能说明**: 读取 LED 的 RGB 颜色与显示状态
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x98 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x98回显 |
| 3 | 1 | led_index | LED 索引0-7 |
| 4 | 1 | r | R 颜色值0-255 |
| 5 | 1 | g | G 颜色值0-255 |
| 6 | 1 | b | B 颜色值0-255 |
| 7 | 1 | led_status | LED 状态0=熄灭, 1=常亮, 2=慢闪, 3=快闪, 4=呼吸) |
| 8-63 | 56 | reserved | 保留字段填充0 |
#### 2.2.16 获取 LED 总数0x99
**功能说明**: 读取设备支持的 LED 总数
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x99 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x99回显 |
| 3 | 1 | led_total | LED 总数 |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.17 获取 UAC 模式信息0x9A
**功能说明**: 读取 UAC 模式数量与名称列表
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9A |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9A回显 |
| 3 | 1 | count | UAC 模式总数示例2 |
| 4-11 | 8 | name0 | 模式0名称UTF-8最大8字节 |
| 12-19 | 8 | name1 | 模式1名称UTF-8最大8字节 |
| 20-63 | 44 | reserved | 保留字段填充0 |
#### 2.2.18 设置 UAC 模式0x9B
**功能说明**: 设置 UAC 模式UAC1.0/UAC2.0
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9B |
| 3 | 1 | uac_mode | UAC 模式值0=UAC2.0, 1=UAC1.0 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**设备端处理**:
- 注意:设备重启后不会返回响应
#### 2.2.19 获取当前 UAC 模式0x9C
**功能说明**: 读取当前 UAC 模式与名称
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9C |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9C回显 |
| 3 | 1 | uac_mode | 当前 UAC 模式值0=UAC2.0, 1=UAC1.0 |
| 4-11 | 8 | uac_name | 当前 UAC 模式名称UTF-8最大8字节 |
| 12-63 | 52 | reserved | 保留字段填充0 |
#### 2.2.20 设置 EQ 使能开关0x9D
**功能说明**: 设置 EQ 使能开关(启用/禁用)
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9D |
| 3 | 1 | enable | EQ使能0=OFF, 1=ON |
| 4-63 | 60 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9D回显 |
| 3 | 1 | status | 状态码0x00=成功, 0x01=失败) |
| 4 | 1 | enable | 当前 EQ 使能状态0=OFF, 1=ON |
| 5-63 | 59 | reserved | 保留字段填充0 |
#### 2.2.21 获取 EQ 使能开关0x9E
**功能说明**: 读取 EQ 使能开关状态
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9E |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9E回显 |
| 3 | 1 | enable | EQ使能0=OFF, 1=ON |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.22 获取采样率与格式0x9F
**功能说明**: 读取当前采样率与 DSD 模式
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9F |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x9F回显 |
| 3-6 | 4 | sam_freq | 采样率uint32小端序单位 Hz |
| 7 | 1 | dsd_mode | DSD模式0=PCM, 1=DOP, 2=Native DSD |
| 8-63 | 56 | reserved | 保留字段填充0 |
**自动上报机制**:
- 设备在采样率或 DSD 模式发生变化时,可自动上报对应的 `0x9F` 响应数据包
#### 2.2.23 设置增益模式0xA0
**功能说明**: 设置增益模式
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA0 |
| 3 | 1 | gain_mode | 增益模式0=低阻, 1=高阻) |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.24 获取增益模式0xA1
**功能说明**: 读取设备当前增益模式
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA1 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA1回显 |
| 3 | 1 | gain_mode | 当前增益模式0=低阻, 1=高阻) |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.25 设置滤波器模式0xA2
**功能说明**: 设置滤波器模式0-7共8种
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA2 |
| 3 | 1 | filter_mode | 滤波器模式值0-7 |
| 4-63 | 60 | reserved | 保留字段填充0 |
**滤波器模式值定义**:
- 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
#### 2.2.26 获取滤波器模式0xA3
**功能说明**: 读取设备当前滤波器模式
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA3 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA3回显 |
| 3 | 1 | filter_mode | 当前滤波器模式0-7 |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.27 设置游戏模式0xA4
**功能说明**: 设置游戏模式
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA4 |
| 3 | 1 | game_mode | 游戏模式0=无音效, 1=FPS, 2=虚拟7.1 |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.28 获取游戏模式0xA5
**功能说明**: 读取设备当前游戏模式
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA5 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA5回显 |
| 3 | 1 | game_mode | 当前游戏模式0=无音效, 1=FPS, 2=虚拟7.1 |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.29 获取固件版本号0xA6
**功能说明**: 读取设备固件版本号BCD 格式)
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA6 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA6回显 |
| 3 | 1 | major_bcd | 主版本号BCD例如 0x01 表示 1 |
| 4 | 1 | minor_bcd | 次版本号BCD例如 0x00 表示 0 |
| 5 | 1 | patch_bcd | 修订版本号BCD例如 0x0C 表示 12 |
| 6-63 | 58 | reserved | 保留字段填充0 |
**版本号格式说明**:
- 版本号采用 BCDBinary Coded Decimal格式
- 例如:`0x01 0x00 0x0C` 表示版本 `1.0.12`
2025-08-19 18:13:48 +08:00
2026-03-27 11:18:00 +08:00
#### 2.2.30 设置 EQ 段数0xA7
**功能说明**: 设置 EQ 段数,支持 8/16/24/32 段动态切换,控制参与处理的 DSP 核数
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA7 |
| 3 | 1 | band_count | EQ 段数8=仅 Core0, 16=Core0+Core1, 24=Core0+Core1+Core2, 32=全部 4 核) |
| 4-63 | 60 | reserved | 保留字段填充0 |
**设备端处理**:
- 仅接受 8、16、24、32 四个有效值,其他值拒绝
- 设置后保存到 Flash独立文件 eq_band_cnt开机时自动恢复
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA7回显 |
| 3 | 1 | status | 状态码0x00=成功, 0x01=失败) |
| 4 | 1 | band_count | 当前 EQ 段数8/16/24/32 |
| 5-63 | 59 | reserved | 保留字段填充0 |
#### 2.2.31 获取 EQ 段数0xA8
**功能说明**: 读取当前 EQ 段数
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA8 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xA8回显 |
| 3 | 1 | band_count | 当前 EQ 段数8/16/24/32 |
| 4-63 | 60 | reserved | 保留字段填充0 |
#### 2.2.32 发送 EX3D 命令0xB0
2026-03-09 16:50:37 +08:00
**功能说明**: 发送 EX3D 设置命令,封装所有 EX3D SET 命令
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xB0 |
| 3-6 | 4 | ex3d_cmd | EX3D 命令码(包含 SET 标志,参考 ex3d_protocol.md |
| 7-10 | 4 | param1 | 参数1根据 EX3D 命令不同而不同) |
| 11-14 | 4 | param2 | 参数2根据 EX3D 命令不同而不同) |
| 15-18 | 4 | param3 | 参数3根据 EX3D 命令不同而不同) |
| 19-63 | 45 | reserved | 保留字段或扩展参数 |
**EX3D 命令码说明**:
- 基础命令码范围: 0x80-0x94
- SET 命令格式: `基础命令码 & ~0x0100`(清除第 9 位)
- 支持的 SET 命令:
- 0x81: CMD_OPEN打开 EX3D
- 0x82: CMD_ONOFF设置 EX3D 开关)
- 0x83: CMD_ANGLE设置角度
- 0x84: CMD_SOUND_FIELD设置声场模式
- 0x85: CMD_MUTE设置静音
- 0x86: CMD_ON_GAIN设置开启增益
- 0x87: CMD_LMT_THRESHOLD设置限制器阈值
- 0x88: CMD_UPMIX设置上混
- 0x89: CMD_LFE设置 LFE 增益)
- 0x8A: CMD_OFF_GAIN设置关闭增益
- 0x8E: CMD_LMT_ATTACKK_TIME设置限制器攻击时间
- 0x8F: CMD_LMT_RELEASE_TIME设置限制器释放时间
- 0x90: CMD_TEST_CANCEL取消测试
- 0x91: CMD_TEST_STEP测试步骤
- 0x92: CMD_TEST_ROTATE测试旋转
- 0x93: CMD_EXPAND_GAIN设置扩展增益
- 0x94: CMD_REDUCE_GAIN设置减少增益
**设备端处理**:
- 解析 EX3D 命令码,提取基础命令码和参数
- 调用相应的 EX3D 处理函数hid_receive_task_in_c
- 根据命令类型执行相应的设置操作
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xB0回显 |
| 3 | 1 | status | 状态码0x00=成功, 0x01=失败) |
| 4-7 | 4 | ex3d_cmd | EX3D 命令码(回显) |
| 8-11 | 4 | result | 返回值(某些命令返回 0xFFFFFFFF 表示参数错误) |
| 12-63 | 52 | reserved | 保留字段 |
**使用说明**:
- 该命令用于统一封装所有 EX3D 设置命令
- 参数格式与原始 EX3D 协议保持一致
- 详细的 EX3D 命令说明请参考 ex3d_protocol.md 文档
2026-03-27 11:18:00 +08:00
#### 2.2.33 读取 EX3D 命令0xB1
2026-03-09 16:50:37 +08:00
**功能说明**: 读取 EX3D 参数,封装所有 EX3D GET 命令
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xB1 |
| 3-6 | 4 | ex3d_cmd | EX3D 命令码(包含 GET 标志,参考 ex3d_protocol.md |
| 7-10 | 4 | param1 | 参数1根据 EX3D 命令不同而不同,如通道号、索引等) |
| 11-63 | 53 | reserved | 保留字段或扩展参数 |
**EX3D 命令码说明**:
- 基础命令码范围: 0x80-0x94
- GET 命令格式: `基础命令码 | 0x0100`(设置第 9 位)
- 支持的 GET 命令:
- 0x180: CMD_CH_NUM获取通道数量
- 0x182: CMD_ONOFF获取 EX3D 开关)
- 0x183: CMD_ANGLE获取角度
- 0x184: CMD_SOUND_FIELD获取声场模式
- 0x185: CMD_MUTE获取静音
- 0x186: CMD_ON_GAIN获取开启增益
- 0x187: CMD_LMT_THRESHOLD获取限制器阈值
- 0x188: CMD_UPMIX获取上混
- 0x189: CMD_LFE获取 LFE 增益)
- 0x18A: CMD_OFF_GAIN获取关闭增益
- 0x18B: CMD_SOUND_FIELD_NUM获取声场模式数量
- 0x18C: CMD_SOUND_FIELD_NAME获取声场模式名称
- 0x18D: CMD_LEVEL获取电平
- 0x18E: CMD_LMT_ATTACKK_TIME获取限制器攻击时间
- 0x18F: CMD_LMT_RELEASE_TIME获取限制器释放时间
- 0x193: CMD_EXPAND_GAIN获取扩展增益
- 0x194: CMD_REDUCE_GAIN获取减少增益
**设备端处理**:
- 解析 EX3D 命令码,提取基础命令码和参数
- 调用相应的 EX3D 处理函数hid_receive_task_in_c
- 返回当前参数值
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0xB1回显 |
| 3-6 | 4 | ex3d_cmd | EX3D 命令码(回显) |
| 7-10 | 4 | result1 | 返回值1根据命令不同而不同 |
| 11-14 | 4 | result2 | 返回值2某些命令需要多个返回值如角度、多通道数据等 |
| 15-18 | 4 | result3 | 返回值3扩展返回值如多通道数据 |
| 19-63 | 45 | reserved | 其他返回值或填充(最多可返回 14 个 uint32 值,总长度不超过 63 字节) |
**返回值说明**:
- 返回值数量和格式取决于具体的 EX3D 命令
- 单值命令:返回 1 个 uint32 值
- 多值命令(如角度、多通道数据):返回多个 uint32 值
- 字符串命令如声场名称先返回长度uint32然后返回字符串数据
- 详细的返回值格式请参考 ex3d_protocol.md 文档
**使用说明**:
- 该命令用于统一封装所有 EX3D 读取命令
- 参数格式与原始 EX3D 协议保持一致
- 详细的 EX3D 命令说明请参考 ex3d_protocol.md 文档
2026-03-27 11:18:00 +08:00
#### 2.2.34 设置采样率升频0x80
2026-03-09 16:50:37 +08:00
**功能说明**: 设置设备采样率升频开关
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x80 |
| 3 | 1 | upsample | 升频状态0=禁用升频, 1=使能升频) |
| 4-63 | 60 | reserved | 保留字段填充0 |
**参数说明**:
- 升频状态0=禁用升频1=使能升频
**返回值**:
无直接返回值。如需确认升频状态,请使用 GET_UPSAMPLE (0x81) 命令读取。
2026-03-27 11:18:00 +08:00
#### 2.2.35 获取采样率升频0x81
2026-03-09 16:50:37 +08:00
**功能说明**: 读取设备当前采样率升频状态
**请求格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x81 |
| 3-63 | 61 | reserved | 保留字段填充0 |
**响应格式64 字节)**:
| 偏移 | 长度 | 字段名 | 描述 |
|:----:|:----:|:------:|:----:|
| 0 | 1 | report_id | 固定为 0x01 |
| 1 | 1 | sync_header | 同步头: 0x77 |
| 2 | 1 | cmd_header | 命令头: 0x81回显 |
| 3 | 1 | upsample | 当前升频状态0=禁用, 1=使能) |
| 4-63 | 60 | reserved | 保留字段填充0 |
2025-08-19 18:13:48 +08:00
## 三、数据流程和时序 :material-timeline-clock:
### 3.1 典型操作流程
#### 3.1.1 模式切换流程
2025-12-25 14:21:26 +08:00
1. GUI发送SET_EQ_MODE命令 (0x8A)
2025-08-19 18:13:48 +08:00
2. 设备更新内部模式状态
2025-12-25 14:21:26 +08:00
3. GUI发送GET_EQ_MODE命令 (0x8B) 确认
2025-08-19 18:13:48 +08:00
4. 设备响应当前模式状态
#### 3.1.2 参数设置流程
2025-12-25 14:21:26 +08:00
1. GUI发送SET_EQ_MODE命令切换到相应模式 (0x8A)
2025-08-19 18:13:48 +08:00
2. 逐个发送8个滤波器的命令 (0x8D)
3. 设备接收并更新内部参数缓存
2025-12-25 14:21:26 +08:00
4. 可选: 发送GET_EQ_PARAMS命令验证参数 (0x8E)
2025-08-19 18:13:48 +08:00
#### 3.1.3 参数读取流程
2025-12-25 14:21:26 +08:00
1. GUI发送SET_EQ_MODE命令切换到相应模式 (0x8A)
2. GUI发送GET_EQ_PARAMS请求 (0x8E)
2025-08-19 18:13:48 +08:00
3. 设备准备响应数据
4. GUI读取响应
### 3.2 时序要求与约束
!!! warning "时序要求"
- **命令间隔**: 建议5ms以上
- **读取延时**: 发送读取请求后等待100ms
- **模式切换**: 完成后等待设备内部状态稳定
!!! danger "协议限制和约束"
**硬件限制**
2025-12-25 14:21:26 +08:00
- **滤波器数量**: 固定 8 个滤波器MAX_EQ_BANDS = 8
2025-12-31 18:12:27 +08:00
- **模式数量**: 支持 0-9 共 10 个模式(模式含义以固件定义为准)
2025-12-25 14:21:26 +08:00
- **采样率支持**: 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz设备能力与协议字段独立
2025-08-19 18:13:48 +08:00
**参数范围**
| 参数 | 范围 | 格式 |
|:----:|:----:|:----:|
2025-12-25 14:21:26 +08:00
| 中心频率 (freq) | 20Hz - 20kHz | float小端 |
| Q值 (q) | 0.1 - 30.0 | float小端 |
| 带宽 (bw) | 1Hz - 20kHz | float小端 |
| 增益 (gain) | -24dB - +24dB | float小端 |
| 整体增益 (mode gain) | -50dB - 0dB | int32小端 |
2025-08-19 18:13:48 +08:00
## 四、预设模式定义 :material-equalizer:
### 4.1 模式分类
| 模式索引 | 模式名称 | 用途描述 | 类型 |
|:--------:|:--------:|:--------:|:----:|
2025-12-31 18:12:27 +08:00
| 0 | JAZZ | 爵士音乐优化 | 预设模式 |
| 1 | POP | 流行音乐优化 | 预设模式 |
| 2 | ROCK | 摇滚音乐优化 | 预设模式 |
| 3 | ClASIC | 古典音乐优化 | 预设模式 |
| 4 | R&B | 节奏音乐优化 | 预设模式 |
| 5 | 3A Game | 3A游戏音乐优化 | 预设模式 |
| 6 | FPS | FPS游戏音乐优化 | 预设模式 |
| 7 | User 1 | 用户自定义模式1 | 用户模式 |
| 8 | User 2 | 用户自定义模式2 | 用户模式 |
| 9 | User 3 | 用户自定义模式3 | 用户模式 |
2025-08-19 18:13:48 +08:00
!!! info "模式特性说明"
- **预设模式**: 出厂预设,不可修改,针对特定音乐类型优化
- **用户模式**: 支持用户自定义参数,可保存和重置
2025-12-31 18:12:27 +08:00
## 五、关键特性 :material-star:
### 5.1 设备端系数计算
- 主机只发送参数(`freq`/`q`/`bw`/`gain`
- 设备端根据参数实时计算滤波器系数
### 5.2 参数格式
- 浮点参数:`freq``q``bw``gain` 使用 IEEE 754 `float`(小端序)
- 整体增益:`int32`(小端序,范围 `-50dB ~ 0dB`
### 5.3 错误处理
- 数据包长度检查
- 同步头验证
- 参数范围检查
- 滤波器索引边界检查
### 5.4 模式管理
- 支持 EQ 模式切换与保存
- 模式切换后建议通过读取命令进行状态同步
## 六、注意事项 :material-alert:
1. **时序要求**: 发送参数后需要等待设备处理完成再发送下一条命令
2. **数据完整性**: 所有8个滤波器的参数都需要发送即使某些滤波器未使用
3. **模式同步**: 设置模式后建议调用读取模式确保数据同步
4. **错误恢复**: 通信失败时需要重新建立连接并重试
5. **参数验证**: 设备端会验证参数范围,超出范围的值会被限制或拒绝
2025-08-19 18:13:48 +08:00
---
## 咨询反馈
<details>
<summary>点击展开咨询反馈表单</summary>
--8<-- "common/customer_form.md"
</details>