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