HID报表描述符大全及实例分析
+ -

HID照明与采光报告描述符

2026-06-17 本文链接为:http://www.usbzh.com/article/detail-1723.html ,欢迎转载,转载请附上本文链接。

文档详见:https://www.usb.org/sites/default/files/hutrr84_-_lighting_and_illumination_page.pdf
介绍详见:https://test.dasenic.com/solutions/consumer_electronics/e-sports-lighting-control-solution
tinyusb相关实现:https://github.com/microsoft/RP2040MacropadHidSample

报告描述符内容:

0x05, 0x59, // USAGE_PAGE (LightingAndIllumination)
0x09, 0x01, // USAGE (LampArray)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x01, // REPORT_ID (1)
0x09, 0x02, // USAGE (LampArrayAttributesReport)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x03, // USAGE (LampCount)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x01, // REPORT_COUNT (1)
0xb1, 0x03, // FEATURE (Cnst,Var,Abs)
0x09, 0x04, // USAGE (BoundingBoxWidthInMicrometers)
0x09, 0x05, // USAGE (BoundingBoxHeightInMicrometers)
0x09, 0x06, // USAGE (BoundingBoxDepthInMicrometers)
0x09, 0x07, // USAGE (LampArrayKind)
0x09, 0x08, // USAGE (MinUpdateIntervalInMicroseconds)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0xff, 0x7f, // LOGICAL_MAXIMUM (2147483647)
0x75, 0x20, // REPORT_SIZE (32)
0x95, 0x05, // REPORT_COUNT (5)
0xb1, 0x03, // FEATURE (Cnst,Var,Abs)
0xc0, // END_COLLECTION
0x85, 0x02, // REPORT_ID (2)
0x09, 0x20, // USAGE (LampAttributesRequestReport)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x21, // USAGE (LampId)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x01, // REPORT_COUNT (1)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION
0x85, 0x03, // REPORT_ID (3)
0x09, 0x22, // USAGE (LampAttributesReponseReport)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x21, // USAGE (LampId)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x01, // REPORT_COUNT (1)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0x09, 0x23, // USAGE (PositionXInMicrometers)
0x09, 0x24, // USAGE (PositionYInMicrometers)
0x09, 0x25, // USAGE (PositionZInMicrometers)
0x09, 0x27, // USAGE (UpdateLatencyInMicroseconds)
0x09, 0x26, // USAGE (LampPurposes)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0xff, 0x7f, // LOGICAL_MAXIMUM (2147483647)
0x75, 0x20, // REPORT_SIZE (32)
0x95, 0x05, // REPORT_COUNT (5)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0x09, 0x28, // USAGE (RedLevelCount)
0x09, 0x29, // USAGE (GreenLevelCount)
0x09, 0x2a, // USAGE (BlueLevelCount)
0x09, 0x2b, // USAGE (IntensityLevelCount)
0x09, 0x2c, // USAGE (IsProgrammable)
0x09, 0x2d, // USAGE (InputBinding)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x06, // REPORT_COUNT (6)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION
0x85, 0x04, // REPORT_ID (4)
0x09, 0x50, // USAGE (LampMultiUpdateReport)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x03, // USAGE (LampCount)
0x09, 0x55, // USAGE (LampUpdateFlags)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x08, // LOGICAL_MAXIMUM (8)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0x09, 0x21, // USAGE (LampId)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x08, // REPORT_COUNT (8)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x20, // REPORT_COUNT (32)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION
0x85, 0x05, // REPORT_ID (5)
0x09, 0x60, // USAGE (LampRangeUpdateReport)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x55, // USAGE (LampUpdateFlags)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x08, // LOGICAL_MAXIMUM (8)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0x09, 0x61, // USAGE (LampIdStart)
0x09, 0x62, // USAGE (LampIdEnd)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x02, // REPORT_COUNT (2)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0x09, 0x51, // USAGE (RedUpdateChannel)
0x09, 0x52, // USAGE (GreenUpdateChannel)
0x09, 0x53, // USAGE (BlueUpdateChannel)
0x09, 0x54, // USAGE (IntensityUpdateChannel)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x04, // REPORT_COUNT (4)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION
0x85, 0x06, // REPORT_ID (6)
0x09, 0x70, // USAGE (LampArrayControlReport)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x71, // USAGE (AutonomousMode)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0xb1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION

