CM002X1 HID控制协议规范详解
协议概述
CM002X1除了用于Xear音频技术认证外,还支持HID控制协议,用于应用程序与固件之间的状态数据通讯。该协议定义了Report、Input Report和Feature Report三种通讯方式,使主机应用能够控制和管理Xear音频功能。
该协议使用专属的Report ID 0xED来标识特定功能状态通讯。
Report ID定义
CM002X1 HID控制协议使用专属的Report ID来标识特定功能状态通讯。该Report ID定义为0xED。当应用程序检测到HID报告中包含0xED时,表明该设备支持此协议。
HID Output Report定义
Output Report用于应用程序向固件发送控制命令,总长度为2字节:
| 偏移 | 字段 | 大小 | 值 | 说明 |
|---|---|---|---|---|
| 0 | ReportID | 1字节 | 0xED | Report ID标识 |
| 1 | FeatureID | 1字节 | 数字 | 功能ID,映射到功能表中的特定功能 |
HID Input Report定义
Input Report用于固件主动向应用程序通知状态变化,总长度为2字节:
| 偏移 | 字段 | 大小 | 值 | 说明 |
|---|---|---|---|---|
| 0 | ReportID | 1字节 | 0xED | Report ID标识 |
| 1 | FeatureID | 1字节 | 数字 | 功能ID,标识哪个功能状态发生了变化 |
当检测到设备按钮事件时,固件根据下表定义返回数据,应用程序可通过Output Report和Feature Report更新状态。
Feature Function功能表
| Feature ID | 功能名称 |
|---|---|
| 0x02 | Xear Surround Headphone(环绕声耳机) |
Feature 0x02:Xear Surround Headphone数据结构
| 偏移 | 字段 | 大小 | 值 | 说明 |
|---|---|---|---|---|
| 0 | ReportID | 1字节 | 0xED | Report ID |
| 1 | Length | 1字节 | 0x02 | 数据长度 |
| 2 | FeatureID | 1字节 | 0x02 | Feature ID |
| 3 | bOnOff | 1字节 | 布尔值 | 环绕声开关状态 |
使用说明
当HID按钮按下时,仅bOnOff(偏移3)状态切换,其他参数由UI更新。
应用程序可通过SetFeatureReport更新状态,固件需要记住当前状态,以便下次HID按钮事件时提供正确的状态更新。
初始值示例:(0xED, 0x02, 0x02, 0x01) 表示环绕声开启。
HID Feature Report定义
Feature Report总长度为32字节,用于应用程序与固件之间的详细数据交换:
| 偏移 | 字段 | 说明 |
|---|---|---|
| 0 | Report ID | 0xED |
| 1 | 数据长度 | 有效数据的长度 |
| 2 | Feature ID | 功能ID |
| 3-31 | 数据 | 对应功能ID的数据结构 |
获取功能状态
应用程序需要获取Surround Headphone状态时:
- 发送SetOutputReport设置Feature ID:SetOutputReport[2] = { 0xED, 0x02 }
- 发送GetFeatureReport获取功能状态
- 设备返回:0xED, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
更新功能状态
应用程序需要更改状态时:
- 发送Output Report设置要写入的Feature ID
- 发送SetFeatureReport将数据写入设备
- 固件根据变更的功能数据返回不同长度的数据结构
应用层到固件状态更新流程(Surround Headphone示例)
- 应用程序发送Output Report设置Feature ID(0x02)
- 应用程序发送SetFeatureReport设置Surround Headphone为"On"
- 固件接收并处理SetFeatureReport
- 固件返回处理结果
固件到应用层状态通知流程(Surround Headphone示例)
- 用户按下设备上的Surround Headphone按钮
- 固件检测到按钮事件,更新内部状态
- 固件通过Interrupt Pipe发送Input Report通知应用
- 应用程序收到Input Report后,发送Output Report查询具体功能
- 应用程序发送GetFeatureReport获取最新状态
- 固件返回当前Surround Headphone状态(On/Off)
- 应用程序更新UI显示
数据流总结
| 通讯类型 | 用途 | 方向 |
|---|---|---|
| Output Report | 设置Feature ID | 应用→固件 |
| Input Report | 状态变化通知 | 固件→应用 |
| Feature Report (Set) | 写入功能数据 | 应用→固件 |
| Feature Report (Get) | 读取功能数据 | 应用→固件 |
典型交互示例
场景:用户通过耳机按钮切换环绕声
步骤1 - 用户按下耳机上的环绕声切换按钮
步骤2 - 固件检测到按钮事件
固件内部状态:Surround Headphone = !当前状态
步骤3 - 固件发送Input Report通知应用
Input Report: 0xED, 0x02
步骤4 - 应用收到通知,查询状态
Output Report: 0xED, 0x02
GetFeatureReport
步骤5 - 固件返回当前状态
Feature Report: 0xED, 0x02, 0x02, 0x01 (假设开启)
步骤6 - 应用更新UI显示
此HID控制协议为CM002X1提供了灵活的状态管理能力,使Xear音频功能可以通过应用程序或设备按钮进行控制。