ReactOS  0.4.15-dev-1377-ga59cecd
hidparser.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

NTSTATUS NTAPI HidParser_GetCollectionDescription (IN PHIDP_REPORT_DESCRIPTOR ReportDesc, IN ULONG DescLength, IN POOL_TYPE PoolType, OUT PHIDP_DEVICE_DESC DeviceDescription)
 
VOID NTAPI HidParser_FreeCollectionDescription (IN PHIDP_DEVICE_DESC DeviceDescription)
 
HIDAPI NTSTATUS NTAPI HidParser_GetCaps (IN PVOID CollectionContext, OUT PHIDP_CAPS Capabilities)
 
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)
 
HIDAPI NTSTATUS NTAPI HidParser_GetButtonCaps (IN PVOID CollectionContext, HIDP_REPORT_TYPE ReportType, PHIDP_BUTTON_CAPS ButtonCaps, PUSHORT ButtonCapsLength)
 
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)
 
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)
 
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_GetExtendedAttributes (IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USHORT DataIndex, OUT PHIDP_EXTENDED_ATTRIBUTES Attributes, IN OUT PULONG LengthAttributes)
 
HIDAPI NTSTATUS NTAPI HidParser_GetLinkCollectionNodes (IN PVOID CollectionContext, OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes, IN OUT PULONG LinkCollectionNodesLength)
 
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)
 
HIDAPI NTSTATUS NTAPI HidParser_UsageListDifference (IN PUSAGE PreviousUsageList, IN PUSAGE CurrentUsageList, OUT PUSAGE BreakUsageList, OUT PUSAGE MakeUsageList, IN ULONG UsageListLength)
 
HIDAPI ULONG NTAPI HidParser_MaxUsageListLength (IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN USAGE UsagePage OPTIONAL)
 
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 ULONG *UsageLength, IN PCHAR Report, IN ULONG ReportLength)
 
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)
 
NTSTATUS NTAPI HidParser_SysPowerEvent (IN PVOID CollectionContext, IN PCHAR HidPacket, IN USHORT HidPacketLength, OUT PULONG OutputBuffer)
 
NTSTATUS NTAPI HidParser_SysPowerCaps (IN PVOID CollectionContext, OUT PULONG OutputBuffer)
 
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_UsageAndPageListDifference (IN PUSAGE_AND_PAGE PreviousUsageList, IN PUSAGE_AND_PAGE CurrentUsageList, OUT PUSAGE_AND_PAGE BreakUsageList, OUT PUSAGE_AND_PAGE MakeUsageList, IN ULONG UsageListLength)
 
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_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)
 
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)
 
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_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_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)
 
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 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)
 
HIDAPI ULONG NTAPI HidParser_MaxDataListLength (IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType)
 
HIDAPI NTSTATUS NTAPI HidParser_InitializeReportForID (IN PVOID CollectionContext, IN HIDP_REPORT_TYPE ReportType, IN UCHAR ReportID, IN OUT PCHAR Report, IN ULONG ReportLength)
 
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)
 
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)
 
HIDAPI NTSTATUS NTAPI HidParser_GetValueCaps (IN PVOID CollectionContext, HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, PULONG ValueCapsLength)
 

Function Documentation

◆ HidParser_FreeCollectionDescription()

VOID NTAPI HidParser_FreeCollectionDescription ( IN PHIDP_DEVICE_DESC  DeviceDescription)

Definition at line 163 of file hidparser.c.

165 {
166  ULONG Index;
167 
168  //
169  // first free all context
170  //
171  for(Index = 0; Index < DeviceDescription->CollectionDescLength; Index++)
172  {
173  //
174  // free collection context
175  //
176  FreeFunction(DeviceDescription->CollectionDesc[Index].PreparsedData);
177  }
178 
179  //
180  // now free collection description
181  //
182  FreeFunction(DeviceDescription->CollectionDesc);
183 
184  //
185  // free report description
186  //
187  FreeFunction(DeviceDescription->ReportIDs);
188 }
VOID NTAPI FreeFunction(IN PVOID Item)
Definition: hid.c:53
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
Definition: wdfpdo.h:430
_In_ WDFCOLLECTION _In_ ULONG Index
unsigned int ULONG
Definition: retypes.h:1

Referenced by HidP_FreeCollectionDescription().

◆ HidParser_GetButtonCaps()

HIDAPI NTSTATUS NTAPI HidParser_GetButtonCaps ( IN PVOID  CollectionContext,
HIDP_REPORT_TYPE  ReportType,
PHIDP_BUTTON_CAPS  ButtonCaps,
PUSHORT  ButtonCapsLength 
)

◆ HidParser_GetCaps()

HIDAPI NTSTATUS NTAPI HidParser_GetCaps ( IN PVOID  CollectionContext,
OUT PHIDP_CAPS  Capabilities 
)

Definition at line 193 of file hidparser.c.

