7 #define _HIDPI_NO_FUNCTION_MACROS_
10 #include "hidparser.h"
13 * Copyright 2007, Haiku, Inc. All Rights Reserved.
14 * Distributed under the terms of the MIT License.
17 #define HID_REPORT_TYPE_ANY 0x07
20 #define ITEM_TYPE_MAIN 0x0
21 #define ITEM_TYPE_GLOBAL 0x1
22 #define ITEM_TYPE_LOCAL 0x2
23 #define ITEM_TYPE_LONG 0x3
25 #define ITEM_TAG_MAIN_INPUT 0x8
26 #define ITEM_TAG_MAIN_OUTPUT 0x9
27 #define ITEM_TAG_MAIN_FEATURE 0xb
28 #define ITEM_TAG_MAIN_COLLECTION 0xa
29 #define ITEM_TAG_MAIN_END_COLLECTION 0xc
31 #define ITEM_TAG_GLOBAL_USAGE_PAGE 0x0
32 #define ITEM_TAG_GLOBAL_LOGICAL_MINIMUM 0x1
33 #define ITEM_TAG_GLOBAL_LOGICAL_MAXIMUM 0x2
34 #define ITEM_TAG_GLOBAL_PHYSICAL_MINIMUM 0x3
35 #define ITEM_TAG_GLOBAL_PHYSICAL_MAXIMUM 0x4
36 #define ITEM_TAG_GLOBAL_UNIT_EXPONENT 0x5
37 #define ITEM_TAG_GLOBAL_UNIT 0x6
38 #define ITEM_TAG_GLOBAL_REPORT_SIZE 0x7
39 #define ITEM_TAG_GLOBAL_REPORT_ID 0x8
40 #define ITEM_TAG_GLOBAL_REPORT_COUNT 0x9
41 #define ITEM_TAG_GLOBAL_PUSH 0xa
42 #define ITEM_TAG_GLOBAL_POP 0xb
44 #define ITEM_TAG_LOCAL_USAGE 0x0
45 #define ITEM_TAG_LOCAL_USAGE_MINIMUM 0x1
46 #define ITEM_TAG_LOCAL_USAGE_MAXIMUM 0x2
47 #define ITEM_TAG_LOCAL_DESIGNATOR_INDEX 0x3
48 #define ITEM_TAG_LOCAL_DESIGNATOR_MINIMUM 0x4
49 #define ITEM_TAG_LOCAL_DESIGNATOR_MAXIMUM 0x5
50 #define ITEM_TAG_LOCAL_STRING_INDEX 0x7
51 #define ITEM_TAG_LOCAL_STRING_MINIMUM 0x8
52 #define ITEM_TAG_LOCAL_STRING_MAXIMUM 0x9
53 #define ITEM_TAG_LOCAL_DELIMITER 0xa
55 #define ITEM_TAG_LONG 0xf
57 #define COLLECTION_PHYSICAL 0x00
58 #define COLLECTION_APPLICATION 0x01
59 #define COLLECTION_LOGICAL 0x02
60 #define COLLECTION_REPORT 0x03
61 #define COLLECTION_NAMED_ARRAY 0x04
62 #define COLLECTION_USAGE_SWITCH 0x05
63 #define COLLECTION_USAGE_MODIFIER 0x06
64 #define COLLECTION_ALL 0xff
66 #define UNIT_SYSTEM 0x0
67 #define UNIT_LENGTH 0x1
70 #define UNIT_TEMPERATURE 0x4
71 #define UNIT_CURRENT 0x5
72 #define UNIT_LUMINOUS_INTENSITY 0x6
74 #define USAGE_PAGE_SHIFT 16
75 #define USAGE_PAGE_MASK 0xffff
76 #define USAGE_ID_SHIFT 0
77 #define USAGE_ID_MASK 0xffff
84 }ITEM_PREFIX
, *PITEM_PREFIX
;
100 }SHORT_ITEM
, *PSHORT_ITEM
;
109 }LONG_ITEM
,*PLONG_ITEM
;
112 #define LBITFIELD9(b1,b2,b3,b4,b5,b6,b7,b8,b9) USHORT b9,b8,b7,b6,b5,b4,b3,b2,b1
115 USHORT DataConstant
:1;
116 USHORT ArrayVariable
:1;
120 USHORT NoPreferred
:1;
126 }MAIN_ITEM_DATA
, *PMAIN_ITEM_DATA
;
128 typedef struct __GLOBAL_ITEM_STATE_
131 ULONG LogicalMinimum
;
132 ULONG LogicialMaximum
;
133 ULONG PhysicalMinimum
;
134 ULONG PhysicalMaximum
;
140 struct __GLOBAL_ITEM_STATE__
* Next
;
141 }GLOBAL_ITEM_STATE
, *PGLOBAL_ITEM_STATE
;
144 typedef struct usage_value
156 }USAGE_VALUE
, *PUSAGE_VALUE
;
161 PUSAGE_VALUE UsageStack
;
162 ULONG UsageStackUsed
;
163 ULONG UsageStackAllocated
;
165 USAGE_VALUE UsageMinimum
;
166 USAGE_VALUE UsageMaximum
;
168 UCHAR UsageMinimumSet
;
169 UCHAR UsageMaximumSet
;
171 ULONG DesignatorIndex
;
172 UCHAR DesignatorIndexSet
;
174 ULONG DesignatorMinimum
;
175 ULONG DesignatorMaximum
;
178 UCHAR StringIndexSet
;
182 }LOCAL_ITEM_STATE
, *PLOCAL_ITEM_STATE
;
199 }HID_REPORT_ITEM
, *PHID_REPORT_ITEM
;
203 typedef struct __HID_COLLECTION__
212 struct __HID_COLLECTION__
** Nodes
;
213 struct __HID_COLLECTION__
* Root
;
214 struct _HID_REPORT
** Reports
;
218 }HID_COLLECTION
, *PHID_COLLECTION
;
220 typedef struct _HID_REPORT
227 HID_REPORT_ITEM Items
[1];
228 }HID_REPORT
, *PHID_REPORT
;
235 GLOBAL_ITEM_STATE GlobalItemState
;
240 LOCAL_ITEM_STATE LocalItemState
;
245 PHID_COLLECTION RootCollection
;
255 ULONG CollectionIndex
;
257 }HID_PARSER_CONTEXT
, *PHID_PARSER_CONTEXT
;
259 #define HID_REPORT_TYPE_INPUT 0x01
260 #define HID_REPORT_TYPE_OUTPUT 0x02
261 #define HID_REPORT_TYPE_FEATURE 0x04
264 HidParser_UsesReportId(
265 IN PVOID CollectionContext
,
266 IN UCHAR ReportType
);
269 HidParser_GetCollectionUsagePage(
270 IN PVOID CollectionContext
,
272 OUT PUSHORT UsagePage
);
275 HidParser_GetReportLength(
276 IN PVOID CollectionContext
,
277 IN UCHAR ReportType
);
280 HidParser_IsReportIDUsed(
281 IN PHID_PARSER Parser
);
284 HidParser_GetReportItemCountFromReportType(
285 IN PVOID CollectionContext
,
286 IN UCHAR ReportType
);
289 HidParser_GetReportItemTypeCountFromReportType(
290 IN PVOID CollectionContext
,
295 HidParser_GetMaxUsageListLengthWithReportAndPage(
296 IN PVOID CollectionContext
,
298 IN USAGE UsagePage OPTIONAL
);
301 HidParser_GetSpecificValueCapsWithReport(
302 IN PHID_PARSER Parser
,
303 IN PVOID CollectionContext
,
307 OUT PHIDP_VALUE_CAPS ValueCaps
,
308 IN OUT PUSHORT ValueCapsLength
);
312 HidParser_GetUsagesWithReport(
313 IN PHID_PARSER Parser
,
314 IN PVOID CollectionContext
,
317 OUT USAGE
*UsageList
,
318 IN OUT PULONG UsageLength
,
319 IN PCHAR ReportDescriptor
,
320 IN ULONG ReportDescriptorLength
);
323 HidParser_GetScaledUsageValueWithReport(
324 IN PHID_PARSER Parser
,
325 IN PVOID CollectionContext
,
329 OUT PLONG UsageValue
,
330 IN PCHAR ReportDescriptor
,
331 IN ULONG ReportDescriptorLength
);
334 HidParser_GetUsageValueWithReport(
335 IN PHID_PARSER Parser
,
336 IN PVOID CollectionContext
,
340 OUT PULONG UsageValue
,
341 IN PCHAR ReportDescriptor
,
342 IN ULONG ReportDescriptorLength
);
347 HidParser_BuildContext(
348 IN PHID_PARSER Parser
,
349 IN PVOID ParserContext
,
350 IN ULONG CollectionIndex
,
351 IN ULONG ContextSize
,
352 OUT PVOID
*CollectionContext
);
355 HidParser_CalculateContextSize(
356 IN PHID_COLLECTION Collection
);
359 HidParser_ParseReportDescriptor(
363 OUT PVOID
*ParserContext
);
366 HidParser_NumberOfTopCollections(
367 IN PVOID ParserContext
);
370 HidParser_GetContextSize(
371 IN PHID_PARSER Parser
,
372 IN PVOID ParserContext
,
373 IN ULONG CollectionNumber
);
379 HidParser_GetCollectionFromContext(
383 HidParser_GetTotalCollectionCount(
384 IN PVOID CollectionContext
);
387 HidParser_BuildCollectionContext(
388 IN PHID_PARSER Parser
,
389 IN PHID_COLLECTION RootCollection
,
391 IN ULONG ContextSize
);
394 HidParser_GetReportInCollection(
396 IN UCHAR ReportType
);
398 #endif /* _HIDPARSER_H_ */