]> gitweb.factorcode.org Git - factor.git/commitdiff
Bindings to the HID portion of the Windows DDK.
authorErik Charlebois <erikcharlebois@gmail.com>
Mon, 22 Feb 2010 00:43:09 +0000 (16:43 -0800)
committerErik Charlebois <erikcharlebois@gmail.com>
Mon, 22 Feb 2010 00:43:09 +0000 (16:43 -0800)
basis/windows/ddk/hid/authors.txt [new file with mode: 0644]
basis/windows/ddk/hid/hid.factor [new file with mode: 0644]

diff --git a/basis/windows/ddk/hid/authors.txt b/basis/windows/ddk/hid/authors.txt
new file mode 100644 (file)
index 0000000..67cf648
--- /dev/null
@@ -0,0 +1 @@
+Erik Charlebois
\ No newline at end of file
diff --git a/basis/windows/ddk/hid/hid.factor b/basis/windows/ddk/hid/hid.factor
new file mode 100644 (file)
index 0000000..9c8a55e
--- /dev/null
@@ -0,0 +1,805 @@
+! 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
+   ) ;