资源描述:
《HID 报告描述》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、HID报告描述1报告描述简介ReportDescription,即上报事件的描述,描述所支持事件的格式及取值意义,比如鼠标按键上报格式、左键右键中间键分别对应的值等;报告描述跟JSON有些类似,都是结构数据,格式类似{usage:1,{id:0,usage:1.1,size:1,count:1,min:0,max:5,format:xx}}2描述符结构几个主要的名词解释一下:Collection,集合,相当于{},用来包含一组描述;Collection有Application和Physical之分,Application表示大项,里有可以有
2、很多Physical子项Report,报告,在上图中只是一个ID号,来区分不同report。MainItem,主项,例出来哪些项ReportSize,每一项有多少位。ReportCount,总共有多少项LogicalMinimum,每个项的取值范围中的最小值,即最小只能取的值。LogicalMaximum,每个项的取值范围中的最大值,即最大只能取的值。Usage,用途,表示有哪些功能,一个Usage代表一个功能。一项描述基本上是由两个字节构成,第一个字节表示名称,第二个字节表示值,如ReportSize,8ReportSize是名称,8是它
3、的值。ReportSize对应的16制数据是0x75,在代码里上面的表现是0x75,0x08。有些名称不需要带值,如Collection的结束符())为0xC0,就没有第二个字节。3名称名称有分长字和短字,这里只介绍短字,短字是由一个字节构成,结构如下:第3~2位表示类型,有如下几种:0=Main1=Global2=Local3=Reserved第1~0位表示名称的值由多少个字节构成,具体意义如下:0=0bytes,名称后面不带值1=1bytes,名称后面带1个值2=2bytes,名称后面带2个值3=4bytes,名称后面带4个值第7~4位
4、表示Tag,Tag与类型对应,每种类型有很多不同的Tag。3.1Main类对应的Tag在上面表格中,可以看到,第3~2位是00,这两位是bType值,00表示类型为Main;nn是第1~0位,是bSize,表示数值的字节数;第7~4位是bTag,如1000(0x8?)表示Input;ValidData表示值的意义,如Input项,Bit0{Data(0)
5、Constant(1)},意思是说,如果值的第0位的是0,即表示Data,如果是1,则表示Constant,如下语句:0x81,0x02,//Input:(Data,Variable,Ab
6、solute)它的值是2,第0位是0对应的是Data,第1位是1对应的是Variable,第二位是0对应的是Absolute,所以它是一个Data、Variable、Absolute的类型。下面对Data、Variable等的意思作一下解释。Data表示是一个可写的数据。Constant表示是一个只读的数据。Aarray表示数据里的值代表一个Usage,ReportSize表示位数,即ReportSize的存储单元里的值是Usage的Index。ReportCount一般为1,如果大于则表示可以同时出现多个Usage.Variable则是一
7、个ReportSize存储单元表示一个Usage,其值表示Usage的状态;ReportSize表示位数,ReportCount表示长度。Absolute表示绝对数据,如触模屏数据,便使用Absolute。Relative表示相对数据,如鼠标数据,便使用Relative。其也用的少就不多说了,详细参看《HID协议》。3.2Global类对应的Tag在上面表格中,可以看到,第3~2位是01,这两位是bType值,01表示类型为Global;nn是第1~0位,是bSize,表示数值的字节数;第7~4位是bTag,如0000(0x0?)表示Usa
8、gePage。3.3Local类对应的Tag在上面表格中,可以看到,第3~2位是10,这两位是bType值,10表示类型为Local;nn是第1~0位,是bSize,表示数值的字节数;第7~4位是bTag,如0000(0x0?)表示Usage。4样例解读下面是一个伪代码描述的样例,其中涉及到的页码可查看第5段用途表:UsagePage(GenericDesktop),//定位到GenericDesktop页,这个相当于指针跳转一样的东西Usage(Mouse),//指定GenericDesktop里的mouse,表示这是一个鼠标Collec
9、tion(Application),//CollectionApplication,是对Mouse的解释Usage(Pointer),//表示指针形式Collection(Phy