解释 HID 报告
本文介绍了用户模式应用程序和内核模式驱动程序如何使用 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)返回指定使用情况页面上所有设置为 ON 的按钮的使用情况 ID。
- HidP_GetButtonsEx(或 HidP_GetUsagesEx)返回所有设置为 ON 的按钮的使用情况页面和使用情况 ID。
这些例程会返回一个数组,其中包含当前设置为 ON 的所有按钮的所有使用情况信息。 隐式显示,这些例程未返回使用情况的按钮将被设置为 OFF(零)。
要调用这些例程,应用程序和驱动程序必须首先分配用于返回按钮使用情况数组的缓冲区,并将其初始化为零。 应用程序或驱动程序调用 HidP_MaxUsageListLength 来确定报告中指定使用情况页面的按钮使用次数。 如果应用程序或驱动程序指定的使用情况页面为零,例程将返回报告中所有按钮的使用次数。
所需的缓冲区大小(字节)为:
- (对于 HidP_GetButtons)由 HidP_MaxUsageListLength 返回的值乘以 sizeof(USAGE)
- (对于 HidP_GetButtonsEx)由 HidP_MaxUsageListLength 返回的值乘以 sizeof(USAGE_AND_PAGE)
应用程序或驱动程序使用这些例程获取当前设置为 ON 的按钮信息后,可以通过调用以下 HIDClass 支持例程之一来确定按钮当前状态与之前状态之间的差异。 这些例程会返回两个使用情况信息数组之间的差值:
通过数据索引提取和设置控制数据
要使用数据索引在 HID 报告中提取和设置控制数据,应用程序或驱动程序可以使用以下 HIDClass 支持例程:
这些例程对提供“增值”服务的应用程序或驱动程序非常有用。 例如,为 HIDClass 设备支持的所有控件提供自定义接口。 Microsoft DirectInput 就是一个例子。
调用这些例程的应用程序或驱动程序可以最有效地获取和设置报告中的所有值。 例如,要按 HID 使用情况获取所有值数据,必须为每个使用情况调用 HidP_GetUsageValue。 但是,要按数据索引获取所有值数据,则只需调用 HidP_GetData 一次即可。
应用程序或驱动程序使用集合按钮功能数组和值功能数组中指定的数据索引来识别 HID 的使用情况。
通过指定其使用情况来设置值数据
应用程序或驱动程序可通过调用下列 HID 支持例程之一,在正确初始化的 HID 报告中设置值:
- HidP_SetScaledUsageValue 在报告中设置带符号的缩放值。
- HidP_SetUsageValue 在报告中设置值。
- HidP_SetUsageValueArray 设置报告中的使用情况值数组。
通过指定其使用情况来设置按钮状态
应用程序或驱动程序可以通过调用以下 HIDClass 支持例程之一,在正确初始化的 HID 报告中设置按钮状态:
- HidP_SetButtons(或 HidP_SetUsages)将指定的一组按钮设置为 ON (1)。
- HidP_UnsetButtons(或 HidP_UnsetUsages)将指定的一组按钮设置为 OFF(零)。
通过数据索引提取和设置 HID 控制数据
要使用数据索引在 HID 报告中提取和设置控制数据,应用程序或驱动程序可以使用以下 HIDClass 支持例程:
这些例程对提供“增值”服务的应用程序或驱动程序非常有用。 例如,为 HIDClass 设备支持的所有控件提供自定义接口。 Microsoft DirectInput 就是一个例子。
调用这些例程的应用程序或驱动程序可以最有效地获取和设置报告中的所有值。 例如,要按 HID 使用情况获取所有值数据,必须为每个使用情况调用 HidP_GetUsageValue。 但是,要按数据索引获取所有值数据,则只需调用 HidP_GetData 一次即可。
应用程序或驱动程序使用集合按钮功能数组和值功能数组中指定的数据索引来识别 HID 的使用情况。