HID规范
+ -

HID报告描述符Report Descriptor解析分析

2021-08-17 5303 1

HID独有的报告描述符也叫报表描述符对于初学者来说比较复杂,但是如果真正理解了它,我们又不得不惊吧于设计者的巧妙设计。
HID报告描述符是由一系列的条目(item)组成的,一个item一般是又包括头部信息(bTag,bType,bSize)和数据内容。所以说item在HID报告描述符中是最小的信息单元。ITEM是HID报告描述符的最最基本的数据结构。

HID报告描述符的最小单元是ITEM,在HID规范中这个ITEM又分为两种:

  • 短ITEM :使用最广泛的ITEM类型,我们重点研究的对象
  • 长ITEM :几乎不会使用到。

详细的长短项解释可见:http://www.usbzh.com/article/detail-48.html

HID报告描述符的解析

在各操作系统中,HID类驱动程序包含一个报告描述符的解析器,用于分析在报表描述符中找到的项。

从解析器的角度来看,HID类设备如下图所示:
HID类设备

解析器在遍历描述符时收集每个已知项的状态,并将它们存储在项状态表中。项目状态表包含单个项目的状态。
解析器线性的方式进行对各ITEM进行扫描,根所不同的ITEM类型,动作不一样,主要执行的是main重新分配操作,push和pop操作。

  • main item:当解析器遇到一个main条目后,将分配并初始化新的报告结构使用当前项状态表。然后从item状态表中删除所有local item ,但保留global项目。 这样,Global 项就为后续新的 Main 项设置了默认值。 具有多个类似控件(例如,六个轴)的设备只需要在第一个 Main 项目之前定义 Global 项目一次。
    main item按照它们的声明顺序与collection进行相关联,当解析器遇到一个collection时,表示一个集合的的开始,遇到 End Collection表示一个集合的结束。

  • 当遇到 Push 项目时,项目状态表被复制并放置在堆栈上供以后检索。

  • 当找到一个 Pop 项目时,项目状态表被堆栈中的顶部表替换。 例如:
Unit (Meter), Unit Exponent (-3), Push, Unit Exponent (0)

当解析器到达 Push item时,它会将定义单位为毫米(10-3 米)的项目放置在堆栈上。 下一个项目将项目状态表更改为米单位(100 米)。

  • 解析器需要解析整个 Report 描述符以找到所有 Main 项。 这是分析设备发送的报告所必需的。
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

HID 触摸屏的报表描述符
讲道理,这个触摸屏的报告描述符是我从网上搜索的一段代码,这个触摸屏的报告内容本人也进行了测试。测试是通过本站编写的虚拟触摸屏驱动实现的。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0 0x......
HID 报表描述符数字显示实例
USAGE_PAGE (Alphnumeric Display) 05 14USAGE (Alphanumeric Display) 09 01LOGICAL_MINIMUM (0) 15 00 CO......
HID 报表描述符远程控制实例
USAGE_PAGE (Consumer Devices) 05 0CUSAGE (Consumer Control) 09 01COLLECTION (Application) A1 01 ......
USB键盘报告描述符数据格式分析
USB键盘的HID报表描述符的内容参见下表。数据的输入端点为中断方式,当有键盘敲击事件时,会上报数据长度为8字节的数据报告。0x05,0x01,// Global Generic Desktop0x09,0x06,// Local KeyBoard 0xA1,0x01,// Main app col......
HID 报表描述符键盘实例
通过下面的报告描述符的定义,我们根据上面的注释可知,包含一个中断输入报表描述符和一个中断输出报告描述符。其中断输入报告描述符用于USB HID键盘中断输入端点,输出报表描述符用于USB HID键盘中断输出端点。USB HID键盘的中断输入报告对于中断输入端点,数据格式定义如下:BYTE0:该字......
HID 报表描述符游戏手柄
LOGICAL_MINIMUM (0) 15 00 USAGE_PAGE (Generic Desktop) 05 01USAGE (Joystick) 09 04......
USB鼠标HID报告描述符数据格式分析
注意:这里的鼠标为普通鼠标报告描述符的信息解释,其并不适用于全鼠标报表描述符。一个示例如下:0x05,0x01, // Global Generic Desktop0x09,0x02, // Local Mouse0xa1,0x01, // Main app collection0x09,......
HID 报表描述符数字仪
USAGE_PAGE (Digitizers) 05 0DUSAGE (Digitizer) 09 01COLLECTION (Application) A1 01 ......
HID 报表描述符操纵杆实例
USAGE_PAGE (Generic Desktop) 05 01LOGICAL_MINIMUM (0) 15 00 USAGE (Joystick) 09 04CO......
HID 报表描述符开关电源实例
USAGE_PAGE (Power Device) 05 84USAGE (UPS) 09 04COLLECTION (Application) A1 01 ......
HID 报表描述符监视器实例
USAGE_PAGE (Monitor) 05 80USAGE (Monitor Control) 09 01COLLECTION (Application) A1 01 ......
HID 报表描述符/报告描述符
报表描述符用于描述USB HID设备与主机之间数据交互的格式。根据数据的传输方向,分为输入报告和输出报告。输入报告是USB设备发送数据给主机的。大部分的USB HID设备主要实现的是输入报告。如我们平常使用的USB鼠标,就是通过我们点击鼠标按键或滑动鼠标流轮实现给主机上报鼠标的报告信息。输出报告......
HID 报表描述符电话实例
内容来源于USB官方HID报告描述符工具自带的tele.hidREPORT_COUNT (1) 95 01 USAGE_PAGE (Telephony Devices) 05 0BUSAGE (Phone) ......
USB键盘与HID报表描述符关系
报告描述符确实非常复杂,要看懂协议真得比较难(因为只有英文的),我见到的国内教材也没有对这部分写得很详细的,有的也只是部分内容的翻译而已。一般建议用示例报告描述符修改一下就可以了,《Hid Usage Table》里给出了一些常见应用的报告描述符。对于键盘类应用,通常用已有的示例已经够用了。“如果是......
HID 报表描述符鼠标实例
USAGE_PAGE (Generic Desktop) 05 01USAGE (Mouse) 09 02COLLECTION (Application) A1 01 ......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!