hid协议报告描述总结

2020-04-16 10:15

HID报告描述符主要内容整理

刚刚接触USB(HID)时对【报告描述符】感到难于理解,因此就更无从下手。下面根据2个主要的协议文本整理出一些常用信息,不完整,备忘。 ? 主要参考文本:

? 【协议文本1】:《Device Class Definition for Human Interface Devices (HID)》Ver1.11 ? 【协议文本2】:《Universal Serial Bus HID Usage Tables》Ver1.12 每个协议文本后面的附录都有很多例子可供参考借鉴。

0、主要术语与概念 (1)报告(Report):HID设备与主机交换信息的单位(报告字节数似乎没有限制); (2)报告描述符(Report Description):用许多【项目】说明报告的格式与【用途】; (3)用途(Usage):用于指出报告中某个数据域的意义或目的,32bit。高16bit用途页(Usage

Page)指出用途的大类,低16bit用途ID(Usage ID)指出用途大类下的子用途; (4)项目(Item):报告描述符用于说明数据域的某种属性的数据,有短项目和长项目之分,

短项目1~5B,长项目3~255B;

(5)共有3种类型的项目:主项目、全局项目(Global)、局部项目(Local);

(6)主项目(Main Item)共有5个,其中的Input、Output和Feature会产生实际的数据

域并附带说明其操作特性(见2.1);其余2个Collection和End Collection是一对括号,其间的内容构成一个【集合】,用于限定集合中信息的整体特性; (7)全局项目(Global Item):说明其后主项目产生的数据域的某方面特性,一旦说明一直

有效,除非遇到一个新的全局项目说明改变其值; (8)局部项目(Local Item):说明其后主项目产生的数据域的某方面特性,但只对其后的

一个主项目有效;

(9)可以认为所有用【全局项目】说明的各种数据域特性构成一个【全局状态表】,随着新

的【全局项目】出现,该表在不断变化。可以使用【全局项目】中的【push】和【pop】将该表入栈或者出栈,以简化描述符。

(10)项目后的【可选数据字节】可以采用简短方式给出(不够该数据的实际位数),此时

认为省略了高有效位且它们的值为0。

(11)一个产生多个数据域(Report Count>1)的主项目之前有一个以上的【用途】时,每

个【用途】与一个数据域依次对应,如果数据域个数(Report Count)超过【用途】的个数,则剩余的数据域都对应于最后一个【用途】。

1、短项目格式 (更多细节请参见协议文本1:p26)

前缀字节说明 bTag bType 项目标签 项目类型 指出该项目的具体意义,见后续说明 【00】=主项目,【01】=全局项目,【10】=局部项目,【11】=保留 bSize 可选数据字节数 【00,01,10,11】=(0,1,2,4)字节

1

长项目很少使用,忽略。

2、主项目分类(更多细节请参见协议文本1:p28) 主项目说明 项目标签 Input Output Feature Collection End Collection 输入 输出 特征 集合开始 集合结束 前缀字节取值 1000 00 nn 1001 00 nn 1011 00 nn 1010 00 nn 1100 00 nn (nn为bSize【可选数据字节数】,后同)

2.1 【输入】【输出】【特征】项目的后续数据说明(更多细节请参见协议文本1:p30) Bit 8 7 5 4 3 2 1 0 取值 0 Bit Field Non Volatile Preferred State Linear No Wrap Absolute Array Data 1 Buffered Bytes Volatile Null State No Preferred Non Linear Wrap Relative Variable Constant 说明 (0/1) 位域/字节填充(不足8位填充成8位) 主机不可改变/可改变状态值,只用于Feature项目 没有【无效(空)状态】/有【无效(空)状态】 无操作时回复原位(如按键或游戏杆)/不回复原位 线性/非线性 卷绕/非卷绕,【卷绕】指最大最小值首尾相连 绝对值/相对值 每个字段(Report Size)独立触发操作/ 所有字段(Report Size* Report Count)触发一个操作 变量/常量 6 No Null Position 如果Bit8为0,则可以只给出1字节的低8位数据。

2.2 【集合开始】项目后的【集合类型】字节说明(更多细节参见协议文本1:p33) 集合类型 Physical Application Logical Report Named Array Usage Switch Usage Modifier Reserved

2

缩写 CP CA CL Nary US UM 取值 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 ~ 0x7F 0x80 ~ 0xFF 说明 用于包含单个几何点的控制 用于包含多种报告、多种应用 用于包含多种不同结构的报告数据 用于包含一个单独的报告(含有报告ID) (保留)未来扩展 (保留)用户自定义 3、全局项目分类(更多细节参见协议文本1:p35) 项目标签 Usage Page Logical Minimum Logical Maximum Physical Minimum Physical Maximum Unit Exponent Unit Report Size Report ID Report Count Push Pop Reserved 用途页 逻辑最小 逻辑最大 物理最小 物理最大 单位值 报告大小(Bit) 报告ID 报告数量 全局状态表入栈 全局状态表出栈 保留 前缀字节取值 0000 01 nn 0001 01 nn 0010 01 nn 0011 01 nn 0100 01 nn 0110 01 nn 0111 01 nn 1000 01 nn 1001 01 nn 1010 01 nn 1011 01 nn 1100 01 nn ~ 1111 01 nn 数据域bit数 取值1~255 数据域重复次数 说明 单位指数(以10为底) 0101 01 nn 全局项目设置的参数会影响其后的所有主项目,直到该参数被重新设置。

