USB_HID报告及报告描述符_入门简介

合集下载

USBHID学习手册

USBHID学习手册

USB HID学习笔记PC程序部分:USB开发者论坛发布了一系列USB设备的类型定义,并配以相应的使用说明。

下面表格显示出USB的设备类型(DEVEICE CLASS):HID类型概述第一个被wi ndows支持的usb外围设备类是人机接口设备。

hid是human in terface device人机接口设备的英文缩写。

是指直接和人进行互动的设备。

如鼠标、键盘等。

运行在WINDOWS98或其他更高的版本的操作系统的PC机,系统除了提供通用的USB设备的底层驱动以外,还单独提供了一些HID设备的完整驱动,应用程序可以很容易的与操作系统内部的hid通讯。

这样使得符合hid类的USB设备很容易开发与运行。

也就是说,我们如果想实现一个USB的HID类设备,是不需要在Windows下开发自己的驱动程序。

HID不一定要是标准的外设类型,唯一的要求是交换的数据存储在报文的结构内,设备固件必须支持报文的格式。

任何工作在该限制之内的设备都可以成为一个hid,例如温度计,电压计,读卡机等。

hid类设备只能使用控制传输与中断传输两种方式。

HID的交换的数据格式称为报文。

报文形式灵活,能处理任何类型的数据。

HID特有的请求,Set_Report和Get_Report为主机和设备之间的任何类型数据块传输提供了一种方法。

主机发出Get_Report请求,设备响应向主机传送数据块;主机发出Set_Report请求,设备响应准备接收主机发出的数据块。

对于一个全速设备,中断传输方式下每笔事务能够传送的最大数据量是64字节,全速设备每毫秒不能有超过一笔事务,所以每秒最多传送64000字节。

高速设备,每笔事务能够传送的最大数据量是1024字节。

对于不能一次传输完毕的数据,接收和发送报文可以采用多笔事务。

下表列举出了与HID类设备通信过程中使用到的大量函数,这些函数的用法在DDK的帮助文档中均有详细地解释。

这些函数包含在Hid.dll、Setupapi.dll、Kernel32.dll三个动态链接库中,分别起到与HID设备通讯, 寻找与识别设备,交换数据的作用。

USB的HID通信协议

USB的HID通信协议

USB的HID通信协议USB HID(Human Interface Device)通信协议是一种用于实现USB设备与计算机之间人机交互的通信标准。

它定义了如何将输入和输出的信息在USB总线上进行传输并进行解释。

在该协议中,设备被称为USB HID设备,计算机被称为主机。

以下是USB HID通信协议的详细介绍。

1.通信协议层次结构USBHID通信协议定义了四个层次的模型。

最底层是物理层,负责USB总线的电气特性和通信速率。

上一层是USB传输层,负责数据包传输的同步和差错检测。

再上一层是USB配置层,负责设备枚举和配置。

最顶层是HID层,负责定义设备的输入输出报告格式和解析。

2.报告描述符HID通信协议通过报告描述符定义设备的输入和输出报告格式。

输入报告描述设备向主机传输输入数据,输出报告描述主机向设备传输输出数据。

报告描述符包含了报告ID、报告大小和报告类型等信息,主机通过解析报告描述符来理解设备传输的数据。

3.报告传输设备通过中断传输和控制传输与主机进行通信。

中断传输是指设备周期性地传输输入报告给主机,主机可以根据需要设置中断传输的频率。

控制传输是指主机向设备发送控制命令或获取设备属性信息。

4.事件推送和轮询设备可以通过事件推送和轮询两种方式向主机传输数据。

事件推送是指设备主动向主机发送输入报告。

轮询是指主机定期向设备发送轮询请求,设备在收到请求后返回输入报告。

事件推送和轮询可以结合使用,以满足不同的应用需求。

5.输入报告解析主机通过解析输入报告来获取设备传输的数据。

输入报告由报告ID和报告数据组成。

主机可以根据报告描述符的信息来解析报告数据,获取具体的输入信息。

解析后的数据可以用于触发软件事件或更新设备状态。

6.输出报告处理主机通过发送输出报告向设备传输数据。

输出报告也由报告ID和报告数据组成。

设备可以根据报告描述符的信息解析报告数据,并根据需要进行相应的处理。

7.随机访问HID通信协议支持主机以随机方式访问设备的输入输出报告。

hid类键盘的报告描述符的理解

hid类键盘的报告描述符的理解

USB学习小记-HID类键盘的报告描述符的理解前言断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的。

利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧。

在学习过程中,刚开始主要参考了周立功编写的一本《PDIUSBD12 USB 固件编程与驱动开发》,后面的学习主要参考电脑圈圈的资料包,包括里面的HID类的英文协议文档,还有一位台湾前辈几年前写的几篇文章,还有网络下有下得到的一些例程。

在此感谢各位大虾前辈的分享。

一、学习流程1,先大致看下USB1.1中文版的协议(就是网上能找到的翻译版),先了解一下USB1.1的工作流程(可能此时的你会对其中很多内容都很含糊,不过没关系,请坚持!);2,选择一款最常用的USB芯片,比如我选择的NXP的PDIUSBD12.有很多使用该芯片的源码可以在上网搜索得到,而且周立功公司为其写了一本书,前面的章节对USB的工作流程作了一个简单而又清晰的讲解,而不致让人陷入协议的海洋里;3,有了对USB1.1协议的大致了解,选好了开发的平台(我刚好手上有一块周立功公司的EASEARM2200的开发板,上面有D12)之后,先跑一下附带的例程(此开发板配套的例程是基于UCOS2系统的,刚开始用它来参考肯定晕)。