196 {
197  //
198  // zero capabilities
199  //
201 
202  //
203  // init capabilities
204  //
209 
210  //
211  // always pre-prend report id
212  //
216 
217  //
218  // get number of link collection nodes
219  //
221 
222  //
223  // get data indices
224  //
228 
229  //
230  // get value caps
231  //
235 
236 
237  //
238  // get button caps
239  //
243 
244  //
245  // done
246  //
247  return HIDP_STATUS_SUCCESS;
248 }
USHORT NumberInputButtonCaps
Definition: hidpi.h:157
USHORT NumberInputValueCaps
Definition: hidpi.h:158
USHORT NumberOutputButtonCaps
Definition: hidpi.h:160
USHORT OutputReportByteLength
Definition: hidpi.h:153
USHORT NumberLinkCollectionNodes
Definition: hidpi.h:156
#define TRUE
Definition: types.h:120
USHORT NumberFeatureButtonCaps
Definition: hidpi.h:163
#define FALSE
Definition: types.h:117
_Must_inspect_result_ typedef _Out_ PHIDP_CAPS Capabilities
Definition: hidclass.h:103
ULONG HidParser_GetReportItemCountFromReportType(IN PVOID CollectionContext, IN UCHAR ReportType)
Definition: api.c:132
VOID NTAPI ZeroFunction(IN PVOID Item, IN ULONG ItemSize)
Definition: hid.c:61
USHORT NumberFeatureDataIndices
Definition: hidpi.h:165
#define HID_REPORT_TYPE_INPUT
USHORT NumberOutputValueCaps
Definition: hidpi.h:161
ULONG HidParser_GetReportLength(IN PVOID CollectionContext, IN UCHAR ReportType)
Definition: api.c:93
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
USAGE UsagePage
Definition: hidpi.h:151
USHORT FeatureReportByteLength
Definition: hidpi.h:154
USHORT NumberFeatureValueCaps
Definition: hidpi.h:164
USHORT NumberOutputDataIndices
Definition: hidpi.h:162
USAGE Usage
Definition: hidpi.h:150
ULONG HidParser_GetTotalCollectionCount(IN PVOID Context)
Definition: context.c:330
NTSTATUS HidParser_GetCollectionUsagePage(IN PVOID CollectionContext, OUT PUSHORT Usage, OUT PUSHORT UsagePage)
Definition: api.c:65
USHORT NumberInputDataIndices
Definition: hidpi.h:159
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248
USHORT InputReportByteLength
Definition: hidpi.h:152
ULONG HidParser_GetReportItemTypeCountFromReportType(IN PVOID CollectionContext, IN UCHAR ReportType, IN ULONG bData)
Definition: api.c:158

Referenced by HidP_GetCaps().

◆ HidParser_GetCollectionDescription()

NTSTATUS NTAPI HidParser_GetCollectionDescription ( IN PHIDP_REPORT_DESCRIPTOR  ReportDesc,
IN ULONG  DescLength,
IN POOL_TYPE  PoolType,
OUT PHIDP_DEVICE_DESC  DeviceDescription 
)

Definition at line 18 of file hidparser.c.

