按钮功能数组包含有关特定类型 HID 报表的顶级集合支持的按钮用法的信息。 有关集合功能的信息包含在其 HIDP_CAPS 结构中。
用户模式应用程序或内核模式驱动程序使用以下 HIDClass 支持例程 之一来获取按钮功能信息:
HidP_GetButtonCaps 返回一个按钮功能数组,该数组描述指定报表类型中包含的所有按钮用法。
HidP_GetSpecificButtonCaps 筛选由调用方指定的使用情况页、使用情况 ID 和 链接集合返回的按钮功能信息。
按钮功能数组包含 HIDP_BUTTON_CAPS 结构,每个结构都包含有关 HID 用法 或 使用情况范围的以下信息:
使用情况或使用情况范围的使用情况页
包含按钮数据的报告的报告 ID
使用 ID 或使用范围
指示用法是否为别名用法的标志
包含使用情况或使用情况范围的链接集合
与用法或使用范围关联的字符串描述符和指定符(请参阅设计器索引项和字符串索引项)
HID 分析器分配给使用情况或使用情况范围的数据索引
一般情况下,按钮功能数组描述的所有用法都保留以下条件:
每个功能结构表示与变量主项或数组主项关联的单个用法或使用情况范围。
别名用法可以与变量主项一起使用。 与数组项关联的用法不能为别名。 不能对使用范围进行别名。
HID 分析程序仅使用所需的最少使用量来向每个按钮分配使用情况。 分析器按报表描述符中指定的顺序分配使用情况。 放弃报表描述符中不需要的用法。 按钮功能数组不包含有关丢弃用法的任何信息。
如果为变量项指定的用法数小于项中的按钮数,则功能数组仅包含一个描述一个按钮用法的功能结构(变量主项的报表描述符中指定的最后一个用法)。 但是,有关报表计数大于 1 的使用情况值的信息,请参阅 使用情况值数组 。
HID 分析程序将唯一的数据索引分配给功能数组中所述的每个用法。
以下主题讨论如何在按钮功能数组中组织和设置功能结构:
变量主项中的按钮用法
报表描述符中指定的每个 用法 或 使用情况范围 都由按钮功能数组中的自己的功能结构描述。
功能结构的 IsAlias 成员用于指定一组 n 个别名用法,如下所示:
- 在添加到功能数组的第一个 n-1 功能结构中,IsAlias 设置为 TRUE。 IsAlias 在第 n个功能结构中设置为 FALSE。 首选用法是序列中最后一个别名用法。
应用程序或驱动程序可以通过扫描此类序列来确定哪些按钮用法是别名的。
下表汇总了三种别名用法的示例。
| 报表描述符中的别名使用顺序 | 功能数组中的使用顺序 | IsAlias 成员值 |
|---|---|---|
| 用法 1 | 用法 3 | TRUE |
| 用法 2 | 用法 2 | TRUE |
| 用法 3 | 用法 1 | 假 |
有关如何交叉引用使用情况和数据索引的信息,请参阅 数据索引。
数组主项中的按钮用法
报表描述符中指定的按钮数组主项的每个 用法 或 用法范围 都由其在按钮功能数组中的功能结构描述。 将功能结构添加到功能数组的顺序与为主项指定用法的顺序相反。
HID 分析器按照报表描述符中指定的顺序,将 数据索引 分配给与数组项关联的每个用法。 例如,下表显示了一组用法(如报表描述符中指定的)与功能数组中指定的用法和数据索引之间的对应关系。 (在此表中, n 是分析器分配给与数组项关联的第一个用法的第一个数据索引。
| 报表描述符中的使用顺序 | 功能数组中的使用顺序 | DataIndex 或从 DataIndexMin 到 DataIndexMax |
|---|---|---|
| 用法 1 | 用法范围 2 | 从 n+7 到 n+8 |
| 用法范围 1 (使用 4 个用法) | 用法 2 | n+5 |
| 用法 2 | 用法范围 1 | 从 n+1 到 n+4 |
| 用法范围 2 (使用 2 个用法) | 用法 1 | n |