USB鼠标键盘报告描述符介绍.doc_第1页
USB鼠标键盘报告描述符介绍.doc_第2页
USB鼠标键盘报告描述符介绍.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符, 配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。 USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较 复杂的一个描述符。 USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。 输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等 信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送 给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是 一个数据包,里面包含的是所要传送的数据。输入报告是通过中断输入端点 输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出 端点0发送,当有中断输出端点时,通过中断输出端点发出。 而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。 通过它,USB HOST可以分析出报告里面的数据所表示的意思。它通过控制输入 端点0返回,主机使用获取报告描述符命令来获取报告描述符,注重这个哀求 是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的 报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。当报告描述符中 没有规定报告ID时,报告中就没有ID字段,开始就是数据。更详细的说明请参看 USB HID协议,该协议可从Http:/下载。 USB报告描述符可以通过使用HID Descriptor tool来生成,这个工具可以 到Http:/下载,为了方便大家,我顺便上传了一份。 /Upload/Blog/2007/4/2/af7c3443-ad61-4465-adc7- a74d28bbc322.zipuploadfile-/2007-4/42672233.zip下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告 描述符和报告。 code char KeyBoardReportDescriptor63 = /表示用途页为通用桌面设备 0x05 0x01/ USAGE_PAGE (Generic Desktop) /表示用途为键盘 0x09 0x06/ USAGE (Keyboard) /表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1 0x01/ COLLECTION (Application) /表示用途页为按键 0x05 0x07/USAGE_PAGE (Keyboard) /用途最小值,这里为左ctrl键 0x19 0xe0/USAGE_MINIMUM (Keyboard LeftControl) /用途最大值,这里为右GUI键,即window键 0x29 0xe7/USAGE_MAXIMUM (Keyboard Right GUI) /逻辑最小值为0 0x15 0x00/LOGICAL_MINIMUM (0) /逻辑最大值为1 0x25 0x01/LOGICAL_MAXIMUM (1) /报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1 0x75 0x01/REPORT_SIZE (1) /报告的个数为8,即总共有8个bits 0x95 0x08/REPORT_COUNT (8) /输入用,变量,值,绝对值。像键盘这类一般报告绝对值, /而鼠标移动这样的则报告相对值,表示鼠标移动多少 0x81 0x02/INPUT (DataVarAbs) /上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键 /分别从左ctrl键到右GUI键。这8个bits刚好构成一个字节,它位于报告的第一个字节。 /它的最低位,即bit-0对应着左ctrl键,假如返回的数据该位为1,则表示左ctrl键被按下,/否则,左ctrl键没有按下。最高位,即bit-7表示右GUI键的按下情况。中间的几个位, /需要根据HID协议中规定的用途页表(HID Usage Tables)来确定。这里通常用来表示 /特别键,例如ctrl,shift,del键等 /这样的数据段个数为1 0x95 0x01/REPORT_COUNT (1) /每个段长度为8bits 0x75 0x08/REPORT_SIZE (8) /输入用,常量,值,绝对值 0x81 0x03/INPUT (CnstVarAbs) /上面这8个bit是常量,设备必须返回0 /这样的数据段个数为5 0x95 0x05/REPORT_COUNT (5) /每个段大小为1bit 0x75 0x01/REPORT_SIZE (1) /用途是LED,即用来控制键盘上的LED用的,因此下面会说明它是输出用 0x05 0x08/USAGE_PAGE (LEDs) /用途最小值是Num Lock,即数字键锁定灯 0x19 0x01/USAGE_MINIMUM (Num Lock) /用途最大值是Kana,这个是什么灯我也不清晰_ 0x29 0x05/USAGE_MAXIMUM (Kana) /如前面所说,这个字段是输出用的,用来控制LED。变量,值,绝对值。 /1表示灯亮,0表示灯灭 0x91 0x02/OUTPUT (DataVarAbs) /这样的数据段个数为1 0x95 0x01/REPORT_COUNT (1) /每个段大小为3bits 0x75 0x03/REPORT_SIZE (3) /输出用,常量,值,绝对 0x91 0x03/OUTPUT (CnstVarAbs) /由于要按字节对齐,而前面控制LED的只用了5个bit, /所以后面需要附加3个不用bit,设置为常量。 /报告个数为6 0x95 0x06/REPORT_COUNT (6) /每个段大小为8bits 0x75 0x08/REPORT_SIZE (8) /逻辑最小值0 0x15 0x00/LOGICAL_MINIMUM (0) /逻辑最大值255 0x25 0xFF/LOGICAL_MAXIMUM (255) /用途页为按键 0x05 0x07/USAGE_PAGE (Keyboard) /使用最小值为0 0x19 0x00/USAGE_MINIMUM (Reserved (no event indicated) /使用最小值为0x65 0x29 0x65/USAGE_MAXIMUM (Keyboard Application) /输入用,变量,数组,绝对值 0x81 0x00/INPUT (DataAryAbs) /以上定义了6个8bit宽的数组,每个8bit(即一个字节)用来表示一个按键,所以可以同时 /有6个按键按下。没有按键按下时,全部返回0。如果按下的键太多,导致键盘扫描系统 /无法区分按键时,则全部返回0x01,即6个0x01。如果有一个键按下,则这6个字节中的第一 /个字节为相应的键值(具体的值参看HID Usage Tables),如果两个键按下,则第1、2两个 /字节分别为相应的键值,以次类推。 /关集合,跟上面的对应 0xc0/ END_COLLECTION ; 通过上面的分析,我们知道这个报告中只有一个报告,所以没有报告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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论