Report descriptors are composed of pieces of information. Each piece of information is called an Item.
报告描述符由一些数据片组成。这些数据片被叫做Item。
All items have a one-byte prefix that contains the item tag, item type, and item size. 
每一个Item都包含一个字节的前缀,这个前缀中包含了三个信息--item tag,、item type、item size。
An item may include optional item data。
Item可以包含一个可选的数据段。
The size of the data portion of an item is determined by its fundamental type.
Item的数据部分的长度取决于Item的基本类型。
There are two basic types of items: short items and long items.
Item有两种基本类型:short items and long item。

long item格式 (原文件名:long item.jpg)


short item格式 (原文件名:short item.jpg)

There are three categories of short item tags: Main, Global, and Local. 
short item 的 item tags 有三种类型:Main, Global, and Local.

Main items: </center>
Main items are used to either define or group certain types of data fields within a Report descriptor. There are two types of Main items: data and non-data. Data-type Main items are used to create a field within a report and include Input, Output, and Feature. Other items do not create fields and are subsequently referred to as non-data Main items.


(原文件名:MAIN Item.jpg) 

(原文件名:MAIN Item1.jpg) 
好了,到此我们应该可以对照实际应用的报告描述符,寻找其中的 Main items了。

至此我们已经可以明白报告描述符中的几个MAIN Item的意义,接下来继续看Global Item 和 Local Item.

Global Item: </center>
Global items describe rather than define data from a control. A new Main item assumes the characteristics of the item state table. Global items can change the state table. As a result Global item tags apply to all subsequently defined items unless overridden by another Global item.  

(原文件名:Global Item.jpg) 

(原文件名:Global Item1.jpg)

至此我们已经可以明白报告描述符中的几个Global Item的意义

Local Item: </center> 
Local item tags define characteristics of controls. These items do not carry over to the next Main item. If a Main item defines more than one control, it may be preceded by several similar Local item tags. For example, an Input item may have several Usage tags associated with it, one for each control.  

(原文件名:Local Item.jpg) 
至此我们已经可以明白报告描述符中的几个Local Item的意义

//该报告描述符号由HID Descriptor tool生成   
以下是一个USB鼠标的报告描述符 
code char MouseReportDescriptor[63] = {    
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)    
    0x09, 0x06,                  // USAGE (Keyboard)    
    0xa1, 0x01,                    // COLLECTION (Application)   这就是一个MAIN Item,可以对应上图查看   
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)    
    0x19, 0xe0,                    //   USAGE_MINIMUM (Keyboard LeftControl)    
    0x29, 0xe7,                    //   USAGE_MAXIMUM (Keyboard Right GUI)    
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)    
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)    
    0x75, 0x01,                    //   REPORT_SIZE (1)    
    0x95, 0x08,                    //   REPORT_COUNT (8)    
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)     这就是一个MAIN Item,可以对应上图查看  
    0x95, 0x01,                    //   REPORT_COUNT (1)    
    0x75, 0x08,                    //   REPORT_SIZE (8)    
    0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)     这就是一个MAIN Item,可以对应上图查看  
    0x95, 0x05,                    //   REPORT_COUNT (5)    
    0x75, 0x01,                    //   REPORT_SIZE (1)    
    0x05, 0x08,                    //   USAGE_PAGE (LEDs)    
    0x19, 0x01,                    //   USAGE_MINIMUM (Num Lock)    
    0x29, 0x05,                    //   USAGE_MAXIMUM (Kana)    
    0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)     这就是一个MAIN Item,可以对应上图查看   
    0x95, 0x01,                    //   REPORT_COUNT (1)    
    0x75, 0x03,                    //   REPORT_SIZE (3)    
    0x91, 0x03,                    //   OUTPUT (Cnst,Var,Abs)     这就是一个MAIN Item,可以对应上图查看  
    0x95, 0x06,                    //   REPORT_COUNT (6)    
    0x75, 0x08,                    //   REPORT_SIZE (8)    
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)    
    0x25, 0xFF,                    //   LOGICAL_MAXIMUM (255)    
    0x05, 0x07,                    //   USAGE_PAGE (Keyboard)    
    0x19, 0x00,                    //   USAGE_MINIMUM (Reserved (no event indicated))    
    0x29, 0x65,                    //   USAGE_MAXIMUM (Keyboard Application)    
    0x81, 0x00,                    //   INPUT (Data,Ary,Abs)     这就是一个MAIN Item,可以对应上图查看   
    0xc0                           // END_COLLECTION             这就是一个MAIN Item,可以对应上图查看          
};

--------------------------------------------------------------------------------------------------------------------------------------------------------------                               补充HID报告描述符说明.

在USB中,USB Host是通过各种描述符来识别识别设备的,有设备描述符/配置描述符/接口描述符/断点描述符/字符串描述符/报告描述符等等.

USB报告描述符是HID设备中的一个描述符,它是比较复杂的一个描述符.

USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告.

输入报告是USB设备发送数据给Host.PS:USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据返回给电脑等.

输出报告是Host发送数据给USB设备,PS:键盘上的数字键盘锁定灯和大写字母锁定灯等.

报告是一个数据包,里面包含的是索要传送的数据.输入报告是通过中断输入断点输入的,而输出报告有点区别,当没有中断输出断点时,可以通过控制输出断电0发送,当有中断输出断点时,通过中断输出断点发出.

而报告描述符,是描述一个报告以及报告里面的数据是用来干什么的.通过它,USB Host可以解析出报告里面的数据所表示的含义.它通过控制输入断点0返回,Host使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到Interface,而不是设备.一个报告描述符可以描述多个报告,不同的报告通过Report ID来区分,Reort ID在报告最前面,即第一个byte.而当报告描述符中没有规定Report ID时,报告中就没有ID字段,开始就是数据.

USB HID Report Descriptor 报告描述符详解的更多相关文章

  1. USB HID设备报告描述符详解(转)

    转自:http://group.ednchina.com/93/198.aspx. 参考:USB HID usage table 概述:   报告在这里意思是数据传输(data transfer),而 ...

  2. usb的hid鼠标键盘报告描述符(五)

    title: usb的hid鼠标键盘报告描述符 tags: linux date: 2018/12/20/ 18:05:08 toc: true --- usb的hid鼠标键盘报告描述符 https: ...

  3. (USB HID) Report Descriptor 理解

    在這理整理一下基本 Report Descriptor 對於入門基礎的了解. 在很多文件.Blog都有提到HID report 總共分為3種 : Input.Output.Feature report ...

  4. python描述符详解

    1描述符: 描述符是指将某种特殊类型的类的实例支配给另外一个类的属性. 对于特殊类型必须实现以下三个方法中至少一个方法:    def __get__(self,instance,owner): -用 ...

  5. Linux 文件描述符详解

    Overview 了解Linux怎样处理输入和输出是非常重要的.一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置.同样我们也可以更好地理解输入重定向和输出重定向. Linux ...

  6. JavaScript.descriptor(属性描述符)

    属性描述符是对JavaScript属性的描述,包括:value.writable.enumerable.configurable,除value其他默认为true. 本文包括: 取得属性描述符. Obj ...

  7. USB HID报告及报告描述符简介

    在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等.USB报告描述符(Report Descriptor)是HID ...

  8. USB学习小记-HID类键盘的报告描述符的理解

    前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...

  9. 浅析USB HID ReportDesc (HID报告描述符)

    在USB中,USB Host是通过各种描述符来识别识别设备的,一般在设备枚举的过程将会获取有设备描述符/配置描述符/接口描述符/端点描述符/字符串描述符等 现在我们来介绍一下HID ReportDes ...

随机推荐

  1. mysql 存储引擎MYSIAM和INNODB特性比较

    事物:MYISAM不支持事物,MyISAM类型的表强调的是性能,其执行数度比InnoDB 类型更快.如果不考虑事物,大量的select和insert适合MYISAM表 锁:MYISAM支持表锁    ...

  2. zepto源码研究 - zepto.js - 6(模板方法)

    width  height  模板方法   读写width/height ['width', 'height'].forEach(function(dimension){ //将width,hegih ...

  3. Qt 数据库创建表失败原因之数据库关键字

    本人数据库新手,在创建表时出现问题,最后经查证,找出问题所在.下面的程序是部分节选,在创建数据库表的时候,起先使用的L24的CreateDB,经测试,一直输出 Create testResult Fa ...

  4. [转]机器学习——C4.5 决策树算法学习

    1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分 ...

  5. 自定义窗口 mfc

    typedef struct _WNDCLASS { UINT style; //制定窗口的类型 WNDPROC lpfnWndProc; int cbClsExtra; //额外的数值 int cb ...

  6. MOOTOOLS和JQUERY如何同时存在,解决冲突

    mootools-jquery 今天在做EcStore前台的做效果时,由于Jquery的插件比较多,于是就使用了Jquery的插件,但是发现会引起Mootools的冲突. 于是猛找资料,终于找到了,现 ...

  7. KACK的处理方法

    demo: .eq { color:#f00;/*标准浏览器*/ color:#f30\0;/*IE8,IE9,opera*/ *color:#c00;/*IE7及IE6*/ _color:#600; ...

  8. Python自动化运维之4、格式化输出、文件对象

    Python格式化输出: Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[P ...

  9. Cocos2d粒子系统二

    粒子系统的属性: 粒子的发射速度 重力模式(模式A): 重力 方向 速度 +- 变动 切向加速度 +- 变动 径向加速度 +- 变动 半径模式(模式B): 开始半径 +- 变动 结束半径 +- 变动 ...

  10. ARC - strong和weak指针

    ARC指南1 - strong和weak指针   提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量&qu ...