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