Merge my current work done on the kd++ branch:
[reactos.git] / reactos / lib / drivers / hidparser / hidparser.h
1 /*
2 * PROJECT: ReactOS Universal Serial Bus Bulk Enhanced Host Controller Interface
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: lib/drivers/hidparser/hidparser.c
5 * PURPOSE: HID Parser
6 * PROGRAMMERS:
7 * Michael Martin (michael.martin@reactos.org)
8 * Johannes Anderwald (johannes.anderwald@reactos.org)
9 */
10
11 #pragma once
12
13 #define _HIDPI_
14 #define _HIDPI_NO_FUNCTION_MACROS_
15 #include <ntddk.h>
16 #include <hidpddi.h>
17 #include <hidpi.h>
18 #ifndef NDEBUG
19 #define NDEBUG
20 #endif
21 #include <debug.h>
22
23 //
24 // function prototypes
25 //
26 typedef PVOID (NTAPI *PHIDPARSER_ALLOC_FUNCTION)(ULONG Size);
27 typedef VOID (NTAPI *PHIDPARSER_FREE_FUNCTION)(PVOID Item);
28 typedef VOID (NTAPI *PHIDPARSER_ZERO_FUNCTION)(PVOID Item, ULONG Size);
29 typedef VOID (NTAPI *PHIDPARSER_COPY_FUNCTION)(PVOID Target, PVOID Source, ULONG Size);
30 typedef VOID (NTAPI *PHIDPARSER_DEBUG_FUNCTION)(LPCSTR Src, ...);
31
32 //
33 // status code
34 //
35 typedef long HIDPARSER_STATUS;
36
37 //
38 // result codes
39 //
40 typedef enum
41 {
42 HIDPARSER_STATUS_SUCCESS = 0,
43 HIDPARSER_STATUS_INSUFFICIENT_RESOURCES = -1,
44 HIDPARSER_STATUS_NOT_IMPLEMENTED = -2,
45 HIDPARSER_STATUS_REPORT_NOT_FOUND = -3,
46 HIDPARSER_STATUS_COLLECTION_NOT_FOUND = -4,
47 HIDPARSER_STATUS_INVALID_REPORT_LENGTH = -5,
48 HIDPARSER_STATUS_INVALID_REPORT_TYPE = -6,
49 HIDPARSER_STATUS_BUFFER_TOO_SMALL = -7,
50 HIDPARSER_STATUS_USAGE_NOT_FOUND = -8,
51 HIDPARSER_STATUS_I8042_TRANS_UNKNOWN = -9,
52 HIDPARSER_STATUS_BAD_LOG_PHY_VALUES = -10
53 }HIDPARSER_STATUS_CODES;
54
55 typedef struct
56 {
57 //
58 // size of struct
59 //
60 unsigned long Size;
61
62 //
63 // allocation function
64 //
65 PHIDPARSER_ALLOC_FUNCTION Alloc;
66
67 //
68 // free function
69 //
70 PFREE_FUNCTION Free;
71
72 //
73 // zero function
74 //
75 PHIDPARSER_ZERO_FUNCTION Zero;
76
77 //
78 // copy function
79 //
80 PHIDPARSER_COPY_FUNCTION Copy;
81
82 //
83 // debug function
84 //
85 PHIDPARSER_DEBUG_FUNCTION Debug;
86 }HID_PARSER, *PHID_PARSER;
87
88 VOID
89 HidParser_InitParser(
90 IN PHIDPARSER_ALLOC_FUNCTION AllocFunction,
91 IN PHIDPARSER_FREE_FUNCTION FreeFunction,
92 IN PHIDPARSER_ZERO_FUNCTION ZeroFunction,
93 IN PHIDPARSER_COPY_FUNCTION CopyFunction,
94 IN PHIDPARSER_DEBUG_FUNCTION DebugFunction,
95 OUT PHID_PARSER Parser);
96
97 NTSTATUS
98 NTAPI
99 HidParser_GetCollectionDescription(
100 IN PHID_PARSER Parser,
101 IN PHIDP_REPORT_DESCRIPTOR ReportDesc,
102 IN ULONG DescLength,
103 IN POOL_TYPE PoolType,
104 OUT PHIDP_DEVICE_DESC DeviceDescription);
105
106 VOID
107 NTAPI
108 HidParser_FreeCollectionDescription(
109 IN PHID_PARSER Parser,
110 IN PHIDP_DEVICE_DESC DeviceDescription);
111
112 HIDAPI
113 NTSTATUS
114 NTAPI
115 HidParser_GetCaps(
116 IN PHID_PARSER Parser,
117 IN PVOID CollectionContext,
118 OUT PHIDP_CAPS Capabilities);
119
120 HIDAPI
121 NTSTATUS
122 NTAPI
123 HidParser_GetSpecificValueCaps(
124 IN PHID_PARSER Parser,
125 IN PVOID CollectionContext,
126 IN HIDP_REPORT_TYPE ReportType,
127 IN USAGE UsagePage,
128 IN USHORT LinkCollection,
129 IN USAGE Usage,
130 OUT PHIDP_VALUE_CAPS ValueCaps,
131 IN OUT PULONG ValueCapsLength);
132
133
134 HIDAPI
135 NTSTATUS
136 NTAPI
137 HidParser_GetButtonCaps(
138 IN PHID_PARSER Parser,
139 IN PVOID CollectionContext,
140 HIDP_REPORT_TYPE ReportType,
141 PHIDP_BUTTON_CAPS ButtonCaps,
142 PUSHORT ButtonCapsLength);
143
144 HIDAPI
145 NTSTATUS
146 NTAPI
147 HidParser_GetSpecificButtonCaps(
148 IN PHID_PARSER Parser,
149 IN PVOID CollectionContext,
150 IN HIDP_REPORT_TYPE ReportType,
151 IN USAGE UsagePage,
152 IN USHORT LinkCollection,
153 IN USAGE Usage,
154 OUT PHIDP_BUTTON_CAPS ButtonCaps,
155 IN OUT PULONG ButtonCapsLength);
156
157 HIDAPI
158 NTSTATUS
159 NTAPI
160 HidParser_GetScaledUsageValue(
161 IN PHID_PARSER Parser,
162 IN PVOID CollectionContext,
163 IN HIDP_REPORT_TYPE ReportType,
164 IN USAGE UsagePage,
165 IN USHORT LinkCollection OPTIONAL,
166 IN USAGE Usage,
167 OUT PLONG UsageValue,
168 IN PCHAR Report,
169 IN ULONG ReportLength);
170
171
172 HIDAPI
173 NTSTATUS
174 NTAPI
175 HidParser_GetData(
176 IN PHID_PARSER Parser,
177 IN PVOID CollectionContext,
178 IN HIDP_REPORT_TYPE ReportType,
179 OUT PHIDP_DATA DataList,
180 IN OUT PULONG DataLength,
181 IN PCHAR Report,
182 IN ULONG ReportLength);
183
184 HIDAPI
185 NTSTATUS
186 NTAPI
187 HidParser_GetExtendedAttributes(
188 IN PHID_PARSER Parser,
189 IN PVOID CollectionContext,
190 IN HIDP_REPORT_TYPE ReportType,
191 IN USHORT DataIndex,
192 OUT PHIDP_EXTENDED_ATTRIBUTES Attributes,
193 IN OUT PULONG LengthAttributes);
194
195 HIDAPI
196 NTSTATUS
197 NTAPI
198 HidParser_GetLinkCollectionNodes(
199 IN PHID_PARSER Parser,
200 IN PVOID CollectionContext,
201 OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes,
202 IN OUT PULONG LinkCollectionNodesLength);
203
204
205 HIDAPI
206 NTSTATUS
207 NTAPI
208 HidParser_GetUsageValue(
209 IN PHID_PARSER Parser,
210 IN PVOID CollectionContext,
211 IN HIDP_REPORT_TYPE ReportType,
212 IN USAGE UsagePage,
213 IN USHORT LinkCollection,
214 IN USAGE Usage,
215 OUT PULONG UsageValue,
216 IN PCHAR Report,
217 IN ULONG ReportLength);
218
219 HIDAPI
220 NTSTATUS
221 NTAPI
222 HidParser_UsageListDifference(
223 IN PUSAGE PreviousUsageList,
224 IN PUSAGE CurrentUsageList,
225 OUT PUSAGE BreakUsageList,
226 OUT PUSAGE MakeUsageList,
227 IN ULONG UsageListLength);
228
229
230 HIDAPI
231 ULONG
232 NTAPI
233 HidParser_MaxUsageListLength(
234 IN PHID_PARSER Parser,
235 IN PVOID CollectionContext,
236 IN HIDP_REPORT_TYPE ReportType,
237 IN USAGE UsagePage OPTIONAL);
238
239 HIDAPI
240 NTSTATUS
241 NTAPI
242 HidParser_GetUsages(
243 IN PHID_PARSER Parser,
244 IN PVOID CollectionContext,
245 IN HIDP_REPORT_TYPE ReportType,
246 IN USAGE UsagePage,
247 IN USHORT LinkCollection OPTIONAL,
248 OUT USAGE *UsageList,
249 IN OUT ULONG *UsageLength,
250 IN PCHAR Report,
251 IN ULONG ReportLength);
252
253 HIDAPI
254 NTSTATUS
255 NTAPI
256 HidParser_GetUsagesEx(
257 IN PHID_PARSER Parser,
258 IN PVOID CollectionContext,
259 IN HIDP_REPORT_TYPE ReportType,
260 IN USHORT LinkCollection,
261 OUT PUSAGE_AND_PAGE ButtonList,
262 IN OUT ULONG *UsageLength,
263 IN PCHAR Report,
264 IN ULONG ReportLength);
265
266
267 NTSTATUS
268 NTAPI
269 HidParser_SysPowerEvent (
270 IN PHID_PARSER Parser,
271 IN PVOID CollectionContext,
272 IN PCHAR HidPacket,
273 IN USHORT HidPacketLength,
274 OUT PULONG OutputBuffer);
275
276 NTSTATUS
277 NTAPI
278 HidParser_SysPowerCaps (
279 IN PHID_PARSER Parser,
280 IN PVOID CollectionContext,
281 OUT PULONG OutputBuffer);
282
283 HIDAPI
284 NTSTATUS
285 NTAPI
286 HidParser_GetUsageValueArray(
287 IN PHID_PARSER Parser,
288 IN PVOID CollectionContext,
289 IN HIDP_REPORT_TYPE ReportType,
290 IN USAGE UsagePage,
291 IN USHORT LinkCollection OPTIONAL,
292 IN USAGE Usage,
293 OUT PCHAR UsageValue,
294 IN USHORT UsageValueByteLength,
295 IN PCHAR Report,
296 IN ULONG ReportLength);
297
298
299 HIDAPI
300 NTSTATUS
301 NTAPI
302 HidParser_UsageAndPageListDifference(
303 IN PUSAGE_AND_PAGE PreviousUsageList,
304 IN PUSAGE_AND_PAGE CurrentUsageList,
305 OUT PUSAGE_AND_PAGE BreakUsageList,
306 OUT PUSAGE_AND_PAGE MakeUsageList,
307 IN ULONG UsageListLength);
308
309 HIDAPI
310 NTSTATUS
311 NTAPI
312 HidParser_UnsetUsages(
313 IN PHID_PARSER Parser,
314 IN PVOID CollectionContext,
315 IN HIDP_REPORT_TYPE ReportType,
316 IN USAGE UsagePage,
317 IN USHORT LinkCollection,
318 IN PUSAGE UsageList,
319 IN OUT PULONG UsageLength,
320 IN OUT PCHAR Report,
321 IN ULONG ReportLength);
322
323 HIDAPI
324 NTSTATUS
325 NTAPI
326 HidParser_TranslateUsagesToI8042ScanCodes(
327 IN PUSAGE ChangedUsageList,
328 IN ULONG UsageListLength,
329 IN HIDP_KEYBOARD_DIRECTION KeyAction,
330 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
331 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
332 IN PVOID InsertCodesContext);
333
334 HIDAPI
335 NTSTATUS
336 NTAPI
337 HidParser_TranslateUsageAndPagesToI8042ScanCodes(
338 IN PHID_PARSER Parser,
339 IN PUSAGE_AND_PAGE ChangedUsageList,
340 IN ULONG UsageListLength,
341 IN HIDP_KEYBOARD_DIRECTION KeyAction,
342 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
343 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
344 IN PVOID InsertCodesContext);
345
346 HIDAPI
347 NTSTATUS
348 NTAPI
349 HidParser_SetUsages(
350 IN PHID_PARSER Parser,
351 IN PVOID CollectionContext,
352 IN HIDP_REPORT_TYPE ReportType,
353 IN USAGE UsagePage,
354 IN USHORT LinkCollection,
355 IN PUSAGE UsageList,
356 IN OUT PULONG UsageLength,
357 IN OUT PCHAR Report,
358 IN ULONG ReportLength);
359
360 HIDAPI
361 NTSTATUS
362 NTAPI
363 HidParser_SetUsageValueArray(
364 IN PHID_PARSER Parser,
365 IN PVOID CollectionContext,
366 IN HIDP_REPORT_TYPE ReportType,
367 IN USAGE UsagePage,
368 IN USHORT LinkCollection OPTIONAL,
369 IN USAGE Usage,
370 IN PCHAR UsageValue,
371 IN USHORT UsageValueByteLength,
372 OUT PCHAR Report,
373 IN ULONG ReportLength);
374
375 HIDAPI
376 NTSTATUS
377 NTAPI
378 HidParser_SetUsageValue(
379 IN PHID_PARSER Parser,
380 IN PVOID CollectionContext,
381 IN HIDP_REPORT_TYPE ReportType,
382 IN USAGE UsagePage,
383 IN USHORT LinkCollection,
384 IN USAGE Usage,
385 IN ULONG UsageValue,
386 IN OUT PCHAR Report,
387 IN ULONG ReportLength);
388
389 HIDAPI
390 NTSTATUS
391 NTAPI
392 HidParser_SetScaledUsageValue(
393 IN PHID_PARSER Parser,
394 IN PVOID CollectionContext,
395 IN HIDP_REPORT_TYPE ReportType,
396 IN USAGE UsagePage,
397 IN USHORT LinkCollection OPTIONAL,
398 IN USAGE Usage,
399 IN LONG UsageValue,
400 IN OUT PCHAR Report,
401 IN ULONG ReportLength);
402
403 HIDAPI
404 NTSTATUS
405 NTAPI
406 HidParser_SetData(
407 IN PHID_PARSER Parser,
408 IN PVOID CollectionContext,
409 IN HIDP_REPORT_TYPE ReportType,
410 IN PHIDP_DATA DataList,
411 IN OUT PULONG DataLength,
412 IN OUT PCHAR Report,
413 IN ULONG ReportLength);
414
415 HIDAPI
416 ULONG
417 NTAPI
418 HidParser_MaxDataListLength(
419 IN PHID_PARSER Parser,
420 IN PVOID CollectionContext,
421 IN HIDP_REPORT_TYPE ReportType);
422
423 HIDAPI
424 NTSTATUS
425 NTAPI
426 HidParser_InitializeReportForID(
427 IN PHID_PARSER Parser,
428 IN PVOID CollectionContext,
429 IN HIDP_REPORT_TYPE ReportType,
430 IN UCHAR ReportID,
431 IN OUT PCHAR Report,
432 IN ULONG ReportLength);
433
434 HIDPARSER_STATUS
435 HidParser_TranslateKbdUsage(
436 IN PHID_PARSER Parser,
437 IN USAGE Usage,
438 IN HIDP_KEYBOARD_DIRECTION KeyAction,
439 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
440 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
441 IN PVOID InsertCodesContext);
442
443 HIDPARSER_STATUS
444 HidParser_TranslateCustUsage(
445 IN PHID_PARSER Parser,
446 IN USAGE Usage,
447 IN HIDP_KEYBOARD_DIRECTION KeyAction,
448 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
449 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
450 IN PVOID InsertCodesContext);
451
452 HIDAPI
453 NTSTATUS
454 NTAPI
455 HidParser_GetValueCaps(
456 PHID_PARSER Parser,
457 IN PVOID CollectionContext,
458 HIDP_REPORT_TYPE ReportType,
459 PHIDP_VALUE_CAPS ValueCaps,
460 PULONG ValueCapsLength);