本文介绍了用户模式应用程序和内核模式驱动程序如何使用 HidP_XxxHIDClass 支持例程来解释 HID 报告中的控制数据。
通过指定其使用情况来提取值数据
要从 HID 报告中提取值数据,应用程序或驱动程序可以使用下列 HID 支持例程之一:
- HidP_GetScaledUsageValue 返回一个带符号且经过缩放的值。
- HidP_GetUsageValue 返回未缩放的无符号值或超出正常范围的缩放值。
- HidP_GetUsageValueArray 返回一个用法值数组。
要使用 HidP_GetUsageValueArray,应用程序和驱动程序必须分配一个零初始化的缓冲区,其大小足够容纳用法值数组。 所需的字节大小是使用值数组的 HIDP_VALUE_CAPS 结构中 BitSize 和 ReportCount 成员的乘积,进位到最接近的字节。
提取设置为 ON 的按钮使用情况
要提取设置为 ON (1) 的按钮的 HID 使用情况,应用程序和驱动程序会调用以下 HID 支持例程之一:
- HidP_GetButtons(或 HidP_GetUsages)返回指定使用页面上所有设为开启状态按钮的用法 ID。
- HidP_GetButtonsEx(或 HidP_GetUsagesEx)返回所有设为 ON 的按钮的使用页和使用 ID。
这些例程会返回一个数组,其中包含当前设置为 ON 的所有按钮的所有使用情况信息。 隐式显示,这些例程未返回使用情况的按钮将被设置为 OFF(零)。
要调用这些例程,应用程序和驱动程序必须首先分配用于返回按钮使用情况数组的缓冲区,并将其初始化为零。 应用程序或驱动程序调用 HidP_MaxUsageListLength 来确定报告中指定使用页面中的按钮使用数。 如果应用程序或驱动程序指定的使用情况页面为零,例程将返回报告中所有按钮的使用次数。
所需的缓冲区大小(字节)为:
- (对于 HidP_GetButtons)由 HidP_MaxUsageListLength 返回的值乘以 sizeof(USAGE)
- (对于 HidP_GetButtonsEx)由 HidP_MaxUsageListLength 返回的值乘以 USAGE_AND_PAGE 的大小
应用程序或驱动程序使用这些例程获取当前设置为 ON 的按钮信息后,可以通过调用以下 HIDClass 支持例程之一来确定按钮当前状态与之前状态之间的差异。 这些例程会返回两个使用情况信息数组之间的差值:
- HidP_UsageListDifference
- HidP_UsageAndPageListDifference
通过指定用途来设置数值数据
应用程序或驱动程序可通过调用下列 HID 支持例程之一,在正确初始化的 HID 报告中设置值:
- HidP_SetScaledUsageValue 设置报告中的带符号缩放值。
- HidP_SetUsageValue 在报告中设置一个值。
- HidP_SetUsageValueArray 设置报告中的用法值数组。
通过指定其使用情况来设置按钮状态
应用程序或驱动程序可以调用以下 HIDClass 支持例程之一,在正确初始化的 HID 报告中设置按钮状态:
- HidP_SetButtons(或 HidP_SetUsages)将指定的一组按钮设置为 ON (1)。
- HidP_UnsetButtons(或 HidP_UnsetUsages)将指定的一组按钮设置为 OFF(零)。
通过数据索引提取和设置控制数据
要使用数据索引在 HID 报告中提取和设置控制数据,应用程序或驱动程序可以使用以下 HIDClass 支持例程:
- HidP_GetData
- HidP_SetData
这些例程对提供“增值”服务的应用程序或驱动程序非常有用。 例如,为 HIDClass 设备支持的所有控件提供自定义接口。 Microsoft DirectInput 是一个示例。
调用这些例程的应用程序或驱动程序可以最有效地获取和设置报告中的所有值。 例如,若要按 HID 使用情况获取所有值数据,必须为每个使用情况调用 HidP_GetUsageValue 。 但是,要按数据索引获取所有值数据,则只需调用 HidP_GetData 一次即可。
应用程序或驱动程序使用集合中的按钮功能数组和值功能数组中指定的数据索引以识别 HID 用法。
另请参阅
- 初始化 HID 报告