USB HID键盘报告描述符_第1页
USB HID键盘报告描述符_第2页
USB HID键盘报告描述符_第3页
USB HID键盘报告描述符_第4页
USB HID键盘报告描述符_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

本文格式为Word版,下载可任意编辑——USBHID键盘报告描述符USBHID键盘报告描述符

最近弄USB驱动,里面的报告描述符晕了我好几天!找了一些资料希望能对大家有帮助~~~~~~~~~~~~~~

HIDScript脚本语言的理解:Globalitem--全局项Mainitem--主项localitem--局部项

对于Main项,parser解释器,将顺序解释集合中的数据,并且,解释器解释完的数据,

将按Main项出现的先后顺序,主要是Input和Output项,顺序拼接生成对应的数据bit位,

解释器将以关键字Collection开始解释并拼接bit位信息,关键字EndCollection将

终止paser解释器的工作,我把关键字Collection和关键字EndCollection叫做\集合\,

这样给他取个名字,以后说明起来也便利些,\集合\里边描述的就是最终生成的由HID硬件设备1次性上发给pc的HID驱动程序的数据流了.在中,(gliethttp)

关键字Collection和关键字EndCollection都是Mainitem主项,对应的控制字分别为:

101000nn和110000nn,假使Collection后边有1个参数数据,那么即为:10100001=0xA1,如Collection(Application)

翻译成控制码后为:0xA1,0x01;0xA1的1表示有1个参数数据,0x01表示Application在HID

协议中规定的索引值为0x01,pc的HID驱动程序在parser解释器中会通过0x01得知,

是对Application进行数据流位生成,就是说HID报告描述符(ReportDescriptor)

所描述的数据流是为了Application使用的,Application在中包含

两种设备:mouse和keyboard,至于Collection(Application)里边描述的是mouse

还是keyboard,将具体的由Usage进一步限定,如:Usage(KeyBoard),也就是说明确

告诉pc的HID驱动程序的paser解释器,接下来的这段信息最终生成出来的bits位数据信息,

将交由pc的HID驱动程序中KeyBoard对应的API函数处理,当然这只是HID硬件设备开发者

给pc的HID驱动程序的paser解释器提供的一个建议值,譬如我们做DDK下的HID驱动二次开发,

那么我们可以很随意,但是HID硬件设备开发者,建议使用的HID驱动程序API接口,最好遵守,

由于HID硬件设备开发者比DDK开发人员更明白送上来的bit数据流的真正物理意义.

Input和Output是用来真正生成bits位流数据域的关键字,他们描述的东西是最终通过

usb总线实实在在发送到pc或者从pc接收的数据位,当然这些bits数据流数据域所代表的意义

以及某段bits位们所代表的意思以及这些bits将交由pc上HID驱动程序的哪一个API接口

来做进一步解析(是mouse还是keyboard),需要其他描述符来描述,譬如前边的Usage就是其中的1个描述符,

假使一个HID设备同时提供2种不同的功能,那么就会分别生成2个bits位流数据域,

每个bits位流数据,将交由不同的驱动解析,譬如,一个keyboard可能还集成了一个附属的鼠标功能,

那么键盘数据信息将由HIDscript脚本描述的keyboard对应bits数据位流传送,mouse数据将由

HIDscript脚本描述的mouse对应bits数据位流传送,但同一个Input管道怎么能传送两个独立的

数据流呢,答案很简单:不能,所以又引入了一个ReportID的概念,ID用来标识多条独立的bits数据流,

pc的HID驱动程序根据ID,将这些独立的bits数据流们路由到相应的API处理函数上去,

进而不同的bits数据流数据最终都能够被自己对应的API驱动函数正确接收并解析处理.

对于2字节、4字节等多字节数据的传输,是按小端模式little-endian进行的.这

些多字节数据的最小值由LogicalMinimum定义,最大值由LogicalMaximum定义,假使两个值均为非负

值,那么bits位流数据就是无符号数,假使没有明确指定,那么作为有符号数处理,另外HID1.1协议不允许传输浮点数据.

硬件开发者应当时刻清除自己写的HIDscript脚本所描述的数据流将来应当由PC上的HID驱动程序

怎么使用,另外对于硬件开发者来说,对于不允许PC驱动修改的bit位数据,HID1.1协议制定者猛烈建议

采用NULL数值,最好不要随便填其他值.

Mainitem--主项当前一共5个:1)Input2)Output3)Feature4)Collection

5)EndCollection

Globalitem--全局项当前一共13个:1)UsagePage

2)LogicalMinimumvar变量或array数组的规律最小值3)LogicalMaximum4)PhysicalMinimum5)PhysicalMaximum

6)UnitExponent单位的指数值,是10的指数7)Unit单位索引号:可以是时间单位、电流单位、电压单位和距离单位等等.8)ReportSize

9)ReportID数据流的ID值设置10)ReportCount11)Push12)Pop

13)Reseved保存

localitem--局部项当前一共11个:

1)Usage定义UagePage下面某个功能item的起始索引值,譬如Keyboard功能,LEDs功能等,

这也告诉pc的HID解释器,Input或Output变量或数组的相应生成数据位用来描述

Usage引用到的那个功能,如:用来描述Keyboard功能或LEDs功能等.2)UsageMinimum定义与array或bitmap关联的usage定义的某个功能下的起始值

Usage作为UagePage的一个子功能索引号,同时Usage自己也有好多子功能,或者

说有好多个子值,这里就是定义这些子值的范围值,之后和用Input或Output生成

bits位数据流,进行相应关联.(可以用多维数组来说明,可能会更明确一点)

如:Gliethttp[5][6][80],Gliethttp为最上层,5就是UsagePage(5),6就是在

前一个基础上Usage(6),当然在HIDDescriptorTool里边6有它的字符串名,即:

Usage(Keyboard),然后80就是Keyboard里边的一个索引取值,查找之后是:

KeyBoardLeftArrow,所以Usage_Minimum(80)就等于Usage_Minimum(KeyBoardLeftArrow)

Usage的顺序先后和ReportCount定义的bits位组的先后顺序依次一一对应,UsageMinimum和

UsageMaximum之间的Usage的索引值也将依次与ReportCount定义的bits位组的先后顺序

依次一一对应上。

3)UsageMaximum定义与array或bitmap关联的usage的终止值4)DesignatorIndex5)DesignatorMinimum6)DesignatorMaximum7)StringIndex8)StringMinimum9)StringMaximum10)Delimiter11)Reserved

loca

温馨提示

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

最新文档

评论

0/150

提交评论