没有能跑的例程,那就上网找一下经验证的例程,比如电脑圈圈在EDNCHINA建立的USB学习小组里有很好的几个例程,而且都是基于51+D12的,所以极具参考价值。

我是参考周立功公司出的那本书来学习的,电脑圈圈的例程与此书的例子书写风格较相似,所以可以互相参考。

如果也没有开发板,那可购买一套电脑圈圈他们搞活动的套件或者直接用51+D12自己搭一下,这样就可以直接用电脑圈圈写的例程了,可以避免走很多弯路。

4,有了例程的直观印象后,此时可以上BUS HOUND5.0了。

此软件可以观察到USB设备与主机(PC)之间的通讯数据,特别那11个标准请求的理解,通过此软件的观察,可以更好理解其相互之间是如何完成这个握手枚举过程的。

USB_HID协议中文版——USB接口HID设备

USB_HID协议中文版——USB接口HID设备

USB_HID协议中文版——USB接口HID设备
一、什么是USBHID协议
USB HID(Human Interface Device)协议是一种应用在USB接口上
的应用层通信协议,它不仅定义了用于特定应用的设备的接口规范,而且
可以帮助开发者更快捷、更准确地实现其产品化。

USB HID是USB接口应用层通信协议中最常用的一种协议,它通过主
机和设备之间的endpoints来建立简单的通信框架,从而实现设备连接和
输入输出控制。

最初被设计用于用户界面(如鼠标、键盘等),但它的应
用领域已经不仅限于此,无论是电源管理控制、温度控制器、读卡器、按键、触摸板或其他交互式设备,都可以通过USB HID来实现。

二、USBHID协议框架
USBHID协议规范定义了主机与设备之间的通信机制,其使用形式类
似于USB驱动程序,主要有以下几个部分:
1、Device Definition:描述支持HID协议的设备的特性,包括设备
所具备的功能,如鼠标按键、键盘、触摸板等;
2、Descriptor:定义设备的接口,描述设备与用户界面之间的结构
关系;
3、Report Descriptor:描述报告的格式,定义HID设备的所有输入
和输出数据;
4、Input Report:指从键盘、鼠标、按钮等设备向主机发送的数据;
5、Output Report:指从主机向设备发送的数据,以从设备更改状态
或进行其他操作;
6、Feature Report:当输入输出数据不足以满足需求时。

USBHID键盘报告范文描述符

USBHID键盘报告范文描述符

USBHID键盘报告范文描述符HIDScript脚本语言的理解:Globalitem--全局项Mainitem--主项localitem--局部项对于Main项,parer解释器,将顺序解释集合中的数据,并且,解释器解释完的数据,将按Main项出现的先后顺序,主要是Input和Output项,顺序拼接生成对应的数据bit位,解释器将以关键字Collection开始解释并拼接bit位信息,关键字EndCollection将结束paer解释器的工作,我把关键字Collection和关键字EndCollection叫做\集合\,关键字Collection和关键字EndCollection都是Mainitem主项,对应的控制字分别为:101000nn和110000nn,如果Collection后边有1个参数数据,那么即为:10100001=0某A1,如Collection(Application)翻译成控制码后为:0某A1,0某01;0某A1的1表示有1个参数数据,0某01表示Application在HID协议中规定的索引值为0某01,pc的HID驱动程序在parer解释器中会通过0某01得知,是对Application进行数据流位生成,就是说HID报告描述符(ReportDecriptor)所描述的数据流是为了Application使用的,Application在中包含两种设备:moue和keyboard,至于Collection(Application)里边描述的是moue还是keyboard,将具体的由Uage进一步限定,如:Uage(KeyBoard),也就是说明确告诉pc的HID驱动程序的paer解释器,接下来的这段信息最后生成出来的bit位数据信息,将交由pc的HID驱动程序中KeyBoard对应的API函数处理,当然这只是HID硬件设备开发者给pc的HID驱动程序的paer解释器提供的一个建议值,比如我们做DDK下的HID驱动二次开发,那么我们可以很随意,但是HID硬件设备开发者,建议使用的HID驱动程序API接口,最好遵守,因为HID硬件设备开发者比DDK开发人员更清楚送上来的bit数据流的真正物理意义.Input和Output是用来真正生成bit位流数据域的关键字,他们描述的东西是最后通过ub总线实实在在发送到pc或者从pc接收的数据位,当然这些bit数据流数据域所代表的意义以及某段bit位们所代表的意思以及这些bit将交由pc上HID驱动程序的哪一个API接口来做进一步解析(是moue还是keyboard),需要其他描述符来描述,比如前边的Uage就是其中的1个描述符,如果一个HID设备同时提供2种不同的功能,那么就会分别生成2个bit位流数据域,每个bit位流数据,将交由不同的驱动解析,比如,一个keyboard可能还集成了一个附属的鼠标功能,那么键盘数据信息将由HIDcript脚本描述的keyboard对应bit数据位流传送,moue数据将由HIDcript脚本描述的moue对应bit数据位流传送,但同一个Input 管道怎么能传送两个独立的数据流呢,答案很简单:不能,所以又引入了一个ReportID的概念,ID 用来标识多条独立的bit数据流,pc的HID驱动程序根据ID,将这些独立的bit数据流们路由到相应的API处理函数上去,进而不同的bit数据流数据最终都能够被自己对应的API驱动函数正确接收并解析处理.对于2字节、4字节等多字节数据的传输,是按小端模式little-endian进行的.这些多字节数据的最小值由LogicalMinimum定义,最大值由LogicalMa 某imum定义,如果两个值均为非负值,那么bit位流数据就是无符号数,如果没有明确指定,那么作为有符号数处理,另外HID1.1协议不允许传输浮点数据.硬件开发者应该时刻清除自己写的HIDcript脚本所描述的数据流将来应该由PC上的HID驱动程序怎么使用,另外对于硬件开发者来说,对于不允许PC驱动修改的bit 位数据,HID1.1协议制定者强烈建议采用NULL数值,最好不要随便填其他值.----------------------------------------------Mainitem--主项当前一共5个:1)Input2)Output3)Feature4)Collection5)EndCollection----------------------------------------------Globalitem--全局项当前一共13个:1)UagePage2)LogicalMinimum---var变量或array数组的逻辑最小值3)LogicalMa某imum4)PhyicalMinimum5)PhyicalMa某imum6)UnitE某ponent---单位的指数值,是10的指数7)Unit---单位索引号:可以是时间单位、电流单位、电压单位和距离单位等等.8)ReportSize9)ReportID---数据流的ID值设置10)ReportCount11)Puh12)Pop13)Reeved---保留----------------------------------------------localitem--局部项当前一共11个:1)Uage---定义UagePage下面某个功能item的起始索引值,比如Keyboard功能,LED功能等,这也告诉pc的HID解释器,Input或Output变量或数组的相应生成数据位用来描述Uage引用到的那个功能,如:用来描述Keyboard功能或LED功能等.2)UageMinimum---定义与array或bitmap关联的uage定义的某个功能下的起始值Uage作为UagePage的一个子功能索引号,同时Uage自己也有很多子功能,或者说有很多个子值,这里就是定义这些子值的范围值,之后和用Input或Output生成bit位数据流,进行相应关联.(可以用多维数组来说明,可能会更明确一点)前一个基础上Uage(6),当然在HIDDecriptorTool里边6有它的字符串名,即:Uage(Keyboard),然后80就是Keyboard里边的一个索引取值,查找之后是:KeyBoardLeftArrow,所以Uage_Minimum(80)就等于Uage_Minimum(KeyBoardLeftArrow)Uage的顺序先后和ReportCount定义的bit位组的先后顺序依次一一对应,UageMinimum和UageMa某imum之间的Uage的索引值也将依次与ReportCount定义的bit位组的先后顺序依次一一对应上。

