欢迎来到天天文库
浏览记录
ID:32400683
大小:28.50 KB
页数:3页
时间:2019-02-04
《usb鼠标键盘报告描述符介绍》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、在USB中,USBHOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。USB报告描述符(ReportDescriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符。USBHID设备是通过报告来给传送数据的,报告有输入报告和输出报告。输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是一个数据包,里面包含的
2、是所要传送的数据。输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USBHOST可以分析出报告里面的数据所表示的意思。它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注重这个哀求是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。当报告描述符中没有规定报告ID时,报告
3、中就没有ID字段,开始就是数据。更详细的说明请参看USBHID协议,该协议可从Http://www.usb.org下载。USB报告描述符可以通过使用HIDDescriptortool来生成,这个工具可以到Http://www.usb.org下载,为了方便大家,我顺便上传了一份。http://www.ednchina.com/Upload/Blog/2007/4/2/af7c3443-ad61-4465-adc7-a74d28bbc322.zipuploadfile-/2007-4/42672233.zip下面通过由HIDDescr
4、iptortool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。codecharKeyBoardReportDescriptor[63]={//表示用途页为通用桌面设备0x050x01//USAGE_PAGE(GenericDesktop)//表示用途为键盘0x090x06//USAGE(Keyboard)//表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION0xa10x01//COLLECTION(Application)//表示用途页为按键0x050x07//USAGE_
5、PAGE(Keyboard)//用途最小值,这里为左ctrl键0x190xe0//USAGE_MINIMUM(KeyboardLeftControl)//用途最大值,这里为右GUI键,即window键0x290xe7//USAGE_MAXIMUM(KeyboardRightGUI)//逻辑最小值为00x150x00//LOGICAL_MINIMUM(0)//逻辑最大值为10x250x01//LOGICAL_MAXIMUM(1)//报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为10x750x01//R
6、EPORT_SIZE(1)//报告的个数为8,即总共有8个bits0x950x08//REPORT_COUNT(8)//输入用,变量,值,绝对值。像键盘这类一般报告绝对值,//而鼠标移动这样的则报告相对值,表示鼠标移动多少0x810x02//INPUT(DataVarAbs)//上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键//分别从左ctrl键到右GUI键。这8个bits刚好构成一个字节,它位于报告的第一个字节。//它的最低位,即bit-0对应着左ctrl键,假如返回的数据该位为1,则表示左ctr
7、l键被按下,//否则,左ctrl键没有按下。最高位,即bit-7表示右GUI键的按下情况。中间的几个位,//需要根据HID协议中规定的用途页表(HIDUsageTables)来确定。这里通常用来表示//特别键,例如ctrl,shift,del键等//这样的数据段个数为10x950x01//REPORT_COUNT(1)//每个段长度为8bits0x750x08//REPORT_SIZE(8)//输入用,常量,值,绝对值0x810x03//INPUT(CnstVarAbs)//上面这8个bit是常量,设备必须返回0//这样的数据段个
8、数为50x950x05//REPORT_COUNT(5)//每个段大小为1bit0x750x01//REPORT_SIZE(1)//用途是LED,即用来控制键盘上的LED用的,因此下面会说明它是输出用0x050x08//USAGE_PAGE(LED
此文档下载收益归作者所有