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)
18 PVOID Item
= ExAllocatePoolWithTag(NonPagedPool
, ItemSize
, HIDPARSE_TAG
);
24 RtlZeroMemory(Item
, ItemSize
);
41 ExFreePoolWithTag(Item
, HIDPARSE_TAG
);
53 RtlZeroMemory(Item
, ItemSize
);
66 RtlCopyMemory(Target
, Source
, Length
);
72 IN LPCSTR FormatStr
, ...)
77 char printbuffer
[1024];
79 va_start(args
, FormatStr
);
80 i
= vsprintf(printbuffer
, FormatStr
, args
);
83 DbgPrint(printbuffer
);
88 HidP_FreeCollectionDescription(
89 IN PHIDP_DEVICE_DESC DeviceDescription
)
96 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
101 HidParser_FreeCollectionDescription(&Parser
, DeviceDescription
);
109 IN PHIDP_PREPARSED_DATA PreparsedData
,
110 OUT PHIDP_CAPS Capabilities
)
117 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
122 return HidParser_GetCaps(&Parser
, PreparsedData
, Capabilities
);
127 HidP_GetCollectionDescription(
128 IN PHIDP_REPORT_DESCRIPTOR ReportDesc
,
130 IN POOL_TYPE PoolType
,
131 OUT PHIDP_DEVICE_DESC DeviceDescription
)
138 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
143 return HidParser_GetCollectionDescription(&Parser
, ReportDesc
, DescLength
, PoolType
, DeviceDescription
);
149 HidP_MaxUsageListLength(
150 IN HIDP_REPORT_TYPE ReportType
,
151 IN USAGE UsagePage OPTIONAL
,
152 IN PHIDP_PREPARSED_DATA PreparsedData
)
159 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
164 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
170 return HidParser_MaxUsageListLength(&Parser
, PreparsedData
, ReportType
, UsagePage
);
176 HidP_GetSpecificValueCaps(
177 IN HIDP_REPORT_TYPE ReportType
,
179 IN USHORT LinkCollection
,
181 OUT PHIDP_VALUE_CAPS ValueCaps
,
182 IN OUT PULONG ValueCapsLength
,
183 IN PHIDP_PREPARSED_DATA PreparsedData
)
190 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
195 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
200 return HidParser_GetSpecificValueCaps(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, ValueCaps
, ValueCapsLength
);
207 IN HIDP_REPORT_TYPE ReportType
,
209 IN USHORT LinkCollection OPTIONAL
,
210 OUT USAGE
*UsageList
,
211 IN OUT ULONG
*UsageLength
,
212 IN PHIDP_PREPARSED_DATA PreparsedData
,
214 IN ULONG ReportLength
)
221 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
226 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
231 return HidParser_GetUsages(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, UsageList
, UsageLength
, Report
, ReportLength
);
235 #undef HidP_GetButtonCaps
240 HidP_UsageListDifference(
241 IN PUSAGE PreviousUsageList
,
242 IN PUSAGE CurrentUsageList
,
243 OUT PUSAGE BreakUsageList
,
244 OUT PUSAGE MakeUsageList
,
245 IN ULONG UsageListLength
)
247 return HidParser_UsageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
254 IN HIDP_REPORT_TYPE ReportType
,
255 IN USHORT LinkCollection
,
256 OUT PUSAGE_AND_PAGE ButtonList
,
257 IN OUT ULONG
*UsageLength
,
258 IN PHIDP_PREPARSED_DATA PreparsedData
,
260 IN ULONG ReportLength
)
262 return HidP_GetUsages(ReportType
, HID_USAGE_PAGE_UNDEFINED
, LinkCollection
, &ButtonList
->Usage
, UsageLength
, PreparsedData
, Report
, ReportLength
);
268 HidP_UsageAndPageListDifference(
269 IN PUSAGE_AND_PAGE PreviousUsageList
,
270 IN PUSAGE_AND_PAGE CurrentUsageList
,
271 OUT PUSAGE_AND_PAGE BreakUsageList
,
272 OUT PUSAGE_AND_PAGE MakeUsageList
,
273 IN ULONG UsageListLength
)
275 return HidParser_UsageAndPageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
281 HidP_GetScaledUsageValue(
282 IN HIDP_REPORT_TYPE ReportType
,
284 IN USHORT LinkCollection OPTIONAL
,
286 OUT PLONG UsageValue
,
287 IN PHIDP_PREPARSED_DATA PreparsedData
,
289 IN ULONG ReportLength
)
296 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
301 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
304 // get scaled usage value
306 return HidParser_GetScaledUsageValue(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
313 IN HIDP_REPORT_TYPE ReportType
,
315 IN USHORT LinkCollection
,
317 OUT PULONG UsageValue
,
318 IN PHIDP_PREPARSED_DATA PreparsedData
,
320 IN ULONG ReportLength
)
327 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
332 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
335 // get scaled usage value
337 return HidParser_GetUsageValue(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
344 HidP_TranslateUsageAndPagesToI8042ScanCodes(
345 IN PUSAGE_AND_PAGE ChangedUsageList
,
346 IN ULONG UsageListLength
,
347 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
348 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
349 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
350 IN PVOID InsertCodesContext
)
357 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
360 // translate usage pages
362 return HidParser_TranslateUsageAndPagesToI8042ScanCodes(&Parser
, ChangedUsageList
, UsageListLength
, KeyAction
, ModifierState
, InsertCodesProcedure
, InsertCodesContext
);
369 HIDP_REPORT_TYPE ReportType
,
370 PHIDP_BUTTON_CAPS ButtonCaps
,
371 PUSHORT ButtonCapsLength
,
372 PHIDP_PREPARSED_DATA PreparsedData
)
374 return HidP_GetSpecificButtonCaps(ReportType
, HID_USAGE_PAGE_UNDEFINED
, 0, 0, ButtonCaps
, (PULONG
)ButtonCapsLength
, PreparsedData
);
380 HidP_GetSpecificButtonCaps(
381 IN HIDP_REPORT_TYPE ReportType
,
383 IN USHORT LinkCollection
,
385 OUT PHIDP_BUTTON_CAPS ButtonCaps
,
386 IN OUT PULONG ButtonCapsLength
,
387 IN PHIDP_PREPARSED_DATA PreparsedData
)
391 return STATUS_NOT_IMPLEMENTED
;
398 IN HIDP_REPORT_TYPE ReportType
,
399 OUT PHIDP_DATA DataList
,
400 IN OUT PULONG DataLength
,
401 IN PHIDP_PREPARSED_DATA PreparsedData
,
403 IN ULONG ReportLength
)
407 return STATUS_NOT_IMPLEMENTED
;
413 HidP_GetExtendedAttributes(
414 IN HIDP_REPORT_TYPE ReportType
,
416 IN PHIDP_PREPARSED_DATA PreparsedData
,
417 OUT PHIDP_EXTENDED_ATTRIBUTES Attributes
,
418 IN OUT PULONG LengthAttributes
)
422 return STATUS_NOT_IMPLEMENTED
;
428 HidP_GetLinkCollectionNodes(
429 OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes
,
430 IN OUT PULONG LinkCollectionNodesLength
,
431 IN PHIDP_PREPARSED_DATA PreparsedData
)
435 return STATUS_NOT_IMPLEMENTED
;
442 IN USHORT HidPacketLength
,
443 IN PHIDP_PREPARSED_DATA Ppd
,
444 OUT PULONG OutputBuffer
)
448 return STATUS_NOT_IMPLEMENTED
;
454 IN PHIDP_PREPARSED_DATA Ppd
,
455 OUT PULONG OutputBuffer
)
459 return STATUS_NOT_IMPLEMENTED
;
465 HidP_GetUsageValueArray(
466 IN HIDP_REPORT_TYPE ReportType
,
468 IN USHORT LinkCollection OPTIONAL
,
470 OUT PCHAR UsageValue
,
471 IN USHORT UsageValueByteLength
,
472 IN PHIDP_PREPARSED_DATA PreparsedData
,
474 IN ULONG ReportLength
)
478 return STATUS_NOT_IMPLEMENTED
;
486 IN HIDP_REPORT_TYPE ReportType
,
488 IN USHORT LinkCollection
,
490 IN OUT PULONG UsageLength
,
491 IN PHIDP_PREPARSED_DATA PreparsedData
,
493 IN ULONG ReportLength
)
497 return STATUS_NOT_IMPLEMENTED
;
503 HidP_TranslateUsagesToI8042ScanCodes(
504 IN PUSAGE ChangedUsageList
,
505 IN ULONG UsageListLength
,
506 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
507 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
508 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
509 IN PVOID InsertCodesContext
)
513 return STATUS_NOT_IMPLEMENTED
;
520 IN HIDP_REPORT_TYPE ReportType
,
522 IN USHORT LinkCollection
,
524 IN OUT PULONG UsageLength
,
525 IN PHIDP_PREPARSED_DATA PreparsedData
,
527 IN ULONG ReportLength
)
531 return STATUS_NOT_IMPLEMENTED
;
537 HidP_SetUsageValueArray(
538 IN HIDP_REPORT_TYPE ReportType
,
540 IN USHORT LinkCollection OPTIONAL
,
543 IN USHORT UsageValueByteLength
,
544 IN PHIDP_PREPARSED_DATA PreparsedData
,
546 IN ULONG ReportLength
)
550 return STATUS_NOT_IMPLEMENTED
;
557 IN HIDP_REPORT_TYPE ReportType
,
559 IN USHORT LinkCollection
,
562 IN PHIDP_PREPARSED_DATA PreparsedData
,
564 IN ULONG ReportLength
)
568 return STATUS_NOT_IMPLEMENTED
;
574 HidP_SetScaledUsageValue(
575 IN HIDP_REPORT_TYPE ReportType
,
577 IN USHORT LinkCollection OPTIONAL
,
580 IN PHIDP_PREPARSED_DATA PreparsedData
,
582 IN ULONG ReportLength
)
586 return STATUS_NOT_IMPLEMENTED
;
593 IN HIDP_REPORT_TYPE ReportType
,
594 IN PHIDP_DATA DataList
,
595 IN OUT PULONG DataLength
,
596 IN PHIDP_PREPARSED_DATA PreparsedData
,
598 IN ULONG ReportLength
)
602 return STATUS_NOT_IMPLEMENTED
;
608 HidP_MaxDataListLength(
609 IN HIDP_REPORT_TYPE ReportType
,
610 IN PHIDP_PREPARSED_DATA PreparsedData
)
614 return STATUS_NOT_IMPLEMENTED
;
620 HidP_InitializeReportForID(
621 IN HIDP_REPORT_TYPE ReportType
,
623 IN PHIDP_PREPARSED_DATA PreparsedData
,
625 IN ULONG ReportLength
)
629 return STATUS_NOT_IMPLEMENTED
;
632 #undef HidP_GetValueCaps
638 HIDP_REPORT_TYPE ReportType
,
639 PHIDP_VALUE_CAPS ValueCaps
,
640 PULONG ValueCapsLength
,
641 PHIDP_PREPARSED_DATA PreparsedData
)
645 return STATUS_NOT_IMPLEMENTED
;
651 IN PDRIVER_OBJECT DriverObject
,
652 IN PUNICODE_STRING RegPath
)
654 DPRINT("********* HID PARSE *********\n");
655 return STATUS_SUCCESS
;