hid协议报告描述总结

hid协议报告描述总结

HID报告描述符主要内容整理●刚刚接触USB(HID)时对【报告描述符】感到难于理解, 因此就更无从下手。

下面根据2个主要的协议文本整理出一些常用信息, 不完整, 备忘。

⏹主要参考文本:⏹【协议文本1】: 《Device Class Definition for Human Interface Devices (HID)》Ver1.11【协议文本2】: 《Universal Serial Bus HID Usage Tables》Ver1.12每个协议文本后面的附录都有很多例子可供参考借鉴。

0、主要术语与概念(1)报告(Report): HID设备与主机交换信息的单位(报告字节数似乎没有限制);(2)报告描述符(Report Description): 用许多【项目】说明报告的格式与【用途】;(3)用途(Usage): 用于指出报告中某个数据域的意义或目的, 32bit。

高16bit用途页(Usage Page)指出用途的大类, 低16bit用途ID(Usage ID)指出用途大类下的子用途;(4)项目(Item):报告描述符用于说明数据域的某种属性的数据, 有短项目和长项目之分, 短项目1~5B, 长项目3~255B;(5)共有3种类型的项目: 主项目、全局项目(Global)、局部项目(Local);(6)主项目(Main Item)共有5个, 其中的Input、Output和Feature会产生实际的数据域并附带说明其操作特性(见2.1);其余2个Collection和End Collection是一对括号, 其间的内容构成一个【集合】, 用于限定集合中信息的整体特性;(7)全局项目(Global Item): 说明其后主项目产生的数据域的某方面特性, 一旦说明一直有效, 除非遇到一个新的全局项目说明改变其值;(8)局部项目(Local Item): 说明其后主项目产生的数据域的某方面特性, 但只对其后的一个主项目有效;(9)可以认为所有用【全局项目】说明的各种数据域特性构成一个【全局状态表】, 随着新的【全局项目】出现, 该表在不断变化。

在USB中USBHOST是通过各种描述符来识别设备的

在USB中USBHOST是通过各种描述符来识别设备的

在USB中USBHOST是通过各种描述符来识别设备的USB HID报告及报告描述符简介在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接⼝描述符,端点描述符,字符串描述符,报告描述符等等。

USB报告描述符(Report Descriptor)是HID设备中的⼀个描述符,它是⽐较复杂的⼀个描述符。

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

输⼊报告是USB设备发送给主机的,例如USB⿏标将⿏标移动和⿏标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB 设备的,例如键盘上的数字键盘锁定灯和⼤写字母锁定灯等。

报告是⼀个数据包,⾥⾯包含的是所要传送的数据。

输⼊报告是通过中断输⼊端点输⼊的,⽽输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。

⽽报告描述符,是描述⼀个报告以及报告⾥⾯的数据是⽤来⼲什么⽤的。

通过它,USB HOST可以分析出报告⾥⾯的数据所表⽰的意思。

它通过控制输⼊端点0返回,主机使⽤获取报告描述符命令来获取报告描述符,注意这个请求是发送到接⼝的,⽽不是到设备。

⼀个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前⾯,即第⼀个字节。

当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。

更详细的说明请参看USB HID协议,该协议可从下载。

USB报告描述符可以通过使⽤HID Descriptor tool来⽣成,这个⼯具可以到下载,为了⽅便⼤家,我顺便上传了⼀份。

下⾯通过由HID Descriptor tool⽣成的USB⿏标和USB键盘来说明⼀下报告描述符和报告。

