--- /dev/null
+! Copyright (C) 2010 Erik Charlebois.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.c-types alien.libraries alien.syntax classes.struct
+kernel math windows.types windows.ole32 ;
+IN: windows.ddk.hid
+
+<< "hid" "hid.dll" "stdcall" add-library >>
+LIBRARY: hid
+
+TYPEDEF: LONG NTSTATUS
+TYPEDEF: USHORT USAGE
+TYPEDEF: USAGE* PUSAGE
+
+CONSTANT: HID_USAGE_PAGE_UNDEFINED HEX: 00
+CONSTANT: HID_USAGE_PAGE_GENERIC HEX: 01
+CONSTANT: HID_USAGE_PAGE_SIMULATION HEX: 02
+CONSTANT: HID_USAGE_PAGE_VR HEX: 03
+CONSTANT: HID_USAGE_PAGE_SPORT HEX: 04
+CONSTANT: HID_USAGE_PAGE_GAME HEX: 05
+CONSTANT: HID_USAGE_PAGE_KEYBOARD HEX: 07
+CONSTANT: HID_USAGE_PAGE_LED HEX: 08
+CONSTANT: HID_USAGE_PAGE_BUTTON HEX: 09
+CONSTANT: HID_USAGE_PAGE_ORDINAL HEX: 0A
+CONSTANT: HID_USAGE_PAGE_TELEPHONY HEX: 0B
+CONSTANT: HID_USAGE_PAGE_CONSUMER HEX: 0C
+CONSTANT: HID_USAGE_PAGE_DIGITIZER HEX: 0D
+CONSTANT: HID_USAGE_PAGE_UNICODE HEX: 10
+CONSTANT: HID_USAGE_PAGE_ALPHANUMERIC HEX: 14
+
+CONSTANT: HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE HEX: FFF3
+
+CONSTANT: HID_USAGE_GENERIC_POINTER HEX: 01
+CONSTANT: HID_USAGE_GENERIC_MOUSE HEX: 02
+CONSTANT: HID_USAGE_GENERIC_JOYSTICK HEX: 04
+CONSTANT: HID_USAGE_GENERIC_GAMEPAD HEX: 05
+CONSTANT: HID_USAGE_GENERIC_KEYBOARD HEX: 06
+CONSTANT: HID_USAGE_GENERIC_KEYPAD HEX: 07
+CONSTANT: HID_USAGE_GENERIC_SYSTEM_CTL HEX: 80
+
+CONSTANT: HID_USAGE_GENERIC_X HEX: 30
+CONSTANT: HID_USAGE_GENERIC_Y HEX: 31
+CONSTANT: HID_USAGE_GENERIC_Z HEX: 32
+CONSTANT: HID_USAGE_GENERIC_RX HEX: 33
+CONSTANT: HID_USAGE_GENERIC_RY HEX: 34
+CONSTANT: HID_USAGE_GENERIC_RZ HEX: 35
+CONSTANT: HID_USAGE_GENERIC_SLIDER HEX: 36
+CONSTANT: HID_USAGE_GENERIC_DIAL HEX: 37
+CONSTANT: HID_USAGE_GENERIC_WHEEL HEX: 38
+CONSTANT: HID_USAGE_GENERIC_HATSWITCH HEX: 39
+CONSTANT: HID_USAGE_GENERIC_COUNTED_BUFFER HEX: 3A
+CONSTANT: HID_USAGE_GENERIC_BYTE_COUNT HEX: 3B
+CONSTANT: HID_USAGE_GENERIC_MOTION_WAKEUP HEX: 3C
+CONSTANT: HID_USAGE_GENERIC_VX HEX: 40
+CONSTANT: HID_USAGE_GENERIC_VY HEX: 41
+CONSTANT: HID_USAGE_GENERIC_VZ HEX: 42
+CONSTANT: HID_USAGE_GENERIC_VBRX HEX: 43
+CONSTANT: HID_USAGE_GENERIC_VBRY HEX: 44
+CONSTANT: HID_USAGE_GENERIC_VBRZ HEX: 45
+CONSTANT: HID_USAGE_GENERIC_VNO HEX: 46
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_POWER HEX: 81
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_SLEEP HEX: 82
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_WAKE HEX: 83
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU HEX: 84
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MAIN_MENU HEX: 85
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_APP_MENU HEX: 86
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_HELP_MENU HEX: 87
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_EXIT HEX: 88
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_SELECT HEX: 89
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT HEX: 8A
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_LEFT HEX: 8B
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_UP HEX: 8C
+CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_DOWN HEX: 8D
+
+CONSTANT: HID_USAGE_SIMULATION_RUDDER HEX: BA
+CONSTANT: HID_USAGE_SIMULATION_THROTTLE HEX: BB
+
+CONSTANT: HID_USAGE_KEYBOARD_NOEVENT HEX: 00
+CONSTANT: HID_USAGE_KEYBOARD_ROLLOVER HEX: 01
+CONSTANT: HID_USAGE_KEYBOARD_POSTFAIL HEX: 02
+CONSTANT: HID_USAGE_KEYBOARD_UNDEFINED HEX: 03
+
+CONSTANT: HID_USAGE_KEYBOARD_aA HEX: 04
+CONSTANT: HID_USAGE_KEYBOARD_zZ HEX: 1D
+CONSTANT: HID_USAGE_KEYBOARD_ONE HEX: 1E
+CONSTANT: HID_USAGE_KEYBOARD_ZERO HEX: 27
+CONSTANT: HID_USAGE_KEYBOARD_LCTRL HEX: E0
+CONSTANT: HID_USAGE_KEYBOARD_LSHFT HEX: E1
+CONSTANT: HID_USAGE_KEYBOARD_LALT HEX: E2
+CONSTANT: HID_USAGE_KEYBOARD_LGUI HEX: E3
+CONSTANT: HID_USAGE_KEYBOARD_RCTRL HEX: E4
+CONSTANT: HID_USAGE_KEYBOARD_RSHFT HEX: E5
+CONSTANT: HID_USAGE_KEYBOARD_RALT HEX: E6
+CONSTANT: HID_USAGE_KEYBOARD_RGUI HEX: E7
+CONSTANT: HID_USAGE_KEYBOARD_SCROLL_LOCK HEX: 47
+CONSTANT: HID_USAGE_KEYBOARD_NUM_LOCK HEX: 53
+CONSTANT: HID_USAGE_KEYBOARD_CAPS_LOCK HEX: 39
+CONSTANT: HID_USAGE_KEYBOARD_F1 HEX: 3A
+CONSTANT: HID_USAGE_KEYBOARD_F12 HEX: 45
+CONSTANT: HID_USAGE_KEYBOARD_RETURN HEX: 28
+CONSTANT: HID_USAGE_KEYBOARD_ESCAPE HEX: 29
+CONSTANT: HID_USAGE_KEYBOARD_DELETE HEX: 2A
+CONSTANT: HID_USAGE_KEYBOARD_PRINT_SCREEN HEX: 46
+
+CONSTANT: HID_USAGE_LED_NUM_LOCK HEX: 01
+CONSTANT: HID_USAGE_LED_CAPS_LOCK HEX: 02
+CONSTANT: HID_USAGE_LED_SCROLL_LOCK HEX: 03
+CONSTANT: HID_USAGE_LED_COMPOSE HEX: 04
+CONSTANT: HID_USAGE_LED_KANA HEX: 05
+CONSTANT: HID_USAGE_LED_POWER HEX: 06
+CONSTANT: HID_USAGE_LED_SHIFT HEX: 07
+CONSTANT: HID_USAGE_LED_DO_NOT_DISTURB HEX: 08
+CONSTANT: HID_USAGE_LED_MUTE HEX: 09
+CONSTANT: HID_USAGE_LED_TONE_ENABLE HEX: 0A
+CONSTANT: HID_USAGE_LED_HIGH_CUT_FILTER HEX: 0B
+CONSTANT: HID_USAGE_LED_LOW_CUT_FILTER HEX: 0C
+CONSTANT: HID_USAGE_LED_EQUALIZER_ENABLE HEX: 0D
+CONSTANT: HID_USAGE_LED_SOUND_FIELD_ON HEX: 0E
+CONSTANT: HID_USAGE_LED_SURROUND_FIELD_ON HEX: 0F
+CONSTANT: HID_USAGE_LED_REPEAT HEX: 10
+CONSTANT: HID_USAGE_LED_STEREO HEX: 11
+CONSTANT: HID_USAGE_LED_SAMPLING_RATE_DETECT HEX: 12
+CONSTANT: HID_USAGE_LED_SPINNING HEX: 13
+CONSTANT: HID_USAGE_LED_CAV HEX: 14
+CONSTANT: HID_USAGE_LED_CLV HEX: 15
+CONSTANT: HID_USAGE_LED_RECORDING_FORMAT_DET HEX: 16
+CONSTANT: HID_USAGE_LED_OFF_HOOK HEX: 17
+CONSTANT: HID_USAGE_LED_RING HEX: 18
+CONSTANT: HID_USAGE_LED_MESSAGE_WAITING HEX: 19
+CONSTANT: HID_USAGE_LED_DATA_MODE HEX: 1A
+CONSTANT: HID_USAGE_LED_BATTERY_OPERATION HEX: 1B
+CONSTANT: HID_USAGE_LED_BATTERY_OK HEX: 1C
+CONSTANT: HID_USAGE_LED_BATTERY_LOW HEX: 1D
+CONSTANT: HID_USAGE_LED_SPEAKER HEX: 1E
+CONSTANT: HID_USAGE_LED_HEAD_SET HEX: 1F
+CONSTANT: HID_USAGE_LED_HOLD HEX: 20
+CONSTANT: HID_USAGE_LED_MICROPHONE HEX: 21
+CONSTANT: HID_USAGE_LED_COVERAGE HEX: 22
+CONSTANT: HID_USAGE_LED_NIGHT_MODE HEX: 23
+CONSTANT: HID_USAGE_LED_SEND_CALLS HEX: 24
+CONSTANT: HID_USAGE_LED_CALL_PICKUP HEX: 25
+CONSTANT: HID_USAGE_LED_CONFERENCE HEX: 26
+CONSTANT: HID_USAGE_LED_STAND_BY HEX: 27
+CONSTANT: HID_USAGE_LED_CAMERA_ON HEX: 28
+CONSTANT: HID_USAGE_LED_CAMERA_OFF HEX: 29
+CONSTANT: HID_USAGE_LED_ON_LINE HEX: 2A
+CONSTANT: HID_USAGE_LED_OFF_LINE HEX: 2B
+CONSTANT: HID_USAGE_LED_BUSY HEX: 2C
+CONSTANT: HID_USAGE_LED_READY HEX: 2D
+CONSTANT: HID_USAGE_LED_PAPER_OUT HEX: 2E
+CONSTANT: HID_USAGE_LED_PAPER_JAM HEX: 2F
+CONSTANT: HID_USAGE_LED_REMOTE HEX: 30
+CONSTANT: HID_USAGE_LED_FORWARD HEX: 31
+CONSTANT: HID_USAGE_LED_REVERSE HEX: 32
+CONSTANT: HID_USAGE_LED_STOP HEX: 33
+CONSTANT: HID_USAGE_LED_REWIND HEX: 34
+CONSTANT: HID_USAGE_LED_FAST_FORWARD HEX: 35
+CONSTANT: HID_USAGE_LED_PLAY HEX: 36
+CONSTANT: HID_USAGE_LED_PAUSE HEX: 37
+CONSTANT: HID_USAGE_LED_RECORD HEX: 38
+CONSTANT: HID_USAGE_LED_ERROR HEX: 39
+CONSTANT: HID_USAGE_LED_SELECTED_INDICATOR HEX: 3A
+CONSTANT: HID_USAGE_LED_IN_USE_INDICATOR HEX: 3B
+CONSTANT: HID_USAGE_LED_MULTI_MODE_INDICATOR HEX: 3C
+CONSTANT: HID_USAGE_LED_INDICATOR_ON HEX: 3D
+CONSTANT: HID_USAGE_LED_INDICATOR_FLASH HEX: 3E
+CONSTANT: HID_USAGE_LED_INDICATOR_SLOW_BLINK HEX: 3F
+CONSTANT: HID_USAGE_LED_INDICATOR_FAST_BLINK HEX: 40
+CONSTANT: HID_USAGE_LED_INDICATOR_OFF HEX: 41
+CONSTANT: HID_USAGE_LED_FLASH_ON_TIME HEX: 42
+CONSTANT: HID_USAGE_LED_SLOW_BLINK_ON_TIME HEX: 43
+CONSTANT: HID_USAGE_LED_SLOW_BLINK_OFF_TIME HEX: 44
+CONSTANT: HID_USAGE_LED_FAST_BLINK_ON_TIME HEX: 45
+CONSTANT: HID_USAGE_LED_FAST_BLINK_OFF_TIME HEX: 46
+CONSTANT: HID_USAGE_LED_INDICATOR_COLOR HEX: 47
+CONSTANT: HID_USAGE_LED_RED HEX: 48
+CONSTANT: HID_USAGE_LED_GREEN HEX: 49
+CONSTANT: HID_USAGE_LED_AMBER HEX: 4A
+CONSTANT: HID_USAGE_LED_GENERIC_INDICATOR HEX: 4B
+
+CONSTANT: HID_USAGE_TELEPHONY_PHONE HEX: 01
+CONSTANT: HID_USAGE_TELEPHONY_ANSWERING_MACHINE HEX: 02
+CONSTANT: HID_USAGE_TELEPHONY_MESSAGE_CONTROLS HEX: 03
+CONSTANT: HID_USAGE_TELEPHONY_HANDSET HEX: 04
+CONSTANT: HID_USAGE_TELEPHONY_HEADSET HEX: 05
+CONSTANT: HID_USAGE_TELEPHONY_KEYPAD HEX: 06
+CONSTANT: HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON HEX: 07
+CONSTANT: HID_USAGE_TELEPHONY_REDIAL HEX: 24
+CONSTANT: HID_USAGE_TELEPHONY_TRANSFER HEX: 25
+CONSTANT: HID_USAGE_TELEPHONY_DROP HEX: 26
+CONSTANT: HID_USAGE_TELEPHONY_LINE HEX: 2A
+CONSTANT: HID_USAGE_TELEPHONY_RING_ENABLE HEX: 2D
+CONSTANT: HID_USAGE_TELEPHONY_SEND HEX: 31
+CONSTANT: HID_USAGE_TELEPHONY_KEYPAD_0 HEX: B0
+CONSTANT: HID_USAGE_TELEPHONY_KEYPAD_D HEX: BF
+CONSTANT: HID_USAGE_TELEPHONY_HOST_AVAILABLE HEX: F1
+
+CONSTANT: HID_USAGE_MS_BTH_HF_DIALNUMBER HEX: 21
+CONSTANT: HID_USAGE_MS_BTH_HF_DIALMEMORY HEX: 22
+
+CONSTANT: HID_USAGE_CONSUMERCTRL HEX: 01
+CONSTANT: HID_USAGE_DIGITIZER_PEN HEX: 02
+CONSTANT: HID_USAGE_DIGITIZER_IN_RANGE HEX: 32
+CONSTANT: HID_USAGE_DIGITIZER_TIP_SWITCH HEX: 42
+CONSTANT: HID_USAGE_DIGITIZER_BARREL_SWITCH HEX: 44
+
+CONSTANT: HIDP_LINK_COLLECTION_ROOT -1
+CONSTANT: HIDP_LINK_COLLECTION_UNSPECIFIED 0
+
+C-ENUM:
+ HidP_Input
+ HidP_Output
+ HidP_Feature ;
+TYPEDEF: int HIDP_REPORT_TYPE
+
+STRUCT: USAGE_AND_PAGE
+ { Usage USAGE }
+ { UsagePage USAGE } ;
+TYPEDEF: USAGE_AND_PAGE* PUSAGE_AND_PAGE
+
+: HidP_IsSameUsageAndPage ( u1 u2 -- ? ) = ; inline
+
+STRUCT: HIDP_BUTTONS_CAPS_range
+ { UsageMin USAGE }
+ { UsageMax USAGE }
+ { StringMin USHORT }
+ { StringMax USHORT }
+ { DesignatorMin USHORT }
+ { DesignatorMax USHORT }
+ { DataIndexMin USHORT }
+ { DataIndexMax USHORT } ;
+
+STRUCT: HIDP_BUTTONS_CAPS_not_range
+ { Usage USAGE }
+ { Reserved1 USAGE }
+ { StringIndex USHORT }
+ { Reserved2 USHORT }
+ { DesignatorIndex USHORT }
+ { Reserved3 USHORT }
+ { DataIndex USHORT }
+ { Reserved4 USHORT } ;
+
+UNION-STRUCT: HIDP_BUTTONS_CAPS_union
+ { Range HIDP_BUTTONS_CAPS_range }
+ { NotRange HIDP_BUTTONS_CAPS_not_range } ;
+
+STRUCT: HIDP_BUTTON_CAPS
+ { UsagePage USAGE }
+ { ReportID UCHAR }
+ { IsAlias BOOLEAN }
+ { BitField USHORT }
+ { LinkCollection USHORT }
+ { LinkUsage USAGE }
+ { LinkUsagePage USAGE }
+ { IsRange BOOLEAN }
+ { IsStringRange BOOLEAN }
+ { IsDesignatorRange BOOLEAN }
+ { IsAbsolute BOOLEAN }
+ { Reserved ULONG[10] }
+ { Union HIDP_BUTTONS_CAPS_union } ;
+TYPEDEF: HIDP_BUTTON_CAPS* PHIDP_BUTTON_CAPS
+
+STRUCT: HIDP_VALUE_CAPS_range
+ { UsageMin USAGE }
+ { UsageMax USAGE }
+ { StringMin USHORT }
+ { StringMax USHORT }
+ { DesignatorMin USHORT }
+ { DesignatorMax USHORT }
+ { DataIndexMin USHORT }
+ { DataIndexMax USHORT } ;
+
+STRUCT: HIDP_VALUE_CAPS_not_range
+ { Usage USAGE }
+ { Reserved1 USAGE }
+ { StringIndex USHORT }
+ { Reserved2 USHORT }
+ { DesignatorIndex USHORT }
+ { Reserved3 USHORT }
+ { DataIndex USHORT }
+ { Reserved4 USHORT } ;
+
+UNION-STRUCT: HIDP_VALUE_CAPS_union
+ { Range HIDP_VALUE_CAPS_range }
+ { NotRange HIDP_VALUE_CAPS_not_range } ;
+
+STRUCT: HIDP_VALUE_CAPS
+ { UsagePage USAGE }
+ { ReportID UCHAR }
+ { IsAlias BOOLEAN }
+ { BitField USHORT }
+ { LinkCollection USHORT }
+ { LinkUsage USAGE }
+ { LinkUsagePage USAGE }
+ { IsRange BOOLEAN }
+ { IsStringRange BOOLEAN }
+ { IsDesignatorRange BOOLEAN }
+ { IsAbsolute BOOLEAN }
+ { HasNull BOOLEAN }
+ { Reserved UCHAR }
+ { BitSize USHORT }
+ { ReportCount USHORT }
+ { Reserved2 USHORT[5] }
+ { UnitsExp ULONG }
+ { Units ULONG }
+ { LogicalMin LONG }
+ { LogicalMax LONG }
+ { PhysicalMin LONG }
+ { PhysicalMax LONG }
+ { Union HIDP_VALUE_CAPS_union } ;
+TYPEDEF: HIDP_VALUE_CAPS* PHIDP_VALUE_CAPS
+
+STRUCT: HIDP_LINK_COLLECTION_NODE
+ { LinkUsage USAGE }
+ { LinkUsagePage USAGE }
+ { Parent USHORT }
+ { NumberOfChildren USHORT }
+ { NextSibling USHORT }
+ { FirstChild USHORT }
+ { CollectionTypeIsAliasBitfield ULONG }
+ { UserContext PVOID } ;
+TYPEDEF: HIDP_LINK_COLLECTION_NODE* PHIDP_LINK_COLLECTION_NODE
+
+TYPEDEF: PUCHAR PHIDP_REPORT_DESCRIPTOR
+C-TYPE: HIDP_PREPARSED_DATA
+TYPEDEF: HIDP_PREPARSED_DATA* PHIDP_PREPARSED_DATA
+
+STRUCT: HIDP_CAPS
+ { Usage USAGE }
+ { UsagePage USAGE }
+ { InputReportByteLength USHORT }
+ { OutputReportByteLength USHORT }
+ { FeatureReportByteLength USHORT }
+ { Reserved USHORT[17] }
+ { NumberLinkCollectionNodes USHORT }
+ { NumberInputButtonCaps USHORT }
+ { NumberInputValueCaps USHORT }
+ { NumberInputDataIndices USHORT }
+ { NumberOutputButtonCaps USHORT }
+ { NumberOutputValueCaps USHORT }
+ { NumberOutputDataIndices USHORT }
+ { NumberFeatureButtonCaps USHORT }
+ { NumberFeatureValueCaps USHORT }
+ { NumberFeatureDataIndices USHORT } ;
+TYPEDEF: HIDP_CAPS* PHIDP_CAPS
+
+STRUCT: HIDP_DATA
+ { DataIndex USHORT }
+ { Reserved USHORT }
+ { RawValue ULONG } ;
+TYPEDEF: HIDP_DATA* PHIDP_DATA
+
+STRUCT: HIDP_UNKNOWN_TOKEN
+ { Token UCHAR }
+ { Reserved UCHAR[3] }
+ { BitField ULONG } ;
+TYPEDEF: HIDP_UNKNOWN_TOKEN* PHIDP_UNKNOWN_TOKEN
+
+STRUCT: HIDP_EXTENDED_ATTRIBUTES
+ { NumGlobalUnknowns UCHAR }
+ { Reserved UCHAR[3] }
+ { GlobalUnknowns PHIDP_UNKNOWN_TOKEN }
+ { Data ULONG[1] } ;
+TYPEDEF: HIDP_EXTENDED_ATTRIBUTES* PHIDP_EXTENDED_ATTRIBUTES
+
+FUNCTION: NTSTATUS
+HidP_GetCaps (
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PHIDP_CAPS Capabilities
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetLinkCollectionNodes (
+ PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes,
+ PULONG LinkCollectionNodesLength,
+ PHIDP_PREPARSED_DATA PreparsedData
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetSpecificButtonCaps (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ PHIDP_BUTTON_CAPS ButtonCaps,
+ PUSHORT ButtonCapsLength,
+ PHIDP_PREPARSED_DATA PreparsedData
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetButtonCaps (
+ HIDP_REPORT_TYPE ReportType,
+ PHIDP_BUTTON_CAPS ButtonCaps,
+ PUSHORT ButtonCapsLength,
+ PHIDP_PREPARSED_DATA PreparsedData
+) ;
+
+FUNCTION: NTSTATUS
+HidP_GetSpecificValueCaps (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ PHIDP_VALUE_CAPS ValueCaps,
+ PUSHORT ValueCapsLength,
+ PHIDP_PREPARSED_DATA PreparsedData
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetValueCaps (
+ HIDP_REPORT_TYPE ReportType,
+ PHIDP_VALUE_CAPS ValueCaps,
+ PUSHORT ValueCapsLength,
+ PHIDP_PREPARSED_DATA PreparsedData
+) ;
+
+FUNCTION: NTSTATUS
+HidP_GetExtendedAttributes (
+ HIDP_REPORT_TYPE ReportType,
+ USHORT DataIndex,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PHIDP_EXTENDED_ATTRIBUTES Attributes,
+ PULONG LengthAttributes
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_InitializeReportForID (
+ HIDP_REPORT_TYPE ReportType,
+ UCHAR ReportID,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_SetData (
+ HIDP_REPORT_TYPE ReportType,
+ PHIDP_DATA DataList,
+ PULONG DataLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetData (
+ HIDP_REPORT_TYPE ReportType,
+ PHIDP_DATA DataList,
+ PULONG DataLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: ULONG
+HidP_MaxDataListLength (
+ HIDP_REPORT_TYPE ReportType,
+ PHIDP_PREPARSED_DATA PreparsedData
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_SetUsages (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ PUSAGE UsageList,
+ PULONG UsageLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+ALIAS: HidP_SetButtons HidP_SetUsages
+
+FUNCTION: NTSTATUS
+HidP_UnsetUsages (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ PUSAGE UsageList,
+ PULONG UsageLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+ALIAS: HidP_UnsetButtons HidP_UnsetUsages
+
+FUNCTION: NTSTATUS
+HidP_GetUsages (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ PUSAGE UsageList,
+ PULONG UsageLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+ALIAS: HidP_GetButtons HidP_GetUsages
+
+FUNCTION: NTSTATUS
+HidP_GetUsagesEx (
+ HIDP_REPORT_TYPE ReportType,
+ USHORT LinkCollection,
+ PUSAGE_AND_PAGE ButtonList,
+ ULONG* UsageLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+ALIAS: HidP_GetButtonsEx HidP_GetUsagesEx
+
+FUNCTION: ULONG
+HidP_MaxUsageListLength (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ PHIDP_PREPARSED_DATA PreparsedData
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_SetUsageValue (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ ULONG UsageValue,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_SetScaledUsageValue (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ LONG UsageValue,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_SetUsageValueArray (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ PCHAR UsageValue,
+ USHORT UsageValueByteLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+
+FUNCTION: NTSTATUS
+HidP_GetUsageValue (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ PULONG UsageValue,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetScaledUsageValue (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ PLONG UsageValue,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_GetUsageValueArray (
+ HIDP_REPORT_TYPE ReportType,
+ USAGE UsagePage,
+ USHORT LinkCollection,
+ USAGE Usage,
+ PCHAR UsageValue,
+ USHORT UsageValueByteLength,
+ PHIDP_PREPARSED_DATA PreparsedData,
+ PCHAR Report,
+ ULONG ReportLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_UsageListDifference (
+ PUSAGE PreviousUsageList,
+ PUSAGE CurrentUsageList,
+ PUSAGE BreakUsageList,
+ PUSAGE MakeUsageList,
+ ULONG UsageListLength
+ ) ;
+
+FUNCTION: NTSTATUS
+HidP_UsageAndPageListDifference (
+ PUSAGE_AND_PAGE PreviousUsageList,
+ PUSAGE_AND_PAGE CurrentUsageList,
+ PUSAGE_AND_PAGE BreakUsageList,
+ PUSAGE_AND_PAGE MakeUsageList,
+ ULONG UsageListLength
+ ) ;
+
+C-ENUM:
+ HidP_Keyboard_Break
+ HidP_Keyboard_Make ;
+TYPEDEF: int HIDP_KEYBOARD_DIRECTION
+
+STRUCT: HIDP_KEYBOARD_MODIFIER_STATE
+ { ul ULONG } ;
+TYPEDEF: HIDP_KEYBOARD_MODIFIER_STATE* PHIDP_KEYBOARD_MODIFIER_STATE
+
+CALLBACK: BOOLEAN PHIDP_INSERT_SCANCODES (
+ PVOID Context,
+ PCHAR NewScanCodes,
+ ULONG Length ) ;
+
+FUNCTION: NTSTATUS
+HidP_TranslateUsageAndPagesToI8042ScanCodes (
+ PUSAGE_AND_PAGE ChangedUsageList,
+ ULONG UsageListLength,
+ HIDP_KEYBOARD_DIRECTION KeyAction,
+ PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
+ PHIDP_INSERT_SCANCODES InsertCodesProcedure,
+ PVOID InsertCodesContext
+ ) ;
+
+
+FUNCTION: NTSTATUS
+HidP_TranslateUsagesToI8042ScanCodes (
+ PUSAGE ChangedUsageList,
+ ULONG UsageListLength,
+ HIDP_KEYBOARD_DIRECTION KeyAction,
+ PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
+ PHIDP_INSERT_SCANCODES InsertCodesProcedure,
+ PVOID InsertCodesContext
+ ) ;
+
+CONSTANT: FACILITY_HID_ERROR_CODE HEX: 11
+: HIDP_ERROR_CODES ( SEV CODE -- HRESULT )
+ [ 28 shift ] dip bitor FACILITY_HID_ERROR_CODE 16 shift bitor ; inline
+: HIDP_STATUS_SUCCESS ( -- HRESULT ) HEX: 0 HEX: 0 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_NULL ( -- HRESULT ) HEX: 8 HEX: 1 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_INVALID_PREPARSED_DATA ( -- HRESULT ) HEX: C HEX: 1 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_INVALID_REPORT_TYPE ( -- HRESULT ) HEX: C HEX: 2 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_INVALID_REPORT_LENGTH ( -- HRESULT ) HEX: C HEX: 3 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_USAGE_NOT_FOUND ( -- HRESULT ) HEX: C HEX: 4 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_VALUE_OUT_OF_RANGE ( -- HRESULT ) HEX: C HEX: 5 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_BAD_LOG_PHY_VALUES ( -- HRESULT ) HEX: C HEX: 6 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_BUFFER_TOO_SMALL ( -- HRESULT ) HEX: C HEX: 7 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_INTERNAL_ERROR ( -- HRESULT ) HEX: C HEX: 8 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_I8042_TRANS_UNKNOWN ( -- HRESULT ) HEX: C HEX: 9 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_INCOMPATIBLE_REPORT_ID ( -- HRESULT ) HEX: C HEX: A HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_NOT_VALUE_ARRAY ( -- HRESULT ) HEX: C HEX: B HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_IS_VALUE_ARRAY ( -- HRESULT ) HEX: C HEX: C HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_DATA_INDEX_NOT_FOUND ( -- HRESULT ) HEX: C HEX: D HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE ( -- HRESULT ) HEX: C HEX: E HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_BUTTON_NOT_PRESSED ( -- HRESULT ) HEX: C HEX: F HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_REPORT_DOES_NOT_EXIST ( -- HRESULT ) HEX: C HEX: 10 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_NOT_IMPLEMENTED ( -- HRESULT ) HEX: C HEX: 20 HIDP_ERROR_CODES ; inline
+: HIDP_STATUS_I8242_TRANS_UNKNOWN ( -- HRESULT ) HIDP_STATUS_I8042_TRANS_UNKNOWN ; inline
+
+STRUCT: HIDD_CONFIGURATION
+ { cookie PVOID }
+ { size ULONG }
+ { RingBufferSize ULONG } ;
+TYPEDEF: HIDD_CONFIGURATION* PHIDD_CONFIGURATION
+
+STRUCT: HIDD_ATTRIBUTES
+ { Size ULONG }
+ { VendorID USHORT }
+ { ProductID USHORT }
+ { VersionNumber USHORT } ;
+TYPEDEF: HIDD_ATTRIBUTES* PHIDD_ATTRIBUTES
+
+FUNCTION: BOOLEAN
+HidD_GetAttributes (
+ HANDLE HidDeviceObject,
+ PHIDD_ATTRIBUTES Attributes
+ ) ;
+
+FUNCTION: void
+HidD_GetHidGuid (
+ LPGUID HidGuid
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetPreparsedData (
+ HANDLE HidDeviceObject,
+ PHIDP_PREPARSED_DATA* PreparsedData
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_FreePreparsedData (
+ PHIDP_PREPARSED_DATA PreparsedData
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_FlushQueue (
+ HANDLE HidDeviceObject
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetConfiguration (
+ HANDLE HidDeviceObject,
+ PHIDD_CONFIGURATION Configuration,
+ ULONG ConfigurationLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_SetConfiguration (
+ HANDLE HidDeviceObject,
+ PHIDD_CONFIGURATION Configuration,
+ ULONG ConfigurationLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetFeature (
+ HANDLE HidDeviceObject,
+ PVOID ReportBuffer,
+ ULONG ReportBufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_SetFeature (
+ HANDLE HidDeviceObject,
+ PVOID ReportBuffer,
+ ULONG ReportBufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetInputReport (
+ HANDLE HidDeviceObject,
+ PVOID ReportBuffer,
+ ULONG ReportBufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_SetOutputReport (
+ HANDLE HidDeviceObject,
+ PVOID ReportBuffer,
+ ULONG ReportBufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetNumInputBuffers (
+ HANDLE HidDeviceObject,
+ PULONG NumberBuffers
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_SetNumInputBuffers (
+ HANDLE HidDeviceObject,
+ ULONG NumberBuffers
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetPhysicalDescriptor (
+ HANDLE HidDeviceObject,
+ PVOID Buffer,
+ ULONG BufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetManufacturerString (
+ HANDLE HidDeviceObject,
+ PVOID Buffer,
+ ULONG BufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetProductString (
+ HANDLE HidDeviceObject,
+ PVOID Buffer,
+ ULONG BufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetIndexedString (
+ HANDLE HidDeviceObject,
+ ULONG StringIndex,
+ PVOID Buffer,
+ ULONG BufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetSerialNumberString (
+ HANDLE HidDeviceObject,
+ PVOID Buffer,
+ ULONG BufferLength
+ ) ;
+
+FUNCTION: BOOLEAN
+HidD_GetMsGenreDescriptor (
+ HANDLE HidDeviceObject,
+ PVOID Buffer,
+ ULONG BufferLength
+ ) ;