23 {
24  NTSTATUS ParserStatus;
25  ULONG CollectionCount;
26  ULONG Index;
27  PVOID ParserContext;
28 
29  //
30  // first parse the report descriptor
31  //
32  ParserStatus = HidParser_ParseReportDescriptor(ReportDesc, DescLength, &ParserContext);
33  if (ParserStatus != HIDP_STATUS_SUCCESS)
34  {
35  //
36  // failed to parse report descriptor
37  //
38  DebugFunction("[HIDPARSER] Failed to parse report descriptor with %x\n", ParserStatus);
39  return ParserStatus;
40  }
41 
42  //
43  // get collection count
44  //
45  CollectionCount = HidParser_NumberOfTopCollections(ParserContext);
46  if (CollectionCount == 0)
47  {
48  //
49  // no top level collections found
50  //
51  ASSERT(FALSE);
53  }
54 
55  //
56  // zero description
57  //
59 
60  //
61  // allocate collection
62  //
63  DeviceDescription->CollectionDesc = (PHIDP_COLLECTION_DESC)AllocFunction(sizeof(HIDP_COLLECTION_DESC) * CollectionCount);
64  if (!DeviceDescription->CollectionDesc)
65  {
66  //
67  // no memory
68  //
70  }
71 
72  //
73  // allocate report description
74  //
75  DeviceDescription->ReportIDs = (PHIDP_REPORT_IDS)AllocFunction(sizeof(HIDP_REPORT_IDS) * CollectionCount);
76  if (!DeviceDescription->ReportIDs)
77  {
78  //
79  // no memory
80  //
81  FreeFunction(DeviceDescription->CollectionDesc);
83  }
84 
85  for(Index = 0; Index < CollectionCount; Index++)
86  {
87  //
88  // set preparsed data length
89  //
90  DeviceDescription->CollectionDesc[Index].PreparsedDataLength = HidParser_GetContextSize(ParserContext, Index);
91  ParserStatus = HidParser_BuildContext(ParserContext, Index, DeviceDescription->CollectionDesc[Index].PreparsedDataLength, (PVOID*)&DeviceDescription->CollectionDesc[Index].PreparsedData);
92  if (ParserStatus != HIDP_STATUS_SUCCESS)
93  {
94  //
95  // no memory
96  //
97  FreeFunction(DeviceDescription->CollectionDesc);
98  FreeFunction(DeviceDescription->ReportIDs);
99  return ParserStatus;
100  }
101 
102  //
103  // init report description
104  //
105  DeviceDescription->ReportIDs[Index].CollectionNumber = Index + 1;
106  DeviceDescription->ReportIDs[Index].ReportID = Index; //FIXME
107  DeviceDescription->ReportIDs[Index].InputLength = HidParser_GetReportLength((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_INPUT);
108  DeviceDescription->ReportIDs[Index].OutputLength = HidParser_GetReportLength((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_OUTPUT);
109  DeviceDescription->ReportIDs[Index].FeatureLength = HidParser_GetReportLength((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_FEATURE);
110 
111 
112  DeviceDescription->ReportIDs[Index].InputLength += (HidParser_UsesReportId((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_INPUT) ? 1 : 0);
113  DeviceDescription->ReportIDs[Index].OutputLength += (HidParser_UsesReportId((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_OUTPUT) ? 1 : 0);
114  DeviceDescription->ReportIDs[Index].FeatureLength += (HidParser_UsesReportId((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_FEATURE) ? 1 : 0);
115 
116 
117  //
118  // init collection description
119  //
120  DeviceDescription->CollectionDesc[Index].CollectionNumber = Index + 1;
121 
122  //
123  // get collection usage page
124  //
125  ParserStatus = HidParser_GetCollectionUsagePage((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, &DeviceDescription->CollectionDesc[Index].Usage, &DeviceDescription->CollectionDesc[Index].UsagePage);
126  if (ParserStatus != HIDP_STATUS_SUCCESS)
127  {
128  // collection not found
129  FreeFunction(DeviceDescription->CollectionDesc);
130  FreeFunction(DeviceDescription->ReportIDs);
131  return ParserStatus;
132  }
133 
134  //
135  // windows seems to prepend the report id, regardless if it is required
136  //
137  DeviceDescription->CollectionDesc[Index].CollectionNumber = Index + 1;
138  DeviceDescription->CollectionDesc[Index].InputLength = DeviceDescription->ReportIDs[Index].InputLength;
139  DeviceDescription->CollectionDesc[Index].OutputLength = DeviceDescription->ReportIDs[Index].OutputLength;
140  DeviceDescription->CollectionDesc[Index].FeatureLength = DeviceDescription->ReportIDs[Index].FeatureLength;
141 
142  DeviceDescription->CollectionDesc[Index].InputLength += (HidParser_UsesReportId((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_INPUT) == FALSE ? 1 : 0);
143  DeviceDescription->CollectionDesc[Index].OutputLength += (HidParser_UsesReportId((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_OUTPUT) == FALSE ? 1 : 0);
144  DeviceDescription->CollectionDesc[Index].FeatureLength += (HidParser_UsesReportId((PVOID)DeviceDescription->CollectionDesc[Index].PreparsedData, HID_REPORT_TYPE_FEATURE) == FALSE ? 1 : 0);
145 
146 
147  }
148 
149  //
150  // store collection & report count
151  //
152  DeviceDescription->CollectionDescLength = CollectionCount;
153  DeviceDescription->ReportIDsLength = CollectionCount;
154 
155  //
156  // done
157  //
158  return STATUS_SUCCESS;
159 }
ULONG HidParser_UsesReportId(IN PVOID CollectionContext, IN UCHAR ReportType)
Definition: api.c:524
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
NTSTATUS HidParser_BuildContext(IN PVOID ParserContext, IN ULONG CollectionIndex, IN ULONG ContextSize, OUT PVOID *CollectionContext)
Definition: parser.c:1303
LONG NTSTATUS
Definition: precomp.h:26
struct _HIDP_COLLECTION_DESC * PHIDP_COLLECTION_DESC
ULONG HidParser_NumberOfTopCollections(IN PVOID ParserCtx)
Definition: parser.c:1279
VOID NTAPI FreeFunction(IN PVOID Item)
Definition: hid.c:53
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
Definition: wdfpdo.h:430
#define FALSE
Definition: types.h:117
VOID NTAPI ZeroFunction(IN PVOID Item, IN ULONG ItemSize)
Definition: hid.c:61
#define HID_REPORT_TYPE_INPUT
ULONG HidParser_GetReportLength(IN PVOID CollectionContext, IN UCHAR ReportType)
Definition: api.c:93
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
#define ASSERT(a)
Definition: mode.c:45
_In_ WDFCOLLECTION _In_ ULONG Index
VOID __cdecl DebugFunction(IN LPCSTR FormatStr,...)
Definition: hid.c:80
ULONG HidParser_GetContextSize(IN PVOID ParserContext, IN ULONG CollectionIndex)
Definition: parser.c:1351
#define STATUS_NO_DATA_DETECTED
Definition: udferr_usr.h:131
PVOID NTAPI AllocFunction(IN ULONG ItemSize)
Definition: hid.c:45
NTSTATUS HidParser_GetCollectionUsagePage(IN PVOID CollectionContext, OUT PUSHORT Usage, OUT PUSHORT UsagePage)
Definition: api.c:65
struct _HIDP_REPORT_IDS * PHIDP_REPORT_IDS
unsigned int ULONG
Definition: retypes.h:1
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248
#define STATUS_SUCCESS
Definition: shellext.h:65
NTSTATUS HidParser_ParseReportDescriptor(IN PUCHAR ReportDescriptor, IN ULONG ReportLength, OUT PVOID *OutParser)
Definition: parser.c:707

Referenced by HidP_GetCollectionDescription().

◆ HidParser_GetData()

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 
)

Definition at line 836 of file hidparser.c.

843 {
845  ASSERT(FALSE);
846  return STATUS_NOT_IMPLEMENTED;
847 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_GetExtendedAttributes()

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 
)

Definition at line 852 of file hidparser.c.

858 {
860  ASSERT(FALSE);
861  return STATUS_NOT_IMPLEMENTED;
862 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_GetLinkCollectionNodes()

HIDAPI NTSTATUS NTAPI HidParser_GetLinkCollectionNodes ( IN PVOID  CollectionContext,
OUT PHIDP_LINK_COLLECTION_NODE  LinkCollectionNodes,
IN OUT PULONG  LinkCollectionNodesLength 
)

Definition at line 867 of file hidparser.c.

871 {
873  ASSERT(FALSE);
874  return STATUS_NOT_IMPLEMENTED;
875 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_GetScaledUsageValue()

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 
)

Definition at line 559 of file hidparser.c.

568 {
569  NTSTATUS ParserStatus;
570 
571  //
572  // FIXME: implement searching in specific collection
573  //
575 
576  if (ReportType == HidP_Input)
577  {
578  //
579  // input report
580  //
581  ParserStatus = HidParser_GetScaledUsageValueWithReport(CollectionContext, HID_REPORT_TYPE_INPUT, UsagePage, Usage, UsageValue, Report, ReportLength);
582  }
583  else if (ReportType == HidP_Output)
584  {
585  //
586  // input report
587  //
588  ParserStatus = HidParser_GetScaledUsageValueWithReport(CollectionContext, HID_REPORT_TYPE_OUTPUT, UsagePage, Usage, UsageValue, Report, ReportLength);
589  }
590  else if (ReportType == HidP_Feature)
591  {
592  //
593  // input report
594  //
595  ParserStatus = HidParser_GetScaledUsageValueWithReport(CollectionContext, HID_REPORT_TYPE_FEATURE, UsagePage, Usage, UsageValue, Report, ReportLength);
596  }
597  else
598  {
599  //
600  // invalid report type
601  //
603  }
604 
605  //
606  // return status
607  //
608  return ParserStatus;
609 }
NTSTATUS HidParser_GetScaledUsageValueWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage, IN USAGE Usage, OUT PLONG UsageValue, IN PCHAR ReportDescriptor, IN ULONG ReportDescriptorLength)
Definition: api.c:646
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:382
LONG NTSTATUS
Definition: precomp.h:26
#define HID_REPORT_TYPE_INPUT
_Must_inspect_result_ _In_ USAGE UsagePage
Definition: hidpi.h:382
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
#define ASSERT(a)
Definition: mode.c:45
#define HIDP_STATUS_INVALID_REPORT_TYPE
Definition: hidpi.h:251
_Must_inspect_result_ _Out_writes_to_ DataLength PHIDP_DATA _Inout_ PULONG _In_ PHIDP_PREPARSED_DATA _In_ ULONG ReportLength
Definition: hidpi.h:337
_Must_inspect_result_ _In_ USAGE _In_ USHORT LinkCollection
Definition: hidpi.h:382
#define HIDP_LINK_COLLECTION_UNSPECIFIED
Definition: hidpi.h:185

Referenced by HidP_GetScaledUsageValue().

◆ HidParser_GetSpecificButtonCaps()

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 
)

Definition at line 818 of file hidparser.c.

826 {
828  ASSERT(FALSE);
829  return STATUS_NOT_IMPLEMENTED;
830 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

Referenced by HidParser_GetButtonCaps().

◆ HidParser_GetSpecificValueCaps()

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 
)

Definition at line 321 of file hidparser.c.

329 {
330  NTSTATUS ParserStatus;
331 
332  //
333  // FIXME: implement searching in specific collection
334  //
336 
337  if (ReportType == HidP_Input)
338  {
339  //
340  // input report
341  //
343  }
344  else if (ReportType == HidP_Output)
345  {
346  //
347  // input report
348  //
350  }
351  else if (ReportType == HidP_Feature)
352  {
353  //
354  // input report
355  //
357  }
358  else
359  {
360  //
361  // invalid report type
362  //
364  }
365 
366  //
367  // return status
368  //
369  return ParserStatus;
370 }
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:382
LONG NTSTATUS
Definition: precomp.h:26
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE _Out_ PHIDP_VALUE_CAPS ValueCaps
Definition: hidpi.h:396
#define HID_REPORT_TYPE_INPUT
_Must_inspect_result_ _In_ USAGE UsagePage
Definition: hidpi.h:382
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
#define ASSERT(a)
Definition: mode.c:45
#define HIDP_STATUS_INVALID_REPORT_TYPE
Definition: hidpi.h:251
_Must_inspect_result_ _In_ USAGE _In_ USHORT LinkCollection
Definition: hidpi.h:382
#define HIDP_LINK_COLLECTION_UNSPECIFIED
Definition: hidpi.h:185
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE _Out_ PHIDP_VALUE_CAPS _Inout_ PUSHORT ValueCapsLength
Definition: hidpi.h:396
NTSTATUS HidParser_GetSpecificValueCapsWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USHORT UsagePage, IN USHORT Usage, OUT PHIDP_VALUE_CAPS ValueCaps, IN OUT PUSHORT ValueCapsLength)
Definition: api.c:254

Referenced by HidP_GetSpecificValueCaps().

◆ HidParser_GetUsages()

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 ULONG UsageLength,
IN PCHAR  Report,
IN ULONG  ReportLength 
)

Definition at line 504 of file hidparser.c.

513 {
514  NTSTATUS ParserStatus;
515 
516  //
517  // FIXME: implement searching in specific collection
518  //
520 
521  if (ReportType == HidP_Input)
522  {
523  //
524  // input report
525  //
526  ParserStatus = HidParser_GetUsagesWithReport(CollectionContext, HID_REPORT_TYPE_INPUT, UsagePage, UsageList, UsageLength, Report, ReportLength);
527  }
528  else if (ReportType == HidP_Output)
529  {
530  //
531  // input report
532  //
533  ParserStatus = HidParser_GetUsagesWithReport(CollectionContext, HID_REPORT_TYPE_OUTPUT, UsagePage, UsageList, UsageLength, Report, ReportLength);
534  }
535  else if (ReportType == HidP_Feature)
536  {
537  //
538  // input report
539  //
540  ParserStatus = HidParser_GetUsagesWithReport(CollectionContext, HID_REPORT_TYPE_FEATURE, UsagePage, UsageList, UsageLength, Report, ReportLength);
541  }
542  else
543  {
544  //
545  // invalid report type
546  //
548  }
549 
550  //
551  // return status
552  //
553  return ParserStatus;
554 }
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)
Definition: api.c:343
LONG NTSTATUS
Definition: precomp.h:26
_Must_inspect_result_ _In_ USHORT _Inout_updates_to_ UsageLength PUSAGE_AND_PAGE _Inout_ ULONG * UsageLength
Definition: hidpi.h:425
#define HID_REPORT_TYPE_INPUT
_Must_inspect_result_ _In_ USAGE UsagePage
Definition: hidpi.h:382
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
#define ASSERT(a)
Definition: mode.c:45
#define HIDP_STATUS_INVALID_REPORT_TYPE
Definition: hidpi.h:251
_Must_inspect_result_ _Out_writes_to_ DataLength PHIDP_DATA _Inout_ PULONG _In_ PHIDP_PREPARSED_DATA _In_ ULONG ReportLength
Definition: hidpi.h:337
_Must_inspect_result_ _In_ USAGE _In_ USHORT LinkCollection
Definition: hidpi.h:382
#define HIDP_LINK_COLLECTION_UNSPECIFIED
Definition: hidpi.h:185

Referenced by HidP_GetUsages(), and HidParser_GetUsagesEx().

◆ HidParser_GetUsagesEx()

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 
)

Definition at line 674 of file hidparser.c.

682 {
683  return HidParser_GetUsages(CollectionContext, ReportType, HID_USAGE_PAGE_UNDEFINED, LinkCollection, (PUSAGE)ButtonList, UsageLength, Report, ReportLength);
684 }
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)
Definition: hidparser.c:504
_Must_inspect_result_ _In_ USHORT _Inout_updates_to_ UsageLength PUSAGE_AND_PAGE _Inout_ ULONG * UsageLength
Definition: hidpi.h:425
USHORT * PUSAGE
Definition: hidusage.h:30
_Must_inspect_result_ _In_ USHORT _Inout_updates_to_ UsageLength PUSAGE_AND_PAGE ButtonList
Definition: hidpi.h:425
_Must_inspect_result_ _Out_writes_to_ DataLength PHIDP_DATA _Inout_ PULONG _In_ PHIDP_PREPARSED_DATA _In_ ULONG ReportLength
Definition: hidpi.h:337
_Must_inspect_result_ _In_ USAGE _In_ USHORT LinkCollection
Definition: hidpi.h:382
#define HID_USAGE_PAGE_UNDEFINED
Definition: hidusage.h:175

◆ HidParser_GetUsageValue()

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 
)

Definition at line 880 of file hidparser.c.

889 {
890  NTSTATUS ParserStatus;
891 
892  //
893  // FIXME: implement searching in specific collection
894  //
896 
897  if (ReportType == HidP_Input)
898  {
899  //
900  // input report
901  //
902  ParserStatus = HidParser_GetUsageValueWithReport(CollectionContext, HID_REPORT_TYPE_INPUT, UsagePage, Usage, UsageValue, Report, ReportLength);
903  }
904  else if (ReportType == HidP_Output)
905  {
906  //
907  // input report
908  //
909  ParserStatus = HidParser_GetUsageValueWithReport(CollectionContext, HID_REPORT_TYPE_OUTPUT, UsagePage, Usage, UsageValue, Report, ReportLength);
910  }
911  else if (ReportType == HidP_Feature)
912  {
913  //
914  // input report
915  //
916  ParserStatus = HidParser_GetUsageValueWithReport(CollectionContext, HID_REPORT_TYPE_FEATURE, UsagePage, Usage, UsageValue, Report, ReportLength);
917  }
918  else
919  {
920  //
921  // invalid report type
922  //
924  }
925 
926  //
927  // return status
928  //
929  return ParserStatus;
930 }
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:382
LONG NTSTATUS
Definition: precomp.h:26
#define HID_REPORT_TYPE_INPUT
_Must_inspect_result_ _In_ USAGE UsagePage
Definition: hidpi.h:382
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
#define ASSERT(a)
Definition: mode.c:45
#define HIDP_STATUS_INVALID_REPORT_TYPE
Definition: hidpi.h:251
_Must_inspect_result_ _Out_writes_to_ DataLength PHIDP_DATA _Inout_ PULONG _In_ PHIDP_PREPARSED_DATA _In_ ULONG ReportLength
Definition: hidpi.h:337
_Must_inspect_result_ _In_ USAGE _In_ USHORT LinkCollection
Definition: hidpi.h:382
#define HIDP_LINK_COLLECTION_UNSPECIFIED
Definition: hidpi.h:185
NTSTATUS HidParser_GetUsageValueWithReport(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage, IN USAGE Usage, OUT PULONG UsageValue, IN PCHAR ReportDescriptor, IN ULONG ReportDescriptorLength)
Definition: api.c:550

Referenced by HidP_GetUsageValue().

◆ HidParser_GetUsageValueArray()

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 
)

