按钮功能数组

按钮功能数组包含特定类型 HID 报表的顶级集合支持的按钮用法的相关信息。 有关集合功能的信息包含在其 HIDP_CAPS 结构中。

用户模式应用程序或内核模式驱动程序使用以下 HIDClass 支持例程 之一来获取按钮功能信息:

按钮功能数组包含 HIDP_BUTTON_CAPS 结构,其中每个结构都包含有关 HID 用法使用范围的以下信息:

  • 使用情况或使用情况范围的使用情况页

  • 包含按钮数据的报表的报表 ID

  • 使用情况 ID 或使用情况范围

  • 指示用法是否为别名用法的标志

  • 包含使用情况或使用情况范围的链接集合

  • 与用法或使用范围关联的字符串描述符和指定符 (请参阅指示符索引项和字符串索引项)

  • HID 分析程序分配给使用情况或使用情况范围的数据索引

通常,对于按钮功能数组描述的所有用法,以下条件均保留:

  • 每个功能结构表示与变量main项或数组main项关联的单个用法或使用范围。

  • 别名用法可与变量main项一起使用。 与数组项关联的用法不能为别名。 不能对使用范围进行别名化。

  • HID 分析程序仅使用所需的最小用法数来为每个按钮分配使用情况。 分析程序按在报表描述符中指定的顺序分配用法。 将放弃报表描述符中不需要的用法。 按钮功能数组不包含有关已放弃用法的任何信息。

  • 如果为变量项指定的用法数小于项中的按钮数,则功能数组仅包含一个功能结构,用于描述一个按钮用法 (变量main项) 的报告描述符中指定的最后一个用法。 但是,有关报表计数大于 1 的使用情况值的信息,请参阅 Usage Value Array

  • HID 分析程序将唯一的数据索引分配给功能数组中所述的每个用法。

以下主题讨论如何在按钮功能数组中组织和设置功能结构:

变量main项中的按钮用法

报表描述符中指定的每个 用法使用范围 在按钮功能数组中由其自身的功能结构描述。

功能结构的 IsAlias 成员用于指定一组 n 个别名用法,如下所示:

  • 在添加到功能数组的第一个 n-1 功能结构中,IsAlias 设置为 TRUE。 在 n个功能结构中,IsAlias 设置为 FALSE。 首选用法是序列中最后一个别名用法。

应用程序或驱动程序可以通过扫描此类序列来确定哪些按钮用法已别名化。

下表总结了三种别名用法的示例。

报表描述符中的别名使用顺序 功能数组中的使用顺序 IsAlias 成员值
用法 1 用法 3 TRUE
用法 2 用法 2 TRUE
用法 3 用法 1 FALSE

有关如何交叉引用使用情况和数据索引的信息,请参阅 数据索引

数组main项中的按钮用法

报表描述符中指定的项main按钮数组的每个用法用法范围都由按钮功能数组中自身的功能结构描述。 将功能结构添加到功能数组的顺序与为main项指定用法的顺序相反。

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