键盘鼠标报告描述符解释

合集下载

键盘鼠标报告描述符解释

键盘鼠标报告描述符解释

键盘鼠标报告描述符解释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)//输入用,变量,值,绝对值。

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

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

hid协议

hid协议

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

它定义了计算机如何与键盘、鼠标、游戏手柄等输入设备进行通信,以及如何接收和处理来自这些设备的输入信息。

HID协议被广泛应用于各种操作系统和硬件平台中,为用户提供了良好的输入设备兼容性和可靠性。

HID协议的基本原理HID协议使用了一种称为报告(Report)的数据结构进行通信。

报告是一种特定格式的数据包,用于携带输入设备发送的信息。

在HID协议中,输入设备被称为HID设备,输出设备被称为HID主机。

HID主机通过发送请求来从HID设备获取报告,而HID设备则通过发送报告来向HID主机发送输入信息。

HID协议中定义了两种类型的报告:输入报告和输出报告。

输入报告用于向HID主机发送输入数据,比如按键信息、鼠标移动等。

而输出报告用于向HID设备发送控制命令,比如控制LED灯的亮度、设置鼠标灵敏度等。

HID协议的具体实现HID协议的具体实现方式因不同的操作系统和硬件平台而异。

以下以Windows 操作系统为例,介绍HID协议的具体实现过程。

在Windows操作系统中,HID协议的实现主要涉及到以下几个方面:1.设备识别:当插入一个HID设备时,Windows会自动识别设备并加载相应的驱动程序。

驱动程序是用来将HID设备的输入信息转换为操作系统能够理解的格式。

2.报告描述:HID设备需要提供一个报告描述符,用于描述设备支持的报告类型和报告格式。

报告描述符通常以二进制格式存储在设备的固件中,并在设备插入时由操作系统读取。

3.报告传输:HID设备和HID主机之间的报告传输通常使用USB接口进行。

HID设备通过USB接口将报告发送给HID主机,而HID主机则通过USB接口向HID设备发送请求并接收报告。

4.数据处理:HID主机接收到报告后,需要对报告进行解析和处理,以获取其中的输入数据。

操作系统提供了HID API供开发者使用,开发者可以使用这些API来访问和处理HID设备的输入信息。

电脑键盘和鼠标功能简介

电脑键盘和鼠标功能简介

电脑键盘功能简介一、光标移动键在文字编辑过程中,我们经常要和光标(也叫插入点)打交道。

输入汉字,删除汉字,都要将光标移到要插入汉字或删除汉字的地方。

下面介绍光标移动键:按“↑”键:光标向上移按“↓”键:光标向下移按“→”键:光标向右移按“←”键:光标向左移按“Home”:将光标移到行首按“End”:将光标移到行尾按“PageUp”: 每按一次光标向上移一屏幕按“PageDown”:每按一次,光标向下移一屏幕按“Ctrl+Home”:将光标移到文件的最前面按“Ctrl+End”:将光标移到文件的最后面二、删除键按“←”键(有的键盘上是“BackSpace”):删除光标前面的字符按“Delete键(或数字键盘区的“Del”): 删除光标后面的字符三、插入/改写切换在输入文本过程中,有两种编辑状态,即:插入状态和改写状态。

当编辑处于插入状态时,会在光标的前面插入新输入的字符。

若处于改写状态时,会将光标后面的字符改为新输入的字符。

如果要将某个字改错,可以切换到改写状态,再将光标移到要改掉的错字前面,再输入新的字符。

注意:如果要插入一些字符。

就不要切换到改写状态了,否则会把光标后面的文本全改掉了。

插入状态改写状态插入状态:状态栏的“改写”二字变灰。

改写状态:状态栏上的“改写”二字变黑。

切换的方法:方法1:按键盘上的“Insert”键或数字键盘区的“Ins”键(非数字状态)方法2:双击状态栏上的“改写”二字四、空格键空格键是位于键盘底部的最长的那个键。

它的作用取决于当前的编辑状态是“插入状态”还是“改写状态”插入状态:按该键,将在光标前面插入空格字符,可用于调整两字符间的距离。

改写状态:按该键,将把光标后面的字符改为空格字符。

例如:“我们”,这两个字的中间就插入了2个空格字符注意:用空格调整字符间距时,千万不要切换到“改写”状态了,否则会把光标后面的文字都会改成空格的。

五、回车键:Enter作用:①在输入文本的过程中,敲此键,可将光标后面的字符下移一行,即新起一个段落。

鼠标设计报告说明

鼠标设计报告说明

产品设计报告根据市场需求以及用户需求和比赛要求,此次我组设计了如图所示的鼠标1,整体说明首先,由于鼠标已经完全趋于稳定成熟的阶段,所以在技术方面已经没有大的突破,而此时,设计就是为了能让鼠标符合人机工程,能给人一种别样的感受。

随着电脑的普及,鼠标已经成了日常用品,一个好的鼠标能给人带来舒适的感觉,能让人产生一定的好感。

整体上采用白色的上外壳和象征着皇室贵族气质的金黄色下表面来定义整个鼠标的主色调,显得淡雅,大气。

此次设计的主题为中国风,所以在其中加上中国元素是必不可少的。

2,各部分介绍(1)上表面上表面采用了ABS工程塑料,整个壳体曲线流畅,设计遵循人体工程学,在很大程度上避免了鼠标手的出现,长期使用鼠标对手造成的伤害是很大的,所以此次设计的鼠标这一方面是一重点。

中间有一个中国结的指示灯,该指示灯在不工作时和机身一样完全是白色的,但是一旦电脑运行起来,指示灯就会显示红色,并且只要使用就会一直亮着,如果离开电脑时间过长,指示灯就会一闪一闪的,这样提示他人电脑还在运作,没事的话可以及时关上电脑。

鼠标上表面的两个按键采用了中国式的橱窗,两个按键就像两个窗口一样,边框略微凸起一到两毫米。

这样便于控制鼠标。

(2)底部底部同样采用轻便的ABS工程塑料。

表面采用磨砂处理,在使用的时候不至于出现打滑的情况,。

而侧面两边则是祥云的图样,祥云部分稍微突出鼠标身体一到两毫米,这样也可以增大摩擦,避免给使用者带来不便。

(3)按键此次设计的鼠标主要功能就是按键,该鼠标一共有6个按键,上面四个,左边2个。

首先,鼠标的左右两键是按照正常的鼠标按键来设计的,只是曲面的设计更加贴近手势,更加符合人机工程。

而上表面的另外两个按键,一个是开关,一个用来检测的按键,两个按键都比较硬,按的时候会比其他的按键费力一些,开关按键当然是来开关鼠标的,鼠标虽小但是仍是耗电的东西,在不常使用的时候或者电脑待机的时候完全可以关掉鼠标等下次使用的时候再次打开。

USBHID键盘报告描述符

USBHID键盘报告描述符

