9 * Copyright 2007, Haiku, Inc. All Rights Reserved.
10 * Distributed under the terms of the MIT License.
13 #define HID_REPORT_TYPE_ANY 0x07
16 #define ITEM_TYPE_MAIN 0x0
17 #define ITEM_TYPE_GLOBAL 0x1
18 #define ITEM_TYPE_LOCAL 0x2
19 #define ITEM_TYPE_LONG 0x3
21 #define ITEM_TAG_MAIN_INPUT 0x8
22 #define ITEM_TAG_MAIN_OUTPUT 0x9
23 #define ITEM_TAG_MAIN_FEATURE 0xb
24 #define ITEM_TAG_MAIN_COLLECTION 0xa
25 #define ITEM_TAG_MAIN_END_COLLECTION 0xc
27 #define ITEM_TAG_GLOBAL_USAGE_PAGE 0x0
28 #define ITEM_TAG_GLOBAL_LOGICAL_MINIMUM 0x1
29 #define ITEM_TAG_GLOBAL_LOGICAL_MAXIMUM 0x2
30 #define ITEM_TAG_GLOBAL_PHYSICAL_MINIMUM 0x3
31 #define ITEM_TAG_GLOBAL_PHYSICAL_MAXIMUM 0x4
32 #define ITEM_TAG_GLOBAL_UNIT_EXPONENT 0x5
33 #define ITEM_TAG_GLOBAL_UNIT 0x6
34 #define ITEM_TAG_GLOBAL_REPORT_SIZE 0x7
35 #define ITEM_TAG_GLOBAL_REPORT_ID 0x8
36 #define ITEM_TAG_GLOBAL_REPORT_COUNT 0x9
37 #define ITEM_TAG_GLOBAL_PUSH 0xa
38 #define ITEM_TAG_GLOBAL_POP 0xb
40 #define ITEM_TAG_LOCAL_USAGE 0x0
41 #define ITEM_TAG_LOCAL_USAGE_MINIMUM 0x1
42 #define ITEM_TAG_LOCAL_USAGE_MAXIMUM 0x2
43 #define ITEM_TAG_LOCAL_DESIGNATOR_INDEX 0x3
44 #define ITEM_TAG_LOCAL_DESIGNATOR_MINIMUM 0x4
45 #define ITEM_TAG_LOCAL_DESIGNATOR_MAXIMUM 0x5
46 #define ITEM_TAG_LOCAL_STRING_INDEX 0x7
47 #define ITEM_TAG_LOCAL_STRING_MINIMUM 0x8
48 #define ITEM_TAG_LOCAL_STRING_MAXIMUM 0x9
49 #define ITEM_TAG_LOCAL_DELIMITER 0xa
51 #define ITEM_TAG_LONG 0xf
53 #define COLLECTION_PHYSICAL 0x00
54 #define COLLECTION_APPLICATION 0x01
55 #define COLLECTION_LOGICAL 0x02
56 #define COLLECTION_REPORT 0x03
57 #define COLLECTION_NAMED_ARRAY 0x04
58 #define COLLECTION_USAGE_SWITCH 0x05
59 #define COLLECTION_USAGE_MODIFIER 0x06
60 #define COLLECTION_ALL 0xff
62 #define UNIT_SYSTEM 0x0
63 #define UNIT_LENGTH 0x1
66 #define UNIT_TEMPERATURE 0x4
67 #define UNIT_CURRENT 0x5
68 #define UNIT_LUMINOUS_INTENSITY 0x6
70 #define USAGE_PAGE_SHIFT 16
71 #define USAGE_PAGE_MASK 0xffff
72 #define USAGE_ID_SHIFT 0
73 #define USAGE_ID_MASK 0xffff
80 }ITEM_PREFIX
, *PITEM_PREFIX
;
96 }SHORT_ITEM
, *PSHORT_ITEM
;
105 }LONG_ITEM
,*PLONG_ITEM
;
108 #define LBITFIELD9(b1,b2,b3,b4,b5,b6,b7,b8,b9) USHORT b9,b8,b7,b6,b5,b4,b3,b2,b1
111 USHORT DataConstant
:1;
112 USHORT ArrayVariable
:1;
116 USHORT NoPreferred
:1;
122 }MAIN_ITEM_DATA
, *PMAIN_ITEM_DATA
;
124 typedef struct __GLOBAL_ITEM_STATE_
127 ULONG LogicalMinimum
;
128 ULONG LogicialMaximum
;
129 ULONG PhysicalMinimum
;
130 ULONG PhysicalMaximum
;
136 struct __GLOBAL_ITEM_STATE__
* Next
;
137 }GLOBAL_ITEM_STATE
, *PGLOBAL_ITEM_STATE
;
140 typedef struct usage_value
152 }USAGE_VALUE
, *PUSAGE_VALUE
;
157 PUSAGE_VALUE UsageStack
;
158 ULONG UsageStackUsed
;
159 ULONG UsageStackAllocated
;
161 USAGE_VALUE UsageMinimum
;
162 USAGE_VALUE UsageMaximum
;
164 UCHAR UsageMinimumSet
;
165 UCHAR UsageMaximumSet
;
167 ULONG DesignatorIndex
;
168 UCHAR DesignatorIndexSet
;
170 ULONG DesignatorMinimum
;
171 ULONG DesignatorMaximum
;
174 UCHAR StringIndexSet
;
178 }LOCAL_ITEM_STATE
, *PLOCAL_ITEM_STATE
;
195 }HID_REPORT_ITEM
, *PHID_REPORT_ITEM
;
199 typedef struct __HID_COLLECTION__
201 struct __HID_COLLECTION__
* Root
;
208 struct __HID_COLLECTION__
** Nodes
;
211 ULONG ItemCountAllocated
;
212 PHID_REPORT_ITEM
* Items
;
215 //struct HID_REPORT ** Reports;
217 }HID_COLLECTION
, *PHID_COLLECTION
;
227 PHID_REPORT_ITEM
*Items
;
230 UCHAR
* CurrentReport
;
232 }HID_REPORT
, *PHID_REPORT
;
239 GLOBAL_ITEM_STATE GlobalItemState
;
244 LOCAL_ITEM_STATE LocalItemState
;
249 PHID_COLLECTION RootCollection
;
259 PHID_REPORT
* Reports
;
266 }HID_PARSER_CONTEXT
, *PHID_PARSER_CONTEXT
;
269 HidParser_ParseReportDescriptor(
275 HidParser_NumberOfTopCollections(
276 IN PHID_PARSER Parser
);
278 #define HID_REPORT_TYPE_INPUT 0x01
279 #define HID_REPORT_TYPE_OUTPUT 0x02
280 #define HID_REPORT_TYPE_FEATURE 0x04
283 HidParser_NumberOfReports(
284 IN PHID_PARSER Parser
,
285 IN ULONG ReportType
);
288 HidParser_GetCollectionUsagePage(
289 IN PHID_PARSER Parser
,
290 IN ULONG CollectionNumber
,
292 OUT PUSHORT UsagePage
);
295 HidParser_GetReportLength(
296 IN PHID_PARSER Parser
,
297 IN ULONG ReportType
);
300 HidParser_IsReportIDUsed(
301 IN PHID_PARSER Parser
);
304 HidParser_GetReportItemCountFromReportType(
305 IN PHID_PARSER Parser
,
306 IN ULONG ReportType
);
309 HidParser_GetReportItemTypeCountFromReportType(
310 IN PHID_PARSER Parser
,
315 HidParser_GetContextSize(
316 IN PHID_PARSER Parser
);
319 HidParser_FreeContext(
320 IN PHID_PARSER Parser
,
322 IN ULONG ContextLength
);
325 HidParser_GetTotalCollectionCount(
326 IN PHID_PARSER Parser
);
329 HidParser_GetMaxUsageListLengthWithReportAndPage(
330 IN PHID_PARSER Parser
,
332 IN USAGE UsagePage OPTIONAL
);
335 HidParser_GetSpecificValueCapsWithReport(
336 IN PHID_PARSER Parser
,
340 OUT PHIDP_VALUE_CAPS ValueCaps
,
341 IN OUT PULONG ValueCapsLength
);
345 HidParser_GetUsagesWithReport(
346 IN PHID_PARSER Parser
,
349 OUT USAGE
*UsageList
,
350 IN OUT PULONG UsageLength
,
351 IN PCHAR ReportDescriptor
,
352 IN ULONG ReportDescriptorLength
);
355 HidParser_GetScaledUsageValueWithReport(
356 IN PHID_PARSER Parser
,
360 OUT PLONG UsageValue
,
361 IN PCHAR ReportDescriptor
,
362 IN ULONG ReportDescriptorLength
);