]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/ddk/hid/hid.factor
use radix literals
[factor.git] / basis / windows / ddk / hid / hid.factor
1 ! Copyright (C) 2010 Erik Charlebois.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.libraries alien.syntax
4 classes.struct kernel math windows.types windows.ole32 ;
5 IN: windows.ddk.hid
6
7 << "hid" "hid.dll" stdcall add-library >>
8 LIBRARY: hid
9
10 TYPEDEF: LONG   NTSTATUS
11 TYPEDEF: USHORT USAGE
12 TYPEDEF: USAGE* PUSAGE
13
14 CONSTANT: HID_USAGE_PAGE_UNDEFINED      0x00
15 CONSTANT: HID_USAGE_PAGE_GENERIC        0x01
16 CONSTANT: HID_USAGE_PAGE_SIMULATION     0x02
17 CONSTANT: HID_USAGE_PAGE_VR             0x03
18 CONSTANT: HID_USAGE_PAGE_SPORT          0x04
19 CONSTANT: HID_USAGE_PAGE_GAME           0x05
20 CONSTANT: HID_USAGE_PAGE_KEYBOARD       0x07
21 CONSTANT: HID_USAGE_PAGE_LED            0x08
22 CONSTANT: HID_USAGE_PAGE_BUTTON         0x09
23 CONSTANT: HID_USAGE_PAGE_ORDINAL        0x0A
24 CONSTANT: HID_USAGE_PAGE_TELEPHONY      0x0B
25 CONSTANT: HID_USAGE_PAGE_CONSUMER       0x0C
26 CONSTANT: HID_USAGE_PAGE_DIGITIZER      0x0D
27 CONSTANT: HID_USAGE_PAGE_UNICODE        0x10
28 CONSTANT: HID_USAGE_PAGE_ALPHANUMERIC   0x14
29
30 CONSTANT: HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE  0xFFF3
31
32 CONSTANT: HID_USAGE_GENERIC_POINTER      0x01
33 CONSTANT: HID_USAGE_GENERIC_MOUSE        0x02
34 CONSTANT: HID_USAGE_GENERIC_JOYSTICK     0x04
35 CONSTANT: HID_USAGE_GENERIC_GAMEPAD      0x05
36 CONSTANT: HID_USAGE_GENERIC_KEYBOARD     0x06
37 CONSTANT: HID_USAGE_GENERIC_KEYPAD       0x07
38 CONSTANT: HID_USAGE_GENERIC_SYSTEM_CTL   0x80
39
40 CONSTANT: HID_USAGE_GENERIC_X                        0x30
41 CONSTANT: HID_USAGE_GENERIC_Y                        0x31
42 CONSTANT: HID_USAGE_GENERIC_Z                        0x32
43 CONSTANT: HID_USAGE_GENERIC_RX                       0x33
44 CONSTANT: HID_USAGE_GENERIC_RY                       0x34
45 CONSTANT: HID_USAGE_GENERIC_RZ                       0x35
46 CONSTANT: HID_USAGE_GENERIC_SLIDER                   0x36
47 CONSTANT: HID_USAGE_GENERIC_DIAL                     0x37
48 CONSTANT: HID_USAGE_GENERIC_WHEEL                    0x38
49 CONSTANT: HID_USAGE_GENERIC_HATSWITCH                0x39
50 CONSTANT: HID_USAGE_GENERIC_COUNTED_BUFFER           0x3A
51 CONSTANT: HID_USAGE_GENERIC_BYTE_COUNT               0x3B
52 CONSTANT: HID_USAGE_GENERIC_MOTION_WAKEUP            0x3C
53 CONSTANT: HID_USAGE_GENERIC_VX                       0x40
54 CONSTANT: HID_USAGE_GENERIC_VY                       0x41
55 CONSTANT: HID_USAGE_GENERIC_VZ                       0x42
56 CONSTANT: HID_USAGE_GENERIC_VBRX                     0x43
57 CONSTANT: HID_USAGE_GENERIC_VBRY                     0x44
58 CONSTANT: HID_USAGE_GENERIC_VBRZ                     0x45
59 CONSTANT: HID_USAGE_GENERIC_VNO                      0x46
60 CONSTANT: HID_USAGE_GENERIC_SYSCTL_POWER             0x81
61 CONSTANT: HID_USAGE_GENERIC_SYSCTL_SLEEP             0x82
62 CONSTANT: HID_USAGE_GENERIC_SYSCTL_WAKE              0x83
63 CONSTANT: HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU      0x84
64 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MAIN_MENU         0x85
65 CONSTANT: HID_USAGE_GENERIC_SYSCTL_APP_MENU          0x86
66 CONSTANT: HID_USAGE_GENERIC_SYSCTL_HELP_MENU         0x87
67 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_EXIT         0x88
68 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_SELECT       0x89
69 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT        0x8A
70 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_LEFT         0x8B
71 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_UP           0x8C
72 CONSTANT: HID_USAGE_GENERIC_SYSCTL_MENU_DOWN         0x8D
73
74 CONSTANT: HID_USAGE_SIMULATION_RUDDER                0xBA
75 CONSTANT: HID_USAGE_SIMULATION_THROTTLE              0xBB
76
77 CONSTANT: HID_USAGE_KEYBOARD_NOEVENT     0x00
78 CONSTANT: HID_USAGE_KEYBOARD_ROLLOVER    0x01
79 CONSTANT: HID_USAGE_KEYBOARD_POSTFAIL    0x02
80 CONSTANT: HID_USAGE_KEYBOARD_UNDEFINED   0x03
81
82 CONSTANT: HID_USAGE_KEYBOARD_aA          0x04
83 CONSTANT: HID_USAGE_KEYBOARD_zZ          0x1D
84 CONSTANT: HID_USAGE_KEYBOARD_ONE         0x1E
85 CONSTANT: HID_USAGE_KEYBOARD_ZERO        0x27
86 CONSTANT: HID_USAGE_KEYBOARD_LCTRL       0xE0
87 CONSTANT: HID_USAGE_KEYBOARD_LSHFT       0xE1
88 CONSTANT: HID_USAGE_KEYBOARD_LALT        0xE2
89 CONSTANT: HID_USAGE_KEYBOARD_LGUI        0xE3
90 CONSTANT: HID_USAGE_KEYBOARD_RCTRL       0xE4
91 CONSTANT: HID_USAGE_KEYBOARD_RSHFT       0xE5
92 CONSTANT: HID_USAGE_KEYBOARD_RALT        0xE6
93 CONSTANT: HID_USAGE_KEYBOARD_RGUI        0xE7
94 CONSTANT: HID_USAGE_KEYBOARD_SCROLL_LOCK 0x47
95 CONSTANT: HID_USAGE_KEYBOARD_NUM_LOCK    0x53
96 CONSTANT: HID_USAGE_KEYBOARD_CAPS_LOCK   0x39
97 CONSTANT: HID_USAGE_KEYBOARD_F1          0x3A
98 CONSTANT: HID_USAGE_KEYBOARD_F12         0x45
99 CONSTANT: HID_USAGE_KEYBOARD_RETURN      0x28
100 CONSTANT: HID_USAGE_KEYBOARD_ESCAPE      0x29
101 CONSTANT: HID_USAGE_KEYBOARD_DELETE      0x2A
102 CONSTANT: HID_USAGE_KEYBOARD_PRINT_SCREEN 0x46
103
104 CONSTANT: HID_USAGE_LED_NUM_LOCK               0x01
105 CONSTANT: HID_USAGE_LED_CAPS_LOCK              0x02
106 CONSTANT: HID_USAGE_LED_SCROLL_LOCK            0x03
107 CONSTANT: HID_USAGE_LED_COMPOSE                0x04
108 CONSTANT: HID_USAGE_LED_KANA                   0x05
109 CONSTANT: HID_USAGE_LED_POWER                  0x06
110 CONSTANT: HID_USAGE_LED_SHIFT                  0x07
111 CONSTANT: HID_USAGE_LED_DO_NOT_DISTURB         0x08
112 CONSTANT: HID_USAGE_LED_MUTE                   0x09
113 CONSTANT: HID_USAGE_LED_TONE_ENABLE            0x0A
114 CONSTANT: HID_USAGE_LED_HIGH_CUT_FILTER        0x0B
115 CONSTANT: HID_USAGE_LED_LOW_CUT_FILTER         0x0C
116 CONSTANT: HID_USAGE_LED_EQUALIZER_ENABLE       0x0D
117 CONSTANT: HID_USAGE_LED_SOUND_FIELD_ON         0x0E
118 CONSTANT: HID_USAGE_LED_SURROUND_FIELD_ON      0x0F
119 CONSTANT: HID_USAGE_LED_REPEAT                 0x10
120 CONSTANT: HID_USAGE_LED_STEREO                 0x11
121 CONSTANT: HID_USAGE_LED_SAMPLING_RATE_DETECT   0x12
122 CONSTANT: HID_USAGE_LED_SPINNING               0x13
123 CONSTANT: HID_USAGE_LED_CAV                    0x14
124 CONSTANT: HID_USAGE_LED_CLV                    0x15
125 CONSTANT: HID_USAGE_LED_RECORDING_FORMAT_DET   0x16
126 CONSTANT: HID_USAGE_LED_OFF_HOOK               0x17
127 CONSTANT: HID_USAGE_LED_RING                   0x18
128 CONSTANT: HID_USAGE_LED_MESSAGE_WAITING        0x19
129 CONSTANT: HID_USAGE_LED_DATA_MODE              0x1A
130 CONSTANT: HID_USAGE_LED_BATTERY_OPERATION      0x1B
131 CONSTANT: HID_USAGE_LED_BATTERY_OK             0x1C
132 CONSTANT: HID_USAGE_LED_BATTERY_LOW            0x1D
133 CONSTANT: HID_USAGE_LED_SPEAKER                0x1E
134 CONSTANT: HID_USAGE_LED_HEAD_SET               0x1F
135 CONSTANT: HID_USAGE_LED_HOLD                   0x20
136 CONSTANT: HID_USAGE_LED_MICROPHONE             0x21
137 CONSTANT: HID_USAGE_LED_COVERAGE               0x22
138 CONSTANT: HID_USAGE_LED_NIGHT_MODE             0x23
139 CONSTANT: HID_USAGE_LED_SEND_CALLS             0x24
140 CONSTANT: HID_USAGE_LED_CALL_PICKUP            0x25
141 CONSTANT: HID_USAGE_LED_CONFERENCE             0x26
142 CONSTANT: HID_USAGE_LED_STAND_BY               0x27
143 CONSTANT: HID_USAGE_LED_CAMERA_ON              0x28
144 CONSTANT: HID_USAGE_LED_CAMERA_OFF             0x29
145 CONSTANT: HID_USAGE_LED_ON_LINE                0x2A
146 CONSTANT: HID_USAGE_LED_OFF_LINE               0x2B
147 CONSTANT: HID_USAGE_LED_BUSY                   0x2C
148 CONSTANT: HID_USAGE_LED_READY                  0x2D
149 CONSTANT: HID_USAGE_LED_PAPER_OUT              0x2E
150 CONSTANT: HID_USAGE_LED_PAPER_JAM              0x2F
151 CONSTANT: HID_USAGE_LED_REMOTE                 0x30
152 CONSTANT: HID_USAGE_LED_FORWARD                0x31
153 CONSTANT: HID_USAGE_LED_REVERSE                0x32
154 CONSTANT: HID_USAGE_LED_STOP                   0x33
155 CONSTANT: HID_USAGE_LED_REWIND                 0x34
156 CONSTANT: HID_USAGE_LED_FAST_FORWARD           0x35
157 CONSTANT: HID_USAGE_LED_PLAY                   0x36
158 CONSTANT: HID_USAGE_LED_PAUSE                  0x37
159 CONSTANT: HID_USAGE_LED_RECORD                 0x38
160 CONSTANT: HID_USAGE_LED_ERROR                  0x39
161 CONSTANT: HID_USAGE_LED_SELECTED_INDICATOR     0x3A
162 CONSTANT: HID_USAGE_LED_IN_USE_INDICATOR       0x3B
163 CONSTANT: HID_USAGE_LED_MULTI_MODE_INDICATOR   0x3C
164 CONSTANT: HID_USAGE_LED_INDICATOR_ON           0x3D
165 CONSTANT: HID_USAGE_LED_INDICATOR_FLASH        0x3E
166 CONSTANT: HID_USAGE_LED_INDICATOR_SLOW_BLINK   0x3F
167 CONSTANT: HID_USAGE_LED_INDICATOR_FAST_BLINK   0x40
168 CONSTANT: HID_USAGE_LED_INDICATOR_OFF          0x41
169 CONSTANT: HID_USAGE_LED_FLASH_ON_TIME          0x42
170 CONSTANT: HID_USAGE_LED_SLOW_BLINK_ON_TIME     0x43
171 CONSTANT: HID_USAGE_LED_SLOW_BLINK_OFF_TIME    0x44
172 CONSTANT: HID_USAGE_LED_FAST_BLINK_ON_TIME     0x45
173 CONSTANT: HID_USAGE_LED_FAST_BLINK_OFF_TIME    0x46
174 CONSTANT: HID_USAGE_LED_INDICATOR_COLOR        0x47
175 CONSTANT: HID_USAGE_LED_RED                    0x48
176 CONSTANT: HID_USAGE_LED_GREEN                  0x49
177 CONSTANT: HID_USAGE_LED_AMBER                  0x4A
178 CONSTANT: HID_USAGE_LED_GENERIC_INDICATOR      0x4B
179
180 CONSTANT: HID_USAGE_TELEPHONY_PHONE                  0x01
181 CONSTANT: HID_USAGE_TELEPHONY_ANSWERING_MACHINE      0x02
182 CONSTANT: HID_USAGE_TELEPHONY_MESSAGE_CONTROLS       0x03
183 CONSTANT: HID_USAGE_TELEPHONY_HANDSET                0x04
184 CONSTANT: HID_USAGE_TELEPHONY_HEADSET                0x05
185 CONSTANT: HID_USAGE_TELEPHONY_KEYPAD                 0x06
186 CONSTANT: HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON    0x07
187 CONSTANT: HID_USAGE_TELEPHONY_REDIAL                 0x24
188 CONSTANT: HID_USAGE_TELEPHONY_TRANSFER               0x25
189 CONSTANT: HID_USAGE_TELEPHONY_DROP                   0x26
190 CONSTANT: HID_USAGE_TELEPHONY_LINE                   0x2A
191 CONSTANT: HID_USAGE_TELEPHONY_RING_ENABLE            0x2D
192 CONSTANT: HID_USAGE_TELEPHONY_SEND                   0x31
193 CONSTANT: HID_USAGE_TELEPHONY_KEYPAD_0               0xB0
194 CONSTANT: HID_USAGE_TELEPHONY_KEYPAD_D               0xBF
195 CONSTANT: HID_USAGE_TELEPHONY_HOST_AVAILABLE         0xF1
196
197 CONSTANT: HID_USAGE_MS_BTH_HF_DIALNUMBER             0x21
198 CONSTANT: HID_USAGE_MS_BTH_HF_DIALMEMORY             0x22
199
200 CONSTANT: HID_USAGE_CONSUMERCTRL          0x01
201 CONSTANT: HID_USAGE_DIGITIZER_PEN         0x02
202 CONSTANT: HID_USAGE_DIGITIZER_IN_RANGE    0x32
203 CONSTANT: HID_USAGE_DIGITIZER_TIP_SWITCH  0x42
204 CONSTANT: HID_USAGE_DIGITIZER_BARREL_SWITCH 0x44
205
206 CONSTANT: HIDP_LINK_COLLECTION_ROOT        -1
207 CONSTANT: HIDP_LINK_COLLECTION_UNSPECIFIED 0
208
209 ENUM: HIDP_REPORT_TYPE
210     HidP_Input
211     HidP_Output
212     HidP_Feature ;
213
214 STRUCT: USAGE_AND_PAGE
215     { Usage     USAGE }
216     { UsagePage USAGE } ;
217 TYPEDEF: USAGE_AND_PAGE* PUSAGE_AND_PAGE
218
219 : HidP_IsSameUsageAndPage ( u1 u2 -- ? ) = ; inline
220
221 STRUCT: HIDP_BUTTONS_CAPS_range
222     { UsageMin        USAGE  }
223     { UsageMax        USAGE  }
224     { StringMin       USHORT }
225     { StringMax       USHORT }
226     { DesignatorMin   USHORT }
227     { DesignatorMax   USHORT }
228     { DataIndexMin    USHORT }
229     { DataIndexMax    USHORT } ;
230
231 STRUCT: HIDP_BUTTONS_CAPS_not_range
232     { Usage           USAGE  }
233     { Reserved1       USAGE  }
234     { StringIndex     USHORT }
235     { Reserved2       USHORT }
236     { DesignatorIndex USHORT }
237     { Reserved3       USHORT }
238     { DataIndex       USHORT }
239     { Reserved4       USHORT } ;
240
241 UNION-STRUCT: HIDP_BUTTONS_CAPS_union
242     { Range    HIDP_BUTTONS_CAPS_range     }
243     { NotRange HIDP_BUTTONS_CAPS_not_range } ;
244
245 STRUCT: HIDP_BUTTON_CAPS
246     { UsagePage          USAGE                   }
247     { ReportID           UCHAR                   }
248     { IsAlias            BOOLEAN                 }
249     { BitField           USHORT                  }
250     { LinkCollection     USHORT                  }
251     { LinkUsage          USAGE                   }
252     { LinkUsagePage      USAGE                   }
253     { IsRange            BOOLEAN                 }
254     { IsStringRange      BOOLEAN                 }
255     { IsDesignatorRange  BOOLEAN                 }
256     { IsAbsolute         BOOLEAN                 }
257     { Reserved           ULONG[10]               }
258     { Union              HIDP_BUTTONS_CAPS_union } ;
259 TYPEDEF: HIDP_BUTTON_CAPS* PHIDP_BUTTON_CAPS
260
261 STRUCT: HIDP_VALUE_CAPS_range
262     { UsageMin        USAGE  }
263     { UsageMax        USAGE  }
264     { StringMin       USHORT }
265     { StringMax       USHORT }
266     { DesignatorMin   USHORT }
267     { DesignatorMax   USHORT }
268     { DataIndexMin    USHORT }
269     { DataIndexMax    USHORT } ;
270
271 STRUCT: HIDP_VALUE_CAPS_not_range
272     { Usage             USAGE  }
273     { Reserved1         USAGE  }
274     { StringIndex       USHORT }
275     { Reserved2         USHORT }
276     { DesignatorIndex   USHORT }
277     { Reserved3         USHORT }
278     { DataIndex         USHORT }
279     { Reserved4         USHORT } ;
280
281 UNION-STRUCT: HIDP_VALUE_CAPS_union
282     { Range    HIDP_VALUE_CAPS_range     }
283     { NotRange HIDP_VALUE_CAPS_not_range } ;
284
285 STRUCT: HIDP_VALUE_CAPS
286     { UsagePage          USAGE                  }
287     { ReportID           UCHAR                  }
288     { IsAlias            BOOLEAN                }
289     { BitField           USHORT                 }
290     { LinkCollection     USHORT                 }
291     { LinkUsage          USAGE                  }
292     { LinkUsagePage      USAGE                  }
293     { IsRange            BOOLEAN                }
294     { IsStringRange      BOOLEAN                }
295     { IsDesignatorRange  BOOLEAN                }
296     { IsAbsolute         BOOLEAN                }
297     { HasNull            BOOLEAN                }
298     { Reserved           UCHAR                  }
299     { BitSize            USHORT                 }
300     { ReportCount        USHORT                 }
301     { Reserved2          USHORT[5]              }
302     { UnitsExp           ULONG                  }
303     { Units              ULONG                  }
304     { LogicalMin         LONG                   }
305     { LogicalMax         LONG                   }
306     { PhysicalMin        LONG                   }
307     { PhysicalMax        LONG                   }
308     { Union              HIDP_VALUE_CAPS_union  } ;
309 TYPEDEF: HIDP_VALUE_CAPS* PHIDP_VALUE_CAPS
310
311 STRUCT: HIDP_LINK_COLLECTION_NODE
312     { LinkUsage                        USAGE  }
313     { LinkUsagePage                    USAGE  }
314     { Parent                           USHORT }
315     { NumberOfChildren                 USHORT }
316     { NextSibling                      USHORT }
317     { FirstChild                       USHORT }
318     { CollectionTypeIsAliasBitfield    ULONG  }
319     { UserContext                      PVOID  } ;
320 TYPEDEF: HIDP_LINK_COLLECTION_NODE* PHIDP_LINK_COLLECTION_NODE
321
322 TYPEDEF: PUCHAR PHIDP_REPORT_DESCRIPTOR
323 C-TYPE: HIDP_PREPARSED_DATA
324 TYPEDEF: HIDP_PREPARSED_DATA* PHIDP_PREPARSED_DATA
325
326 STRUCT: HIDP_CAPS
327     { Usage                       USAGE      }
328     { UsagePage                   USAGE      }
329     { InputReportByteLength       USHORT     }
330     { OutputReportByteLength      USHORT     }
331     { FeatureReportByteLength     USHORT     }
332     { Reserved                    USHORT[17] }
333     { NumberLinkCollectionNodes   USHORT     }
334     { NumberInputButtonCaps       USHORT     }
335     { NumberInputValueCaps        USHORT     }
336     { NumberInputDataIndices      USHORT     }
337     { NumberOutputButtonCaps      USHORT     }
338     { NumberOutputValueCaps       USHORT     }
339     { NumberOutputDataIndices     USHORT     }
340     { NumberFeatureButtonCaps     USHORT     }
341     { NumberFeatureValueCaps      USHORT     }
342     { NumberFeatureDataIndices    USHORT     } ;
343 TYPEDEF: HIDP_CAPS* PHIDP_CAPS
344
345 STRUCT: HIDP_DATA
346     { DataIndex  USHORT }
347     { Reserved   USHORT }
348     { RawValue   ULONG  } ;
349 TYPEDEF: HIDP_DATA* PHIDP_DATA
350
351 STRUCT: HIDP_UNKNOWN_TOKEN
352     { Token     UCHAR    }
353     { Reserved  UCHAR[3] }
354     { BitField  ULONG    } ;
355 TYPEDEF: HIDP_UNKNOWN_TOKEN* PHIDP_UNKNOWN_TOKEN
356
357 STRUCT: HIDP_EXTENDED_ATTRIBUTES
358     { NumGlobalUnknowns   UCHAR               }
359     { Reserved            UCHAR[3]            }
360     { GlobalUnknowns      PHIDP_UNKNOWN_TOKEN }
361     { Data                ULONG[1]            } ;
362 TYPEDEF: HIDP_EXTENDED_ATTRIBUTES* PHIDP_EXTENDED_ATTRIBUTES
363
364 FUNCTION: NTSTATUS
365 HidP_GetCaps (
366    PHIDP_PREPARSED_DATA      PreparsedData,
367    PHIDP_CAPS                Capabilities
368    ) ;
369
370 FUNCTION: NTSTATUS
371 HidP_GetLinkCollectionNodes (
372    PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes,
373    PULONG                     LinkCollectionNodesLength,
374    PHIDP_PREPARSED_DATA       PreparsedData
375    ) ;
376
377 FUNCTION: NTSTATUS
378 HidP_GetSpecificButtonCaps (
379    HIDP_REPORT_TYPE     ReportType,
380    USAGE                UsagePage,
381    USHORT               LinkCollection,
382    USAGE                Usage,
383    PHIDP_BUTTON_CAPS    ButtonCaps,
384    PUSHORT              ButtonCapsLength,
385    PHIDP_PREPARSED_DATA PreparsedData
386    ) ;
387
388 FUNCTION: NTSTATUS
389 HidP_GetButtonCaps (
390    HIDP_REPORT_TYPE     ReportType,
391    PHIDP_BUTTON_CAPS    ButtonCaps,
392    PUSHORT              ButtonCapsLength,
393    PHIDP_PREPARSED_DATA PreparsedData
394 ) ;
395
396 FUNCTION: NTSTATUS
397 HidP_GetSpecificValueCaps (
398    HIDP_REPORT_TYPE     ReportType,
399    USAGE                UsagePage,
400    USHORT               LinkCollection,
401    USAGE                Usage,
402    PHIDP_VALUE_CAPS     ValueCaps,
403    PUSHORT              ValueCapsLength,
404    PHIDP_PREPARSED_DATA PreparsedData
405    ) ;
406
407 FUNCTION: NTSTATUS
408 HidP_GetValueCaps (
409    HIDP_REPORT_TYPE     ReportType,
410    PHIDP_VALUE_CAPS     ValueCaps,
411    PUSHORT              ValueCapsLength,
412    PHIDP_PREPARSED_DATA PreparsedData
413 ) ;
414
415 FUNCTION: NTSTATUS
416 HidP_GetExtendedAttributes (
417     HIDP_REPORT_TYPE            ReportType,
418     USHORT                      DataIndex,
419     PHIDP_PREPARSED_DATA        PreparsedData,
420     PHIDP_EXTENDED_ATTRIBUTES   Attributes,
421     PULONG                      LengthAttributes
422     ) ;
423
424 FUNCTION: NTSTATUS
425 HidP_InitializeReportForID (
426    HIDP_REPORT_TYPE     ReportType,
427    UCHAR                ReportID,
428    PHIDP_PREPARSED_DATA PreparsedData,
429    PCHAR                Report,
430    ULONG                ReportLength
431    ) ;
432
433 FUNCTION: NTSTATUS
434 HidP_SetData (
435     HIDP_REPORT_TYPE     ReportType,
436     PHIDP_DATA           DataList,
437     PULONG               DataLength,
438     PHIDP_PREPARSED_DATA PreparsedData,
439     PCHAR                Report,
440     ULONG                ReportLength
441     ) ;
442
443 FUNCTION: NTSTATUS
444 HidP_GetData (
445     HIDP_REPORT_TYPE     ReportType,
446     PHIDP_DATA           DataList,
447     PULONG               DataLength,
448     PHIDP_PREPARSED_DATA PreparsedData,
449     PCHAR                Report,
450     ULONG                ReportLength
451     ) ;
452
453 FUNCTION: ULONG
454 HidP_MaxDataListLength (
455    HIDP_REPORT_TYPE      ReportType,
456    PHIDP_PREPARSED_DATA  PreparsedData
457    ) ;
458
459 FUNCTION: NTSTATUS
460 HidP_SetUsages (
461    HIDP_REPORT_TYPE     ReportType,
462    USAGE                UsagePage,
463    USHORT               LinkCollection,
464    PUSAGE               UsageList,
465    PULONG               UsageLength,
466    PHIDP_PREPARSED_DATA PreparsedData,
467    PCHAR                Report,
468    ULONG                ReportLength
469    ) ;
470 ALIAS: HidP_SetButtons HidP_SetUsages
471
472 FUNCTION: NTSTATUS
473 HidP_UnsetUsages (
474    HIDP_REPORT_TYPE     ReportType,
475    USAGE                UsagePage,
476    USHORT               LinkCollection,
477    PUSAGE               UsageList,
478    PULONG               UsageLength,
479    PHIDP_PREPARSED_DATA PreparsedData,
480    PCHAR                Report,
481    ULONG                ReportLength
482    ) ;
483 ALIAS: HidP_UnsetButtons HidP_UnsetUsages
484
485 FUNCTION: NTSTATUS
486 HidP_GetUsages (
487    HIDP_REPORT_TYPE     ReportType,
488    USAGE                UsagePage,
489    USHORT               LinkCollection,
490    PUSAGE               UsageList,
491    PULONG               UsageLength,
492    PHIDP_PREPARSED_DATA PreparsedData,
493    PCHAR                Report,
494    ULONG                ReportLength
495    ) ;
496 ALIAS: HidP_GetButtons HidP_GetUsages
497
498 FUNCTION: NTSTATUS
499 HidP_GetUsagesEx (
500     HIDP_REPORT_TYPE     ReportType,
501     USHORT               LinkCollection,
502     PUSAGE_AND_PAGE      ButtonList,
503     ULONG*               UsageLength,
504     PHIDP_PREPARSED_DATA PreparsedData,
505     PCHAR                Report,
506     ULONG                ReportLength
507    ) ;
508 ALIAS: HidP_GetButtonsEx HidP_GetUsagesEx
509
510 FUNCTION: ULONG
511 HidP_MaxUsageListLength (
512    HIDP_REPORT_TYPE      ReportType,
513    USAGE                 UsagePage,
514    PHIDP_PREPARSED_DATA  PreparsedData
515    ) ;
516
517 FUNCTION: NTSTATUS
518 HidP_SetUsageValue (
519     HIDP_REPORT_TYPE     ReportType,
520     USAGE                UsagePage,
521     USHORT               LinkCollection,
522     USAGE                Usage,
523     ULONG                UsageValue,
524     PHIDP_PREPARSED_DATA PreparsedData,
525     PCHAR                Report,
526     ULONG                ReportLength
527     ) ;
528
529 FUNCTION: NTSTATUS
530 HidP_SetScaledUsageValue (
531     HIDP_REPORT_TYPE     ReportType,
532     USAGE                UsagePage,
533     USHORT               LinkCollection,
534     USAGE                Usage,
535     LONG                 UsageValue,
536     PHIDP_PREPARSED_DATA PreparsedData,
537     PCHAR                Report,
538     ULONG                ReportLength
539     ) ;
540
541 FUNCTION: NTSTATUS
542 HidP_SetUsageValueArray (
543     HIDP_REPORT_TYPE     ReportType,
544     USAGE                UsagePage,
545     USHORT               LinkCollection,
546     USAGE                Usage,
547     PCHAR                UsageValue,
548     USHORT               UsageValueByteLength,
549     PHIDP_PREPARSED_DATA PreparsedData,
550     PCHAR                Report,
551     ULONG                ReportLength
552     ) ;
553
554
555 FUNCTION: NTSTATUS
556 HidP_GetUsageValue (
557     HIDP_REPORT_TYPE     ReportType,
558     USAGE                UsagePage,
559     USHORT               LinkCollection,
560     USAGE                Usage,
561     PULONG               UsageValue,
562     PHIDP_PREPARSED_DATA PreparsedData,
563     PCHAR                Report,
564     ULONG                ReportLength
565     ) ;
566
567 FUNCTION: NTSTATUS
568 HidP_GetScaledUsageValue (
569     HIDP_REPORT_TYPE     ReportType,
570     USAGE                UsagePage,
571     USHORT               LinkCollection,
572     USAGE                Usage,
573     PLONG                UsageValue,
574     PHIDP_PREPARSED_DATA PreparsedData,
575     PCHAR                Report,
576     ULONG                ReportLength
577     ) ;
578
579 FUNCTION: NTSTATUS
580 HidP_GetUsageValueArray (
581     HIDP_REPORT_TYPE     ReportType,
582     USAGE                UsagePage,
583     USHORT               LinkCollection,
584     USAGE                Usage,
585     PCHAR                UsageValue,
586     USHORT               UsageValueByteLength,
587     PHIDP_PREPARSED_DATA PreparsedData,
588     PCHAR                Report,
589     ULONG                ReportLength
590     ) ;
591
592 FUNCTION: NTSTATUS
593 HidP_UsageListDifference (
594    PUSAGE   PreviousUsageList,
595    PUSAGE   CurrentUsageList,
596    PUSAGE   BreakUsageList,
597    PUSAGE   MakeUsageList,
598    ULONG    UsageListLength
599     ) ;
600
601 FUNCTION: NTSTATUS
602 HidP_UsageAndPageListDifference (
603    PUSAGE_AND_PAGE PreviousUsageList,
604    PUSAGE_AND_PAGE CurrentUsageList,
605    PUSAGE_AND_PAGE BreakUsageList,
606    PUSAGE_AND_PAGE MakeUsageList,
607    ULONG           UsageListLength
608    ) ;
609
610 ENUM: HIDP_KEYBOARD_DIRECTION
611     HidP_Keyboard_Break
612     HidP_Keyboard_Make ;
613
614 STRUCT: HIDP_KEYBOARD_MODIFIER_STATE
615     { ul ULONG } ;
616 TYPEDEF: HIDP_KEYBOARD_MODIFIER_STATE* PHIDP_KEYBOARD_MODIFIER_STATE
617
618 CALLBACK: BOOLEAN PHIDP_INSERT_SCANCODES (
619     PVOID Context,
620     PCHAR NewScanCodes,
621     ULONG Length ) ;
622
623 FUNCTION: NTSTATUS
624 HidP_TranslateUsageAndPagesToI8042ScanCodes (
625     PUSAGE_AND_PAGE               ChangedUsageList,
626     ULONG                         UsageListLength,
627     HIDP_KEYBOARD_DIRECTION       KeyAction,
628     PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
629     PHIDP_INSERT_SCANCODES        InsertCodesProcedure,
630     PVOID                         InsertCodesContext
631     ) ;
632
633
634 FUNCTION: NTSTATUS
635 HidP_TranslateUsagesToI8042ScanCodes (
636     PUSAGE                        ChangedUsageList,
637     ULONG                         UsageListLength,
638     HIDP_KEYBOARD_DIRECTION       KeyAction,
639     PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
640     PHIDP_INSERT_SCANCODES        InsertCodesProcedure,
641     PVOID                         InsertCodesContext
642     ) ;
643
644 CONSTANT: FACILITY_HID_ERROR_CODE 0x11
645 : HIDP_ERROR_CODES ( SEV CODE -- HRESULT )
646     [ 28 shift ] dip bitor FACILITY_HID_ERROR_CODE 16 shift bitor ; inline
647 : HIDP_STATUS_SUCCESS                  ( -- HRESULT ) 0x0 0x0 HIDP_ERROR_CODES ; inline
648 : HIDP_STATUS_NULL                     ( -- HRESULT ) 0x8 0x1 HIDP_ERROR_CODES ; inline
649 : HIDP_STATUS_INVALID_PREPARSED_DATA   ( -- HRESULT ) 0xC 0x1 HIDP_ERROR_CODES ; inline
650 : HIDP_STATUS_INVALID_REPORT_TYPE      ( -- HRESULT ) 0xC 0x2 HIDP_ERROR_CODES ; inline
651 : HIDP_STATUS_INVALID_REPORT_LENGTH    ( -- HRESULT ) 0xC 0x3 HIDP_ERROR_CODES ; inline
652 : HIDP_STATUS_USAGE_NOT_FOUND          ( -- HRESULT ) 0xC 0x4 HIDP_ERROR_CODES ; inline
653 : HIDP_STATUS_VALUE_OUT_OF_RANGE       ( -- HRESULT ) 0xC 0x5 HIDP_ERROR_CODES ; inline
654 : HIDP_STATUS_BAD_LOG_PHY_VALUES       ( -- HRESULT ) 0xC 0x6 HIDP_ERROR_CODES ; inline
655 : HIDP_STATUS_BUFFER_TOO_SMALL         ( -- HRESULT ) 0xC 0x7 HIDP_ERROR_CODES ; inline
656 : HIDP_STATUS_INTERNAL_ERROR           ( -- HRESULT ) 0xC 0x8 HIDP_ERROR_CODES ; inline
657 : HIDP_STATUS_I8042_TRANS_UNKNOWN      ( -- HRESULT ) 0xC 0x9 HIDP_ERROR_CODES ; inline
658 : HIDP_STATUS_INCOMPATIBLE_REPORT_ID   ( -- HRESULT ) 0xC 0xA HIDP_ERROR_CODES ; inline
659 : HIDP_STATUS_NOT_VALUE_ARRAY          ( -- HRESULT ) 0xC 0xB HIDP_ERROR_CODES ; inline
660 : HIDP_STATUS_IS_VALUE_ARRAY           ( -- HRESULT ) 0xC 0xC HIDP_ERROR_CODES ; inline
661 : HIDP_STATUS_DATA_INDEX_NOT_FOUND     ( -- HRESULT ) 0xC 0xD HIDP_ERROR_CODES ; inline
662 : HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE  ( -- HRESULT ) 0xC 0xE HIDP_ERROR_CODES ; inline
663 : HIDP_STATUS_BUTTON_NOT_PRESSED       ( -- HRESULT ) 0xC 0xF HIDP_ERROR_CODES ; inline
664 : HIDP_STATUS_REPORT_DOES_NOT_EXIST    ( -- HRESULT ) 0xC 0x10 HIDP_ERROR_CODES ; inline
665 : HIDP_STATUS_NOT_IMPLEMENTED          ( -- HRESULT ) 0xC 0x20 HIDP_ERROR_CODES ; inline
666 : HIDP_STATUS_I8242_TRANS_UNKNOWN      ( -- HRESULT ) HIDP_STATUS_I8042_TRANS_UNKNOWN ; inline
667
668 STRUCT: HIDD_CONFIGURATION
669     { cookie            PVOID }
670     { size              ULONG }
671     { RingBufferSize    ULONG } ;
672 TYPEDEF: HIDD_CONFIGURATION* PHIDD_CONFIGURATION
673
674 STRUCT: HIDD_ATTRIBUTES
675     { Size           ULONG  }
676     { VendorID       USHORT }
677     { ProductID      USHORT }
678     { VersionNumber  USHORT } ;
679 TYPEDEF: HIDD_ATTRIBUTES* PHIDD_ATTRIBUTES
680
681 FUNCTION: BOOLEAN
682 HidD_GetAttributes (
683     HANDLE              HidDeviceObject,
684     PHIDD_ATTRIBUTES    Attributes
685     ) ;
686
687 FUNCTION: void
688 HidD_GetHidGuid (
689    LPGUID   HidGuid
690    ) ;
691
692 FUNCTION: BOOLEAN
693 HidD_GetPreparsedData (
694    HANDLE                HidDeviceObject,
695    PHIDP_PREPARSED_DATA* PreparsedData
696    ) ;
697
698 FUNCTION: BOOLEAN
699 HidD_FreePreparsedData (
700    PHIDP_PREPARSED_DATA PreparsedData
701    ) ;
702
703 FUNCTION: BOOLEAN
704 HidD_FlushQueue (
705    HANDLE                HidDeviceObject
706    ) ;
707
708 FUNCTION: BOOLEAN
709 HidD_GetConfiguration (
710    HANDLE               HidDeviceObject,
711    PHIDD_CONFIGURATION  Configuration,
712    ULONG                ConfigurationLength
713    ) ;
714
715 FUNCTION: BOOLEAN
716 HidD_SetConfiguration (
717    HANDLE               HidDeviceObject,
718    PHIDD_CONFIGURATION  Configuration,
719    ULONG                ConfigurationLength
720    ) ;
721
722 FUNCTION: BOOLEAN
723 HidD_GetFeature (
724    HANDLE   HidDeviceObject,
725    PVOID    ReportBuffer,
726    ULONG    ReportBufferLength
727    ) ;
728
729 FUNCTION: BOOLEAN
730 HidD_SetFeature (
731    HANDLE   HidDeviceObject,
732    PVOID    ReportBuffer,
733    ULONG    ReportBufferLength
734    ) ;
735
736 FUNCTION: BOOLEAN
737 HidD_GetInputReport (
738    HANDLE   HidDeviceObject,
739    PVOID    ReportBuffer,
740    ULONG    ReportBufferLength
741    ) ;
742
743 FUNCTION: BOOLEAN
744 HidD_SetOutputReport (
745    HANDLE   HidDeviceObject,
746    PVOID    ReportBuffer,
747    ULONG    ReportBufferLength
748    ) ;
749
750 FUNCTION: BOOLEAN
751 HidD_GetNumInputBuffers (
752     HANDLE  HidDeviceObject,
753     PULONG  NumberBuffers
754     ) ;
755
756 FUNCTION: BOOLEAN
757 HidD_SetNumInputBuffers (
758     HANDLE HidDeviceObject,
759     ULONG  NumberBuffers
760     ) ;
761
762 FUNCTION: BOOLEAN
763 HidD_GetPhysicalDescriptor (
764    HANDLE   HidDeviceObject,
765    PVOID    Buffer,
766    ULONG    BufferLength
767    ) ;
768
769 FUNCTION: BOOLEAN
770 HidD_GetManufacturerString (
771    HANDLE   HidDeviceObject,
772    PVOID    Buffer,
773    ULONG    BufferLength
774    ) ;
775
776 FUNCTION: BOOLEAN
777 HidD_GetProductString (
778    HANDLE   HidDeviceObject,
779    PVOID    Buffer,
780    ULONG    BufferLength
781    ) ;
782
783 FUNCTION: BOOLEAN
784 HidD_GetIndexedString (
785    HANDLE   HidDeviceObject,
786    ULONG    StringIndex,
787    PVOID    Buffer,
788    ULONG    BufferLength
789    ) ;
790
791 FUNCTION: BOOLEAN
792 HidD_GetSerialNumberString (
793    HANDLE   HidDeviceObject,
794    PVOID    Buffer,
795    ULONG    BufferLength
796    ) ;
797
798 FUNCTION: BOOLEAN
799 HidD_GetMsGenreDescriptor (
800    HANDLE   HidDeviceObject,
801    PVOID    Buffer,
802    ULONG    BufferLength
803    ) ;