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
7 * Michael Martin (michael.martin@reactos.org)
8 * Johannes Anderwald (johannes.anderwald@reactos.org)
14 #define _HIDPI_NO_FUNCTION_MACROS_
24 // function prototypes
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
, ...);
35 typedef long HIDPARSER_STATUS
;
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_CODES
;
62 // allocation function
64 PHIDPARSER_ALLOC_FUNCTION Alloc
;
74 PHIDPARSER_ZERO_FUNCTION Zero
;
79 PHIDPARSER_COPY_FUNCTION Copy
;
84 PHIDPARSER_DEBUG_FUNCTION Debug
;
85 }HID_PARSER
, *PHID_PARSER
;
89 IN PHIDPARSER_ALLOC_FUNCTION AllocFunction
,
90 IN PHIDPARSER_FREE_FUNCTION FreeFunction
,
91 IN PHIDPARSER_ZERO_FUNCTION ZeroFunction
,
92 IN PHIDPARSER_COPY_FUNCTION CopyFunction
,
93 IN PHIDPARSER_DEBUG_FUNCTION DebugFunction
,
94 OUT PHID_PARSER Parser
);
98 HidParser_GetCollectionDescription(
99 IN PHID_PARSER Parser
,
100 IN PHIDP_REPORT_DESCRIPTOR ReportDesc
,
102 IN POOL_TYPE PoolType
,
103 OUT PHIDP_DEVICE_DESC DeviceDescription
);
107 HidParser_FreeCollectionDescription(
108 IN PHID_PARSER Parser
,
109 IN PHIDP_DEVICE_DESC DeviceDescription
);
115 IN PHID_PARSER Parser
,
116 IN PVOID CollectionContext
,
117 OUT PHIDP_CAPS Capabilities
);
122 HidParser_GetSpecificValueCaps(
123 IN PHID_PARSER Parser
,
124 IN PVOID CollectionContext
,
125 IN HIDP_REPORT_TYPE ReportType
,
127 IN USHORT LinkCollection
,
129 OUT PHIDP_VALUE_CAPS ValueCaps
,
130 IN OUT PULONG ValueCapsLength
);
136 HidParser_GetButtonCaps(
137 IN PHID_PARSER Parser
,
138 IN PVOID CollectionContext
,
139 HIDP_REPORT_TYPE ReportType
,
140 PHIDP_BUTTON_CAPS ButtonCaps
,
141 PUSHORT ButtonCapsLength
);
146 HidParser_GetSpecificButtonCaps(
147 IN PHID_PARSER Parser
,
148 IN PVOID CollectionContext
,
149 IN HIDP_REPORT_TYPE ReportType
,
151 IN USHORT LinkCollection
,
153 OUT PHIDP_BUTTON_CAPS ButtonCaps
,
154 IN OUT PULONG ButtonCapsLength
);
159 HidParser_GetScaledUsageValue(
160 IN PHID_PARSER Parser
,
161 IN PVOID CollectionContext
,
162 IN HIDP_REPORT_TYPE ReportType
,
164 IN USHORT LinkCollection OPTIONAL
,
166 OUT PLONG UsageValue
,
168 IN ULONG ReportLength
);
175 IN PHID_PARSER Parser
,
176 IN PVOID CollectionContext
,
177 IN HIDP_REPORT_TYPE ReportType
,
178 OUT PHIDP_DATA DataList
,
179 IN OUT PULONG DataLength
,
181 IN ULONG ReportLength
);
186 HidParser_GetExtendedAttributes(
187 IN PHID_PARSER Parser
,
188 IN PVOID CollectionContext
,
189 IN HIDP_REPORT_TYPE ReportType
,
191 OUT PHIDP_EXTENDED_ATTRIBUTES Attributes
,
192 IN OUT PULONG LengthAttributes
);
197 HidParser_GetLinkCollectionNodes(
198 IN PHID_PARSER Parser
,
199 IN PVOID CollectionContext
,
200 OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes
,
201 IN OUT PULONG LinkCollectionNodesLength
);
206 HidParser_GetUsageValue(
207 IN PHID_PARSER Parser
,
208 IN PVOID CollectionContext
,
209 IN HIDP_REPORT_TYPE ReportType
,
211 IN USHORT LinkCollection
,
213 OUT PULONG UsageValue
,
215 IN ULONG ReportLength
);
220 HidParser_UsageListDifference(
221 IN PUSAGE PreviousUsageList
,
222 IN PUSAGE CurrentUsageList
,
223 OUT PUSAGE BreakUsageList
,
224 OUT PUSAGE MakeUsageList
,
225 IN ULONG UsageListLength
);
231 HidParser_MaxUsageListLength(
232 IN PHID_PARSER Parser
,
233 IN PVOID CollectionContext
,
234 IN HIDP_REPORT_TYPE ReportType
,
235 IN USAGE UsagePage OPTIONAL
);
241 IN PHID_PARSER Parser
,
242 IN PVOID CollectionContext
,
243 IN HIDP_REPORT_TYPE ReportType
,
245 IN USHORT LinkCollection OPTIONAL
,
246 OUT USAGE
*UsageList
,
247 IN OUT ULONG
*UsageLength
,
249 IN ULONG ReportLength
);
254 HidParser_GetUsagesEx(
255 IN PHID_PARSER Parser
,
256 IN PVOID CollectionContext
,
257 IN HIDP_REPORT_TYPE ReportType
,
258 IN USHORT LinkCollection
,
259 OUT PUSAGE_AND_PAGE ButtonList
,
260 IN OUT ULONG
*UsageLength
,
262 IN ULONG ReportLength
);
267 HidParser_SysPowerEvent (
268 IN PHID_PARSER Parser
,
269 IN PVOID CollectionContext
,
271 IN USHORT HidPacketLength
,
272 OUT PULONG OutputBuffer
);
276 HidParser_SysPowerCaps (
277 IN PHID_PARSER Parser
,
278 IN PVOID CollectionContext
,
279 OUT PULONG OutputBuffer
);
284 HidParser_GetUsageValueArray(
285 IN PHID_PARSER Parser
,
286 IN PVOID CollectionContext
,
287 IN HIDP_REPORT_TYPE ReportType
,
289 IN USHORT LinkCollection OPTIONAL
,
291 OUT PCHAR UsageValue
,
292 IN USHORT UsageValueByteLength
,
294 IN ULONG ReportLength
);
300 HidParser_UsageAndPageListDifference(
301 IN PUSAGE_AND_PAGE PreviousUsageList
,
302 IN PUSAGE_AND_PAGE CurrentUsageList
,
303 OUT PUSAGE_AND_PAGE BreakUsageList
,
304 OUT PUSAGE_AND_PAGE MakeUsageList
,
305 IN ULONG UsageListLength
);
310 HidParser_UnsetUsages(
311 IN PHID_PARSER Parser
,
312 IN PVOID CollectionContext
,
313 IN HIDP_REPORT_TYPE ReportType
,
315 IN USHORT LinkCollection
,
317 IN OUT PULONG UsageLength
,
319 IN ULONG ReportLength
);
324 HidParser_TranslateUsagesToI8042ScanCodes(
325 IN PUSAGE ChangedUsageList
,
326 IN ULONG UsageListLength
,
327 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
328 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
329 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
330 IN PVOID InsertCodesContext
);
335 HidParser_TranslateUsageAndPagesToI8042ScanCodes(
336 IN PHID_PARSER Parser
,
337 IN PUSAGE_AND_PAGE ChangedUsageList
,
338 IN ULONG UsageListLength
,
339 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
340 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
341 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
342 IN PVOID InsertCodesContext
);
348 IN PHID_PARSER Parser
,
349 IN PVOID CollectionContext
,
350 IN HIDP_REPORT_TYPE ReportType
,
352 IN USHORT LinkCollection
,
354 IN OUT PULONG UsageLength
,
356 IN ULONG ReportLength
);
361 HidParser_SetUsageValueArray(
362 IN PHID_PARSER Parser
,
363 IN PVOID CollectionContext
,
364 IN HIDP_REPORT_TYPE ReportType
,
366 IN USHORT LinkCollection OPTIONAL
,
369 IN USHORT UsageValueByteLength
,
371 IN ULONG ReportLength
);
376 HidParser_SetUsageValue(
377 IN PHID_PARSER Parser
,
378 IN PVOID CollectionContext
,
379 IN HIDP_REPORT_TYPE ReportType
,
381 IN USHORT LinkCollection
,
385 IN ULONG ReportLength
);
390 HidParser_SetScaledUsageValue(
391 IN PHID_PARSER Parser
,
392 IN PVOID CollectionContext
,
393 IN HIDP_REPORT_TYPE ReportType
,
395 IN USHORT LinkCollection OPTIONAL
,
399 IN ULONG ReportLength
);
405 IN PHID_PARSER Parser
,
406 IN PVOID CollectionContext
,
407 IN HIDP_REPORT_TYPE ReportType
,
408 IN PHIDP_DATA DataList
,
409 IN OUT PULONG DataLength
,
411 IN ULONG ReportLength
);
416 HidParser_MaxDataListLength(
417 IN PHID_PARSER Parser
,
418 IN PVOID CollectionContext
,
419 IN HIDP_REPORT_TYPE ReportType
);
424 HidParser_InitializeReportForID(
425 IN PHID_PARSER Parser
,
426 IN PVOID CollectionContext
,
427 IN HIDP_REPORT_TYPE ReportType
,
430 IN ULONG ReportLength
);
433 HidParser_TranslateKbdUsage(
434 IN PHID_PARSER Parser
,
436 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
437 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
438 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
439 IN PVOID InsertCodesContext
);
442 HidParser_TranslateCustUsage(
443 IN PHID_PARSER Parser
,
445 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
446 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
447 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
448 IN PVOID InsertCodesContext
);
453 HidParser_GetValueCaps(
455 IN PVOID CollectionContext
,
456 HIDP_REPORT_TYPE ReportType
,
457 PHIDP_VALUE_CAPS ValueCaps
,
458 PULONG ValueCapsLength
);