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
= ExAllocatePool(NonPagedPool
, ItemSize
);
24 RtlZeroMemory(Item
, ItemSize
);
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
, NULL
, &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
, PreparsedData
, &Parser
);
122 return HidParser_GetCaps(&Parser
, Capabilities
);
127 HidP_GetCollectionDescription(
128 IN PHIDP_REPORT_DESCRIPTOR ReportDesc
,
130 IN POOL_TYPE PoolType
,
131 OUT PHIDP_DEVICE_DESC DeviceDescription
)
134 HIDPARSER_STATUS Status
;
137 // first allocate the parser
139 Status
= HidParser_AllocateParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
140 if (Status
!= HIDPARSER_STATUS_SUCCESS
)
145 return STATUS_INSUFFICIENT_RESOURCES
;
151 Status
= HidParser_GetCollectionDescription(Parser
, ReportDesc
, DescLength
, PoolType
, DeviceDescription
);
154 // FIXME parser memory leak
162 HidP_MaxUsageListLength(
163 IN HIDP_REPORT_TYPE ReportType
,
164 IN USAGE UsagePage OPTIONAL
,
165 IN PHIDP_PREPARSED_DATA PreparsedData
)
172 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
177 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, PreparsedData
, &Parser
);
183 return HidParser_MaxUsageListLength(&Parser
, ReportType
, UsagePage
);
189 HidP_GetSpecificValueCaps(
190 IN HIDP_REPORT_TYPE ReportType
,
192 IN USHORT LinkCollection
,
194 OUT PHIDP_VALUE_CAPS ValueCaps
,
195 IN OUT PULONG ValueCapsLength
,
196 IN PHIDP_PREPARSED_DATA PreparsedData
)
203 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
208 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, PreparsedData
, &Parser
);
213 return HidParser_GetSpecificValueCaps(&Parser
, ReportType
, UsagePage
, LinkCollection
, Usage
, ValueCaps
, ValueCapsLength
);
220 IN HIDP_REPORT_TYPE ReportType
,
222 IN USHORT LinkCollection OPTIONAL
,
223 OUT USAGE
*UsageList
,
224 IN OUT ULONG
*UsageLength
,
225 IN PHIDP_PREPARSED_DATA PreparsedData
,
227 IN ULONG ReportLength
)
234 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
239 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, PreparsedData
, &Parser
);
244 return HidParser_GetUsages(&Parser
, ReportType
, UsagePage
, LinkCollection
, UsageList
, UsageLength
, Report
, ReportLength
);
248 #undef HidP_GetButtonCaps
253 HidP_UsageListDifference(
254 IN PUSAGE PreviousUsageList
,
255 IN PUSAGE CurrentUsageList
,
256 OUT PUSAGE BreakUsageList
,
257 OUT PUSAGE MakeUsageList
,
258 IN ULONG UsageListLength
)
260 return HidParser_UsageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
267 IN HIDP_REPORT_TYPE ReportType
,
268 IN USHORT LinkCollection
,
269 OUT PUSAGE_AND_PAGE ButtonList
,
270 IN OUT ULONG
*UsageLength
,
271 IN PHIDP_PREPARSED_DATA PreparsedData
,
273 IN ULONG ReportLength
)
275 return HidP_GetUsages(ReportType
, HID_USAGE_PAGE_UNDEFINED
, LinkCollection
, (PUSAGE
)ButtonList
, UsageLength
, PreparsedData
, Report
, ReportLength
);
281 HidP_UsageAndPageListDifference(
282 IN PUSAGE_AND_PAGE PreviousUsageList
,
283 IN PUSAGE_AND_PAGE CurrentUsageList
,
284 OUT PUSAGE_AND_PAGE BreakUsageList
,
285 OUT PUSAGE_AND_PAGE MakeUsageList
,
286 IN ULONG UsageListLength
)
288 return HidParser_UsageAndPageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
294 HidP_GetScaledUsageValue(
295 IN HIDP_REPORT_TYPE ReportType
,
297 IN USHORT LinkCollection OPTIONAL
,
299 OUT PLONG UsageValue
,
300 IN PHIDP_PREPARSED_DATA PreparsedData
,
302 IN ULONG ReportLength
)
309 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
314 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, PreparsedData
, &Parser
);
317 // get scaled usage value
319 return HidParser_GetScaledUsageValue(&Parser
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
325 HidP_TranslateUsageAndPagesToI8042ScanCodes(
326 IN PUSAGE_AND_PAGE ChangedUsageList
,
327 IN ULONG UsageListLength
,
328 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
329 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
330 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
331 IN PVOID InsertCodesContext
)
338 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
343 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, NULL
, &Parser
);
346 // translate usage pages
348 return HidParser_TranslateUsageAndPagesToI8042ScanCodes(Parser
, UsageListLength
, KeyAction
, ModifierState
, InsertCodesProcedure
, InsertCodesContext
);
357 HIDP_REPORT_TYPE ReportType
,
358 PHIDP_BUTTON_CAPS ButtonCaps
,
359 PUSHORT ButtonCapsLength
,
360 PHIDP_PREPARSED_DATA PreparsedData
)
362 return HidP_GetSpecificButtonCaps(ReportType
, HID_USAGE_PAGE_UNDEFINED
, 0, 0, ButtonCaps
, (PULONG
)ButtonCapsLength
, PreparsedData
);
368 HidP_GetSpecificButtonCaps(
369 IN HIDP_REPORT_TYPE ReportType
,
371 IN USHORT LinkCollection
,
373 OUT PHIDP_BUTTON_CAPS ButtonCaps
,
374 IN OUT PULONG ButtonCapsLength
,
375 IN PHIDP_PREPARSED_DATA PreparsedData
)
379 return STATUS_NOT_IMPLEMENTED
;
386 IN HIDP_REPORT_TYPE ReportType
,
387 OUT PHIDP_DATA DataList
,
388 IN OUT PULONG DataLength
,
389 IN PHIDP_PREPARSED_DATA PreparsedData
,
391 IN ULONG ReportLength
)
395 return STATUS_NOT_IMPLEMENTED
;
401 HidP_GetExtendedAttributes(
402 IN HIDP_REPORT_TYPE ReportType
,
404 IN PHIDP_PREPARSED_DATA PreparsedData
,
405 OUT PHIDP_EXTENDED_ATTRIBUTES Attributes
,
406 IN OUT PULONG LengthAttributes
)
410 return STATUS_NOT_IMPLEMENTED
;
416 HidP_GetLinkCollectionNodes(
417 OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes
,
418 IN OUT PULONG LinkCollectionNodesLength
,
419 IN PHIDP_PREPARSED_DATA PreparsedData
)
423 return STATUS_NOT_IMPLEMENTED
;
430 IN HIDP_REPORT_TYPE ReportType
,
432 IN USHORT LinkCollection
,
434 OUT PULONG UsageValue
,
435 IN PHIDP_PREPARSED_DATA PreparsedData
,
437 IN ULONG ReportLength
)
441 return STATUS_NOT_IMPLEMENTED
;
448 IN USHORT HidPacketLength
,
449 IN PHIDP_PREPARSED_DATA Ppd
,
450 OUT PULONG OutputBuffer
)
454 return STATUS_NOT_IMPLEMENTED
;
460 IN PHIDP_PREPARSED_DATA Ppd
,
461 OUT PULONG OutputBuffer
)
465 return STATUS_NOT_IMPLEMENTED
;
471 HidP_GetUsageValueArray(
472 IN HIDP_REPORT_TYPE ReportType
,
474 IN USHORT LinkCollection OPTIONAL
,
476 OUT PCHAR UsageValue
,
477 IN USHORT UsageValueByteLength
,
478 IN PHIDP_PREPARSED_DATA PreparsedData
,
480 IN ULONG ReportLength
)
484 return STATUS_NOT_IMPLEMENTED
;
492 IN HIDP_REPORT_TYPE ReportType
,
494 IN USHORT LinkCollection
,
496 IN OUT PULONG UsageLength
,
497 IN PHIDP_PREPARSED_DATA PreparsedData
,
499 IN ULONG ReportLength
)
503 return STATUS_NOT_IMPLEMENTED
;
509 HidP_TranslateUsagesToI8042ScanCodes(
510 IN PUSAGE ChangedUsageList
,
511 IN ULONG UsageListLength
,
512 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
513 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
514 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
515 IN PVOID InsertCodesContext
)
519 return STATUS_NOT_IMPLEMENTED
;
526 IN HIDP_REPORT_TYPE ReportType
,
528 IN USHORT LinkCollection
,
530 IN OUT PULONG UsageLength
,
531 IN PHIDP_PREPARSED_DATA PreparsedData
,
533 IN ULONG ReportLength
)
537 return STATUS_NOT_IMPLEMENTED
;
543 HidP_SetUsageValueArray(
544 IN HIDP_REPORT_TYPE ReportType
,
546 IN USHORT LinkCollection OPTIONAL
,
549 IN USHORT UsageValueByteLength
,
550 IN PHIDP_PREPARSED_DATA PreparsedData
,
552 IN ULONG ReportLength
)
556 return STATUS_NOT_IMPLEMENTED
;
563 IN HIDP_REPORT_TYPE ReportType
,
565 IN USHORT LinkCollection
,
568 IN PHIDP_PREPARSED_DATA PreparsedData
,
570 IN ULONG ReportLength
)
574 return STATUS_NOT_IMPLEMENTED
;
580 HidP_SetScaledUsageValue(
581 IN HIDP_REPORT_TYPE ReportType
,
583 IN USHORT LinkCollection OPTIONAL
,
586 IN PHIDP_PREPARSED_DATA PreparsedData
,
588 IN ULONG ReportLength
)
592 return STATUS_NOT_IMPLEMENTED
;
599 IN HIDP_REPORT_TYPE ReportType
,
600 IN PHIDP_DATA DataList
,
601 IN OUT PULONG DataLength
,
602 IN PHIDP_PREPARSED_DATA PreparsedData
,
604 IN ULONG ReportLength
)
608 return STATUS_NOT_IMPLEMENTED
;
614 HidP_MaxDataListLength(
615 IN HIDP_REPORT_TYPE ReportType
,
616 IN PHIDP_PREPARSED_DATA PreparsedData
)
620 return STATUS_NOT_IMPLEMENTED
;
626 HidP_InitializeReportForID(
627 IN HIDP_REPORT_TYPE ReportType
,
629 IN PHIDP_PREPARSED_DATA PreparsedData
,
631 IN ULONG ReportLength
)
635 return STATUS_NOT_IMPLEMENTED
;
638 #undef HidP_GetValueCaps
644 HIDP_REPORT_TYPE ReportType
,
645 PHIDP_VALUE_CAPS ValueCaps
,
646 PULONG ValueCapsLength
,
647 PHIDP_PREPARSED_DATA PreparsedData
)
651 return STATUS_NOT_IMPLEMENTED
;
657 IN PDRIVER_OBJECT DriverObject
,
658 IN PUNICODE_STRING RegPath
)
661 DPRINT1("********* HID PARSE *********\n");
662 return STATUS_SUCCESS
;