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. “The SQL Server license agreenment cannot be located for the selected edition.”MSSQL安装问题

    今天老邹又来吐槽了.今天不和IE7较劲了.说点别的吧. 我呢什么软件都喜欢装最新版的,这部刚出来windows 8.1就赶紧装上了,随后就用上了vs2013.前天看到新闻说微软已经发布了sql ser ...

  2. SqlServer 查看数据库锁,解除锁,此种情况一般常见都是由于事务所造成

    检查数据库锁 SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableNameFROM sys.dm ...

  3. 如何完全卸载SQL Server 2005

    用过SQL Server 2005的朋友都应该知道,不管是安装还是完全卸载都是件很头疼的事情. 下面跟大家分享一下如何完全卸载SQL Server 2005(手动卸载步骤哦~~). 一.停止sql的服 ...

  4. C#网络编程之WebClient

    1.什么是WebClient? 源自MSDN:提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法. 2.OpenRead()  为从具有String指定的URI的资源下载的数据 ...

  5. jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Se ...

  6. 0X0000124

     求教卡饭网友,都快疯掉了.      最近搞设计,电脑频发出现蓝屏,今晚都出现三次了,新装的win7 64位系统,都是安装的原版光驱.     错误代码基本上都是:0x00000124 (0x000 ...

  7. Hibernate数据库对象的创建与导出

    Hibernate 与数据库的关系是ORM关系,对象映射数据库. 那么如何通过对象对数据库进行各种对象的ddl与dml操作呢? 数据库对象操作的〈database-object /〉+ SchemaE ...

  8. ARM汇编指令(未完待续)

    ARM指令自己在看的时候,看完之后就忘了,根本记不住,而且有些ARM汇编指令在平常的时候可能根本就用不到,所以也没必要把所有的ARM指令都去记忆,所以自己就想着不去一遍一遍的复习ARM指令,而是在平常 ...

  9. Webbrowser判断页面加载完成

    Webbrowser 请求加载页面,页面中包含各种资源,不能够很准确的判断加载是否完成,需要通过特定的方法判断. 1.使用计数器判断页面是否加载完成.精准可控. // 计数器 ; // 添加事件响应函 ...

  10. 存储过程中update,然后用sql%判断update是否成功的存储过程

    --更新用户状态 PROCEDURE P_UPDATE_USER_STATUS ( v_SrcID IN NUMERIC, v_DstID IN NUMERIC, v_DstType IN NUMER ...