USBHID键盘报告描述符USB HID键盘报告描述符最近弄USB驱动,⾥⾯的报告描述符晕了我好⼏天!找了⼀些资料希望能对⼤家有帮助~~~~~~~~~~~~~~HID Script脚本语⾔的理解:Global item--全局项Main item --主项local item --局部项对于Main项,parser解释器,将顺序解释集合中的数据,并且,解释器解释完的数据,将按Main项出现的先后顺序,主要是Input和Output项,顺序拼接⽣成对应的数据bit位,解释器将以关键字Collection开始解释并拼接bit位信息,关键字End Collection将结束paser解释器的⼯作,我把关键字Collection和关键字End Collection叫做"集合",这样给他取个名字,以后说明起来也⽅便些,"集合"⾥边描述的就是最后⽣成的由HID硬件设备1次性上发给pc的HID驱动程序的数据流了.在中,(gliethttp)关键字Collection和关键字End Collection都是Main item主项,对应的控制字分别为:1010 00 nn和1100 00 nn,如果Collection后边有1个参数数据,那么即为: 1010 00 01=0xA1,如Collection(Application)翻译成控制码后为:0xA1,0x01;0xA1的1表⽰有1个参数数据,0x01表⽰Application在HID协议中规定的索引值为0x01,pc的HID驱动程序在parser解释器中会通过0x01得知,是对Application进⾏数据流位⽣成,就是说HID报告描述符(Report Descriptor)所描述的数据流是为了Application使⽤的,Application在中包含两种设备:mouse和keyboard,⾄于Collection(Application)⾥边描述的是mouse还是keyboard,将具体的由Usage进⼀步限定,如:Usage(KeyBoard),也就是说明确告诉pc的HID驱动程序的paser解释器,接下来的这段信息最后⽣成出来的bits 位数据信息,将交由pc的HID驱动程序中KeyBoard对应的API函数处理,当然这只是HID硬件设备开发者给pc的HID驱动程序的paser解释器提供的⼀个建议值,⽐如我们做DDK下的HID驱动⼆次开发,那么我们可以很随意,但是HID硬件设备开发者,建议使⽤的HID驱动程序API 接⼝,最好遵守,因为HID硬件设备开发者⽐DDK开发⼈员更清楚送上来的bit数据流的真正物理意义.Input和Output是⽤来真正⽣成bits位流数据域的关键字,他们描述的东西是最后通过usb总线实实在在发送到pc或者从pc接收的数据位,当然这些bits数据流数据域所代表的意义以及某段bits位们所代表的意思以及这些bits将交由pc上HID驱动程序的哪⼀个API接⼝来做进⼀步解析(是mouse还是keyboard),需要其他描述符来描述,⽐如前边的Usage就是其中的1个描述符,如果⼀个HID设备同时提供2种不同的功能,那么就会分别⽣成2个bits位流数据域,每个bits位流数据,将交由不同的驱动解析,⽐如,⼀个keyboard可能还集成了⼀个附属的⿏标功能,那么键盘数据信息将由HID script脚本描述的keyboard对应bits数据位流传送,mouse数据将由HID script脚本描述的mouse对应bits数据位流传送,但同⼀个Input管道怎么能传送两个独⽴的数据流呢,答案很简单:不能,所以⼜引⼊了⼀个Report ID的概念,ID⽤来标识多条独⽴的bits数据流,pc的HID驱动程序根据ID,将这些独⽴的bits数据流们路由到相应的API处理函数上去,进⽽不同的bits数据流数据最终都能够被⾃⼰对应的API驱动函数正确接收并解析处理.对于2字节、4字节等多字节数据的传输,是按⼩端模式little-endian进⾏的.这些多字节数据的最⼩值由Logical Minimum定义,最⼤值由Logical Maximum定义,如果两个值均为⾮负值,那么bits位流数据就是⽆符号数,如果没有明确指定,那么作为有符号数处理,另外HID1.1协议不允许传输浮点数据.硬件开发者应该时刻清除⾃⼰写的HID script脚本所描述的数据流将来应该由PC上的HID驱动程序怎么使⽤,另外对于硬件开发者来说,对于不允许PC驱动修改的bit位数据,HID1.1协议制定者强烈建议采⽤NULL数值,最好不要随便填其他值.----------------------------------------------Main item --主项当前⼀共5个:1)Input2)Output3)Feature4)Collection5)End Collection----------------------------------------------Global item--全局项当前⼀共13个:1)Usage Page2)Logical Minimum ---var变量或array数组的逻辑最⼩值3)Logical Maximum4)Physical Minimum5)Physical Maximum6)Unit Exponent ---单位的指数值,是10的指数7)Unit ---单位索引号:可以是时间单位、电流单位、电压单位和距离单位等等.8)Report Size9)Report ID ---数据流的ID值设置10)Report Count11)Push12)Pop13)Reseved ---保留----------------------------------------------local item --局部项当前⼀共11个:1)Usage ---定义Uage Page下⾯某个功能item的起始索引值,⽐如Keyboard 功能,LEDs功能等,这也告诉pc的HID解释器,Input或Output变量或数组的相应⽣成数据位⽤来描述Usage引⽤到的那个功能,如:⽤来描述Keyboard功能或LEDs功能等.2)Usage Minimum ---定义与array或bitmap关联的usage定义的某个功能下的起始值Usage作为Uage Page的⼀个⼦功能索引号,同时Usage⾃⼰也有很多⼦功能,或者说有很多个⼦值,这⾥就是定义这些⼦值的范围值,之后和⽤Input或Output⽣成bits位数据流,进⾏相应关联.(可以⽤多维数组来说明,可能会更明确⼀点)如:Gliethttp[5][6][80],Gliethttp为最上层,5就是Usage Page(5),6就是在前⼀个基础上Usage(6),当然在HID Descriptor Tool ⾥边6有它的字符串名,即:Usage(Keyboard),然后80就是Keyboard⾥边的⼀个索引取值,查找之后是:KeyBoard LeftArrow,所以Usage_Minimum(80)就等于Usage_Minimum(KeyBoard LeftArrow)Usage的顺序先后和Report Count定义的bits位组的先后顺序依次⼀⼀对应,Usage Minimum和Usage Maximum之间的Usage的索引值也将依次与Report Count定义的bits位组的先后顺序依次⼀⼀对应上。