整体结构概览

Report ID 用途 方向 功能
1 LampArrayAttributesReport Feature (主机→设备查询) 查询设备整体属性
2 LampAttributesRequestReport Feature (主机→设备请求) 请求指定 Lamp 的属性
3 LampAttributesResponseReport Feature (设备→主机回复) 回复单个 Lamp 的详细属性
4 LampMultiUpdateReport Feature (主机→设备) 批量更新多个灯(最多8个)
5 LampRangeUpdateReport Feature (主机→设备) 更新一个连续范围的灯
6 LampArrayControlReport Feature (主机→设备) 控制设备工作模式

所有报告都是 Feature 类型,意味着它们通过 HID get/set feature report 传输,不是 Input/Output 报告。


Report ID 1:设备整体属性查询(只读)

REPORT_ID 1
LampCount           | 16-bit | 灯的总数
BoundingBoxWidth    | 32-bit | X方向物理尺寸(微米)
BoundingBoxHeight   | 32-bit | Y方向物理尺寸(微米)
BoundingBoxDepth    | 32-bit | Z方向物理尺寸(微米)
LampArrayKind       | 32-bit | 设备类型(键盘/鼠标/内存条等)
MinUpdateInterval   | 32-bit | 最小更新间隔(微秒)
  • 共 2 + 5×4 = 22 字节
  • 逻辑值范围:LampCount 最大 65535;其他字段最大 2147483647(有符号32位最大值)
  • 特征:Cnst, Var, Abs = 常量(只读)、可变、绝对值

Report ID 2:单个灯属性请求

REPORT_ID 2
LampId  | 16-bit | 要查询的灯编号
  • 2 字节
  • 主机发送此报告,设备收到后应回复 Report ID 3

Report ID 3:单个灯属性回复

REPORT_ID 3
LampId                  | 16-bit | 灯编号
PositionX               | 32-bit | X坐标(微米)
PositionY               | 32-bit | Y坐标(微米)
PositionZ               | 32-bit | Z坐标(微米)
UpdateLatency           | 32-bit | 更新延迟(微秒)
LampPurposes            | 32-bit | 用途位图
RedLevelCount           | 8-bit  | 红色通道级数
GreenLevelCount         | 8-bit  | 绿色通道级数
BlueLevelCount          | 8-bit  | 蓝色通道级数
IntensityLevelCount     | 8-bit  | 亮度通道级数
IsProgrammable          | 8-bit  | 是否可编程(布尔)
InputBinding            | 8-bit  | 输入绑定
  • 共 2 + 5×4 + 6×1 = 28 字节
  • 前5个字段用32位;后6个字段用8位(最大255)

Report ID 4:批量更新(最多8个灯)

REPORT_ID 4
LampCount         | 8-bit  | 本次更新灯的数量(1-8)
LampUpdateFlags   | 8-bit  | 更新标志位
LampId[0..7]      | 16-bit×8 | 8个灯的ID
Red[0..7]         | 8-bit×8  | 8个灯的红色值
Green[0..7]       | 8-bit×8  | 8个灯的绿色值
Blue[0..7]        | 8-bit×8  | 8个灯的蓝色值
Intensity[0..7]   | 8-bit×8  | 8个灯的亮度值
  • 共 2 + 16 + 32 = 50 字节
  • 这里有个问题:重复声明了 8 组 Red/Green/Blue/Intensity,每组4个Usage,总共32个8-bit字段
  • 结构清晰,但 LampCount 出现在了不应该出现的位置——它同时也在 Report ID 1 中作为设备属性,这里再出现会混淆

