HID 报告描述 1


参考 文档:

HID1.1协议.pdf


1 、报告描述简介

Report Description,即上报事件的描述,描述所支持事件的格式及取值意义,比如鼠标按键上报格式、 左键右键中间键分别对应的值等; 报告描述跟 JSON 有些类似, 都是结构数据,格式类似{usage:1, {id:0,usage:1.1,size:1,count:1,min:0,max:5,format:xx}}


2、Generic Item Format (通用项目格式)

HID 报告描述 1

第 1~0 位表示名称的值由多少个字节构成,具体意义如下:
0 = 0 bytes,名称后面不带值
1 = 1 bytes,名称后面带 1 个值
2 = 2 bytes,名称后面带 2 个值
3 = 4 bytes,名称后面带 4 个值

第 3~2 位表示类型,有如下几种:
0 = Main
1 = Global
2 = Local
3 = Reserved

第 7~4 位表示 Tag,Tag 与类型对应,每种类型有很多不同的 Tag。


3、Item Parser  (描述符结构)

HID 报告描述 1

几个主要的名词解释一下:
Collection, 集合, 相当于{}, 用来包含一组描述; Collection 有 Application 和 Physical 之分,
Application 表示大项,里有可以有很多 Physical 子项 。
Report,报告,在上图中只是一个 ID 号,来区分不同 report。
Main Item,主项,例出来哪些项
Report Size,每一项有多少位。
Report Count, 总共有多少项
Logical Minimum,每个项的取值范围中的最小值,即最小只能取的值。
Logical Maximum,每个项的取值范围中的最大值,即最大只能取的值。

Usage,用途,表示有哪些功能,一个 Usage 代表一个功能。


一项描述基本上是由两个字节构成,第一个字节表示名称,第二个字节表示值,如 Report Size,8
Report Size 是名称,8 是它的值。
Report Size 对应的 16 制数据是 0x75,在代码里上面的表现是 0x75,0x08。

有些名称不需要带值,如 Collection 的结束符( ) )为 0xC0,就没有第二个字节。


4、Descriptors (描述符)

HID 报告描述 1

HID 报告描述 1


报告描述符包含 三个项目类型 :Main, Global, and Local.

Main中有5个标签:Input ,Output ,Feature ,Collection,End Collection。其他的具体看手册


HID 报告描述 1

HID 报告描述 1


HID 报告描述 1


HID 报告描述 1

HID 报告描述 1

HID 报告描述 1

在上面表格中,可以看到,第 3~2 位是 00,这两位是 bType 值,00 表示类型为 Main;

nn是第 1~0 位,是 bSize,表示数值的字节数;

第 7~4 位是 bTag,如 1000(0x8?)表示 Input;

Valid Data 表示值的意义,如 Input 项,Bit 0 {Data(0) | Constant(1)},意思是说,

如果值的第 0 位的是 0,即表示 Data,如果是 1,则表示 Constant,

如下语句:0x81, 0x02

0x81 :表示 Input ,Main ,名称后面带 1 个值 。

0x02 :第 0 位是 0 对应的是 Data,第 1 位是 1 对应的是 Variable,第2位是 0 对应的是 Absolute,所以它是一个 Data、

Variable、 Absolute 的类型,值是 2 。


下面对 Data、Variable 等的意思作一下解释。

Data 表示是一个可写的数据。

Constant 表示是一个只读的数据。

Aarray 表示数据里的值代表一个 Usage,Report Size 表示位数,即 Report Size 的存储单元里的值是 Usage 的 Index。

Report Count 一般为 1,如果大于则表示可以同时出现多个 Usage.

Variable 则是一个 Report Size 存储单元表示一个 Usage,其值表示 Usage 的状态; 

Report Size表示位数,Report Count 表示长度。

Absolute 表示绝对数据,如触模屏数据,便使用 Absolute。

Relative 表示相对数据,如鼠标数据,便使用 Relative。

其也用的少就不多说了,详细参看《HID 协议》 。


HID 报告描述 1

HID 报告描述 1

HID 报告描述 1

HID 报告描述 1

在上面表格中,可以看到,第 3~2 位是 01,这两位是 bType 值,01 表示类型为 Global;

nn是第 1~0 位, 是 bSize, 表示数值的字节数; 第 7~4 位是 bTag, 如 0000(0x0?)表示 Usage Page。



HID 报告描述 1

HID 报告描述 1

HID 报告描述 1

在上面表格中,可以看到,第 3~2 位是 10,这两位是 bType 值,10 表示类型为 Local;

nn是第 1~0 位,是 bSize,表示数值的字节数;第 7~4 位是 bTag,如 0000(0x0?)表示 Usage。