UAC(四)HID
HID 相关概念
报表描述符由描述 HID 设备的数据项目(Item)组成,Item 的第一个字节(项目前缀)由三部分构成,即项目类型(item type)、项目标签(item tag)和项目长度(item size)。
HID 的项目有短项目和长项目两种,其中短项目的格式如下图:
- bSize 定义 short Item 的数据字节数,为 0、1、2、3 时 Data 部分的字节数分别为 0、1、2、4 个字节
- bType 是 short Item 的类型,为 0、1、2 时分别为 Main、Global 和 Local 类型
- bTag 是 Item 标志,有 Input、Output、Collection、Usage Page、Usage 等
长项目可以携带较多的数据,其格式如下图(用的少):
- item 中的第一个字节为上图中的特定值时表明该项目是一个长项目
- bDataSize 说明 Data 部分的字节数
- bLongItemTag 在 HID 规范中没有定义
下面以 0x05, 0x0c 为例来说明一下:
0x05(0b00000101)其中 bit2-3 代表 short item 的 type,1 代表的是 global 项目,最后两位代表数据长度是 1Byte,通过查表可以知道这是一个** USAGE_PAGE** item,而后面的 0x0c 也是可以通过查表了解到是 Consumer
其他配置依次类推就可以了。
配置 configfs
1 | # HID |
报告描述符结构
关于报告描述符做如下解析:
- 0x05, 0x0c // USAGE_PAGE (Consumer Page)
- 0x09, 0x01 // USAGE (Consumer Control)
- 0xa1, 0x01 //COLLECTION (Application)
- 0x09, 0xe9 //USAGE (Volume Increment)
- 0x09, 0xea //USAGE (Volume Decrement)
- 0x09, 0xe2 //USAGE (Mute)
- 0x09, 0xcd //USAGE (Play/Pause)
- 0x15, 0x00 //LOGICAL_MINIMUM (0)
- 0x25, 0x01 //LOGICAL_MAXIMUM (1)
- 0x95, 0x04 //REPORT_COUNT (4)
- 0x75, 0x01 //REPORT_SIZE (1)
- 0x81, 0x02 //INPUT (Data,Var,Abs)
- 0x75, 0x04 //REPORT_SIZE (4)
- 0x95, 0x01 //REPORT_COUNT (1)
- 0x81, 0x03 //INPUT (Cnst,Var,Abs)
- 0xc0 //END_COLLECTION
Consumer Page (0x0C)
Volume Decrement、Volume Increment、Mute、Play
验证
在设备端执行 uac_hid command 可以看到 windows 的音量有发生变化就说明 uac hid 功能正常
HID 报表描述符/报告描述符 - USB 中文网
参考文献
《USB2.0 协议规范》
《UAC2 协议规范》