Report ID 5:范围更新

REPORT_ID 5
LampUpdateFlags   | 8-bit  | 更新标志位
LampIdStart       | 16-bit | 起始灯编号(含)
LampIdEnd         | 16-bit | 结束灯编号(含)
Red               | 8-bit  | 红色值(应用到范围内所有灯)
Green             | 8-bit  | 绿色值
Blue              | 8-bit  | 蓝色值
Intensity         | 8-bit  | 亮度值
  • 共 1 + 2 + 2 + 4 = 9 字节
  • 将同一个颜色和亮度应用到 [LampIdStart, LampIdEnd] 范围内的所有灯

Report ID 6:设备控制

REPORT_ID 6
AutonomousMode  | 8-bit | 0=主机控制模式,1=自主播放模式
  • 1 字节
  • 设为1时,设备自己播放内置灯效,无需主机持续发送更新数据

—-

报告大小汇总

Report ID 大小(字节) 用途
1 22 查询设备属性
2 2 请求灯属性
3 28 回复灯属性
4 50 批量更新(最多8灯)
5 9 范围更新
6 1 控制模式

合计:112 字节(含报告ID)


实际使用流程

1. 主机 → 设备: Report ID 1 (Get Feature) → 获取 LampCount,知道设备有几个灯
2. 主机 → 设备: Report ID 2 (Set Feature, LampId=0) → 请求查询 0 号灯
3. 设备 → 主机: Report ID 3 (Get Feature 回复) → 获得该灯的属性(位置、用途、色深等)
4. 重复步骤2-3,获取所有灯的属性
5. 主机 → 设备: Report ID 4 或 5 (Set Feature) → 实际设置灯光颜色
6. (可选) 主机 → 设备: Report ID 6 (Set Feature, AutonomousMode=1) → 让设备自主播放

总结:这是一个设计完整的 HID 灯光控制描述符,定义了从”设备发现”到”灯具属性查询”再到”颜色更新”的完整流程。主要问题是 LampCount 的误用和固定 8 灯批量更新的带宽开销,但整体可用。

本文链接为:http://www.usbzh.com/article/detail-1723.html ,欢迎转载,转载请附上本文链接。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

