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
, ...)
76 char printbuffer
[1024];
78 va_start(args
, FormatStr
);
79 vsprintf(printbuffer
, FormatStr
, args
);
82 DbgPrint(printbuffer
);
87 HidP_FreeCollectionDescription(
88 IN PHIDP_DEVICE_DESC DeviceDescription
)
95 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
100 HidParser_FreeCollectionDescription(&Parser
, DeviceDescription
);
108 IN PHIDP_PREPARSED_DATA PreparsedData
,
109 OUT PHIDP_CAPS Capabilities
)
116 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
121 return HidParser_GetCaps(&Parser
, PreparsedData
, Capabilities
);
126 HidP_GetCollectionDescription(
127 IN PHIDP_REPORT_DESCRIPTOR ReportDesc
,
129 IN POOL_TYPE PoolType
,
130 OUT PHIDP_DEVICE_DESC DeviceDescription
)
137 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
142 return HidParser_GetCollectionDescription(&Parser
, ReportDesc
, DescLength
, PoolType
, DeviceDescription
);
148 HidP_MaxUsageListLength(
149 IN HIDP_REPORT_TYPE ReportType
,
150 IN USAGE UsagePage OPTIONAL
,
151 IN PHIDP_PREPARSED_DATA PreparsedData
)
158 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
163 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
169 return HidParser_MaxUsageListLength(&Parser
, PreparsedData
, ReportType
, UsagePage
);
175 HidP_GetSpecificValueCaps(
176 IN HIDP_REPORT_TYPE ReportType
,
178 IN USHORT LinkCollection
,
180 OUT PHIDP_VALUE_CAPS ValueCaps
,
181 IN OUT PUSHORT ValueCapsLength
,
182 IN PHIDP_PREPARSED_DATA PreparsedData
)
189 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
194 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
199 return HidParser_GetSpecificValueCaps(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, ValueCaps
, ValueCapsLength
);
206 IN HIDP_REPORT_TYPE ReportType
,
208 IN USHORT LinkCollection OPTIONAL
,
209 OUT PUSAGE UsageList
,
210 IN OUT PULONG UsageLength
,
211 IN PHIDP_PREPARSED_DATA PreparsedData
,
213 IN ULONG ReportLength
)
220 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
225 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
230 return HidParser_GetUsages(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, UsageList
, UsageLength
, Report
, ReportLength
);
234 #undef HidP_GetButtonCaps
239 HidP_UsageListDifference(
240 IN PUSAGE PreviousUsageList
,
241 IN PUSAGE CurrentUsageList
,
242 OUT PUSAGE BreakUsageList
,
243 OUT PUSAGE MakeUsageList
,
244 IN ULONG UsageListLength
)
246 return HidParser_UsageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
253 IN HIDP_REPORT_TYPE ReportType
,
254 IN USHORT LinkCollection
,
255 OUT PUSAGE_AND_PAGE ButtonList
,
256 IN OUT ULONG
*UsageLength
,
257 IN PHIDP_PREPARSED_DATA PreparsedData
,
259 IN ULONG ReportLength
)
261 return HidP_GetUsages(ReportType
, HID_USAGE_PAGE_UNDEFINED
, LinkCollection
, &ButtonList
->Usage
, UsageLength
, PreparsedData
, Report
, ReportLength
);
267 HidP_UsageAndPageListDifference(
268 IN PUSAGE_AND_PAGE PreviousUsageList
,
269 IN PUSAGE_AND_PAGE CurrentUsageList
,
270 OUT PUSAGE_AND_PAGE BreakUsageList
,
271 OUT PUSAGE_AND_PAGE MakeUsageList
,
272 IN ULONG UsageListLength
)
274 return HidParser_UsageAndPageListDifference(PreviousUsageList
, CurrentUsageList
, BreakUsageList
, MakeUsageList
, UsageListLength
);
280 HidP_GetScaledUsageValue(
281 IN HIDP_REPORT_TYPE ReportType
,
283 IN USHORT LinkCollection OPTIONAL
,
285 OUT PLONG UsageValue
,
286 IN PHIDP_PREPARSED_DATA PreparsedData
,
288 IN ULONG ReportLength
)
295 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
300 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
303 // get scaled usage value
305 return HidParser_GetScaledUsageValue(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
312 IN HIDP_REPORT_TYPE ReportType
,
314 IN USHORT LinkCollection
,
316 OUT PULONG UsageValue
,
317 IN PHIDP_PREPARSED_DATA PreparsedData
,
319 IN ULONG ReportLength
)
326 ASSERT(ReportType
== HidP_Input
|| ReportType
== HidP_Output
|| ReportType
== HidP_Feature
);
331 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
334 // get scaled usage value
336 return HidParser_GetUsageValue(&Parser
, PreparsedData
, ReportType
, UsagePage
, LinkCollection
, Usage
, UsageValue
, Report
, ReportLength
);
343 HidP_TranslateUsageAndPagesToI8042ScanCodes(
344 IN PUSAGE_AND_PAGE ChangedUsageList
,
345 IN ULONG UsageListLength
,
346 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
347 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
348 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
349 IN PVOID InsertCodesContext
)
356 HidParser_InitParser(AllocFunction
, FreeFunction
, ZeroFunction
, CopyFunction
, DebugFunction
, &Parser
);
359 // translate usage pages
361 return HidParser_TranslateUsageAndPagesToI8042ScanCodes(&Parser
, ChangedUsageList
, UsageListLength
, KeyAction
, ModifierState
, InsertCodesProcedure
, InsertCodesContext
);
368 HIDP_REPORT_TYPE ReportType
,
369 PHIDP_BUTTON_CAPS ButtonCaps
,
370 PUSHORT ButtonCapsLength
,
371 PHIDP_PREPARSED_DATA PreparsedData
)
373 return HidP_GetSpecificButtonCaps(ReportType
, HID_USAGE_PAGE_UNDEFINED
, 0, 0, ButtonCaps
, ButtonCapsLength
, PreparsedData
);
379 HidP_GetSpecificButtonCaps(
380 IN HIDP_REPORT_TYPE ReportType
,
382 IN USHORT LinkCollection
,
384 OUT PHIDP_BUTTON_CAPS ButtonCaps
,
385 IN OUT PUSHORT ButtonCapsLength
,
386 IN PHIDP_PREPARSED_DATA PreparsedData
)
390 return STATUS_NOT_IMPLEMENTED
;
397 IN HIDP_REPORT_TYPE ReportType
,
398 OUT PHIDP_DATA DataList
,
399 IN OUT PULONG DataLength
,
400 IN PHIDP_PREPARSED_DATA PreparsedData
,
402 IN ULONG ReportLength
)
406 return STATUS_NOT_IMPLEMENTED
;
412 HidP_GetExtendedAttributes(
413 IN HIDP_REPORT_TYPE ReportType
,
415 IN PHIDP_PREPARSED_DATA PreparsedData
,
416 OUT PHIDP_EXTENDED_ATTRIBUTES Attributes
,
417 IN OUT PULONG LengthAttributes
)
421 return STATUS_NOT_IMPLEMENTED
;
427 HidP_GetLinkCollectionNodes(
428 OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes
,
429 IN OUT PULONG LinkCollectionNodesLength
,
430 IN PHIDP_PREPARSED_DATA PreparsedData
)
434 return STATUS_NOT_IMPLEMENTED
;
441 IN USHORT HidPacketLength
,
442 IN PHIDP_PREPARSED_DATA Ppd
,
443 OUT PULONG OutputBuffer
)
447 return STATUS_NOT_IMPLEMENTED
;
453 IN PHIDP_PREPARSED_DATA Ppd
,
454 OUT PULONG OutputBuffer
)
458 return STATUS_NOT_IMPLEMENTED
;
464 HidP_GetUsageValueArray(
465 IN HIDP_REPORT_TYPE ReportType
,
467 IN USHORT LinkCollection OPTIONAL
,
469 OUT PCHAR UsageValue
,
470 IN USHORT UsageValueByteLength
,
471 IN PHIDP_PREPARSED_DATA PreparsedData
,
473 IN ULONG ReportLength
)
477 return STATUS_NOT_IMPLEMENTED
;
485 IN HIDP_REPORT_TYPE ReportType
,
487 IN USHORT LinkCollection
,
489 IN OUT PULONG UsageLength
,
490 IN PHIDP_PREPARSED_DATA PreparsedData
,
492 IN ULONG ReportLength
)
496 return STATUS_NOT_IMPLEMENTED
;
502 HidP_TranslateUsagesToI8042ScanCodes(
503 IN PUSAGE ChangedUsageList
,
504 IN ULONG UsageListLength
,
505 IN HIDP_KEYBOARD_DIRECTION KeyAction
,
506 IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState
,
507 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure
,
508 IN PVOID InsertCodesContext
)
512 return STATUS_NOT_IMPLEMENTED
;
519 IN HIDP_REPORT_TYPE ReportType
,
521 IN USHORT LinkCollection
,
523 IN OUT PULONG UsageLength
,
524 IN PHIDP_PREPARSED_DATA PreparsedData
,
526 IN ULONG ReportLength
)
530 return STATUS_NOT_IMPLEMENTED
;
536 HidP_SetUsageValueArray(
537 IN HIDP_REPORT_TYPE ReportType
,
539 IN USHORT LinkCollection OPTIONAL
,
542 IN USHORT UsageValueByteLength
,
543 IN PHIDP_PREPARSED_DATA PreparsedData
,
545 IN ULONG ReportLength
)
549 return STATUS_NOT_IMPLEMENTED
;
556 IN HIDP_REPORT_TYPE ReportType
,
558 IN USHORT LinkCollection
,
561 IN PHIDP_PREPARSED_DATA PreparsedData
,
563 IN ULONG ReportLength
)
567 return STATUS_NOT_IMPLEMENTED
;
573 HidP_SetScaledUsageValue(
574 IN HIDP_REPORT_TYPE ReportType
,
576 IN USHORT LinkCollection OPTIONAL
,
579 IN PHIDP_PREPARSED_DATA PreparsedData
,
581 IN ULONG ReportLength
)
585 return STATUS_NOT_IMPLEMENTED
;
592 IN HIDP_REPORT_TYPE ReportType
,
593 IN PHIDP_DATA DataList
,
594 IN OUT PULONG DataLength
,
595 IN PHIDP_PREPARSED_DATA PreparsedData
,
597 IN ULONG ReportLength
)
601 return STATUS_NOT_IMPLEMENTED
;
607 HidP_MaxDataListLength(
608 IN HIDP_REPORT_TYPE ReportType
,
609 IN PHIDP_PREPARSED_DATA PreparsedData
)
613 return STATUS_NOT_IMPLEMENTED
;
619 HidP_InitializeReportForID(
620 IN HIDP_REPORT_TYPE ReportType
,
622 IN PHIDP_PREPARSED_DATA PreparsedData
,
624 IN ULONG ReportLength
)
628 return STATUS_NOT_IMPLEMENTED
;
631 #undef HidP_GetValueCaps
637 HIDP_REPORT_TYPE ReportType
,
638 PHIDP_VALUE_CAPS ValueCaps
,
639 PUSHORT ValueCapsLength
,
640 PHIDP_PREPARSED_DATA PreparsedData
)
644 return STATUS_NOT_IMPLEMENTED
;
650 IN PDRIVER_OBJECT DriverObject
,
651 IN PUNICODE_STRING RegPath
)
653 DPRINT("********* HID PARSE *********\n");
654 return STATUS_SUCCESS
;