USB HID报告必填字段咨询:鼠标与UPS合规要求疑问
问题描述
1. 鼠标HID设备报告描述符问题
使用树莓派Pico开发USB HID设备时发现两种情况:
- 包含按键的鼠标报告描述符可在Windows和Linux正常工作:
char ReportDescriptor[48] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, // COLLECTION (Application) 0x09, 0x01, // USAGE (Pointer) 0xa1, 0x00, // COLLECTION (Physical) 0x05, 0x09, // USAGE_PAGE (Button) 0x09, 0x01, // USAGE (Button 1) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x07, // REPORT_SIZE (7) 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x15, 0x80, // LOGICAL_MINIMUM (-128) 0x25, 0x7f, // LOGICAL_MAXIMUM (127) 0x95, 0x02, // REPORT_COUNT (2) 0x75, 0x08, // REPORT_SIZE (8) 0x81, 0x06, // INPUT (Data,Var,Rel) 0xc0, // END_COLLECTION 0xc0 // END_COLLECTION };
- 仅包含X/Y轴的简化版描述符无法正常工作,推测操作系统要求鼠标至少带一个按键。
2. UPS HID设备报告描述符问题
当前UPS的报告描述符如下,但无法正常工作,不确定是否因缺少必填用法导致:
USAGE_PAGE (Power Device) USAGE (UPS) COLLECTION (Application) USAGE (Battery System) COLLECTION (Physical) REPORT_ID (1) REPORT_SIZE (8) REPORT_COUNT (1) USAGE (iManufacturer) STRING_INDEX (1) FEATURE (Constant Variable Absolute) USAGE (iProduct) STRING_INDEX (2) FEATURE (Constant Variable Absolute) USAGE (iSerialNumber) STRING_INDEX (3) FEATURE (Constant Variable Absolute) USAGE (Battery) COLLECTION (Physical) REPORT_ID (2) USAGE_PAGE (Battery System) REPORT_SIZE (1) REPORT_COUNT (4) LOGICAL_MINIMUM (0) LOGICAL_MAXIMUM (1) USAGE (Charging) USAGE (Discharging) USAGE (Fully Charged) USAGE (Fully Discharged) INPUT (Variable Absolute Volatile)
疑问
- “鼠标至少需一个按键”的要求是操作系统还是HID规范制定的?有没有相关文档说明?
- UPS设备是否有类似的必填用法要求?有没有相关文档可参考?
解答
关于鼠标的按键要求
- 该要求主要是操作系统的行为,而非HID规范强制规定。HID 1.11规范中,Generic Desktop页面的Mouse用法并未明确要求必须包含按键输入。
- Windows的
hidclass.sys驱动、Linux输入子系统都会默认期望鼠标报告包含按键位,不符合常见格式的设备会被过滤或无法识别为标准鼠标。可查看HID 1.11规范第10章(Generic Desktop Page),其中仅定义了按键、轴等可选元素,无强制要求。
关于UPS的必填要求
- UPS属于Power Device页面(HID规范第12章),该页面明确了UPS用法的必填元素:
- 必须包含Battery System集合,且集合内至少要有一个INPUT报告提供状态信息(如充电/放电状态)
- 当前描述符存在几个问题:
- REPORT_ID位置错误:需放在REPORT_SIZE/REPORT_COUNT之前,且要确保与对应数据段正确关联
- FEATURE报告格式错误:iManufacturer、iProduct、iSerialNumber应通过设备描述符的字符串索引提供,而非在HID报告描述符中用FEATURE定义
- 虽包含基础电池状态,但规范要求确保报告结构完全符合格式要求
- 参考文档:USB HID 1.11规范第12章(Power Device Page),其中详细定义了UPS的用法层级、必填与可选元素。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

