搜索
bottom↓
回复: 32

USB HID Report Descriptor 报告描述符详解(节选自HID1.11协议)

[复制链接]

出0入0汤圆

发表于 2011-6-24 11:05:37 | 显示全部楼层 |阅读模式
本文摘取自HID1.11协议文档,并通过自己的整理。
通过对本文的阅读,你将能明白HID报告描述符各Item的意义,以一个USB鼠标的报告描述符为例。并能根据自己的需要对报告描述符做修改。
本文大部分为英文原文,但是结构与原文有所差异。
HID1.11协议的原文我在以下帖子中有上传
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4823160&bbs_page_no=1&search_mode=3&search_text=lugang_2920213&bbs_id=9999


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,可以对应上图查看         
};

如果你耐心的看完了本文,我想你也已经明白了USB鼠标描述符中每个item的意义。

点击此处下载HID报告描述符生成软件 ourdev_651648M4ST0A.rar(文件大小:884K) (原文件名:USBMonitor2_26.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-2 11:28:50 | 显示全部楼层
这个帖子还是需要顶一个的!

出0入0汤圆

发表于 2011-8-10 20:27:37 | 显示全部楼层
感谢LZ翻译,很好啊!

出0入0汤圆

发表于 2011-10-13 16:12:35 | 显示全部楼层
回复【楼主位】lugang_2920213 小弥勒
-----------------------------------------------------------------------

参考了

出0入0汤圆

发表于 2011-10-30 18:17:52 | 显示全部楼层
好多好复杂啊,先顶着吧!

出0入0汤圆

发表于 2011-10-30 23:33:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-9 21:14:45 | 显示全部楼层
关注usb。

出0入0汤圆

发表于 2011-12-7 15:53:30 | 显示全部楼层
搞技术的人就是把毕生的精力拿来学这些难懂的东西,而做生意的所谓的老板就是给你一点点钱来买你的智慧和能力

出0入0汤圆

发表于 2011-12-15 13:21:33 | 显示全部楼层
报告描述符至今还没有完全弄懂,多谢LZ的翻译!

出0入0汤圆

发表于 2011-12-21 11:09:06 | 显示全部楼层
后边给的报告描述符的实例是键盘的吧。。。

出0入0汤圆

发表于 2012-1-4 16:01:07 | 显示全部楼层
楼主好样的

出0入0汤圆

发表于 2012-1-9 16:54:53 | 显示全部楼层
mark,USBMonitor2_26

出0入0汤圆

发表于 2012-1-9 17:39:00 | 显示全部楼层
关注usb

出0入0汤圆

发表于 2012-1-9 21:35:28 | 显示全部楼层
收下

出0入0汤圆

发表于 2012-2-15 16:39:25 | 显示全部楼层
标记 一下,谢谢分享!

出0入0汤圆

发表于 2012-4-10 00:04:25 | 显示全部楼层
多谢楼主!先MARK,有空再看

出0入0汤圆

发表于 2012-5-4 20:24:29 | 显示全部楼层
mark..
收下

出0入0汤圆

发表于 2012-10-30 11:04:41 | 显示全部楼层
LZ好样的,给了我不少帮助,但我看了半天还是没懂item,以及如何根据item解析出报告的数据来。后来经过继续查询USB HID 1.11 spec。发现参考6.2.2节 Report Descriptor会更加理解如何根据item来解析出报告数据,这一节里面把所有的item都罗列出来了,以及如何item解析出报告数据:即左上角标注页面的24页中所举例子。祝各位好运,欢迎交流!

出0入0汤圆

发表于 2012-12-14 17:10:39 | 显示全部楼层
感谢感谢!懂了懂了,具体情况再去看文档

出0入0汤圆

发表于 2013-7-16 22:41:40 | 显示全部楼层
是很好,如果有人把USB的协议译成中文稿就好了。

出0入0汤圆

发表于 2013-9-6 00:59:58 | 显示全部楼层
hcw 发表于 2013-7-16 22:41
是很好,如果有人把USB的协议译成中文稿就好了。

中文翻译不好更加的叫人蛋疼啊

出0入0汤圆

发表于 2013-9-6 06:04:13 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-9-23 11:01:39 | 显示全部楼层
mark USB 报告描述

出0入0汤圆

发表于 2013-10-29 10:28:21 | 显示全部楼层
谢谢分享,看了之后清晰了好多

出0入0汤圆

发表于 2013-11-2 14:32:47 | 显示全部楼层
lz好贴,mark

出0入0汤圆

发表于 2013-12-1 11:23:35 | 显示全部楼层
这篇帖子介绍的比较详细。

出0入0汤圆

发表于 2014-3-14 10:34:29 | 显示全部楼层
mark                     

出0入0汤圆

发表于 2014-3-28 14:47:18 | 显示全部楼层
支持一下楼主,觉得这个不好理解!

出0入0汤圆

发表于 2014-4-3 14:22:05 | 显示全部楼层
支持楼主,这个理解起来的确要费尽点,不过还是要肯下去

出0入0汤圆

发表于 2014-4-3 16:31:36 | 显示全部楼层
发一个中文的USBHID设备报告描述符的解释,看完后会明白很多

另外这个官方的生成工具用起来还是不爽,不过还是传上来吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-6-28 10:55:07 | 显示全部楼层
支持楼主,收藏

出0入0汤圆

发表于 2018-3-7 17:31:28 | 显示全部楼层
luckytwt1984 发表于 2014-4-3 16:31
发一个中文的USBHID设备报告描述符的解释,看完后会明白很多

另外这个官方的生成工具用起来还是不爽,不过 ...

最近用到hid,报告描述符感觉比价复杂,下来看看

出0入0汤圆

发表于 2021-1-7 17:26:38 | 显示全部楼层
mark  usb hid报告描述符   
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 02:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表