3、局部项目分类(更多细节参见协议文本1:p40) 项目标签 Usage Usage Minimum Usage Maximum Designator Index 用途 用途最小 用途最大 指示器ID 前缀字节取值 0000 10 nn 0001 10 nn 0010 10 nn 0011 10 nn 0100 10 nn 0101 10 nn 0111 10 nn 1000 10 nn 1001 10 nn 1010 10 nn 1010 10 nn ~1111 10 nn 许多个用途的(起始值) 许多个用途的(结束值) 说明 Designator inimum 指示器最小 Designator aximum 指示器最大 String Index String Minimum String Maximum Delimiter Reserved 串ID 串最小 串最大 分隔符 保留 局部项目设置的参数只影响其后的一个主项目。

4、用途页代码 (更多细节参见协议文本2:p14) 代码 00 01 02 03 04 05 06 07

用途页 Undefined Generic Desktop Controls Simulation Controls VR Controls Sport Controls Game Controls Generic Device Controls Keyboard/Keypad 3

说明 未定义 通用桌面控制 仿真控制 虚拟现实控制 运动控制 游戏控制 通用设备控制 键盘 08 09 0A 0B 0C 0D 0E 0F 10 11-13 14 15-3f 40 41-7F 80-83 84-87 88-8B 8C 8D 8E 8F 90 91 92-FEFF FF00-FFFF LEDs Button Ordinal Telephony Consumer Digitizer Reserved PID Page Unicode Reserved Alphanumeric Display Reserved Medical Instruments Reserved Monitor pages Power pages Reserved Bar Code Scanner page Scale page LED阵 按钮 顺序 电话 消费 数字化仪 保留 人体接口设备 Uincode码 保留 字符显示 保留 医学设备 保留 监控器页 电源页 保留 条形码页 天平 Magnetic Stripe Reading (MSR) 磁条阅读设备 Devices Reserved Point of Sale pages Camera Control Page Arcade Page Reserved Vendor-defined 照相机控制页 保留 用户自定义 5、【通用桌面控制】用途页下的部分主要用途Usage ID (更多细节参见协议文本2:p26) 用途ID 00 01 02 03 04 05 06 07 08 09 0A-2F 30 31

用途名 Undefined Pointer Mouse Reserved Joystick Game Pad Keyboard Keypad Multi-axis Controller Tablet PC Controls Reserved X Y 用途类型 未定义 指针定位 保留 CP(物理集合) 说明 CA(应用集合) 鼠标 CA(应用集合) 游戏摇杆 CA(应用集合) 游戏板 CA(应用集合) 键盘 CA(应用集合) 键板(数字小键盘) CA(应用集合) 多轴控制器 System CA(应用集合) 平板计算机系统控制 DV(动态值) DV(动态值) 4

保留 X坐标 Y坐标 32 33 34 35 36 37 38 39 Z Rx Ry Rz Slider Dial Wheel Hat switch DV(动态值) DV(动态值) DV(动态值) DV(动态值) DV(动态值) DV(动态值) DV(动态值) DV(动态值) Z坐标 X轴旋转 Y轴旋转 Z轴旋转 滑动条 刻度盘 旋钮 碰触开关 6、其他注意事项

(1)一个最小的报告描述符至少应包含:

? Input(或者Output\\Feature) ? Usage

? Usage Page

? Logical Minimum ? Logical Maximum ? Report Size ? Report Count

(2)报告描述符至少要有一个顶层(Application)集合,集合可以嵌套。 (3)报告不能跨越顶层集合。

(4)除了最长的报告,顶层集合中的其他报告必须以【短包】(short packet???)终结;所有没有达到【端点】的【最大包长度(wMaxPacketSize)】的报告也必须以【短包】(short packet???)终结。

(5)整个报告长度必须是字节的整数倍。

(6)项目说明的数据域不能跨越超过4字节,即最长的数据域32bit必须开始于字节边界。

7、几个报告描述符的例子(来源于网络)

(1)一个红外触摸屏的例子【包含2种不同的报告,REPORT_ID (1) ,REPORT_ID (2)】 //126 byte

0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse)

0xa1, 0x01, // COLLECTION (Application) 0x09, 0x01, // USAGE (Pointer)

0xa1, 0x00, // COLLECTION (Physical) 0x85, 0x01, // REPORT_ID (1)

0x05, 0x09, // USAGE_PAGE (Button)

0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x03, // USAGE_MAXIMUM (Button 3) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x03, // REPORT_COUNT (3) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x75, 0x05, // REPORT_SIZE (5)

5


hid协议报告描述总结.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:山东科技大学安全系统工程重点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: