HID 描述符(二)——报告描述符

HID标准规定的Usage Pages HID(Human Interface Devices)设备的Usage用于向计算机传达设备的功能用途等。Usage(用法)提供了对HID设备的输入、输出和特性报告中的数据项的描述。HID规范已经定义的用法的存在,并不保证计算机系统或应用软件将识别或利用该数据项。 阅读详情

其它的描述符都是告诉PC 自己是什么装置,是做什么用的。而报告描述符则是告诉PC 设备与PC之间数据传输的格式。即设备要传输给PC(或是PC传输给设备)的是多少字节的数据,都是什么形式的,是常量还是变量。

 

0x05, 0x01,  ; USAGE_PAGE (Generic Desktop) 表示用途页为通用桌面设备

 0x09, 0x06,; USAGE (Keyboard) //表示用途为键盘

 0xa1, 0x01,  ; COLLECTION (Application) 表示应用集合,必须要以END_COLLECTION来结束,见最后的0xc0

 0x05, 0x07,    ; USAGE_PAGE (Keyboard) 表示用途页为按键

 0x19, 0xe0,    ; USAGE_MINIMUM (Keyboard LeftControl)   ctrl,shift等键。

0x29, 0xe7,    ;  USAGE_MAXIMUM (Keyboard Right GUI)

0x15, 0x00,  ; LOGICAL_MINIMUM  逻辑最小值

0x25, 0x01,  ; LOGICAL_MAXIMUM 逻辑最大值

0x75, 0x01,  ;REPORT_SIZE报告大小为1bit,所以前面的逻辑最小值为0,逻辑最大值为1

0x95, 0x08,  ;  REPORT_COUNT  报告的个数为8,即总共有8个bits

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键等

 

0x95, 0x01,  ;  REPORT_COUNT

0x75, 0x08,    ;  REPORT_SIZE

0x81, 0x03,  ; INPUT (Cnst,Var,Abs) 输入用,常量,值,绝对值

  上面这8个bit是常量,设备必须返回0

 

 0x95, 0x05,    ; REPORT_COUNT  这样的数据段个数为5

0x75, 0x01,;REPORT_SIZE  每个段大小为1bit

 

0x05, 0x08,  ;  USAGE_PAGE (LEDs) 用途是LED,即用来控制键盘上的LED用的,因此下面会说明它是输出用

0x19, 0x01,   ; USAGE_MINIMUM (Num Lock) 用途最小值是Num Lock,即数字键锁定灯

0x29, 0x05, ; USAGE_MAXIMUM (Kana)

0x91, 0x02,  ; OUTPUT (Data,Var,Abs)输出,用来控制LED。变量,值,绝对值。1表示灯亮,0表示灯灭

0x95, 0x01,  ;REPORT_COUNT 这样的数据段个数为1

0x75, 0x03,  ;  REPORT_SIZE  每个段大小为3bits

0x91, 0x03, ;  OUTPUT (Cnst,Var,Abs)   输出用,常量,值,绝对值

由于要按字节对齐,而前面控制LED的只用了5个bit,所以后面需要附加3个不用bit,设置为常量。

 

0x95, 0x06,  ; REPORT_COUNT  报告个数为6

0x75, 0x08,    ; REPORT_SIZE  每个段大小为8bits

0x15, 0x00, ;LOGICAL_MINIMUM  逻辑最小值0

0x25, 0xFF,  ; LOGICAL_MAXIMUM  逻辑最大值255

0x05, 0x07,  ;USAGE_PAGE (Keyboard) 用途页为按键

0x19, 0x00, ; USAGE_MINIMUM (Reserved (no event indicated)) 使用最小值为0

0x29, 0x65, ; USAGE_MAXIMUM (Keyboard Application) 使用最大值为0x65

0x81, 0x00, ;  INPUT (Data,Ary,Abs) 输入用,变量,数组,绝对值

   以上定义了6个8bit宽的数组,每个8bit(即一个字节)用来表示一个按键,所以可以同时有6个按键按下。没有按键按下时,全部返回0。如果按下的键太多,导致键盘扫描系统无法区分按键时,则全部返回0x01,即6个0x01。如果有一个键按下,则这6个字节中的第一个字节为相应的键值

 

0xc0   ; END_COLLECTION关集合,跟上面的对应

 

 

下面是USB鼠标报告描述符,比起键盘的来说要简单些。它描述了4个字节,第一个字节表示按键,第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移),第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移动,负值表示往上移动),第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动)。

 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) 按键

0x19, 0x01,   ;   USAGE_MINIMUM (Button 1) 使用最小值1

0x29, 0x03, ;  USAGE_MAXIMUM (Button 3) 使用最大值3,1:左键,2:右键,3:中键

0x15, 0x00, ;   LOGICAL_MINIMUM (0) 逻辑最小值0

0x25, 0x01,   ;   LOGICAL_MAXIMUM (1) 逻辑最大值1

0x95, 0x03, ; REPORT_COUNT (3) 数量为3

0x75, 0x01,   ;   REPORT_SIZE (1) 大小为1bit

以上3个bit分别表示鼠标的三个按键情况,最低位(bit-0)为左键bit-1为右键,bit-2为中键,按下时对应的位值为1,释放时对应的值为0

0x81, 0x02,     ;   INPUT (Data,Var,Abs) /输入,变量,数值,绝对值

0x95, 0x01,  ;   REPORT_COUNT (1) 填充5个bit,补足一个字节

0x75, 0x05,           ;  REPORT_SIZE (5)

0x81, 0x03,        ;  INPUT (Cnst,Var,Abs)

 

0x05, 0x01, ;  USAGE_PAGE (Generic Desktop) 用途页为通用桌面

0x09, 0x30,    ;  USAGE (X) 用途为X

0x09, 0x31,  ;  USAGE (Y) 用途为Y

0x09, 0x38,    ;   USAGE (Wheel) 用途为滚轮

0x15, 0x81,    ;  LOGICAL_MINIMUM (-127) 逻辑最小值为-127

0x25, 0x7f,   ;  LOGICAL_MAXIMUM (127) 逻辑最大值为+127

0x75, 0x08,  ; REPORT_SIZE (8) 大小为8个bits

0x95, 0x03,  ;  REPORT_COUNT (3) 数量为3个,即分别代表x,y,滚轮

0x81, 0x06, ;   INPUT (Data,Var,Rel) 输入,变量,值,相对值

0xc0,  ; END_COLLECTION关集合

 通过对上面的报告分析,我们知道报告返回4个字节,没有报告ID。如果鼠标左键按下,则返回01 00 00 00(十六进制值),如果右键按下,则返回02 00 00 00,如果中键按下,则返回04 00 00 00,如果三个键同时按下,则返回07 00 00 00。如果鼠标往右移动则第二字节返回正值,值越大移动速度越快。其它的类推。

 

 

Usage page

Page ID

Page 名称

00

未定义

01

Generic Destop controls

02

Simulation controls

03

VR controls

04

Sport controls

05

Game controls

06

保留

07

Keyboard/keypad

08

LEDs

09

Button

0a

Ordinal

0b

Telephony

0c

Consumer

0d

Digitizer

0e

保留

0f

PID Page

10

Unicode

11-13

保留

14

Alphanumeric Display

15-7f

保留

80-83

Monitor pages

84-87

Power pages

88-8b

保留

8c

Bar code scanner page

8d

Scale page

8e-8f

Reserved point of sale pages

90

Camera control page

91

Arcade page

92-feff

保留

Ff00-ffff

厂商定义

 

 

 

 

 

Generic Destop page

Usage ID

Usage  名称

00

Undefined

01

Pointer

02

Mouse

03

Reserved

04

Joystick

05

Game pad

06

Keyboard

07

Keypad

08

Multi_axis controller

09-2f

Reserved

30

X

31

Y

32

Z

33

Rx

34

Ry

35

Rz

36

Slider

37

Dial

38

Wheel

39

Hat switch

3a

Counted buffer

3b

Byte count

3c

Motion wakeup

3d

Start

3e

Select

3f

Reserved

40

Vx

41

Vy

42

Vz

43

Vbrx

44

Vbry

45

Vbrz

46

Vno

47-7f

Reserved

80

System control

81

System power down

82

System sleep

83

System wake up

84

System context menu

85

System main menu

86

System App menu

87

System Menu help

88

System Menu exit

89

System Menu select

8a

System Menu right

8b

System Menu left

8c

System Menu up

8d

System Menu down

8e-8f

Reserved

90

D-pad up

91

D-pad down

92

D-pad right

93

D-pad left

94-ffff

Reserved

HID报表描述符(目前最全的解析,也是USB最复杂的描述符) 报表描述符定义了执行设备功能的数据格式和使用方法。 报表描述符和 USB 的其他描述符是不一样的,它不是一个简单的表格,报表描述符是 USB 所有描述符中最复杂的。报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的。 报表描述符必须先描述数据的大小与内容。报表描述符的内容与大小因设备的不同而不同,在进行报表传输之前,主机必须先请求 阅读详情

相关推荐

HID设备的报告描述符

介绍了HID设备的报告描述符。

ydgd118的博客 2197

HID 描述符 报告描述符

其它的描述符都是告诉PC 自己是什么装置,是做什么用的。而报告描述符则是告诉PC 设备与PC之间数据传输的格式。即设备要传输给PC(或是PC传输给设备)的是多少字节的数据,都是什么形式的,是常量还是变量。   0x05, 0x01,  ; USAGE_PAGE (Generic Desktop) 表示用途页为通用桌面设备  0x09, 0x06,; USAGE (Keyboard) //表示

supergame111的专栏 2554

Keyboard的HID及HID描述符

Keyboard的HID及HID描述符 实现每个功能前,都要有其USB HID报告描述符,即常说的hid枚举。 定义数据结构;确定数据上报形式;按键功能数据上报;查找按键功能,最后HID_Report https://www.usb.org/hid中下载Device Class Definition HID文档 USB HID报告描述符是USB主机请求于USB设备的一种描述符。HID设备用报告的形式发送数据到主机,描述符告诉主机如何解释数据。 1、 添加USB HID报告描述符; 一篇很有借鉴的文章:htt

weixin_44006573的博客 5200

HID协议详解 - Report Descriptor报告描述符构建与解析

本文共12000字,提供详细理解HID Report Descriptor的机会。 HID Report Descriptor报告描述符就是描述连接建立之后设备端发送给主机端的数据,每一字节(bytes)每一位(bits)所代表的意义。

雨落子衿的博客 1万+

USB与BT HID reports描述符实践与抓包分析

文章内容提示 这篇文章主要说明如何获取与查看USB和BLE HoGP HID设备报告描述符,如何根据获取的描述符读懂report。然后说明了可以使用hidrd-convert工具,来如何根据hex报告描述符转化得到C语言格式的描述符,这对于我们编码是有意义的。 其中,还截取了USB 逻辑分析仪,Wireshark等工具来查看input report。 如何看懂HID report de

TonyHo's NotePad 1万+

深入理解HID报告描述符:从基础到实践

《HID报告描述符详解》摘要 HID报告描述符是USB人机接口设备的核心技术规范,定义了设备与主机间的数据交互格式。本文系统介绍了HID描述符的三层结构:MainItems(定义数据字段)、GlobalItems(描述数据特征)和LocalItems(指定用途)。通过标准鼠标和键盘的实例分析,展示了如何构建包含按钮、坐标等功能的完整描述符。文章还深入探讨了ReportID应用、自定义设备开发等高级话题,并推荐了hidrdd等实用调试工具。掌握HID描述符编写技术,可实现对各类输入输出设备的精确控制,为开发即

m0_73968310的博客 1306

杰理AC632N提升edr的hid传输速率, 安卓绝对坐标触摸点被识别成鼠标的修改方法

杰理的632的一些问题

weixin_52082065的博客 790

一文说清STM32中的HID报告描述符

详解STM32开发中hid设备的核心组成部分——hid报告描述符,从结构到应用层层剖析,帮助开发者掌握实际项目中的配置与调试技巧,提升usb通信效率。

weixin_29867767的博客 1047

hid 报告描述符

USB固件开发(HID设备) 1. HID设备的识别 HID设备类除了有文档第一部分所述的一些标准描述符(包括设备描述符、配置描述符、接口描述符、端...

choushan2212的博客 1473

USB的5大描述符和HID描述符

介绍了USB的5大描述符和HID描述符。

ydgd118的博客 6675

读懂 HID 报告描述符 (实现全键无冲的键盘 HID 报告描述符)

了解 HID 报告描述符,实现一个全键无冲的键盘

UnsicentificLLLL的博客 9209

USB描述符(附加USB HID报告描述符 )

USB 描述符,(附加USB HID描述符以及HID报告描述符)

yingLGG的博客 5806

Unity 工具 之 Natcorder 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端)

Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 目录 Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 一、简单介绍 二、插件导入使用 三、几个 Demo 演示效果 四、关键代码 五、下载地址 一、简单介绍 Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 本节介绍,使用Unity插件,进行屏幕录制,生成图片,gif 动图,以及mp4文件等;能录制场景,也能录制摄像头,多功能录

仙魁XAN 7559

[USB协议] USB-HID描述符

USB 设备描述符有严格的顺序要求。这些描述符需要按照特定的顺序进行排列和组合,以确保 USB 主机能够正确地解析和配置 USB 设备。设备描述符(Device Descriptor)配置描述符(Configuration Descriptor)接口描述符(Interface Descriptor)端点描述符(Endpoint Descriptor)其他描述符(可选)接口描述符(Interface Descriptor)端点描述符(Endpoint Descriptor)

qq_39258454的博客 3886

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规审计的考试指南,包含选择题、判断题、简答题和案例分析题。选择题考察《个人信息保护法》的关键条款,如敏感信息处理、跨境传输、委托处理等合规要求。判断题测试对个人信息处理规则的理解,如撤回同意、公开信息处理等。简答题要求阐述审计流程、个人权利、委托处理义务等内容。案例分析题以互联网企业为例,分析违规行为并提出整改建议,涉及数据收集、第三方共享、自动化决策等问题。全文旨在帮助中级审计人员掌握个人信息保护的法律规定和审计实务,提升合规审计能力。

