2 * PROJECT: ReactOS Universal Serial Bus Bulk Enhanced Host Controller Interface
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: drivers/usb/hidparse/hidparse.c
7 * Michael Martin (michael.martin@reactos.org)
8 * Johannes Anderwald (johannes.anderwald@reactos.org)
21 PVOID Item
= ExAllocatePoolWithTag(NonPagedPool
, ItemSize
, HIDPARSE_TAG
);
27 RtlZeroMemory(Item
, ItemSize
);
44 ExFreePoolWithTag(Item
, HIDPARSE_TAG
);
56 RtlZeroMemory(Item
, ItemSize
);
69 RtlCopyMemory(Target
, Source
, Length
);
75 IN LPCSTR FormatStr
, ...)
79 char printbuffer
[1024];
81 va_start(args
, FormatStr
);
82 vsprintf(printbuffer
, FormatStr
, args
);
85 DbgPrint(printbuffer
);
91 HidP_FreeCollectionDescription(
92 IN PHIDP_DEVICE_DESC DeviceDescription
)
99 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
104 HidParser_FreeCollectionDescription(&Parser
, DeviceDescription
);
112 IN PHIDP_PREPARSED_DATA PreparsedData
,
113 OUT PHIDP_CAPS Capabilities
)
120 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
125 return HidParser_GetCaps(&Parser
, PreparsedData
, Capabilities
);
130 HidP_GetCollectionDescription(
131 IN PHIDP_REPORT_DESCRIPTOR ReportDesc
,
133 IN POOL_TYPE PoolType
,
134 OUT PHIDP_DEVICE_DESC DeviceDescription
)
141 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
146 return HidParser_GetCollectionDescription(&Parser
, ReportDesc
, DescLength
, PoolType
, DeviceDescription
);
152 HidP_MaxUsageListLength(
153 IN HIDP_REPORT_TYPE ReportType
,
154 IN USAGE UsagePage OPTIONAL
,
155 IN PHIDP_PREPARSED_DATA PreparsedData
)
162 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
167 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
173 return HidParser_MaxUsageListLength(&Parser
, PreparsedData
, ReportType
, UsagePage
);
179 HidP_GetSpecificValueCaps(
180 IN HIDP_REPORT_TYPE ReportType
,
182 IN USHORT LinkCollection
,
184 OUT PHIDP_VALUE_CAPS ValueCaps
,
185 IN OUT PUSHORT ValueCapsLength
,
186 IN PHIDP_PREPARSED_DATA PreparsedData
)
193 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
198 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
203 return HidParser_GetSpecificValueCaps(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, ValueCaps
, ValueCapsLength
);
210 IN HIDP_REPORT_TYPE ReportType
,
212 IN USHORT LinkCollection OPTIONAL
,
213 OUT PUSAGE UsageList
,
214 IN OUT PULONG UsageLength
,
215 IN PHIDP_PREPARSED_DATA PreparsedData
,
217 IN ULONG ReportLength
)
224 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
229 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
234 return HidParser_GetUsages(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, UsageList
, UsageLength
, Report
, ReportLength
);
238 #undef HidP_GetButtonCaps
243 HidP_UsageListDifference(
244 IN PUSAGE PreviousUsageList
,
245 IN PUSAGE CurrentUsageList
,
246 OUT PUSAGE BreakUsageList
,
247 OUT PUSAGE MakeUsageList
,
248 IN ULONG UsageListLength
)
250 return HidParser_UsageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
257 IN HIDP_REPORT_TYPE ReportType
,
258 IN USHORT LinkCollection
,
259 OUT PUSAGE_AND_PAGE ButtonList
,
260 IN OUT ULONG
*UsageLength
,
261 IN PHIDP_PREPARSED_DATA PreparsedData
,
263 IN ULONG ReportLength
)
265 return HidP_GetUsages(ReportType
, HID_USAGE_PAGE_UNDEFINED
, LinkCollection
, &ButtonList
->Usage
, UsageLength
, PreparsedData
, Report
, ReportLength
);
271 HidP_UsageAndPageListDifference(
272 IN PUSAGE_AND_PAGE PreviousUsageList
,
273 IN PUSAGE_AND_PAGE CurrentUsageList
,
274 OUT PUSAGE_AND_PAGE BreakUsageList
,
275 OUT PUSAGE_AND_PAGE MakeUsageList
,
276 IN ULONG UsageListLength
)
278 return HidParser_UsageAndPageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
284 HidP_GetScaledUsageValue(
285 IN HIDP_REPORT_TYPE ReportType
,
287 IN USHORT LinkCollection OPTIONAL
,
289 OUT PLONG UsageValue
,
290 IN PHIDP_PREPARSED_DATA PreparsedData
,
292 IN ULONG ReportLength
)
299 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
304 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
307 // get scaled usage value
309 return HidParser_GetScaledUsageValue(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
316 IN HIDP_REPORT_TYPE ReportType
,
318 IN USHORT LinkCollection
,
320 OUT PULONG UsageValue
,
321 IN PHIDP_PREPARSED_DATA PreparsedData
,
323 IN ULONG ReportLength
)
330 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
335 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
338 // get scaled usage value
340 return HidParser_GetUsageValue(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
347 HidP_TranslateUsageAndPagesToI8042ScanCodes(
348 IN PUSAGE_AND_PAGE ChangedUsageList
,
349 IN ULONG UsageListLength
,
350 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
351 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
352 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
353 IN PVOID InsertCodesContext
)
360 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
363 // translate usage pages
365 return HidParser_TranslateUsageAndPagesToI8042ScanCodes(&Parser
, ChangedUsageList
, UsageListLength
, KeyAction
, ModifierState
, InsertCodesProcedure
, InsertCodesContext
);
372 HIDP_REPORT_TYPE ReportType
,
373 PHIDP_BUTTON_CAPS ButtonCaps
,
374 PUSHORT ButtonCapsLength
,
375 PHIDP_PREPARSED_DATA PreparsedData
)
377 return HidP_GetSpecificButtonCaps(ReportType
, HID_USAGE_PAGE_UNDEFINED
, 0, 0, ButtonCaps
, ButtonCapsLength
, PreparsedData
);
383 HidP_GetSpecificButtonCaps(
384 IN HIDP_REPORT_TYPE ReportType
,
386 IN USHORT LinkCollection
,
388 OUT PHIDP_BUTTON_CAPS ButtonCaps
,
389 IN OUT PUSHORT ButtonCapsLength
,
390 IN PHIDP_PREPARSED_DATA PreparsedData
)
394 return STATUS_NOT_IMPLEMENTED
;
401 IN HIDP_REPORT_TYPE ReportType
,
402 OUT PHIDP_DATA DataList
,
403 IN OUT PULONG DataLength
,
404 IN PHIDP_PREPARSED_DATA PreparsedData
,
406 IN ULONG ReportLength
)
410 return STATUS_NOT_IMPLEMENTED
;
416 HidP_GetExtendedAttributes(
417 IN HIDP_REPORT_TYPE ReportType
,
419 IN PHIDP_PREPARSED_DATA PreparsedData
,
420 OUT PHIDP_EXTENDED_ATTRIBUTES Attributes
,
421 IN OUT PULONG LengthAttributes
)
425 return STATUS_NOT_IMPLEMENTED
;
431 HidP_GetLinkCollectionNodes(
432 OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes
,
433 IN OUT PULONG LinkCollectionNodesLength
,
434 IN PHIDP_PREPARSED_DATA PreparsedData
)
438 return STATUS_NOT_IMPLEMENTED
;
445 IN USHORT HidPacketLength
,
446 IN PHIDP_PREPARSED_DATA Ppd
,
447 OUT PULONG OutputBuffer
)
451 return STATUS_NOT_IMPLEMENTED
;
457 IN PHIDP_PREPARSED_DATA Ppd
,
458 OUT PULONG OutputBuffer
)
462 return STATUS_NOT_IMPLEMENTED
;
468 HidP_GetUsageValueArray(
469 IN HIDP_REPORT_TYPE ReportType
,
471 IN USHORT LinkCollection OPTIONAL
,
473 OUT PCHAR UsageValue
,
474 IN USHORT UsageValueByteLength
,
475 IN PHIDP_PREPARSED_DATA PreparsedData
,
477 IN ULONG ReportLength
)
481 return STATUS_NOT_IMPLEMENTED
;
489 IN HIDP_REPORT_TYPE ReportType
,
491 IN USHORT LinkCollection
,
493 IN OUT PULONG UsageLength
,
494 IN PHIDP_PREPARSED_DATA PreparsedData
,
496 IN ULONG ReportLength
)
500 return STATUS_NOT_IMPLEMENTED
;
506 HidP_TranslateUsagesToI8042ScanCodes(
507 IN PUSAGE ChangedUsageList
,
508 IN ULONG UsageListLength
,
509 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
510 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
511 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
512 IN PVOID InsertCodesContext
)
516 return STATUS_NOT_IMPLEMENTED
;
523 IN HIDP_REPORT_TYPE ReportType
,
525 IN USHORT LinkCollection
,
527 IN OUT PULONG UsageLength
,
528 IN PHIDP_PREPARSED_DATA PreparsedData
,
530 IN ULONG ReportLength
)
534 return STATUS_NOT_IMPLEMENTED
;
540 HidP_SetUsageValueArray(
541 IN HIDP_REPORT_TYPE ReportType
,
543 IN USHORT LinkCollection OPTIONAL
,
546 IN USHORT UsageValueByteLength
,
547 IN PHIDP_PREPARSED_DATA PreparsedData
,
549 IN ULONG ReportLength
)
553 return STATUS_NOT_IMPLEMENTED
;
560 IN HIDP_REPORT_TYPE ReportType
,
562 IN USHORT LinkCollection
,
565 IN PHIDP_PREPARSED_DATA PreparsedData
,
567 IN ULONG ReportLength
)
571 return STATUS_NOT_IMPLEMENTED
;
577 HidP_SetScaledUsageValue(
578 IN HIDP_REPORT_TYPE ReportType
,
580 IN USHORT LinkCollection OPTIONAL
,
583 IN PHIDP_PREPARSED_DATA PreparsedData
,
585 IN ULONG ReportLength
)
589 return STATUS_NOT_IMPLEMENTED
;
596 IN HIDP_REPORT_TYPE ReportType
,
597 IN PHIDP_DATA DataList
,
598 IN OUT PULONG DataLength
,
599 IN PHIDP_PREPARSED_DATA PreparsedData
,
601 IN ULONG ReportLength
)
605 return STATUS_NOT_IMPLEMENTED
;
611 HidP_MaxDataListLength(
612 IN HIDP_REPORT_TYPE ReportType
,
613 IN PHIDP_PREPARSED_DATA PreparsedData
)
617 return STATUS_NOT_IMPLEMENTED
;
623 HidP_InitializeReportForID(
624 IN HIDP_REPORT_TYPE ReportType
,
626 IN PHIDP_PREPARSED_DATA PreparsedData
,
628 IN ULONG ReportLength
)
632 return STATUS_NOT_IMPLEMENTED
;
635 #undef HidP_GetValueCaps
641 HIDP_REPORT_TYPE ReportType
,
642 PHIDP_VALUE_CAPS ValueCaps
,
643 PUSHORT ValueCapsLength
,
644 PHIDP_PREPARSED_DATA PreparsedData
)
648 return STATUS_NOT_IMPLEMENTED
;
654 IN PDRIVER_OBJECT DriverObject
,
655 IN PUNICODE_STRING RegPath
)
657 DPRINT("********* HID PARSE *********\n");
658 return STATUS_SUCCESS
;