code char KeyBoardReportDescriptor[63] = {//表⽰⽤途页为通⽤桌⾯设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//表⽰⽤途为键盘0x09, 0x06, // USAGE (Keyboard)//表⽰应⽤集合,必须要以END_COLLECTION来结束它,见最后的//END_COLLECTION0xa1, 0x01, // COLLECTION (Application)//表⽰⽤途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//⽤途最⼩值,这⾥为左ctrl键0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)//⽤途最⼤值,这⾥为右GUI键,即window键0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)//逻辑最⼩值为00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最⼤值为10x25, 0x01, // LOGICAL_MAXIMUM (1)//报告⼤⼩(即这个字段的宽度)为1bit,所以前⾯的逻辑最⼩值为0,逻辑最⼤值为10x75, 0x01, // REPORT_SIZE (1)//报告的个数为8,即总共有8个bits0x95, 0x08, // REPORT_COUNT (8)//输⼊⽤,变量,值,绝对值。

USB HID学习手册

USB HID学习手册

USB HID 学习笔记一、P C程序部分:USB开发者论坛发布了一系列USB设备的类型定义,并配以相应的使用说明。

下面表格显示出USB的设备类型(DEVEICE CLASS):HID类型概述第一个被windows支持的usb外围设备类是人机接口设备。

hid是human interface device人机接口设备的英文缩写。

是指直接和人进行互动的设备。

如鼠标、键盘等。

运行在WINDOWS98或其他更高的版本的操作系统的PC机,系统除了提供通用的USB设备的底层驱动以外,还单独提供了一些HID设备的完整驱动,应用程序可以很容易的与操作系统内部的hid通讯。

这样使得符合hid类的USB设备很容易开发与运行。

也就是说,我们如果想实现一个USB的HID类设备,是不需要在Windows下开发自己的驱动程序。

HID不一定要是标准的外设类型,唯一的要求是交换的数据存储在报文的结构内,设备固件必须支持报文的格式。

任何工作在该限制之内的设备都可以成为一个hid,例如温度计,电压计,读卡机等。

hid类设备只能使用控制传输与中断传输两种方式。

HID的交换的数据格式称为报文。

报文形式灵活,能处理任何类型的数据。

HID特有的请求,Set_Report和Get_Report为主机和设备之间的任何类型数据块传输提供了一种方法。

主机发出Get_Report请求,设备响应向主机传送数据块;主机发出Set_Report请求,设备响应准备接收主机发出的数据块。

对于一个全速设备,中断传输方式下每笔事务能够传送的最大数据量是64字节,全速设备每毫秒不能有超过一笔事务,所以每秒最多传送64000字节。

高速设备,每笔事务能够传送的最大数据量是1024字节。

对于不能一次传输完毕的数据,接收和发送报文可以采用多笔事务。

下表列举出了与HID类设备通信过程中使用到的大量函数,这些函数的用法在DDK的帮助文档中均有详细地解释。

这些函数包含在Hid.dll、Setupapi.dll、Kernel32.dll三个动态链接库中,分别起到与HID设备通讯,寻找与识别设备,交换数据的作用。

USBHID设备报告描述符详解

USBHID设备报告描述符详解

USBHID设备报告描述符详解
USBHID设备报告描述符是一种描述USBHID设备报告的结构,用于定义设备报告的输入输出特性,允许设备与控制器的主机通信。

通常,报告描述符是一段二进制数据,其中包含由设备提供的输入和输出报告,以及描述报告的数据结构要求信息。

它是一种混合结构,由多个子块组成,每个子块又由一个或多个报告描述符中的域组成。

报告描述符的结构如下:
报告描述符
-
-bLengt
-bDescriptorTyp
-wDescriptorLengt
-数据
-输入报
-输出/特殊报
-特殊报
头部:报告描述符的头部包括三个字段:报告描述符的字节长度(bLength),报告描述符类型(bDescriptorType)和报告描述符的总长度(wDescriptorLength)。

bLength:报告描述符的字节长度,是报告描述符数据的字节数。

bDescriptorType:报告描述符类型,用于指示报告描述符的类型,必须为0x22
wDescriptorLength:报告描述符的总长度,用于指示报告描述符的总字节数。

数据段:数据段包括输入报告、输出/特殊报告和特殊报告。

输入报告:输入报告用于获取主机发送到设备的数据,一般由设备按定义的格式读取。

输出报告:输出报告用于将设备发送到主机的数据。

HID设备报告描述符详解_划出重点

HID设备报告描述符详解_划出重点

USB/HID设备报告描述符详解概述:报告在这里意思是数据传输(data transfer),而报告描述符是对这些传输的数据作用途(usage)上的说明。

USB通讯协议的规范是以1ms产生一个USB帧(frame),USB设备可以每一个帧中发送和接收一个交换(transaction)。

交换是由几个封包(packet)组成,而传输是由一个或几个交换来完成传送一口中有效的数据。

在这里,传输和报告的意思相类似。

传输方式有四种,初始学一般只要了解控制型传输(control trans fer)和中断型传输(interrupt transfer)即可。

控制型传输是当需要时才执行传输要求,是最一般的传输方式,组态、命令和状态的通讯都可以使用控制型传输;控制型传输主要用于消息型数据(message-type data)。

中断型传输目的在做重复的数据更新(recurring data)传输,精确一点而言,即是在每个有限有周期内(b ounded period)作至少一次的小量数据发送或接收;所以适用于流动型数据(str eam-type data),注意这里所谓的周期时间就是在端点描述符中的轮询间隔时间。

报告有三种:input,output,和Feature.后面将作进一步介绍。

中断型输入管线(inter rupt in pipe)仅可以传送input报告;中断型输出管线(interrupt out pipe)仅可以传送output报告;但是控制型管线(control pipe)可以传送input,output和feature报告。

端点描述符有声明所使用的端点为何种管线。

数据本身没有任何意义,要赋于用途才能明确其为控制什么(control);例如设备上的按钮指示灯和X与Y轴的位移等都通称控制,数据则为按钮和指示灯的开关状态或X与Y轴的位移量。

为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。

USB HID Introduction

USB HID  Introduction

▸ USB及HID简介 ▸ USB及HID描述符 ▸ USB标准请求 ▸ HID特定请求 ▸ 报告描述符项目
▸ 报告描述符解析
▸ 报告描述符创建
USB及HID描述符
描述符(descriptor)是一个数据结构,是一个格式化 的信息。透过描述符,主机可以了解设备的功能、属性以及 类别。 描述符固化在设备内部,主机可以通过Get_Descriptor 请求获取描述符。 在设备检测(Enumeration,或称列举)期间,主机使用 标准请求获得设备的描述符。在此过程中,请求的描述符首 先是设备描述符,然后是每个配置描述符,每个配置下的接 口描述符,最后是每个接口的端点描述符。如果是HID类设备, 还会请求HID类描述符和报告描述符。
支持的子类描述符的数目
6
7 9 10
Hale Waihona Puke bDescriptorType
wDescriptorLength
1
2 1 2
常量
数字 常量 数字
子类描述符的类型码
子类描述符的大小 子类描述符的类型码(可选) 子类描述符的大小(可选)
[bDescriptorType]
[wDescriptorLength]
USB及HID描述符
USB及HID描述符
设备描述符
偏移量 域 大小 值 描述
0
1 2 4 5 6 7 8 10
bLength
bDecriptorType bcdUSB bDeviceClass bDeviceSubClass bDeviceProtocol bMaxPacketSize0 idVendor idProduct
USB及HID描述符
端点描述符(Endpoint Descriptor)

关于USBHID协议以及鼠标键盘描述符的解释【转】

关于USBHID协议以及鼠标键盘描述符的解释【转】

关于USBHID协议以及⿏标键盘描述符的解释【转】转⾃:⼀.HID设备识别前⾯有提到关于SCSI协议的USB设备实现。

现在来谈谈USBHID设备。

HID全称Human Interface Device。

HID协议⾥增加了HID描述符和报告描述符,以及特定的关于HID的类请求。

HID设备的通信是通过报表来进⾏的。

据说,报告描述符是USB设备中最难的描述符了。

关于HID描述符可以参考HID协议。

接下来我们谈谈报告描述符。

⼆.报告描述符每⼀个HID设备都有⾃⼰的报告描述符。

报告描述符有三种类项⽬:Main类项⽬,Global类项⽬,Local类项⽬。

具体看下表Global作⽤域是遇到下⼀个同名Global,Local作⽤域是遇到下⼀个Main(Input,Output,Feature)。

Usage Min-Max表⽰有⼏种功能,Logical Min-Max表⽰有⼏种状态。

每个报告描述符都有报告ID,报告ID是⽤来区别复合设备的。

在报告描述符⾥没有写报告ID,默认报告ID是0。

USB的控制端点可以进⾏Input,Output,Feature项⽬的传输,中断端点可以进⾏Input,Output传输。

三.⿏标和键盘的报告描述符(1)键盘的报告描述符1. 0x05,0x01,// Global Generic Desktop2. 0x09,0x06,// Local KeyBoard3. 0xA1,0x01,// Main app collection4. 0x05,0x07,// Global KeyBoard5. //////////////////////////////////第1字节6. 0x19,0xe0,// Local Usage Min (KeyBoard LeftControl)7. 0x29,0xe7,// Local Usage Max (KeyBoard Right GUI)8. 0x15,0x00,// Global Logical Min9. 0x25,0x01,// Global Logical Max10. 0x95,0x08,// Global ReportCount11. 0x75,0x01,// Global ReportSize12. 0x81,0x02,// Main Input(Data,Var,Abs)13. //////////////////////////////////第2字节14. 0x95,0x01,// Global ReportCount15. 0x75,0x08,// Global ReportSize16. 0x81,0x03,// Main Input(Cnst,Var,Abs)17. //////////////////////////////////第3-8字节18. 0x95,0x06,// Global ReportCount19. 0x75,0x08,// Global ReportSize20. 0x15,0x00,// Global Logical Min21. 0x26,0xff,0x00,//Global Logical Max22. 0x19,0x00,// Local Usage Min23. 0x29,0x65,// Local Usage Max24. 0x81,0x00,// Main Output(Data,Ary,Abs)25. ////////////////////////////////1字节输出报告26. 0x15,0x00,// Global Logical Min27. 0x25,0x01,// Global Logical Max28. 0x95,0x05,// Global ReportCount29. 0x75,0x01,// Global ReportSize30. 0x05,0x08,// Global LED31. 0x19,0x01,// Local Usage Min32. 0x29,0x05,// Local Usage Max33. 0x91,0x02,// Main Output(Data,Var,Abs)34. ////////////////////////////////补⾜上⾯变成1个字节35. 0x95,0x01,// Global ReportCount36. 0x75,0x03,// Global ReportSize37. 0x91,0x03,// Main Output(Cnst,Var,Abs)38. 0xc0 // Main End collection键盘的描述符共有8字节的输⼊报告和1字节的输出报告。

USB接口HID设备详细介绍

USB接口HID设备详细介绍

第8章USB接口HID设备HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。

在USB设备中,HID设备的成本较低。

另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID 设备。

Wndows操作系统最先支持的HID设备。

在windows 98以及后来的版本中内置有 HID 设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。

在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows 操作系统对标准的HID类型USB设备的支持。

8.1 HID设备简介8.1.1 HID设备的特点•交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。

主机通过控制和中断传输中的传送和请求报表来传送和接收数据。

报表的格式非常灵活。

•每一笔事务可以携带小量或中量的数据。

低速设备每一笔事务最大是8B,全速设备每一笔事务最大是64B,高速设备每一笔事务最大是1024B。

一个报表可以使用多笔事务。

•设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。

所以主机会定时轮询设备,以取得最新的数据。

•HID设备的最大传输速度有限制。

主机可以保证低速的中断端点每10ms内最多1笔事务,每一秒最多是800B。

保证全速端点每lms一笔事务,每一秒最多是64000B。

保证高速端点每125 us三笔事务,每一秒最多是24.576MB。

•HID设备没有保证的传输速率。

如果设备是设置在10ms的时距,事务之间的时间可能等于或小于10ms。

除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。

这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。

USBHID报告描述符详解

USBHID报告描述符详解

USBHID报告描述符详解
1、HID报告描述符介绍
USB人机界面设备,简称HID,是计算机系统中最常见的一种通信接口,它使用设备描述符(Device Descriptors)来描述设备特性,同时使用报告描述符(Report Descriptors)来描述设备支持的数据报文格式,操作系统或软件驱动可以根据报告描述符中设置的信息来识别HID设备所具有的功能,从而支持和控制HID设备。

HID报告描述符描述了与设备相关的数据信息,它是HID设备进行自然交互的基础。

2、HID报告描述符的作用
输入报告(Input Reports)可以被认为是从HID设备发送到操作系统的数据,它可以描述HID设备特性的状态,可以用来报告控制命令、操作状态、三轴分量数据等信息;输出报告(Output Reports)则相反,它表示从操作系统发送给HID设备的数据。

USBHID设备报告描述符详解

USBHID设备报告描述符详解

USB/HID设备报告描述符详解概述:报告在这里意思是数据传输(data transfer),而报告描述符是对这些传输的数据作用途(usage)上的说明。

USB通讯协议的规范是以1ms产生一个USB帧(frame),USB设备可以每一个帧中发送和接收一个交换(transaction)。

交换是由几个封包(packet)组成,而传输是由一个或几个交换来完成传送一口中有效的数据。

在这里,传输和报告的意思相类似。

传输方式有四种,初始学一般只要了解控制型传输(control transfer)和中断型传输(interrupt transfer)即可。

控制型传输是当需要时才执行传输要求,是最一般的传输方式,组态、命令和状态的通讯都可以使用控制型传输;控制型传输主要用于消息型数据(message-type data)。

中断型传输目的在做重复的数据更新(recurring data)传输,精确一点而言,即是在每个有限周期内(bounded period)作至少一次的小量数据发送或接收;所以适用于流动型数据(stream-type data),注意这里所谓的周期时间就是在端点描述符中的轮询间隔时间。

报告有三种:input、output和Feature。

后面将作进一步介绍。

中断型输入管线(interrupt in pipe)仅可以传送input报告;中断型输出管线(interrupt out pipe)仅可以传送output报告;但是控制型管线(control pipe)可以传送input、output和feature报告。

端点描述符有声明所使用的端点为何种管线。

数据本身没有任何意义,要赋于用途才能明确其为控制什么(control);例如设备上的按钮指示灯和X与Y轴的位移等都通称控制,数据则为按钮和指示灯的开关状态或X与Y轴的位移量。

为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。

usbHid

usbHid

一、应用场合USB HID类是比较大的一个类,HID类设备属于人机交互操作的设备。

用于控制计算机操作的一些方面,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。

另外,使用HID设备的一个好处就是,操作系统自带了HID类的驱动程序,而用户无需去开发很麻烦的驱动程序,只要直接使用API调用即可完成通信。

所以很多简单的USB设备,喜欢枚举成HID设备,这样就可以不用安装驱动而直接使用。

二、USB HID类可采用的通信管道所有的HID设备通过USB的控制管道(默认管道,即端点0)和中断管道与主机通信。

控制管道主要用于以下3个方面:接收/响应USB主机的控制请示及相关的类数据在USB主机查询时传输数据(如响应Get_Report请求等)接收USB主机的数据中断管道主要用于以下两个方面:USB主机接收USB设备的异步传输数据USB主机发送有实时性要求的数据给USB设备从USB主机到USB设备的中断输出数据传输是可选的,当不支持中断输出数据传输时,USB主机通过控制管道将数据传输给USB设备。

三、与USB HID设备有关的描述符HID设备的描述符除了5个USB的标准描述符(设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符,另一篇文章:USB开发基础--USB命令(请求)和USB描述符)外,还包括3个HID设备类特定描述符:HID描述符、报告描述符、实体描述符。

除了HID的三个特定描述符组成对HID设备的解释外,5个标准描述符中与HID设备有关的部分有:设备描述符中bDeviceClass、bDeviceSubClass和bDeviceProtocol三个字段的值必须为零。

接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIOS 启动时能识别并使用您的HID设备,且只有标准鼠标或键盘类设备才能成为Boot Device。

HID报告描述详解

HID报告描述详解

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

USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符。

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

输入报告是USB 设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。

报告是一个数据包,里面包含的是所要传送的数据。

输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。

而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。

通过它,USB HOST可以分析出报告里面的数据所表示的意思。

它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求发送到接口的,而不是到设备。

一个报告描述符可以描述多个报告,不同的报告通过报告ID 来识别,报告ID在报告最前面,即第一个字节。

当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。

更详细的说明请参看USB HID协议,该协议可从下载。

下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。

code char KeyBoardReportDescriptor[63] = {//表示用途页为通用桌面设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//表示用途为键盘0x09, 0x06, // USAGE (Keyboard)//表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1, 0x01, // COLLECTION (Application)//表示用途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//用途最小值,这里为左ctrl键0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)//用途最大值,这里为右GUI键,即window键0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)//逻辑最小值为00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最大值为10x25, 0x01, // LOGICAL_MAXIMUM (1)//报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为10x75, 0x01, // REPORT_SIZE (1)//报告的个数为8,即总共有8个bits0x95, 0x08, // REPORT_COUNT (8)//输入用,变量,值,绝对值。

USB固件开发(HID设备)

USB固件开发(HID设备)

USB固件开发(HID设备)收藏USB固件开发(HID设备)1. HID设备的识别HID设备类除了有文档第一部分所述的一些标准描述符(包括设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符)外,还有自己的类专有描述符:HID描述符报告描述符物理描述符正确实现HID设备类专用描述符是主机成功识别HID设备的关键。

HID描述符和报告描述符是必须要使用的,物理描述符一般不被使用。

1.1 HID描述符HID描述符跟接口描述符、端点描述符类似,也是随配置信息一起返回给主机的,主机并不会单独发出请求来读取它。

HID描述符在配置信息中的位置是紧接接口描述符。

例如:_Config_Descriptor:.dw _Config_Descriptor_End-_Config_Descriptor //bLength: 0x09 byte.dw 0x02 //bDescriptorType: CONFIGURATION.dw _Config_Descriptor_Total-_Config_Descriptor //wTotalLength:.dw 0x00.dw 0x01 //bNumInterfaces: 1 interfaces.dw 0x01 //bConfigurationValue: configuration 1.dw 0x00 //iConfiguration: index of string.dw 0xC0 //bmAttributes: self powered, Not Support Remote-Wakeup.dw 0x32 //MaxPower: 100 mA_Config_Descriptor_End:_HID_Interface_Descriptor://Interface 1 (0x09 byte).dw 0x09 //bLength: 0x09 byte.dw 0x04 //bDescriptorType: INTERFACE.dw 0x01 //bInterfaceNumber: interface 0.dw 0x00 //bAlternateSetting: alternate setting 0.dw 0x01 //bNumEndpoints: 1 endpoints(EP1).dw 0x03 //bInterfaceClass: 人机接口设备(HID)类.dw 0xff //bInterfaceSubClass: 供应商定义.dw 0xff //bInterfaceProtocol 使用的协议:供应商定义.dw 0x00 //iInterface: index of string_HID_Interface_Descriptor_End:HID_Descriptor:.dw 0x09 //bLength: 0x09 byte.dw 0x21 //bDescriptorType: HID描述符类型编号.dw 0x01, 0x10 //HID类协议版本号,为1.1.dw 0x21 //固件的国家地区代号,0x21为美国.dw 0x01 //下级描述符的数量.dw 0x22 //下级描述符为报告描述符.dw _ReportDescriptor_End-_ReportDescriptor, 0x00 //下级描述符的长度_HID_Descriptor_End:_Endpoint3:.dw 0x07 //bLength: 0x07 byte.dw 0x05 //bDescriptorType: ENDPOINT.dw 0x83 //bEndpointAddress: IN endpoint 3.dw 0x03 //bmAttributes: Interrupt.dw 0x02, 0x00 //wMaxPacketSize: 2 byte.dw 0x0A //bInterval: polling interval is 10 ms_Config_Descriptor_Total:HID描述符其实是为了提供下级描述符(如报告描述符)的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

USB HID报告及报告描述符简介USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。

输入报告是USB 设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。

报告是一个数据包,里面包含的是所要传送的数据。

输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。

而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。

通过它,USB HOST可以分析出报告里面的数据所表示的意思。

它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到接口的,而不是到设备。

一个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。

当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。

更详细的说明请参看USB HID协议。

USB报告描述符可以通过使用HID Descriptor tool 来生成,这个工具可以网上下载。

下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告描述符和报告。

code char KeyBoardReportDescriptor[63] = {//表示用途页为通用桌面设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//表示用途为键盘0x09, 0x06, // USAGE (Keyboard)//表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION 0xa1, 0x01, // COLLECTION (Application)//表示用途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//用途最小值,这里为左ctrl键0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)//用途最大值,这里为右GUI键,即window键0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)//逻辑最小值为00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最大值为10x25, 0x01, // LOGICAL_MAXIMUM (1)//报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1 0x75, 0x01, // REPORT_SIZE (1)//报告的个数为8,即总共有8个bits0x95, 0x08, // REPORT_COUNT (8)//输入用,变量,值,绝对值。

像键盘这类一般报告绝对值,//而鼠标移动这样的则报告相对值,表示鼠标移动多少0x81, 0x02, // INPUT (Data,Var,Abs)//上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键//分别从左ctrl键到右GUI键。

这8个bits刚好构成一个字节,它位于报告的第一个字节。

//它的最低位,即bit-0对应着左ctrl键,如果返回的数据该位为1,则表示左ctrl键被按下,//否则,左ctrl键没有按下。

最高位,即bit-7表示右GUI键的按下情况。

中间的几个位,//需要根据HID协议中规定的用途页表(HID Usage Tables)来确定。

这里通常用来表示//特殊键,例如ctrl,shift,del键等//这样的数据段个数为10x95, 0x01, // REPORT_COUNT (1)//每个段长度为8bits0x75, 0x08, // REPORT_SIZE (8)//输入用,常量,值,绝对值0x81, 0x03, // INPUT (Cnst,Var,Abs)//上面这8个bit是常量,设备必须返回0//这样的数据段个数为50x95, 0x05, // REPORT_COUNT (5)//每个段大小为1bit0x75, 0x01, // REPORT_SIZE (1)//用途是LED,即用来控制键盘上的LED用的,因此下面会说明它是输出用0x05, 0x08, // USAGE_PAGE (LEDs)//用途最小值是Num Lock,即数字键锁定灯0x19, 0x01, // USAGE_MINIMUM (Num Lock)//用途最大值是Kana,这个是什么灯我也不清楚^_^0x29, 0x05, // USAGE_MAXIMUM (Kana)//如前面所说,这个字段是输出用的,用来控制LED。

变量,值,绝对值。

//1表示灯亮,0表示灯灭0x91, 0x02, // OUTPUT (Data,Var,Abs)//这样的数据段个数为10x95, 0x01, // REPORT_COUNT (1)//每个段大小为3bits0x75, 0x03, // REPORT_SIZE (3)//输出用,常量,值,绝对0x91, 0x03, // OUTPUT (Cnst,Var,Abs)//由于要按字节对齐,而前面控制LED的只用了5个bit,//所以后面需要附加3个不用bit,设置为常量。

//报告个数为60x95, 0x06, // REPORT_COUNT (6)//每个段大小为8bits0x75, 0x08, // REPORT_SIZE (8)//逻辑最小值00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最大值2550x25, 0xFF, // LOGICAL_MAXIMUM (255)//用途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//使用最小值为00x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))//使用最大值为0x650x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)//输入用,变量,数组,绝对值0x81, 0x00, // INPUT (Data,Ary,Abs)//以上定义了6个8bit宽的数组,每个8bit(即一个字节)用来表示一个按键,所以可以同时//有6个按键按下。

没有按键按下时,全部返回0。

如果按下的键太多,导致键盘扫描系统//无法区分按键时,则全部返回0x01,即6个0x01。

如果有一个键按下,则这6个字节中的第一//个字节为相应的键值(具体的值参看HID Usage Tables),如果两个键按下,则第1、2两个//字节分别为相应的键值,以次类推。

//关集合,跟上面的对应0xc0 // END_COLLECTION};通过上面的分析,我们知道这个报告中只有一个报告,所以没有报告ID,因此返回的都是实际使用的数据。

总共有8字节输入,1字节输出。

其中输入的第一字节用来表示特殊按键,第二字节保留,后面的六字节为普通按键。

如果只有左ctrl键按下,则返回01 00 00 00 00 00 00 00(十六进制),如果只有数字键1 按下,则返回00 00 59 00 00 00 00 00,如果数字键1 和2 同时按下,则返回00 00 59 5A 00 00 00 00,如果再按下左shift 键,则返回02 00 59 5A 00 00 00 00,然后再释放1 键,则返回02 00 5A 00 00 00 00 00,然后全部按键释放,则返回00 00 00 00 00 00 00 00。

这些数据(即报告)都是通过中断端点返回的。

当按下Num Lock键时,PC会发送输出报告,从报告描述符中我们知道,Num Lock的LED对应着输出报告的最低位,当数字小键盘打开时,输出xxxxxxx1(二进制,打x的由其它的LED状态决定);当数字小键盘关闭时,输出xxxxxxx0(同前)。

取出最低位就可以控制数字键锁定LED了。

下面这个报告描述符是USB鼠标报告描述符,比起键盘的来说要简单些。

它描述了4个字节,第一个字节表示按键,第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移),第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移动,负值表示往上移动),第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动)。