USB报告描述符详细解析

USB报告描述符详细解析

USB报告描述符详细解析
USB报告描述符是对USB设备上的功能指定的一系列键值对,它们描
述了USB设备提供的服务,以及它如何使用USB总线。

USB报告描述符可
以让计算机可以正确地识别USB设备,并且可以正确地处理它们发送的数据。

报告描述符由一个全局报告描述符和一个或多个功能报告描述符组成。

全局报告描述符描述了整个USB设备,包括设备的厂商ID,产品ID,序
列号,版本号等全局信息。

一个功能报告描述符描述一些功能,或者一组
相关功能。

功能报告描述符向计算机提供有关每个功能的信息,包括功能
类型,最大报告大小,功能字节级访问信息,功能特征集,报文信息等。

USB设备可以在接口上提供多种功能,因此,可以有一个或多个功能
报告,每个功能报告描述符都将描述特定的功能。

例如,触摸板USB设备
可能提供多个功能报告描述符,每个描述符描述一个功能,如触摸屏,键盘,鼠标,笔,滚轮等。

USB报告描述符需要遵守USB协议,确保报告描述符中包含的信息传
输正确。

USB报告描述符除了包括数据传输信息外,还会描述USB设备的
更多信息,如设备功能,设备参数,配置参数,接口位置,电源参数,安
全功能等。

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的描述符详解总结

USB的描述符详解总结

USB的描述符与命令请求详解一、描述符1.什么是描述符所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。

2.描述符的作用描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。

3.描述符的分类描述符分为三大类:标准描述符、设备类描述符、厂商描述符。

除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。

在USB1.0中规定了5种标准的描述符:设备描述符配置描述符接口描述符端点描述符字符串描述符规定的设备类描述符有:集线器类描述符、人机接口类描述符。

下表是三种描述符的类型值:4.使用的几种类设备类DeviceClass下表是设备类值的含义。

接口类InterfaceClass下表是接口类值的含义。

类的交叉与独享在描述符中,只有设备描述符和接口描述符中会有类别之分,即只有设备和接口会分类使用,不过有些类别的使用只需经过设备或接口的区分就可彻底清楚明白,这说明在设备类别和接口类别的定义上会有共同的类别名称。

而有些类别则是设备或接口独享的,下表是与使用设备相关的类别划分交叉或共享情况:(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义)【说明:】在设备或接口分类上均可彻底分清使用的(Usage = Both),即在任一处描述符中定义即可的分清楚使用的类(Usage = Both)的基本类有:02h ------------- 通信及CDC控制类;DCh ------------ 诊断设备类;EFh ------------- 混杂设备类;FFh ------------- 厂商定义的设备类。

5.标准描述符设备描述符【说明1:】当设备类型bDeviceClass = 0时,说明类型将由接口描述符中定义的为准。

【说明2:】从设备描述符表格中可知,有3个索引值:厂商信息索引、产品信息索引、设备序列号索引,这意味着,将有3个字符串描述符为其准备。

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

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)//输入用,变量,值,绝对值。

像键盘这类一般报告绝对值,//而鼠标移动这样的则报告相对值,表示鼠标移动多少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字节输出。

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

下面这个报告描述符是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,释放时对应的值为00x81, 0x02, // INPUT (Data,Var,Abs)//填充5个bit,补足一个字节0x95, 0x01, // REPORT_COUNT (1)0x75, 0x05, // REPORT_SIZE (5)0x81, 0x03, // INPUT (Cnst,Var,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};这里只对报告描述符做一个简单的介绍,更详细的资料请参看USB HID协议以及HID Usage Tables。

相关文档
最新文档