USB HID 设备类协议入门
且需要PC上的HID驱动程序提供parser解释器来对描述的设备情形进行重新解释,进而组合生成出本HID硬件设备独特的数据流格式,所以我觉得可以把它理解为“报告描述符脚本语言”更为贴切。我们使用“报告描述符”专用脚本语言,让用户来自己定义他们的HID设备都有什么数据、以及这些数据各个位(bit)都有什么意义。
有关报告描述符的详细信息可参考USB HID协议,USB协会提供了一个HID描述符编辑工具称作HID Descriptor Tool,用它可方便生成我们的报告描述符。
3、实体描述符
实体描述符被用来描述设备的行为特性。实体描述符是可选的描述符,HID设备可以根据其本体的设备特性选择是否包含实体描述符。表5所示为HID的实体描述符结构。
表6、HID实体描述符的结构 | |||
偏移量 | 域 | 大小 | 说明 |
0 | bDesignator | 1 | 用来指定本体的哪一部分影响项目(含义见表6) |
1 | bFlags | 1 | 位指定标志 位0~4:Effort 位5~7:Qualifier(含义见表7) |
表7、bDesignator取值含义表 | ||||
bDesignator取值 | 含义 | bDesignator取值 | 含义 | |
0x00 | 无 | 0x15 | 小指 | |
0x01 | 手 | 0x16 | 头 | |
0x02 | 眼球 | 0x17 | 肩 | |
0x03 | 眉 | 0x18 | 腰骨 | |
0x04 | 眼皮 | 0x19 | 腰 | |
0x05 | 耳 | 0x1A | 大腿 | |
0x06 | 鼻 | 0x1B | 膝盖 | |
0x07 | 嘴 | 0x1C | 小腿 | |
0x08 | 上唇 | 0x1D | 足 | |
0x09 | 下唇 | 0x1E | 脚 | |
0x0A | 颚 | 0x1F | 脚跟 | |
0x0B | 颈 | 0x20 | 拇指 | |
0x0C | 上臂 | 0x21 | 大拇指 | |
0x0D | 手肘 | 0x22 | 第二指 | |
0x0E | 前臂 | 0x23 | 第三指 | |
0x0F | 手腕 | 0x24 | 第四指 | |
0x10 | 手掌 | 0x25 | 小拇指 | |
0x11 | 拇指 | 0x26 | 眉 | |
0x12 | 食指 | 0x27 | 脸 | |
0x13 | 中指 | 0x28~0xFF | 保留 | |
0x14 | 无名指 |
表8、Qualifier取值含义 | ||||
Qualifier取值 | 含义 | Qualifier取值 | 含义 | |
0x00 | 无 | 0x04 | 其中之一 | |
0x01 | 右 | 0x05 | 中间 | |
0x02 | 左 | 0x06 | 保留 | |
0x03 | 两者同时 | 0x07 | 保留 |
四、USB HID类命令(请求)
HID设备类特定的命令(请求)有6个,它们分别是Get_Report、Get_Idle、Get_Protocol、Set_Report、Set_Idle和Set_Protocol。
HID类请求(命令)数据包格式如表8所示:
表9、HID类请求(命令)包格式 | |||
偏移量 | 域 | 大小 | 说明 |
0 | bmRequestType | 1 | HID设备类请求特性如下: 因而,针对HID的设备类请求,仅仅10100001和00100001有效 |
1 | bRequest | 1 | HID类请求(参考表9) |
2 | wValue | 2 | 高字节说明描述符的类型(参考表5),而低字节为非0值时被用来选定实体描述符。 |
4 | wIndex | 2 | 2字节数值,根据不同的bRequest有不同的意义 |
6 | wLength | 2 | 该请求的数据段长度 |
表10、HID类请求 | ||
数值 | HID类请求描述符 | 注释 |
0x01 | GET_REPORT | |
0x02 | GET_IDLE | |
0x03 | GET_PROTOCOL | 仅仅适应于支持启动功能的HID设备(Boot Device) |
0x09 | SET_REPORT | |
0x0A | SET_IDLE | |
0x0B | SET_PROTOCOL | 仅仅适应于支持启动功能的HID设备(Boot Device) |
USB主机在请求HID设备的配置描述符时,设备首先返回的描述符为:配置描述符、接口描述符、HID描述符、端点描述符。HID描述符里包含了其附属的描述的类型和长度(如报告描述符),然后主机再根据HID描述符的信息请求其相关的描述符。
USBHID设备类协 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)