code char MouseReportDescriptor[52] = {//通用桌面设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//鼠标0x09, 0x02, // USAGE (Mouse)//集合0xa1, 0x01, // COLLECTION (Application)//指针设备0x09, 0x01, // USAGE (Pointer)//集合0xa1, 0x00, // COLLECTION (Physical)//按键0x05, 0x09, // USAGE_PAGE (Button)//使用最小值10x19, 0x01, // USAGE_MINIMUM (Button 1)//使用最大值3。

1表示左键,2表示右键,3表示中键0x29, 0x03, // USAGE_MAXIMUM (Button 3)//逻辑最小值00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最大值10x25, 0x01, // LOGICAL_MAXIMUM (1)//数量为30x95, 0x03, // REPORT_COUNT (3)//大小为1bit0x75, 0x01, // REPORT_SIZE (1)//输入,变量,数值,绝对值//以上3个bit分别表示鼠标的三个按键情况,最低位(bit-0)为左键//bit-1为右键,bit-2为中键,按下时对应的位值为1,释放时对应的值为0 0x81, 0x02, // INPUT (Data,Var,Abs)//填充5个bit,补足一个字节0x95, 0x01, // REPORT_COUNT (1)0x75, 0x05, // REPORT_SIZE (5)0x81, 0x03, // INPUT (Cnst,V ar,Abs)//用途页为通用桌面0x05, 0x01, // USAGE_PAGE (Generic Desktop)//用途为X0x09, 0x30, // USAGE (X)//用途为Y0x09, 0x31, // USAGE (Y)//用途为滚轮0x09, 0x38, // USAGE (Wheel)//逻辑最小值为-1270x15, 0x81, // LOGICAL_MINIMUM (-127)//逻辑最大值为+1270x25, 0x7f, // LOGICAL_MAXIMUM (127)//大小为8个bits0x75, 0x08, // REPORT_SIZE (8)//数量为3个,即分别代表x,y,滚轮0x95, 0x03, // REPORT_COUNT (3)//输入,变量,值,相对值0x81, 0x06, // INPUT (Data,Var,Rel)//关集合0xc0, // END_COLLECTION0xc0 // END_COLLECTION};通过对上面的报告分析,我们知道报告返回4个字节,没有报告ID。

相关文档
最新文档