Definition at line 959 of file hidparser.c.

969 {
971  ASSERT(FALSE);
972  return STATUS_NOT_IMPLEMENTED;
973 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_GetValueCaps()

HIDAPI NTSTATUS NTAPI HidParser_GetValueCaps ( IN PVOID  CollectionContext,
HIDP_REPORT_TYPE  ReportType,
PHIDP_VALUE_CAPS  ValueCaps,
PULONG  ValueCapsLength 
)

Definition at line 1130 of file hidparser.c.

1135 {
1136  UNIMPLEMENTED;
1137  ASSERT(FALSE);
1138  return STATUS_NOT_IMPLEMENTED;
1139 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_InitializeReportForID()

HIDAPI NTSTATUS NTAPI HidParser_InitializeReportForID ( IN PVOID  CollectionContext,
IN HIDP_REPORT_TYPE  ReportType,
IN UCHAR  ReportID,
IN OUT PCHAR  Report,
IN ULONG  ReportLength 
)

Definition at line 1113 of file hidparser.c.

1119 {
1120  UNIMPLEMENTED;
1121  ASSERT(FALSE);
1122  return STATUS_NOT_IMPLEMENTED;
1123 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_MaxDataListLength()

HIDAPI ULONG NTAPI HidParser_MaxDataListLength ( IN PVOID  CollectionContext,
IN HIDP_REPORT_TYPE  ReportType 
)

Definition at line 1101 of file hidparser.c.

1104 {
1105  UNIMPLEMENTED;
1106  ASSERT(FALSE);
1107  return 0;
1108 }
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_MaxUsageListLength()

HIDAPI ULONG NTAPI HidParser_MaxUsageListLength ( IN PVOID  CollectionContext,
IN HIDP_REPORT_TYPE  ReportType,
IN USAGE UsagePage  OPTIONAL 
)

Definition at line 253 of file hidparser.c.

257 {
258  //
259  // FIXME test what should be returned when usage page is not defined
260  //
262  {
263  //
264  // implement me
265  //
267 
268  //
269  // invalid report
270  //
271  return 0;
272  }
273 
274  if (ReportType == HidP_Input)
275  {
276  //
277  // input report
278  //
280  }
281  else if (ReportType == HidP_Output)
282  {
283  //
284  // input report
285  //
287  }
288  else if (ReportType == HidP_Feature)
289  {
290  //
291  // input report
292  //
294  }
295  else
296  {
297  //
298  // invalid report type
299  //
300  return 0;
301  }
302 }
#define HID_REPORT_TYPE_INPUT
_Must_inspect_result_ _In_ USAGE UsagePage
Definition: hidpi.h:382
#define HID_REPORT_TYPE_OUTPUT
#define HID_REPORT_TYPE_FEATURE
ULONG HidParser_GetMaxUsageListLengthWithReportAndPage(IN PVOID CollectionContext, IN UCHAR ReportType, IN USAGE UsagePage OPTIONAL)
Definition: api.c:210
#define HID_USAGE_PAGE_UNDEFINED
Definition: hidusage.h:175
#define UNIMPLEMENTED
Definition: debug.h:115

Referenced by HidP_MaxUsageListLength().

◆ HidParser_SetData()

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 
)

Definition at line 1085 of file hidparser.c.

1092 {
1093  UNIMPLEMENTED;
1094  ASSERT(FALSE);
1095  return STATUS_NOT_IMPLEMENTED;
1096 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_SetScaledUsageValue()

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 
)

Definition at line 1067 of file hidparser.c.

1076 {
1077  UNIMPLEMENTED;
1078  ASSERT(FALSE);
1079  return STATUS_NOT_IMPLEMENTED;
1080 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_SetUsages()

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 
)

Definition at line 1012 of file hidparser.c.

1021 {
1022  UNIMPLEMENTED;
1023  ASSERT(FALSE);
1024  return STATUS_NOT_IMPLEMENTED;
1025 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_SetUsageValue()

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 
)

Definition at line 1049 of file hidparser.c.

1058 {
1059  UNIMPLEMENTED;
1060  ASSERT(FALSE);
1061  return STATUS_NOT_IMPLEMENTED;
1062 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_SetUsageValueArray()

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 
)

Definition at line 1030 of file hidparser.c.

1040 {
1041  UNIMPLEMENTED;
1042  ASSERT(FALSE);
1043  return STATUS_NOT_IMPLEMENTED;
1044 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_SysPowerCaps()

NTSTATUS NTAPI HidParser_SysPowerCaps ( IN PVOID  CollectionContext,
OUT PULONG  OutputBuffer 
)

Definition at line 947 of file hidparser.c.

950 {
952  ASSERT(FALSE);
953  return STATUS_NOT_IMPLEMENTED;
954 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_SysPowerEvent()

NTSTATUS NTAPI HidParser_SysPowerEvent ( IN PVOID  CollectionContext,
IN PCHAR  HidPacket,
IN USHORT  HidPacketLength,
OUT PULONG  OutputBuffer 
)

Definition at line 934 of file hidparser.c.

939 {
941  ASSERT(FALSE);
942  return STATUS_NOT_IMPLEMENTED;
943 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_TranslateCustUsage()

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 
)

Definition at line 913 of file api.c.

919 {
920  ULONG ScanCode;
921 
922  //
923  // get scan code
924  //
926  if (!ScanCode)
927  {
928  //
929  // invalid lookup or no scan code available
930  //
931  DPRINT1("No Scan code for Usage %x\n", Usage);
933  }
934 
935  if (ScanCode & 0xFF00)
936  {
937  //
938  // swap scan code
939  //
941  }
942 
943  //
944  // FIXME: translate modifier states
945  //
946  HidParser_DispatchKey((PCHAR)&ScanCode, KeyAction, InsertCodesProcedure, InsertCodesContext);
947 
948  //
949  // done
950  //
951  return HIDP_STATUS_SUCCESS;
952 }
signed char * PCHAR
Definition: retypes.h:7
#define HIDP_STATUS_I8042_TRANS_UNKNOWN
Definition: hidpi.h:258
ULONG ScanCode
Definition: api.c:39
ULONG HidParser_GetScanCodeFromCustUsage(IN USAGE Usage)
Definition: api.c:776
#define NTOHS(n)
Definition: api.c:62
USAGE Usage
Definition: api.c:38
#define DPRINT1
Definition: precomp.h:8
unsigned int ULONG
Definition: retypes.h:1
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248
VOID HidParser_DispatchKey(IN PCHAR ScanCodes, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext)
Definition: api.c:802

Referenced by HidParser_TranslateUsageAndPagesToI8042ScanCodes().

◆ HidParser_TranslateKbdUsage()

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 
)

Definition at line 851 of file api.c.

857 {
858  ULONG ScanCode;
859  CHAR FakeShift[] = {0xE0, 0x2A, 0x00};
860  CHAR FakeCtrl[] = {0xE1, 0x1D, 0x00};
861 
862  //
863  // get scan code
864  //
866  if (!ScanCode)
867  {
868  //
869  // invalid lookup or no scan code available
870  //
871  DPRINT1("No Scan code for Usage %x\n", Usage);
873  }
874 
875  if (ScanCode & 0xFF00)
876  {
877  //
878  // swap scan code
879  //
881  }
882 
883  if (Usage == 0x46 && KeyAction == HidP_Keyboard_Make)
884  {
885  // Print Screen generates additional FakeShift
886  HidParser_DispatchKey(FakeShift, KeyAction, InsertCodesProcedure, InsertCodesContext);
887  }
888 
889  if (Usage == 0x48)
890  {
891  // Pause/Break generates additional FakeCtrl. Note: it's always before key press/release.
892  HidParser_DispatchKey(FakeCtrl, KeyAction, InsertCodesProcedure, InsertCodesContext);
893  }
894 
895  //
896  // FIXME: translate modifier states
897  //
898  HidParser_DispatchKey((PCHAR)&ScanCode, KeyAction, InsertCodesProcedure, InsertCodesContext);
899 
900  if (Usage == 0x46 && KeyAction == HidP_Keyboard_Break)
901  {
902  // Print Screen generates additional FakeShift
903  HidParser_DispatchKey(FakeShift, KeyAction, InsertCodesProcedure, InsertCodesContext);
904  }
905 
906  //
907  // done
908  //
909  return HIDP_STATUS_SUCCESS;
910 }
signed char * PCHAR
Definition: retypes.h:7
#define HIDP_STATUS_I8042_TRANS_UNKNOWN
Definition: hidpi.h:258
ULONG ScanCode
Definition: api.c:39
char CHAR
Definition: xmlstorage.h:175
ULONG HidParser_GetScanCodeFromKbdUsage(IN USAGE Usage)
Definition: api.c:758
#define NTOHS(n)
Definition: api.c:62
USAGE Usage
Definition: api.c:38
#define DPRINT1
Definition: precomp.h:8
unsigned int ULONG
Definition: retypes.h:1
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248
VOID HidParser_DispatchKey(IN PCHAR ScanCodes, IN HIDP_KEYBOARD_DIRECTION KeyAction, IN PHIDP_INSERT_SCANCODES InsertCodesProcedure, IN PVOID InsertCodesContext)
Definition: api.c:802

Referenced by HidParser_TranslateUsageAndPagesToI8042ScanCodes().

◆ HidParser_TranslateUsageAndPagesToI8042ScanCodes()

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 
)

Definition at line 614 of file hidparser.c.

621 {
622  ULONG Index;
624 
625  for(Index = 0; Index < UsageListLength; Index++)
626  {
627  //
628  // check current usage
629  //
630  if (ChangedUsageList[Index].UsagePage == HID_USAGE_PAGE_KEYBOARD)
631  {
632  //
633  // process keyboard usage
634  //
635  Status = HidParser_TranslateKbdUsage(ChangedUsageList[Index].Usage, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext);
636  }
637  else if (ChangedUsageList[Index].UsagePage == HID_USAGE_PAGE_CONSUMER)
638  {
639  //
640  // process consumer usage
641  //
642  Status = HidParser_TranslateCustUsage(ChangedUsageList[Index].Usage, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext);
643  }
644  else
645  {
646  //
647  // invalid page / end of usage list page
648  //
650  }
651 
652  //
653  // check status
654  //
656  {
657  //
658  // failed
659  //
660  return Status;
661  }
662  }
663 
664  //
665  // return status
666  //
667  return Status;
668 }
#define HIDP_STATUS_I8042_TRANS_UNKNOWN
Definition: hidpi.h:258
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:382
LONG NTSTATUS
Definition: precomp.h:26
#define HID_USAGE_PAGE_CONSUMER
Definition: hidusage.h:186
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)
Definition: api.c:913
#define HID_USAGE_PAGE_KEYBOARD
Definition: hidusage.h:181
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)
Definition: api.c:851
_Must_inspect_result_ _In_ USAGE UsagePage
Definition: hidpi.h:382
Status
Definition: gdiplustypes.h:24
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ ULONG UsageListLength
Definition: hidpi.h:647
unsigned int ULONG
Definition: retypes.h:1
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248

