Andrew Huang 转载请注明作者及出处(http://bluedrum.cublog.cn)
在USB的枚举后,即交互完 设备描述符(device descriptor),配置描述符(configure descriptor),接口描述符(interface descriptor)和终端描述符(endpointer desciptor)。如果是HID设备,即class值为3设备交互还会发送一系统的特殊包来描述HID设备的特性。
这一些描述HID的特性称为Report Descriptor,报告描述符,可以理解它们是HID设备的上传的包,或者接收的包的格式。设备能包含多个report.
对于每种HID动作的编码,HID有一个专用术语usage (用法),USB协议中支持所有编码表称为usage tables.这里有全部编码表。
HTML版本
这一篇相当不错《USB HID报告及报告描述符简介》,
一.report descriptor 格式
在usb.org网站有HID decriptor tools工具下载 可以用创建和解析report descriptor包格式
http://www.usb.org/developers/hidpage/dt2_4.zip
以下是一个键盘的report descriptor的内容.在最右侧的是原始数据,比如前二字节是0x05,0x01 表示
USAGE_PAGE.
可以换一个界面查看得更清楚
二.report,usage 格式
从各个软件分析结果看,一个完整的report 分为二部分,一部分定长的头,另一部分就是变长的定义,即上文中出现的Collection部分.每个collection由若干个usage组成
定长头部分有二个定义. usage page.可理解是这个设备类型.
0x05, 0x01 (Generic Desktop Controls)
0x06,0x00 (Vendor-Defined 1)
这个在usb hid文档里详细定义
接下来的字段称为usage是表示发的包类型(?)
09 06 按键。
09 01 自定义
接下来的是
在Collection中,每一个组成部分以称为item,item就是usage.(这里术语整得太多了,但是这一些名词在linux hid都能看到.所以都列在这里。
Collection里一般第一个usage是描述input,第二个描述output.当然有不同例外。
首先看usage是input类型
在input首先是取值范围。虽然占两个字节,只是低位字节有效
Logical Minimum
logical_maximum
physical_minimum
physical_maximum
是report size,表示report输入字节宽度,report count表示report总数。
比如按键是report size 为1,report count 为8,即一个包为8字节。
然后是input hid包格式,用两个字符来表示。0x81,
0x06表示包里的由如下格式组成.(其中0x06)有效。分析软件解析成如下。
A1 01 与 C0之间表示Application Collection的. 绝大部分report都是Application,从USB HID文档看,还有Logical和Physical类型 |
|
|
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit)
普通Mouse解析成 0x81, 0x02, INPUT (Data,Var,Abs)
这是格式可能参考 HID 1.11 |
|
如0x06--> 00000110 解析(Data(0),Array(0),...)
接下来是output 描述
各个包结构可以参见
象键盘包格式是有标准格式的。
三.实例分析
这是用USBlyzer分析USB Phone的结果。我个人比较习惯用这个来看
Item Tag (Value) | Raw Data |
---|
Usage Page (Vendor-Defined 1) | 06 00 FF |
Usage (Vendor-Defined 1) | 09 01 |
Collection (Application) | A1 01 |
Usage (Undefined) | 09 00 |
Logical Minimum (0) | 15 00 |
Logical Maximum (255) | 26 FF 00 |
Report Size (8) | 75 08 |
Report Count (8) | 95 08 |
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) | 81 06 |
Usage (Undefined) | 09 00 |
Report Count (17) | 95 11 |
Output (Data,Var,Rel,NWrp,Lin,Pref,NNul,NVol,Bit) | 91 06 |
Report Count (12) | 95 0C |
Usage (Vendor-Defined 1:Vendor-Defined 1) | 0B 01 00 00 FF |
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) | B1 02 |
End Collection | C0 |
阅读(9394) | 评论(0) | 转发(3) |