qq_41525079的博客 547

利用绝对式编码器实现电机无限旋转的配置与优化

本文详细解析了如何利用绝对式编码器实现电机的无限旋转功能。通过切换驱动器编码器工作模式、精确计算逻辑位置范围等关键配置步骤,解决了传统方案在多圈计数溢出时的定位难题。该方案无需硬件改造,适用于大型回转台、连续供料系统等需要大范围连续绝对定位的自动化场景。

weixin_29184371的博客 239

USB HID报告描述符

原文地址:Tutorial about USB HID Report Descriptors USB HID报告描述符是USB主机请求于USB设备的一种描述符。HID设备用报告的形式发送数据到主机,描述符告诉主机如何解释数据。下面将展示如何写一个描述符。 首先,到USB.org - HID Tools页面找到“Device Class Definition for HID”文档,下面叙述的内容本质上是该文档中的重要部分。 其次,在上述页面获得HID描述符工具,然后读完本教程之后想着如何使用它。手动写HID

我的博客 2770

从零开始:用AutoLisp为AutoCAD定制专属工具栏(2023最新版)

本文详细介绍了如何利用AutoLisp语言为AutoCAD定制专属工具栏,以提升绘图效率。内容涵盖从环境配置、AutoLisp基础语法到实战开发的全过程,指导用户编写自动化脚本、封装功能函数,并最终通过CUI编辑器创建和部署个性化工具栏按钮,是2023年CAD用户实现工作流自动化与个性化的实用指南。

4k5l6j7h8的博客 300

USB学习【10】描述符-HID描述符

HID描述符功能上面相对独立一些,所以单分一篇专门整理。原文链接:https://blog.youkuaiyun.com/weiaipan1314/article/details/112504129USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘、游戏手柄等,主要用于人与计算机进行交互。HID设备可以作为低速、 全速、高速设备用。由于HID设备要求用户输入能得到及时响应,故其传输方式通常采用中断传输。

qq_20902063的博客 1838

c# 如何使用S7NET 读取汇川H5U的数据

本文介绍了两种使用C#读取汇川H5U PLC数据的方法。第一种通过ModbusTCP协议(推荐),使用NModbus库实现,步骤包括配置PLC的Modbus服务器功能、安装库及编写读取保持寄存器的代码。第二种针对兼容西门子S7协议的型号,使用S7NetPlus库直接读取。文章强调需注意地址映射关系、协议配置及网络设置,并建议优先采用ModbusTCP方案以确保稳定性。两种方法均提供了完整的代码示例,帮助开发者快速实现在C#环境下与汇川H5U PLC的通信。

StevenChen的博客 457

HID描述符

键盘,鼠标就是HID设备,它们如果要将自己枚举成HID设备类,就必须要有对应的HID描述符,报告描述符,以及可选的实体描述符。设备描述符的第四个字段(bDeviceClass)就是表示USB设备所属的设备类,如果是0,那么我们就在接口描述符中进一步定义其具体功能为0x03,设置为HID设备。低五位就是表示用户需要用多大的力气才能影响相应的控制项,我们为0的时候就越容易,越大越难,高三位就是进一步修饰身体部位,左手,右手,左脚,右脚。获取特定类描述符的请求数据和之前的标准描述符有所不同,但是结构是一样的。

Z1799369927的博客 2139

PhotovoltaicPanelCleanlinessDetector:基于YOLOv8的光伏板清洁状态监测系统

data.yamlyaml复制编辑names:0: clean1: dust3: leaves4: shadow✅ 高精度污染识别✅ 具备实时检测与UI展示✅ 可本地化部署应用未来方向增加污染程度分级(轻度、中度、严重)加入时间序列分析(污染变化趋势预测)无人机集成巡检模块。

YOLO 276

USB协议详解第9讲(USB描述符-HID描述符)

目录 1.HID设备概述 2.HID描述符组成 3.STM32配置描述符集合代码(必须按顺序) 4.HID描述符组成详解 1.HID设备概述 USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘、游戏手柄等,主要用于人与计算机进行交互。HID设备可以作为低速、 全速、高速设备用。由于HID设备要求用户输入能得到及时响应,故其传输方式通常采用中断传输。 在USB协议中,HID设备的类型定义放置在接口描述符中,USB的设备描述符

一个早起的程序员 1万+

【华为OD机试真题】29、组成最大数 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字

KJ.JK 2419

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符, 配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。 USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较 复杂的一个描述符。         USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。 输入报告是USB设备发送给主机的,例如USB鼠标

Keivin 5501

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: USB开发基础--USB命令(请求)和USB描述符
下一篇: 内核3.x版本之后设备树(device tree)机制
wdsfup
博客等级 码龄20年 31粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值