Referenced by HidP_TranslateUsageAndPagesToI8042ScanCodes().

◆ HidParser_TranslateUsagesToI8042ScanCodes()

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 
)

Definition at line 996 of file hidparser.c.

1003 {
1004  UNIMPLEMENTED;
1005  ASSERT(FALSE);
1006  return STATUS_NOT_IMPLEMENTED;
1007 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_UnsetUsages()

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 
)

Definition at line 978 of file hidparser.c.

987 {
989  ASSERT(FALSE);
990  return STATUS_NOT_IMPLEMENTED;
991 }
return STATUS_NOT_IMPLEMENTED
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:45
#define UNIMPLEMENTED
Definition: debug.h:115

◆ HidParser_UsageAndPageListDifference()

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 
)

Definition at line 689 of file hidparser.c.

695 {
696  ULONG Index, SubIndex, BreakUsageListIndex = 0, MakeUsageListIndex = 0, bFound;
697  PUSAGE_AND_PAGE CurrentUsage, Usage;
698 
699  if (UsageListLength)
700  {
701  /* process removed usages */
702  Index = 0;
703  do
704  {
705  /* get usage from current index */
706  CurrentUsage = &PreviousUsageList[Index];
707 
708  /* end of list reached? */
709  if (CurrentUsage->Usage == 0 && CurrentUsage->UsagePage == 0)
710  break;
711 
712  /* search in current list */
713  SubIndex = 0;
714  bFound = FALSE;
715  do
716  {
717  /* get usage */
718  Usage = &CurrentUsageList[SubIndex];
719 
720  /* end of list reached? */
721  if (Usage->Usage == 0 && Usage->UsagePage == 0)
722  break;
723 
724  /* does it match */
725  if (Usage->Usage == CurrentUsage->Usage && Usage->UsagePage == CurrentUsage->UsagePage)
726  {
727  /* found match */
728  bFound = TRUE;
729  }
730 
731  /* move to next index */
732  SubIndex++;
733 
734  }while(SubIndex < UsageListLength);
735 
736  if (!bFound)
737  {
738  /* store it in break usage list */
739  BreakUsageList[BreakUsageListIndex].Usage = CurrentUsage->Usage;
740  BreakUsageList[BreakUsageListIndex].UsagePage = CurrentUsage->UsagePage;
741  BreakUsageListIndex++;
742  }
743 
744  /* move to next index */
745  Index++;
746 
747  }while(Index < UsageListLength);
748 
749  /* process new usages */
750  Index = 0;
751  do
752  {
753  /* get usage from current index */
754  CurrentUsage = &CurrentUsageList[Index];
755 
756  /* end of list reached? */
757  if (CurrentUsage->Usage == 0 && CurrentUsage->UsagePage == 0)
758  break;
759 
760  /* search in current list */
761  SubIndex = 0;
762  bFound = FALSE;
763  do
764  {
765  /* get usage */
766  Usage = &PreviousUsageList[SubIndex];
767 
768  /* end of list reached? */
769  if (Usage->Usage == 0 && Usage->UsagePage == 0)
770  break;
771 
772  /* does it match */
773  if (Usage->Usage == CurrentUsage->Usage && Usage->UsagePage == CurrentUsage->UsagePage)
774  {
775  /* found match */
776  bFound = TRUE;
777  }
778 
779  /* move to next index */
780  SubIndex++;
781 
782  }while(SubIndex < UsageListLength);
783 
784  if (!bFound)
785  {
786  /* store it in break usage list */
787  MakeUsageList[MakeUsageListIndex].Usage = CurrentUsage->Usage;
788  MakeUsageList[MakeUsageListIndex].UsagePage = CurrentUsage->UsagePage;
789  MakeUsageListIndex++;
790  }
791 
792  /* move to next index */
793  Index++;
794  }while(Index < UsageListLength);
795  }
796 
797  /* are there remaining free list entries */
798  if (BreakUsageListIndex < UsageListLength)
799  {
800  /* zero them */
801  RtlZeroMemory(&BreakUsageList[BreakUsageListIndex], (UsageListLength - BreakUsageListIndex) * sizeof(USAGE_AND_PAGE));
802  }
803 
804  /* are there remaining free list entries */
805  if (MakeUsageListIndex < UsageListLength)
806  {
807  /* zero them */
808  RtlZeroMemory(&MakeUsageList[MakeUsageListIndex], (UsageListLength - MakeUsageListIndex) * sizeof(USAGE_AND_PAGE));
809  }
810 
811  /* done */
812  return HIDP_STATUS_SUCCESS;
813 }
USAGE UsagePage
Definition: hidpi.h:80
#define TRUE
Definition: types.h:120
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:382
USAGE Usage
Definition: hidpi.h:79
#define FALSE
Definition: types.h:117
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ ULONG UsageListLength
Definition: hidpi.h:647
unsigned int ULONG
Definition: retypes.h:1
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248

