本地项目标签定义控件的特征。 这些项目不会转移到下一个主要项目。 如果Main项定义了多个控件,则可能会有几个类似的Local项标签。 例如,一个Input项可能有几个与之关联的Usage标签,每个控件都有一个。
Tag | One-Byte Prefix (nn represents size value) | Description |
Usage | 0000 10 nn | 项目使用的使用指数; 表示项目或集合的建议用法。 在项表示多个控件的情况下,Usage标签可以建议对数组中的每个变量或元素使用。 |
Usage Minimum | 0001 10 nn | 定义与数组或位图关联的起始用法。 |
Usage Maximum | 0010 10 nn | 定义与数组或位图关联的结束用法。 |
Designator Index | 0011 10 nn | 确定用于控件的正文部分。 索引指向物理描述符中的指示符。 |
Designator Minimum | 0100 10 nn | 定义与数组或位图关联的起始指示符的索引。 |
Designator Maximum | 0101 10 nn | 定义与数组或位图关联的结束指示符的索引。 |
String Index | 0111 10 nn | String描述符的字符串索引; 允许字符串与特定项或控件相关联。 |
String Minimum | 1000 10 nn | 指定将一组顺序字符串分配给数组或位图中的控件时的第一个字符串索引。 |
String Maximum | 1001 10 nn | 指定将一组顺序字符串分配给数组或位图中的控件时的最后一个字符串索引。 |
Delimiter | 1010 10 nn | 定义一组 Local 项目的开始和结束, 1=开始, 0= 结束 |
1010 10 nn – 1111 10 nn |
保留 |
注:正确使用Usage非常重要。 虽然存在非常具体的用途(起落架,自行车车轮等),但这些用途旨在识别具有非常特定应用的设备。 带有通用按钮的操纵杆不应该为任何按钮分配特定于应用程序的用法。 相反,它应该分配一般用法,例如“按钮”。然而,运动自行车或飞行模拟器的驾驶舱可能想要狭义地定义其每个数据源的功能。
这 3 个项目输入 Local 类型项目。
Usage 项目和 Global 类型的 Usage Page 项目协同描述项目或集合的功能。
一个报表可以指定一个 Usage 给许多个控制, 或是指定不同的 Usage 给每一个控制。如果一个报表项目之前有一个 Usage ,此 Usage 应用到该项目的所有控制。如果一个报表项目之前有一个以上的 Usage ,每一个 Usage 应用到一个控制, Usage 与控制是按顺序结合的。
例如下面报表描述符的一个局部,报表含有 2 个输入字节,第一个字节的用法是 x,第 2 个字节是 y。
-
Report Size (
8)
-
Report Count (
2)
-
Usage (x)
-
Usage (y)
-
Input (Data, Variable,
Absolute)
如果一个报表项目之前有一个以上的 Usage ,而且控制的数目多于 Usage 的数目,每一个 Usage 与一个控制对应,最后一个 Usage 则应用到所有剩余的控制。
例如在下面报表包含 16 个字节输入数据, 第一个字节对应用法 x, 第 2 个字节对应用法 y,剩余的 14 个字节对应厂商定义的用法。
-
Usage (x)
-
Usage (y)
-
Usage (Vendor defined)
-
Report Size (
8)
-
Report Count (
16)
-
Input (Data, Variable,
Absolute)
Usage Minimum 和 Usage Maximum 可以指定一个 Usage 给多个控制或是数组项目。将从 Usage Minimum 到 Usgae Maximun 定义的用法顺序对应到多个控制中。
例如在一个键盘描述符中定义的标准键盘的左、右修饰键的输入项目中,使用一个字节的 8 位分别输入键盘的左、右、 Ctrl 键、 Shift 键、 Alt 键和 GUI 键,从 HID Usage tables文档中的第 10 节可以查到关于键盘用法的定义, 其中上述 8 个修饰键的用法定义值为 224到 231
以下是报表描述符的修饰键部分描述。
-
Usage Page (1) ;
1 =
Generic Desktop Controls
-
Usage
(6) ;
6 =
Keyboard
-
Collection
(1) ;
1 =
Application
-
Usage Page (7) ;
7 = Keyboard/
Keypad
-
Usage Minimum (224)
-
Usage Maximum (231)
-
Logical Minimum (0)
-
Logical Maximum (1)
-
Report Size (1)
-
Report Count (8)
-
Input (Data, Variable, Absolute)
-
……
举例:
-
HID_Report_desc_table:
-
db
06h, A0h, FFh ; Usage Page(Vendor
defined) 定义设备功能
-
db 09h, A5h ; Usage(Vendor Defined) 定义用法
-
db A1h,
01h ; Collection(Application) 开一个集合
-
db 09H, A6h ; Usage(Vendor
defined) 定义用法
-
; 输入报表
-
db 09h, A7h ; Usgae(Vendor
defined) 定义用法
-
db
15h,
80h ; Logical Minimum 定义输入最小值 =-
128
-
db
25h,
7Fh ; Logical Maximum 定义输入最大值 =+
127
-
db
75h, 08h ; Report Size 定义报表数据项大小 =
8
-
db
95h,
02h ; Report Count 定义报表数据项个数 =
2
-
db
81h,
02h ; Input(Data,Variable,Absolute) 输入项目
-
; 输出报表
-
db 09h, A9h ; Usgae(Vendor
defined) 定义用法
-
db
15h,
80h ; Logical Minimum 定义输入最小值 =-
128
-
db
25h,
7Fh ; Logical Maximum 定义输入最大值 =+
27
-
db
75h, 08h ; Report Size 定义报表数据项大小 =
8
-
db
95h,
02h ; Report Count 定义报表数据向个数 =
2
-
db
91h,
02h ; Output(Data,Variable,Absolute) 输出项目
-
db C0h ; End Collection 关闭集合
第二行,06 A0 FF 其中0x06对应着Global类项目中的Usage Page项,数据共2字节。数据0xFFA0表明由厂商定义。
第三行,09 A5 其中0x09对应着Local类项的Usage项,数据共一个字节。数据0xA5表明由厂商定义。
第四行,A1 01 其中0xA1对应着Main类项的Collection项,数据共一个字节。数据0x01表示(Application)。
第五行,09 A6 其中0x09对应着Local类项的Usage项,数据共一个字节。数据0xA6表明由厂商定义。
第七行,09 A7 其中0x09对应着Local类项的Usage项,数据共一个字节。数据A7表明由厂商定义。
第八行,15 80 其中0x15对应着Global类项的Logical Minimum项,数据共一个字节。数据80表示逻辑上最小为-128。
第九行,25 7F 其中0x15对应着Global类项的Logical Maximum项,数据共一个字节。数据7F表示逻辑上最大为+127。
第十行,75 08 其中0x75对应着Global类项的Report Size项,数据共一个字节。指的是报表数据大小5个字节。
第十一行,95 02 其中0x95对应着Global类项的Report Count项,数据共一个字节。指的是是报表个数为2。
第十二行,81 02其中81对对应着Main类项的Input项,数据共一个字节。指的输入数据是变量。
第十四行,09 A9 其中0x09对应着Local类项的Usage项,数据共一个字节。数据A9表明由厂商定义。
第十五行,15 80 其中0x15对应着Global类项的Logical Minimum项,数据共一个字节。数据80表示逻辑上最小为-128。
第十六行,25 7F 其中0x15对应着Global类项的Logical Maximum项,数据共一个字节。数据7F表示逻辑上最大为+127。
第十七行,75 08 其中0x75对应着Global类项的Report Size项,数据共一个字节。指的是报表数据大小5个字节。
第十八行,95 02 其中0x95对应着Global类项的Report Count项,数据共一个字节。指的是是报表个数为2。
第十九行,91 02其中81对对应着Main类项的Output项,数据共一个字节。指的输出数据是变量。
第二十行,C0 表示结束集合。
注:Usage Page已经表明由厂商定义了,所以Usage所代表的肯定也是厂商自己定义了。
后面章节我们以一个标准设备,鼠标的Report Descriptor来分析一下。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16777851/article/details/86441454