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. java之NIO编程

    所谓行文如编程,随笔好比java文件,文章好比类,参考文献是import,那么目录就是方法定义. 本篇文章处在分析thrift的nonblocking server之前,因为后者要依赖该篇文章的知识. ...

  2. 使用CAEmitterLayer产生粒子效果

    ViewController.m #import "ViewController.h" @implementation ViewController - (void)viewDid ...

  3. oracle 语句

    1.查询TRENDCHART_DLT表中的30条数据,统计字段FRONT01='0',BACK12='0'的条数 select sum(case when FRONT01='0' then 1 els ...

  4. aps.net 用ajax 读取服务端值

      1.Default.aspx 页面内容 实例一: <%@ Page Language="C#" AutoEventWireup="true" Code ...

  5. JavaScript 函数作用域和闭包

    函数作用域和闭包  词法作用域   它们在定义它们的作用域里运行,而不是在执行的作用域运行,但是只有在运行时,作用域链中的属性才被 定义(调用对象),此时,可访问任何当前的绑定.   调用对象     ...

  6. 为Linux服务器伪装上Windows系统假象

    网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击. 通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一 ...

  7. Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式

    迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...

  8. js的兼容性问题

    innerHTML和innerTEXT的使用问题 <html xmlns="http://www.w3.org/1999/xhtml"> <head> &l ...

  9. Asp.net core与golang web简单对比测试

    最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试. 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7 ...

  10. Android应用资源的分类和存储

    Android应用资源可以分为两大类1.无法直接访问的原生资源,保存在asset目录下2.可通过R资源清单类访问的资源,保存在res目录下 Android应用资源的存储/res/anim:存放定义补间 ...