Referenced by HidP_UsageAndPageListDifference().

◆ HidParser_UsageListDifference()

HIDAPI NTSTATUS NTAPI HidParser_UsageListDifference ( IN PUSAGE  PreviousUsageList,
IN PUSAGE  CurrentUsageList,
OUT PUSAGE  BreakUsageList,
OUT PUSAGE  MakeUsageList,
IN ULONG  UsageListLength 
)

Definition at line 375 of file hidparser.c.

381 {
382  ULONG Index, SubIndex, bFound, BreakUsageIndex = 0, MakeUsageIndex = 0;
383  USAGE CurrentUsage, Usage;
384 
385  if (UsageListLength)
386  {
387  Index = 0;
388  do
389  {
390  /* get current usage */
391  CurrentUsage = PreviousUsageList[Index];
392 
393  /* is the end of list reached? */
394  if (!CurrentUsage)
395  break;
396 
397  /* start searching in current usage list */
398  SubIndex = 0;
399  bFound = FALSE;
400  do
401  {
402  /* get usage of current list */
403  Usage = CurrentUsageList[SubIndex];
404 
405  /* end of list reached? */
406  if (!Usage)
407  break;
408 
409  /* check if it matches the current one */
410  if (CurrentUsage == Usage)
411  {
412  /* it does */
413  bFound = TRUE;
414  break;
415  }
416 
417  /* move to next usage */
418  SubIndex++;
419  }while(SubIndex < UsageListLength);
420 
421  /* was the usage found ?*/
422  if (!bFound)
423  {
424  /* store it in the break usage list */
425  BreakUsageList[BreakUsageIndex] = CurrentUsage;
426  BreakUsageIndex++;
427  }
428 
429  /* move to next usage */
430  Index++;
431 
432  }while(Index < UsageListLength);
433 
434  /* now process the new items */
435  Index = 0;
436  do
437  {
438  /* get current usage */
439  CurrentUsage = CurrentUsageList[Index];
440 
441  /* is the end of list reached? */
442  if (!CurrentUsage)
443  break;
444 
445  /* start searching in current usage list */
446  SubIndex = 0;
447  bFound = FALSE;
448  do
449  {
450  /* get usage of previous list */
451  Usage = PreviousUsageList[SubIndex];
452 
453  /* end of list reached? */
454  if (!Usage)
455  break;
456 
457  /* check if it matches the current one */
458  if (CurrentUsage == Usage)
459  {
460  /* it does */
461  bFound = TRUE;
462  break;
463  }
464 
465  /* move to next usage */
466  SubIndex++;
467  }while(SubIndex < UsageListLength);
468 
469  /* was the usage found ?*/
470  if (!bFound)
471  {
472  /* store it in the make usage list */
473  MakeUsageList[MakeUsageIndex] = CurrentUsage;
474  MakeUsageIndex++;
475  }
476 
477  /* move to next usage */
478  Index++;
479 
480  }while(Index < UsageListLength);
481  }
482 
483  /* does the break list contain empty entries */
484  if (BreakUsageIndex < UsageListLength)
485  {
486  /* zeroize entries */
487  RtlZeroMemory(&BreakUsageList[BreakUsageIndex], sizeof(USAGE) * (UsageListLength - BreakUsageIndex));
488  }
489 
490  /* does the make usage list contain empty entries */
491  if (MakeUsageIndex < UsageListLength)
492  {
493  /* zeroize entries */
494  RtlZeroMemory(&MakeUsageList[MakeUsageIndex], sizeof(USAGE) * (UsageListLength - MakeUsageIndex));
495  }
496 
497  /* done */
498  return HIDP_STATUS_SUCCESS;
499 }
#define TRUE
Definition: types.h:120
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:382
#define FALSE
Definition: types.h:117
_In_ WDFCOLLECTION _In_ ULONG Index
USHORT USAGE
Definition: hidusage.h:30
_Must_inspect_result_ _In_ ULONG UsageListLength
Definition: hidpi.h:647
unsigned int ULONG
Definition: retypes.h:1
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define HIDP_STATUS_SUCCESS
Definition: hidpi.h:248

Referenced by HidP_UsageListDifference().