USB复合HID设备报告描述符的区分
在USB规范中,设备的功能是通过接口来承载的,在USB规格书中就是接口描述符。对于一般的设备,一般一个接口就是一个功能,这个功能可以是鼠标,键盘或其它设备类型。当然这个只是对USB简易设备而言的,对于一些USB复杂设备如UVC摄像头,UAC音频等是多接口相互配合来实现其功能的,为了整合这么多接口使......
HID报告描述符详解
HID的报告描述符和其它描述符不一样,不是具有固定的数据结构,而是由固件开发商根据上报的数据自行组装的。这个组装的原材料是HID规范定义的ITEM。所以说HID报告描述符就像搭积木一样,其最终的数据结构和设计图纸是什么,都是由固件开发商决定的,但是其最终的产品又是由HID规范提供的各个标准积木模块搭......
USB键盘报告描述符数据格式分析
USB键盘的HID报表描述符的内容参见下表。数据的输入端点为中断方式,当有键盘敲击事件时,会上报数据长度为8字节的数据报告。0x05,0x01,// Global Generic Desktop0x09,0x06,// Local KeyBoard 0xA1,0x01,// Main app col......
USB鼠标HID报告描述符数据格式分析
注意:这里的鼠标为普通鼠标报告描述符的信息解释,其并不适用于全鼠标报表描述符。一个示例如下:0x05,0x01, // Global Generic Desktop0x09,0x02, // Local Mouse0xa1,0x01, // Main app collection0x09,......
USB中文网出品-HID报告描述符分析工具
HidReportParser.exe工具已经网页化,可访问http://www.usbzh.com/tool/usb.html 在线分析USB-HID报告描述符USB HID规范中有一个很重要的概念,就是HID的报告描述符。本人搞了这么久的HID设备开发,其中一项最头疼的是HID报告描述符的......
HID 报表描述符/报告描述符
报表描述符用于描述USB HID设备与主机之间数据交互的格式。根据数据的传输方向,分为输入报告和输出报告。输入报告是USB设备发送数据给主机的。大部分的USB HID设备主要实现的是输入报告。如我们平常使用的USB鼠标,就是通过我们点击鼠标按键或滑动鼠标流轮实现给主机上报鼠标的报告信息。输出报告......
HID报告描述符协议
HID报告描述符通过报告描述符的条目定义了HID报告数据的格式。对于大部分的HID设备来说,数据的传输方向都是输入的,即使用输入端点数据从设备端到主机端,并且使用的是中断的方式。当然HID设备不仅仅为数据的输入,有时也需要数据的输出。这时就需要一个输出中断端点来实现。报告描述符包含了属于特定Rep......
USB官网HID报告描述符生成工具
USB规范官网提供了一个HID报告描述符生成工具,https://www.usb.org/document-library/hid-descriptor-tool 使用我们此工具,我们可以:创建、编辑和验证HID报告描述符。输出多种输出(.txt、.inc、.h等)查看一些标准的设备报告描述符......
VS2019分析HID报告描述符解析源代码
常有人问,有没有HID解析的工具,好像除了usb官网提供的dt.exe,没有其它的好的东东了。Linux下有相关的工具,在本站的社区里:http://www.usbzh.com/zone/detail-12.html 可以查看做HID开发,其实最麻烦的就是HID报表描述符了。这里本人移植了Reac......
Telephony-Headset报告描述符
0x05, 0x0B, // Usage Page (Telephony) 0x09, 0x05, // Usage (Headset) 0xA1, 0x01, // Collection (Application) 0x8......
HID报告描述符Report Descriptor解析分析
HID独有的报告描述符也叫报表描述符对于初学者来说比较复杂,但是如果真正理解了它,我们又不得不惊吧于设计者的巧妙设计。HID报告描述符是由一系列的条目(item)组成的,一个item一般是又包括头部信息(bTag,bType,bSize)和数据内容。所以说item在HID的报告描述符中是最小的信息单......
HID报告描述符Usage
Usage是HID报告描述符的一部分,用于应用开发人员提供有关控制测量内容的信息。Usage标签指示了设备供应商对其设备的控制或者设备控制组的特定用途建议。例如虽然报告描述符中定义了数据格式(例如,三个 8 位字段),但使用Usages定义了应对数据执行的操作含义,例如 x、y 和 z 输入。 此功......
HID报告描述符分类大全
下表列出的是全部的项目的前缀字和简要功能说明。项目类型项目标志(Tag)项目前缀,nn为数据长度功能说明MainInput8x1000 00 nn定义输入报表,主机利用该信息解析设备提供的数据。主机向控制端口发送Get_Report实现输入MainOutpu......
HID音量控制报告描述符
音量控制HID规范提供了两种报告描述符,分别对应按钮式和旋钮式。Up/Down 按钮音量控制下面的示例定义了一对按钮,用于渐变变量,例如音量增大和音量向下按钮。输入设备必须定义为相对设备。–1将减小音量+1将增大音量。0对音量没有影响。UsagePage(Consumer)Usage(Vol......
HID磁带滚轮按钮报告描述符
磁带滚轮按钮是一个弹簧式旋钮,可旋转 ±90°,用户食指有一个小凹痕。 当用户向右或向左扭转旋钮时,磁带与从弹簧加载的中心位置的旋转成正比的速率前进或后退。UsagePage(Consumer)Usage(Tape Jog)Logical Minimum(-127),Logical Maxi......
关注公众号
  • HID人机交互
  • Linux&USB
  • TinyUSB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • XHCI 1.2b 规范
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!