25 ULONG CollectionCount;
38 DebugFunction(
"[HIDPARSER] Failed to parse report descriptor with %x\n", ParserStatus);
46 if (CollectionCount == 0)
304 #undef HidParser_GetButtonCaps 382 ULONG Index, SubIndex, bFound, BreakUsageIndex = 0, MakeUsageIndex = 0;
391 CurrentUsage = PreviousUsageList[
Index];
403 Usage = CurrentUsageList[SubIndex];
410 if (CurrentUsage ==
Usage)
425 BreakUsageList[BreakUsageIndex] = CurrentUsage;
439 CurrentUsage = CurrentUsageList[
Index];
451 Usage = PreviousUsageList[SubIndex];
458 if (CurrentUsage ==
Usage)
473 MakeUsageList[MakeUsageIndex] = CurrentUsage;
696 ULONG Index, SubIndex, BreakUsageListIndex = 0, MakeUsageListIndex = 0, bFound;
706 CurrentUsage = &PreviousUsageList[
Index];
718 Usage = &CurrentUsageList[SubIndex];
721 if (
Usage->Usage == 0 &&
Usage->UsagePage == 0)
739 BreakUsageList[BreakUsageListIndex].Usage = CurrentUsage->
Usage;
740 BreakUsageList[BreakUsageListIndex].UsagePage = CurrentUsage->
UsagePage;
741 BreakUsageListIndex++;
754 CurrentUsage = &CurrentUsageList[
Index];
766 Usage = &PreviousUsageList[SubIndex];
769 if (
Usage->Usage == 0 &&
Usage->UsagePage == 0)
787 MakeUsageList[MakeUsageListIndex].Usage = CurrentUsage->
Usage;
788 MakeUsageList[MakeUsageListIndex].UsagePage = CurrentUsage->
UsagePage;
789 MakeUsageListIndex++;
1125 #undef HidParser_GetValueCaps
NTSTATUS HidParser_GetScaledUsageValueWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage, IN USAGE Usage, OUT PLONG UsageValue, IN PCHAR ReportDescriptor, IN ULONG ReportDescriptorLength)
VOID NTAPI HidParser_FreeCollectionDescription(IN PHIDP_DEVICE_DESC DeviceDescription)
USHORT NumberInputButtonCaps
NTSTATUS HidParser_GetUsagesWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage, OUT USAGE *UsageList, IN OUT PULONG UsageLength, IN PCHAR ReportDescriptor, IN ULONG ReportDescriptorLength)
ULONG HidParser_UsesReportId(IN PVOID CollectionContext, IN UCHAR ReportType)
USHORT NumberInputValueCaps
#define HIDP_STATUS_I8042_TRANS_UNKNOWN
#define STATUS_INSUFFICIENT_RESOURCES
NTSTATUS HidParser_BuildContext(IN PVOID ParserContext, IN ULONG CollectionIndex, IN ULONG ContextSize, OUT PVOID *CollectionContext)
BOOLEAN(NTAPI * PHIDP_INSERT_SCANCODES)(_In_opt_ PVOID Context, _In_reads_bytes_(Length) PCHAR NewScanCodes, _In_ ULONG Length)
USHORT NumberOutputButtonCaps
HIDAPI NTSTATUS NTAPI HidParser_GetUsageValueArray(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection OPTIONAL, IN USAGE Usage, OUT PCHAR UsageValue, IN USHORT UsageValueByteLength, IN PCHAR Report, IN ULONG ReportLength)
HIDAPI NTSTATUS NTAPI HidParser_UsageListDifference(IN PUSAGE PreviousUsageList, IN PUSAGE CurrentUsageList, OUT PUSAGE BreakUsageList, OUT PUSAGE MakeUsageList, IN ULONG UsageListLength)
NTSTATUS NTAPI HidParser_GetCollectionDescription(IN PHIDP_REPORT_DESCRIPTOR ReportDesc, IN ULONG DescLength, IN POOL_TYPE PoolType, OUT PHIDP_DEVICE_DESC DeviceDescription)
USHORT OutputReportByteLength
USHORT NumberLinkCollectionNodes
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE _Out_ PHIDP_BUTTON_CAPS _Inout_ PUSHORT ButtonCapsLength
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
HIDAPI NTSTATUS NTAPI HidParser_UnsetUsages(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN PUSAGE UsageList, IN OUT PULONG UsageLength, IN OUT PCHAR Report, IN ULONG ReportLength)
HIDAPI NTSTATUS NTAPI HidParser_GetUsages(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection OPTIONAL, OUT USAGE *UsageList, IN OUT PULONG UsageLength, IN PCHAR Report, IN ULONG ReportLength)
struct _HIDP_COLLECTION_DESC * PHIDP_COLLECTION_DESC
USHORT NumberFeatureButtonCaps
#define HID_USAGE_PAGE_CONSUMER
_Must_inspect_result_ _In_ USHORT _Inout_updates_to_ UsageLength PUSAGE_AND_PAGE _Inout_ ULONG * UsageLength
PUCHAR PHIDP_REPORT_DESCRIPTOR
enum _HIDP_KEYBOARD_DIRECTION HIDP_KEYBOARD_DIRECTION
HIDAPI NTSTATUS NTAPI HidParser_GetUsageValue(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, OUT PULONG UsageValue, IN PCHAR Report, IN ULONG ReportLength)
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE _Out_ PHIDP_VALUE_CAPS ValueCaps
NTSTATUS HidParser_TranslateCustUsage(IN USAGE Usage, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext)
ULONG HidParser_NumberOfTopCollections(IN PVOID ParserCtx)
VOID NTAPI FreeFunction(IN PVOID Item)
return STATUS_NOT_IMPLEMENTED
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
HIDAPI NTSTATUS NTAPI HidParser_GetScaledUsageValue(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection OPTIONAL, IN USAGE Usage, OUT PLONG UsageValue, IN PCHAR Report, IN ULONG ReportLength)
ULONG HidParser_GetReportItemCountFromReportType(IN PVOID CollectionContext, IN UCHAR ReportType)
NTSTATUS NTAPI HidParser_SysPowerCaps(IN PVOID CollectionContext, OUT PULONG OutputBuffer)
#define HID_USAGE_PAGE_KEYBOARD
enum _HIDP_REPORT_TYPE HIDP_REPORT_TYPE
_Must_inspect_result_ _Out_writes_to_ DataLength PHIDP_DATA DataList
VOID NTAPI ZeroFunction(IN PVOID Item, IN ULONG ItemSize)
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
NTSTATUS HidParser_TranslateKbdUsage(IN USAGE Usage, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext)
USHORT NumberFeatureDataIndices
#define HID_REPORT_TYPE_INPUT
USHORT NumberOutputValueCaps
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_Must_inspect_result_ _In_ USAGE UsagePage
ULONG HidParser_GetReportLength(IN PVOID CollectionContext, IN UCHAR ReportType)
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
HIDAPI NTSTATUS NTAPI HidParser_SetUsageValue(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, IN ULONG UsageValue, IN OUT PCHAR Report, IN ULONG ReportLength)
USHORT FeatureReportByteLength
HIDAPI NTSTATUS NTAPI HidParser_SetScaledUsageValue(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection OPTIONAL, IN USAGE Usage, IN LONG UsageValue, IN OUT PCHAR Report, IN ULONG ReportLength)
HIDAPI ULONG NTAPI HidParser_MaxUsageListLength(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage OPTIONAL)
_In_ WDFCOLLECTION _In_ ULONG Index
NTSTATUS NTAPI HidParser_SysPowerEvent(IN PVOID CollectionContext, IN PCHAR HidPacket, IN USHORT HidPacketLength, OUT PULONG OutputBuffer)
HIDAPI NTSTATUS NTAPI HidParser_GetButtonCaps(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN PHIDP_BUTTON_CAPS ButtonCaps, IN PUSHORT ButtonCapsLength)
USHORT NumberFeatureValueCaps
HIDAPI ULONG NTAPI HidParser_MaxDataListLength(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType)
#define HIDP_STATUS_INVALID_REPORT_TYPE
HIDAPI NTSTATUS NTAPI HidParser_GetUsagesEx(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USHORT LinkCollection, OUT PUSAGE_AND_PAGE ButtonList, IN OUT ULONG *UsageLength, IN PCHAR Report, IN ULONG ReportLength)
USHORT NumberOutputDataIndices
HIDAPI NTSTATUS NTAPI HidParser_SetData(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN PHIDP_DATA DataList, IN OUT PULONG DataLength, IN OUT PCHAR Report, IN ULONG ReportLength)
VOID __cdecl DebugFunction(IN LPCSTR FormatStr,...)
_Must_inspect_result_ _In_ USHORT _Inout_updates_to_ UsageLength PUSAGE_AND_PAGE ButtonList
HIDAPI NTSTATUS NTAPI HidParser_UsageAndPageListDifference(IN PUSAGE_AND_PAGE PreviousUsageList, IN PUSAGE_AND_PAGE CurrentUsageList, OUT PUSAGE_AND_PAGE BreakUsageList, OUT PUSAGE_AND_PAGE MakeUsageList, IN ULONG UsageListLength)
ULONG HidParser_GetMaxUsageListLengthWithReportAndPage(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage OPTIONAL)
HIDAPI NTSTATUS NTAPI HidParser_SetUsages(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN PUSAGE UsageList, IN OUT PULONG UsageLength, IN OUT PCHAR Report, IN ULONG ReportLength)
HIDAPI NTSTATUS NTAPI HidParser_InitializeReportForID(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN UCHAR ReportID, IN OUT PCHAR Report, IN ULONG ReportLength)
HIDAPI NTSTATUS NTAPI HidParser_GetSpecificButtonCaps(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, OUT PHIDP_BUTTON_CAPS ButtonCaps, IN OUT PULONG ButtonCapsLength)
_Must_inspect_result_ _Out_writes_to_ DataLength PHIDP_DATA _Inout_ PULONG _In_ PHIDP_PREPARSED_DATA _In_ ULONG ReportLength
_Must_inspect_result_ _In_ ULONG UsageListLength
HIDAPI NTSTATUS NTAPI HidParser_GetSpecificValueCaps(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection, IN USAGE Usage, OUT PHIDP_VALUE_CAPS ValueCaps, IN OUT PUSHORT ValueCapsLength)
ULONG HidParser_GetContextSize(IN PVOID ParserContext, IN ULONG CollectionIndex)
#define STATUS_NO_DATA_DETECTED
HIDAPI NTSTATUS NTAPI HidParser_GetData(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, OUT PHIDP_DATA DataList, IN OUT PULONG DataLength, IN PCHAR Report, IN ULONG ReportLength)
HIDAPI NTSTATUS NTAPI HidParser_SetUsageValueArray(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage, IN USHORT LinkCollection OPTIONAL, IN USAGE Usage, IN PCHAR UsageValue, IN USHORT UsageValueByteLength, OUT PCHAR Report, IN ULONG ReportLength)
HIDAPI NTSTATUS NTAPI HidParser_TranslateUsagesToI8042ScanCodes(IN PUSAGE ChangedUsageList, IN ULONG UsageListLength, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext)
_Must_inspect_result_ _Inout_ PULONG LinkCollectionNodesLength
_Must_inspect_result_ _In_ USAGE _In_ USHORT LinkCollection
#define HIDP_LINK_COLLECTION_UNSPECIFIED
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE _Out_ PHIDP_BUTTON_CAPS ButtonCaps
PVOID NTAPI AllocFunction(IN ULONG ItemSize)
_Must_inspect_result_ _In_ UCHAR ReportID
#define HID_USAGE_PAGE_UNDEFINED
_Must_inspect_result_ _In_ USHORT DataIndex
HIDAPI NTSTATUS NTAPI HidParser_TranslateUsageAndPagesToI8042ScanCodes(IN PUSAGE_AND_PAGE ChangedUsageList, IN ULONG UsageListLength, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext)
ULONG HidParser_GetTotalCollectionCount(IN PVOID Context)
NTSTATUS HidParser_GetCollectionUsagePage(IN PVOID CollectionContext, OUT PUSHORT Usage, OUT PUSHORT UsagePage)
HIDAPI NTSTATUS NTAPI HidParser_GetExtendedAttributes(IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USHORT DataIndex, OUT PHIDP_EXTENDED_ATTRIBUTES Attributes, IN OUT PULONG LengthAttributes)
struct _HIDP_REPORT_IDS * PHIDP_REPORT_IDS
_Must_inspect_result_ _In_ USHORT _In_ PHIDP_PREPARSED_DATA _Out_writes_to_ LengthAttributes PHIDP_EXTENDED_ATTRIBUTES _Inout_ OUT PULONG LengthAttributes
USHORT NumberInputDataIndices
HIDAPI NTSTATUS NTAPI HidParser_GetLinkCollectionNodes(IN PVOID CollectionContext, OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes, IN OUT PULONG LinkCollectionNodesLength)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
HIDAPI NTSTATUS NTAPI HidParser_GetCaps(IN PVOID CollectionContext, OUT PHIDP_CAPS Capabilities)
#define RtlZeroMemory(Destination, Length)
#define HIDP_STATUS_SUCCESS
NTSTATUS HidParser_GetUsageValueWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage, IN USAGE Usage, OUT PULONG UsageValue, IN PCHAR ReportDescriptor, IN ULONG ReportDescriptorLength)
NTSTATUS HidParser_ParseReportDescriptor(IN PUCHAR ReportDescriptor, IN ULONG ReportLength, OUT PVOID *OutParser)
USHORT InputReportByteLength
ULONG HidParser_GetReportItemTypeCountFromReportType(IN PVOID CollectionContext, IN UCHAR ReportType, IN ULONG bData)
HIDAPI NTSTATUS NTAPI HidParser_GetValueCaps(IN PVOID CollectionContext, HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, PULONG ValueCapsLength)
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE _Out_ PHIDP_VALUE_CAPS _Inout_ PUSHORT ValueCapsLength
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
NTSTATUS HidParser_GetSpecificValueCapsWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USHORT UsagePage, IN USHORT Usage, OUT PHIDP_VALUE_CAPS ValueCaps, IN OUT PUSHORT ValueCapsLength)
PULONG MinorVersion OPTIONAL