USB HID报告及HID报告描述符简介(圈圈版)
USB报告描述符可以通过使用HID Descriptor tool来生成,这个工具可以到Http://www.usb.org下载。
下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。
通过上面的分析,我们知道这个报告中只有一个报告,所以没有报告ID,因此返回的都是实际使用的数据。总共有8字节输入,1字节输出。其中输入的第一字节用来表示特殊按键,第二字节保留,后面的六字节为普通按键。如果只有左ctrl键按下,则返回01 00 00 00 00 00 00 00(十六进制),如果只有数字键1 按下,则返回00 00 59 00 00 00 00 00,如果数字键1 和2 同时按下,则返回00 00 59 5A 00 00 00 00,如果再按下左shift 键,则返回02 00 59 5A 00 00 00 00,然后再释放1 键,则返回02 00 5A 00 00 00 00 00,然后全部按键释放,则返回00 00 00 00 00 00 00 00。这些数据(即报告)都是通过中断端点返回的。当按下Num Lock键时,PC会发送输出报告,从报告描述符中我们知道,Num Lock的LED对应着输出报告的最低位,当数字小键盘打开时,输出xxxxxxx1(二进制,打x的由其它的LED状态决定);当数字小键盘关闭时,输出xxxxxxx0(同前)。取出最低位就可以控制数字键锁定LED了。
下面这个报告描述符是USB鼠标报告描述符,比起键盘的来说要简单些。它描述了4个字节,第一个字节表示按键,第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移),第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移动,负值表示往上移动),第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动)。
通过对上面的报告分析,我们知道报告返回4个字节,没有报告ID。如果鼠标左键按下,则返回01 00 00 00(十六进制值),如果右键按下,则返回02 00 00 00,如果中键按下,则返回04 00 00 00,如果三个键同时按下,则返回07 00 00 00。如果鼠标往右移动则第二字节返回正值,值越大移动速度越快。其它的类推。
补充说明一下,学习USB或具体的HID设备类开发,不是只看协议就能学得会,还得实践,比如找一些HID设备来抓一下枚举和使用时候的数据发送接收情况,对照协议分析数据包中的各个字节甚至各个位的含义,像百合电子工作室USB专题站就写了一篇这样的文章:《用USB Monitor监视USB枚举(配置、识别)过程(USB枚举过程分析)》,大家可以照着做一下,如果还想再学得深入一点,应该买个USB学习板或开发板,建议买使用PDIUSBD12接口芯片的产品,这款USB芯片在网上的资料相对多些。
USB开源项目
百合电子工作室曾在2009年推出了一个USB开源项目:Easy USB 51 Programer,此项目以开源的形式展示了USB通信的基础性内容、USB HID设备类固件程序开发及PC端应用程序开发、自定义USB设备类固件程序开发及PC端驱动程...
|
USB产品
EASY USB D12 是原EASY USB 51 PROGRAMER的升级版,是百合电子工作室历时一年精心设计的一款USB学习板/开发板,与老款相比,其实例更丰富,技术文档更详尽,更重要的是此款USB学习板还提供技术支持。......
|