共用方式為


解譯 HID 報表

本文說明使用者模式應用程式和內核模式驅動程式如何使用 HidP_XxxHIDClass 支援例程來解譯 HID 報表中的控制數據。

藉由指定其使用量來擷取值數據

若要從 HID 報表擷取值數據,應用程式或驅動程式可以使用下列其中一個 HID 支援例程:

  • HidP_GetScaledUsageValue傳回帶正負號和縮放的值。
  • HidP_GetUsageValue傳回不帶正負號格式的非調整值,或超出其 Normal 範圍的縮放值。
  • HidP_GetUsageValueArray傳回使用值陣列。

若要使用 HidP_GetUsageValueArray 應用程式和驅動程序必須配置以零初始化的緩衝區,這個緩衝區夠大,足以保存使用量值陣列。 位元組中所需的大小是使用量值陣列HIDP_VALUE_CAPS結構的 BitSizeReportCount 成員乘積,四捨五入至最接近的位元組。

擷取設定為 ON 的按鈕使用方式

若要擷取設定為 ON (1) 按鈕的 HID 使用方式,應用程式和驅動程式會呼叫下列其中一個 HID 支援例程:

  • HidP_GetButtons (或HidP_GetUsages) 傳回指定使用量頁面上所有按鈕的使用量識別碼,這些按鈕設定為 ON。
  • HidP_GetButtonsEx (或HidP_GetUsagesEx) 會傳回所有設為 ON 之按鈕的使用方式頁面和使用識別碼。

這些例程會針對目前設定為 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 一次。

應用程式或驅動程式會使用集合的 Button 功能陣列和值功能陣列中指定的數據索引來識別 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 一次。

應用程式或驅動程式會使用集合的 Button 功能陣列和值功能陣列中指定的數據索引來識別 HID 使用方式。

另請參閱