1/*
2 * hidpi.h
3 *
4 * Public Interface for HID parsing library.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23#ifndef __HIDPI_H
24#define __HIDPI_H
25
26#include "hidusage.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#if defined(_HIDPI_)
33# define HIDAPI
34#else
35# define HIDAPI DECLSPEC_IMPORT
36#endif
37
38#if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
39#define _NTSTATUS_PSDK
40  typedef LONG NTSTATUS,*PNTSTATUS;
41#endif
42
43typedef PUCHAR PHIDP_REPORT_DESCRIPTOR;
44typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA;
45
46typedef struct _HIDP_UNKNOWN_TOKEN {
47  UCHAR  Token;
48  UCHAR  Reserved[3];
49  ULONG  BitField;
50} HIDP_UNKNOWN_TOKEN, *PHIDP_UNKNOWN_TOKEN;
51
52typedef enum _HIDP_KEYBOARD_DIRECTION {
53  HidP_Keyboard_Break,
54  HidP_Keyboard_Make
55} HIDP_KEYBOARD_DIRECTION;
56
57typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
58  _ANONYMOUS_UNION union {
59    _ANONYMOUS_STRUCT struct {
60      ULONG  LeftControl : 1;
61      ULONG  LeftShift : 1;
62      ULONG  LeftAlt : 1;
63      ULONG  LeftGUI : 1;
64      ULONG  RightControl : 1;
65      ULONG  RightShift : 1;
66      ULONG  RightAlt : 1;
67      ULONG  RigthGUI : 1;
68      ULONG  CapsLock : 1;
69      ULONG  ScollLock : 1;
70      ULONG  NumLock : 1;
71      ULONG  Reserved : 21;
72    } DUMMYSTRUCTNAME;
73    ULONG ul;
74  } DUMMYUNIONNAME;
75} HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE;
76
77typedef BOOLEAN (NTAPI *PHIDP_INSERT_SCANCODES)(
78  PVOID  Context,
79  PCHAR  NewScanCodes,
80  ULONG  Length);
81
82typedef struct _USAGE_AND_PAGE {
83  USAGE  Usage;
84  USAGE  UsagePage;
85} USAGE_AND_PAGE, *PUSAGE_AND_PAGE;
86
87typedef struct _HIDD_ATTRIBUTES {
88  ULONG   Size;
89  USHORT  VendorID;
90  USHORT  ProductID;
91  USHORT  VersionNumber;
92} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES;
93
94typedef struct _HIDD_CONFIGURATION {
95  PVOID  cookie;
96  ULONG  size;
97  ULONG  RingBufferSize;
98} HIDD_CONFIGURATION, *PHIDD_CONFIGURATION;
99
100HIDAPI
101NTSTATUS
102NTAPI
103HidP_TranslateUsageAndPagesToI8042ScanCodes(
104  PUSAGE_AND_PAGE  ChangedUsageList,
105  ULONG  UsageListLength,
106  HIDP_KEYBOARD_DIRECTION  KeyAction,
107  PHIDP_KEYBOARD_MODIFIER_STATE  ModifierState,
108  PHIDP_INSERT_SCANCODES  InsertCodesProcedure,
109  PVOID  InsertCodesContext);
110
111HIDAPI
112NTSTATUS
113NTAPI
114HidP_TranslateUsagesToI8042ScanCodes(
115  PUSAGE  ChangedUsageList,
116  ULONG  UsageListLength,
117  HIDP_KEYBOARD_DIRECTION  KeyAction,
118  PHIDP_KEYBOARD_MODIFIER_STATE  ModifierState,
119  PHIDP_INSERT_SCANCODES  InsertCodesProcedure,
120  PVOID  InsertCodesContext);
121
122typedef struct _HIDP_BUTTON_CAPS {
123  USAGE  UsagePage;
124  UCHAR  ReportID;
125  BOOLEAN  IsAlias;
126  USHORT  BitField;
127  USHORT  LinkCollection;
128  USAGE  LinkUsage;
129  USAGE  LinkUsagePage;
130  BOOLEAN  IsRange;
131  BOOLEAN  IsStringRange;
132  BOOLEAN  IsDesignatorRange;
133  BOOLEAN  IsAbsolute;
134  ULONG  Reserved[10];
135  _ANONYMOUS_UNION union {
136    struct {
137      USAGE  UsageMin, UsageMax;
138      USHORT  StringMin, StringMax;
139      USHORT  DesignatorMin, DesignatorMax;
140      USHORT  DataIndexMin, DataIndexMax;
141    } Range;
142    struct  {
143       USAGE  Usage, Reserved1;
144       USHORT  StringIndex, Reserved2;
145       USHORT  DesignatorIndex, Reserved3;
146       USHORT  DataIndex, Reserved4;
147    } NotRange;
148  } DUMMYUNIONNAME;
149} HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS;
150
151typedef struct _HIDP_CAPS {
152  USAGE  Usage;
153  USAGE  UsagePage;
154  USHORT  InputReportByteLength;
155  USHORT  OutputReportByteLength;
156  USHORT  FeatureReportByteLength;
157  USHORT  Reserved[17];
158  USHORT  NumberLinkCollectionNodes;
159  USHORT  NumberInputButtonCaps;
160  USHORT  NumberInputValueCaps;
161  USHORT  NumberInputDataIndices;
162  USHORT  NumberOutputButtonCaps;
163  USHORT  NumberOutputValueCaps;
164  USHORT  NumberOutputDataIndices;
165  USHORT  NumberFeatureButtonCaps;
166  USHORT  NumberFeatureValueCaps;
167  USHORT  NumberFeatureDataIndices;
168} HIDP_CAPS, *PHIDP_CAPS;
169
170typedef struct _HIDP_DATA {
171  USHORT  DataIndex;
172  USHORT  Reserved;
173  _ANONYMOUS_UNION union {
174    ULONG  RawValue;
175    BOOLEAN  On;
176  }  DUMMYUNIONNAME;
177} HIDP_DATA, *PHIDP_DATA;
178
179typedef struct _HIDP_EXTENDED_ATTRIBUTES {
180  UCHAR  NumGlobalUnknowns;
181  UCHAR  Reserved[3];
182  PHIDP_UNKNOWN_TOKEN  GlobalUnknowns;
183  ULONG  Data[1];
184} HIDP_EXTENDED_ATTRIBUTES, *PHIDP_EXTENDED_ATTRIBUTES;
185
186#define HIDP_LINK_COLLECTION_ROOT         ((USHORT) -1)
187#define HIDP_LINK_COLLECTION_UNSPECIFIED  ((USHORT) 0)
188
189typedef struct _HIDP_LINK_COLLECTION_NODE {
190  USAGE  LinkUsage;
191  USAGE  LinkUsagePage;
192  USHORT  Parent;
193  USHORT  NumberOfChildren;
194  USHORT  NextSibling;
195  USHORT  FirstChild;
196  ULONG  CollectionType: 8;
197  ULONG  IsAlias: 1;
198  ULONG  Reserved: 23;
199  PVOID  UserContext;
200} HIDP_LINK_COLLECTION_NODE, *PHIDP_LINK_COLLECTION_NODE;
201
202typedef struct _HIDP_VALUE_CAPS {
203  USAGE  UsagePage;
204  UCHAR  ReportID;
205  BOOLEAN  IsAlias;
206  USHORT  BitField;
207  USHORT  LinkCollection;
208  USAGE  LinkUsage;
209  USAGE  LinkUsagePage;
210  BOOLEAN  IsRange;
211  BOOLEAN  IsStringRange;
212  BOOLEAN  IsDesignatorRange;
213  BOOLEAN  IsAbsolute;
214  BOOLEAN  HasNull;
215  UCHAR  Reserved;
216  USHORT  BitSize;
217  USHORT  ReportCount;
218  USHORT  Reserved2[5];
219  ULONG  UnitsExp;
220  ULONG  Units;
221  LONG  LogicalMin, LogicalMax;
222  LONG  PhysicalMin, PhysicalMax;
223    _ANONYMOUS_UNION union {
224      struct {
225        USAGE  UsageMin, UsageMax;
226        USHORT  StringMin, StringMax;
227        USHORT  DesignatorMin, DesignatorMax;
228        USHORT  DataIndexMin, DataIndexMax;
229      } Range;
230      struct {
231        USAGE  Usage, Reserved1;
232        USHORT  StringIndex, Reserved2;
233        USHORT  DesignatorIndex, Reserved3;
234        USHORT  DataIndex, Reserved4;
235      } NotRange;
236    } DUMMYUNIONNAME;
237} HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS;
238
239typedef enum _HIDP_REPORT_TYPE {
240  HidP_Input,
241  HidP_Output,
242  HidP_Feature
243} HIDP_REPORT_TYPE;
244
245#define FACILITY_HID_ERROR_CODE           0x11
246
247#define HIDP_ERROR_CODES(SEV, CODE) \
248  ((NTSTATUS) (((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE)))
249
250#define HIDP_STATUS_SUCCESS                 (HIDP_ERROR_CODES(0x0, 0))
251#define HIDP_STATUS_NULL                    (HIDP_ERROR_CODES(0x8, 1))
252#define HIDP_STATUS_INVALID_PREPARSED_DATA  (HIDP_ERROR_CODES(0xC, 1))
253#define HIDP_STATUS_INVALID_REPORT_TYPE     (HIDP_ERROR_CODES(0xC, 2))
254#define HIDP_STATUS_INVALID_REPORT_LENGTH   (HIDP_ERROR_CODES(0xC, 3))
255#define HIDP_STATUS_USAGE_NOT_FOUND         (HIDP_ERROR_CODES(0xC, 4))
256#define HIDP_STATUS_VALUE_OUT_OF_RANGE      (HIDP_ERROR_CODES(0xC, 5))
257#define HIDP_STATUS_BAD_LOG_PHY_VALUES      (HIDP_ERROR_CODES(0xC, 6))
258#define HIDP_STATUS_BUFFER_TOO_SMALL        (HIDP_ERROR_CODES(0xC, 7))
259#define HIDP_STATUS_INTERNAL_ERROR          (HIDP_ERROR_CODES(0xC, 8))
260#define HIDP_STATUS_I8042_TRANS_UNKNOWN     (HIDP_ERROR_CODES(0xC, 9))
261#define HIDP_STATUS_INCOMPATIBLE_REPORT_ID  (HIDP_ERROR_CODES(0xC, 0xA))
262#define HIDP_STATUS_NOT_VALUE_ARRAY         (HIDP_ERROR_CODES(0xC, 0xB))
263#define HIDP_STATUS_IS_VALUE_ARRAY          (HIDP_ERROR_CODES(0xC, 0xC))
264#define HIDP_STATUS_DATA_INDEX_NOT_FOUND    (HIDP_ERROR_CODES(0xC, 0xD))
265#define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 0xE))
266#define HIDP_STATUS_BUTTON_NOT_PRESSED      (HIDP_ERROR_CODES(0xC, 0xF))
267#define HIDP_STATUS_REPORT_DOES_NOT_EXIST   (HIDP_ERROR_CODES(0xC, 0x10))
268#define HIDP_STATUS_NOT_IMPLEMENTED         (HIDP_ERROR_CODES(0xC, 0x20))
269#define HIDP_STATUS_I8242_TRANS_UNKNOWN     HIDP_STATUS_I8042_TRANS_UNKNOWN
270
271
272#if !defined(_HIDPI_NO_FUNCTION_MACROS_)
273/*
274 * NTSTATUS
275 * HidP_GetButtonCaps(
276 *   IN HIDP_REPORT_TYPE  ReportType,
277 *   OUT PHIDP_BUTTON_CAPS  ButtonCaps,
278 *   IN OUT PULONG  ButtonCapsLength,
279 *   IN PHIDP_PREPARSED_DATA  PreparsedData);
280 */
281#define HidP_GetButtonCaps(_Type_, _Caps_, _Len_, _Data_) \
282  HidP_GetSpecificButtonCaps(_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
283
284/*
285 * NTSTATUS
286 * HidP_GetButtons(
287 *   IN HIDP_REPORT_TYPE  ReportType,
288 *   IN USAGE  UsagePage,
289 *   IN USHORT  LinkCollection,
290 *   OUT USAGE  *UsageList,
291 *   IN OUT ULONG  *UsageLength,
292 *   IN PHIDP_PREPARSED_DATA  PreparsedData,
293 *   IN PCHAR  Report,
294 *   IN ULONG  ReportLength);
295 */
296#define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \
297  HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe)
298
299#define HidP_GetButtonListLength(RTy, UPa, Ppd) \
300  HidP_GetUsageListLength(Rty, UPa, Ppd)
301
302
303/*
304 * NTSTATUS
305 * HidP_GetButtonsEx(
306 *   IN HIDP_REPORT_TYPE  ReportType,
307 *   IN USHORT  LinkCollection,
308 *   OUT PUSAGE_AND_PAGE  ButtonList,
309 *   IN OUT ULONG  *UsageLength,
310 *   IN PHIDP_PREPARSED_DATA  PreparsedData,
311 *   IN PCHAR  Report,
312 *   IN ULONG  ReportLength);
313 */
314#define HidP_GetButtonsEx(RT, LC, BL, UL, PD, R, RL)  \
315  HidP_GetUsagesEx(RT, LC, BL, UL, PD, R, RL)
316
317#endif /* _HIDPI_NO_FUNCTION_MACROS_ */
318
319HIDAPI
320NTSTATUS
321NTAPI
322HidP_GetCaps(
323  PHIDP_PREPARSED_DATA  PreparsedData,
324  PHIDP_CAPS  Capabilities);
325
326HIDAPI
327NTSTATUS
328NTAPI
329HidP_GetData(
330  HIDP_REPORT_TYPE  ReportType,
331  PHIDP_DATA  DataList,
332  PULONG  DataLength,
333  PHIDP_PREPARSED_DATA  PreparsedData,
334  PCHAR  Report,
335  ULONG  ReportLength);
336
337HIDAPI
338NTSTATUS
339NTAPI
340HidP_GetExtendedAttributes(
341  HIDP_REPORT_TYPE  ReportType,
342  USHORT  DataIndex,
343  PHIDP_PREPARSED_DATA  PreparsedData,
344  PHIDP_EXTENDED_ATTRIBUTES  Attributes,
345  PULONG  LengthAttributes);
346
347HIDAPI
348NTSTATUS
349NTAPI
350HidP_GetLinkCollectionNodes(
351  PHIDP_LINK_COLLECTION_NODE  LinkCollectionNodes,
352  PULONG  LinkCollectionNodesLength,
353  PHIDP_PREPARSED_DATA  PreparsedData);
354
355HIDAPI
356NTSTATUS
357NTAPI
358HidP_GetScaledUsageValue(
359  HIDP_REPORT_TYPE  ReportType,
360  USAGE  UsagePage,
361  USHORT  LinkCollection,
362  USAGE  Usage,
363  PLONG  UsageValue,
364  PHIDP_PREPARSED_DATA  PreparsedData,
365  PCHAR  Report,
366  ULONG  ReportLength);
367
368HIDAPI
369NTSTATUS
370NTAPI
371HidP_GetSpecificButtonCaps(
372  HIDP_REPORT_TYPE  ReportType,
373  USAGE  UsagePage,
374  USHORT  LinkCollection,
375  USAGE  Usage,
376  PHIDP_BUTTON_CAPS  ButtonCaps,
377  PULONG  ButtonCapsLength,
378  PHIDP_PREPARSED_DATA  PreparsedData);
379
380HIDAPI
381NTSTATUS
382NTAPI
383HidP_GetSpecificValueCaps(
384  HIDP_REPORT_TYPE  ReportType,
385  USAGE  UsagePage,
386  USHORT  LinkCollection,
387  USAGE  Usage,
388  PHIDP_VALUE_CAPS  ValueCaps,
389  PULONG  ValueCapsLength,
390  PHIDP_PREPARSED_DATA  PreparsedData);
391
392HIDAPI
393NTSTATUS
394NTAPI
395HidP_GetUsages(
396  HIDP_REPORT_TYPE  ReportType,
397  USAGE  UsagePage,
398  USHORT  LinkCollection,
399  USAGE  *UsageList,
400  ULONG  *UsageLength,
401  PHIDP_PREPARSED_DATA  PreparsedData,
402  PCHAR  Report,
403  ULONG  ReportLength);
404
405HIDAPI
406NTSTATUS
407NTAPI
408HidP_GetUsagesEx(
409  HIDP_REPORT_TYPE  ReportType,
410  USHORT  LinkCollection,
411  PUSAGE_AND_PAGE  ButtonList,
412  ULONG  *UsageLength,
413  PHIDP_PREPARSED_DATA  PreparsedData,
414  PCHAR  Report,
415  ULONG  ReportLength);
416
417HIDAPI
418NTSTATUS
419NTAPI
420HidP_GetUsageValue(
421  HIDP_REPORT_TYPE  ReportType,
422  USAGE  UsagePage,
423  USHORT  LinkCollection,
424  USAGE  Usage,
425  PULONG  UsageValue,
426  PHIDP_PREPARSED_DATA  PreparsedData,
427  PCHAR  Report,
428  ULONG  ReportLength);
429
430HIDAPI
431NTSTATUS
432NTAPI
433HidP_GetUsageValueArray(
434  HIDP_REPORT_TYPE  ReportType,
435  USAGE  UsagePage,
436  USHORT  LinkCollection,
437  USAGE  Usage,
438  PCHAR  UsageValue,
439  USHORT  UsageValueByteLength,
440  PHIDP_PREPARSED_DATA  PreparsedData,
441  PCHAR  Report,
442  ULONG  ReportLength);
443
444#if !defined(_HIDPI_NO_FUNCTION_MACROS_)
445
446/*
447 * NTSTATUS
448 * HidP_GetValueCaps(
449 *   IN HIDP_REPORT_TYPE  ReportType,
450 *   OUT PHIDP_VALUE_CAPS  ValueCaps,
451 *   IN OUT PULONG  ValueCapsLength,
452 *   IN PHIDP_PREPARSED_DATA  PreparsedData);
453 */
454#define HidP_GetValueCaps(_Type_, _Caps_, _Len_, _Data_) \
455  HidP_GetSpecificValueCaps (_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
456
457#endif /* _HIDPI_NO_FUNCTION_MACROS_ */
458
459HIDAPI
460NTSTATUS
461NTAPI
462HidP_InitializeReportForID(
463  HIDP_REPORT_TYPE  ReportType,
464  UCHAR  ReportID,
465  PHIDP_PREPARSED_DATA  PreparsedData,
466  PCHAR  Report,
467  ULONG  ReportLength);
468
469#if !defined(_HIDPI_NO_FUNCTION_MACROS_)
470
471/*
472 * BOOLEAN
473 * HidP_IsSameUsageAndPage(
474 *   USAGE_AND_PAGE  u1,
475 *   USAGE_AND_PAGE  u2);
476 */
477#define HidP_IsSameUsageAndPage(u1, u2) ((* (PULONG) &u1) == (* (PULONG) &u2))
478
479#endif /* _HIDPI_NO_FUNCTION_MACROS_ */
480
481HIDAPI
482ULONG
483NTAPI
484HidP_MaxDataListLength(
485  HIDP_REPORT_TYPE  ReportType,
486  PHIDP_PREPARSED_DATA  PreparsedData);
487
488HIDAPI
489ULONG
490NTAPI
491HidP_MaxUsageListLength(
492  HIDP_REPORT_TYPE  ReportType,
493  USAGE  UsagePage,
494  PHIDP_PREPARSED_DATA  PreparsedData);
495
496#if !defined(_HIDPI_NO_FUNCTION_MACROS_)
497
498/*
499 * NTSTATUS
500 * HidP_SetButtons(
501 *   IN HIDP_REPORT_TYPE  ReportType,
502 *   IN USAGE  UsagePage,
503 *   IN USHORT  LinkCollection,
504 *   IN PUSAGE  UsageList,
505 *   IN OUT PULONG  UsageLength,
506 *   IN PHIDP_PREPARSED_DATA  PreparsedData,
507 *   IN OUT PCHAR  Report,
508 *   IN ULONG  ReportLength);
509 */
510#define HidP_SetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
511  HidP_SetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
512
513#endif /* _HIDPI_NO_FUNCTION_MACROS_ */
514
515HIDAPI
516NTSTATUS
517NTAPI
518HidP_SetData(
519  HIDP_REPORT_TYPE  ReportType,
520  PHIDP_DATA  DataList,
521  PULONG  DataLength,
522  PHIDP_PREPARSED_DATA  PreparsedData,
523  PCHAR  Report,
524  ULONG  ReportLength);
525
526HIDAPI
527NTSTATUS
528NTAPI
529HidP_SetScaledUsageValue(
530  HIDP_REPORT_TYPE  ReportType,
531  USAGE  UsagePage,
532  USHORT  LinkCollection,
533  USAGE  Usage,
534  LONG  UsageValue,
535  PHIDP_PREPARSED_DATA  PreparsedData,
536  PCHAR  Report,
537  ULONG  ReportLength);
538
539HIDAPI
540NTSTATUS
541NTAPI
542HidP_SetUsages(
543  HIDP_REPORT_TYPE  ReportType,
544  USAGE  UsagePage,
545  USHORT  LinkCollection, /* Optional */
546  PUSAGE  UsageList,
547  PULONG  UsageLength,
548  PHIDP_PREPARSED_DATA  PreparsedData,
549  PCHAR  Report,
550  ULONG  ReportLength);
551
552HIDAPI
553NTSTATUS
554NTAPI
555HidP_SetUsageValue(
556  HIDP_REPORT_TYPE  ReportType,
557  USAGE  UsagePage,
558  USHORT  LinkCollection,
559  USAGE  Usage,
560  ULONG  UsageValue,
561  PHIDP_PREPARSED_DATA  PreparsedData,
562  PCHAR  Report,
563  ULONG  ReportLength);
564
565HIDAPI
566NTSTATUS
567NTAPI
568HidP_SetUsageValueArray(
569  HIDP_REPORT_TYPE  ReportType,
570  USAGE  UsagePage,
571  USHORT  LinkCollection,
572  USAGE  Usage,
573  PCHAR  UsageValue,
574  USHORT  UsageValueByteLength,
575  PHIDP_PREPARSED_DATA  PreparsedData,
576  PCHAR  Report,
577  ULONG  ReportLength);
578
579#if !defined(_HIDPI_NO_FUNCTION_MACROS_)
580
581/*
582 * NTSTATUS
583 * HidP_UnsetButtons(
584 *   IN HIDP_REPORT_TYPE  ReportType,
585 *   IN USAGE  UsagePage,
586 *   IN USHORT  LinkCollection,
587 *   IN PUSAGE  UsageList,
588 *   IN OUT PULONG  UsageLength,
589 *   IN PHIDP_PREPARSED_DATA  PreparsedData,
590 *   IN OUT PCHAR  Report,
591 *   IN ULONG  ReportLength);
592 */
593#define HidP_UnsetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
594  HidP_UnsetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
595
596#endif /* _HIDPI_NO_FUNCTION_MACROS_ */
597
598HIDAPI
599NTSTATUS
600NTAPI
601HidP_UnsetUsages(
602  HIDP_REPORT_TYPE  ReportType,
603  USAGE  UsagePage,
604  USHORT  LinkCollection,
605  PUSAGE  UsageList,
606  PULONG  UsageLength,
607  PHIDP_PREPARSED_DATA  PreparsedData,
608  PCHAR  Report,
609  ULONG  ReportLength);
610
611HIDAPI
612NTSTATUS
613NTAPI
614HidP_UsageAndPageListDifference(
615  PUSAGE_AND_PAGE  PreviousUsageList,
616  PUSAGE_AND_PAGE  CurrentUsageList,
617  PUSAGE_AND_PAGE  BreakUsageList,
618  PUSAGE_AND_PAGE  MakeUsageList,
619  ULONG  UsageListLength);
620
621HIDAPI
622NTSTATUS
623NTAPI
624HidP_UsageListDifference(
625  PUSAGE  PreviousUsageList,
626  PUSAGE  CurrentUsageList,
627  PUSAGE  BreakUsageList,
628  PUSAGE  MakeUsageList,
629  ULONG  UsageListLength);
630
631#ifdef __cplusplus
632}
633#endif
634
635#endif /* __HIDPI_H */
636