linux 键盘描述符,USB HID Report Descriptor 报告描述符详解

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。

5295dab7867de3201bd0a038f8034f3b.png

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

c5a68c8bc94ca2c96c5da4faf961dc4c.png

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: 

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.

0e02e97608a90dc444352685aee9ac54.png

(原文件名:MAIN Item.jpg)

715ab1087dfc7360e98b50ee73a5b951.png

(原文件名:MAIN Item1.jpg)

好了,到此我们应该可以对照实际应用的报告描述符,寻找其中的 Main items了。

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

Global Item: 

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.

e8df42028c360b660b3b0d863ede96ee.png

(原文件名:Global Item.jpg)

eef280881626df3b773f14fda96c3210.png

(原文件名:Global Item1.jpg)

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

Local Item: 

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.

012d8fd25c6e3bcf42345093ef2f41a7.png

(原文件名: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设备报告描述符详解(转)

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

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

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

(USB HID) Report Descriptor 理解

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

python描述符详解

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

Linux 文件描述符详解

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

JavaScript.descriptor(属性描述符)

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

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

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

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

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

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

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

随机推荐

『SharePoint』Content Editor Webpart不能添加引用_layouts下面的文件

好久没写了,最近没怎么学到新东西,倒是犯了一个很常见的错误,那就是试图在content editor webpart中添加位于_layouts下面的一个txt文件,虽然这个txt中只是几行简单的htm ...

web cookie and session

一.什么是会话? 打开一个浏览器,访问多个网址后,再关掉浏览器,这一整个过程就是会话. 二.cookie技术 这是客户端保存临时数据的技术,主要用于保存用户的登录信息及其它需要保存的数据,如购买与结帐 ...

doctrine2到底是个什么玩意

之前和最近一个项目用到了Doctrine,由于是别人搭建的,自己没有很了解,最近又开始做的时候发现拙荆见肘,于是看了一下doctrine教程,本文就是加上自己理解的doctrine教程文档笔记了. D ...

Ubuntu 的基本操作

1.Linux 常用shell 命令,和之前用过的红帽差不多.开发所有和程序相关的代码.压缩包都在一个名为topeet的用户文件夹里 学习了Linux 的重要命令apt-get,用它来安装软件:在使用 ...

洛谷P2737 [USACO4.1]麦香牛块Beef McNuggets

P2737 [USACO4.1]麦香牛块Beef McNuggets 13通过 21提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描 ...

使用第三方CDN加速服务加载js/css

ASP.NET MVC 3.0 http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.js http://ajax.aspnet ...

Java虚拟机内存优化实践

前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露.众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java ...

实验吧 who are you

看到ip,然后提示是要把ip写到数据库里面,就想到了x-forwarded-for注入 扔burp里面试一下 确实有这个问题,从返回信息里面估计出来,应该是盲注,而且基于时间的盲注,试一下吧 测试延迟 ...

洛谷P1020 导弹拦截

n²谁都会打,不说了. 这里讨论一下nlogn算法(单调不减): 首先开始考虑单调性,我习惯性的以为是单调队列/栈优化的那个套路,想要找到一个跟下标有关的单调性却发现没有. 例如:我想过当下标增加时f ...

JWT ajax java spingmvc 简洁教程

1.添加依赖 io.jsonwebtokenjjwt ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值