|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: #ifndef __HIDPriv__
23: #define __HIDPriv__
24:
25: /*
26: File: HIDPriv.i
27:
28: Contains: xxx put contents here xxx
29:
30: Version: xxx put version here xxx
31:
32: Copyright: � 1999 by Apple Computer, Inc., all rights reserved.
33:
34: File Ownership:
35:
36: DRI: xxx put dri here xxx
37:
38: Other Contact: xxx put other contact here xxx
39:
40: Technology: xxx put technology here xxx
41:
42: Writers:
43:
44: (BWS) Brent Schorsch
45:
46: Change History (most recent first):
47:
48: <5> 11/1/99 BWS [2405720] We need a better check for 'bit padding' items,
49: rather than just is constant. We will check to make sure the
50: item is constant, and has no usage, or zero usage. This means we
51: need to pass an additional parameter to some internal functions
52: <4> 4/7/99 BWS Add flags to report items (for reverse)
53: <3> 3/19/99 BWS Build stub library
54: <2> 3/17/99 BWS [2314839] Add flags field to HIDPreparsedData, is set in
55: HIDOpenReportDescriptor
56: <1> 3/5/99 BWS first checked in
57: */
58:
59: #include "MacTypes.h"
60: #include <IOKit/hidsystem/IOHIDDescriptorParser.h>
61:
62: /* the following constants are from the USB HID Specification (www.usb.org)*/
63:
64: /*------------------------------------------------------------------------------*/
65: /* */
66: /* HID Header */
67: /* */
68: /* --------------------------------------------------------- */
69: /* | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | */
70: /* | Tag | Type | Size | */
71: /* --------------------------------------------------------- */
72: /*------------------------------------------------------------------------------*/
73: enum {
74: kHIDItemSizeMask = 0x03,
75: kHIDItemTagMask = 0xF0,
76: kHIDItemTagShift = 4,
77: kHIDItemTypeMask = 0x0C,
78: kHIDItemTypeShift = 2,
79: kHIDLongItemHeader = 0xFE
80: };
81:
82: /*------------------------------------------------------------------------------*/
83: /* */
84: /* HID Item Type Definitions */
85: /* */
86: /*------------------------------------------------------------------------------*/
87: enum {
88: kHIDTypeMain = 0,
89: kHIDTypeGlobal = 1,
90: kHIDTypeLocal = 2,
91: kHIDTypeLong = 3
92: };
93:
94: /*------------------------------------------------------------------------------*/
95: /* */
96: /* HID Item Tag Definitions - Main Items */
97: /* */
98: /*------------------------------------------------------------------------------*/
99: enum {
100: kHIDTagInput = 8,
101: kHIDTagOutput = 9,
102: kHIDTagCollection = 0x0A,
103: kHIDTagFeature = 0x0B,
104: kHIDTagEndCollection = 0x0C
105: };
106:
107: /*------------------------------------------------------------------------------*/
108: /* */
109: /* HID Item Tag Definitions - Globals */
110: /* */
111: /*------------------------------------------------------------------------------*/
112: enum {
113: kHIDTagUsagePage = 0,
114: kHIDTagLogicalMinimum = 1,
115: kHIDTagLogicalMaximum = 2,
116: kHIDTagPhysicalMinimum = 3,
117: kHIDTagPhysicalMaximum = 4,
118: kHIDTagUnitExponent = 5,
119: kHIDTagUnit = 6,
120: kHIDTagReportSize = 7,
121: kHIDTagReportID = 8,
122: kHIDTagReportCount = 9,
123: kHIDTagPush = 0x0A,
124: kHIDTagPop = 0x0B
125: };
126:
127: /*------------------------------------------------------------------------------*/
128: /* */
129: /* HID Item Tag Definitions - Locals */
130: /* */
131: /*------------------------------------------------------------------------------*/
132: enum {
133: kHIDTagUsage = 0,
134: kHIDTagUsageMinimum = 1,
135: kHIDTagUsageMaximum = 2,
136: kHIDTagDesignatorIndex = 3,
137: kHIDTagDesignatorMinimum = 4,
138: kHIDTagDesignatorMaximum = 5,
139: kHIDTagStringIndex = 7,
140: kHIDTagStringMinimum = 8,
141: kHIDTagStringMaximum = 9,
142: kHIDTagSetDelimiter = 0x0A
143: };
144:
145: /*------------------------------------------------------------------------------*/
146: /* */
147: /* HID Main Item Header Bit Definitions */
148: /* */
149: /*------------------------------------------------------------------------------*/
150: enum {
151: kHIDDataBufferedBytes = 0x0100,
152: kHIDDataVolatileBit = 0x80,
153: kHIDDataVolatile = 0x80,
154: kHIDDataNullStateBit = 0x40,
155: kHIDDataNullState = 0x40,
156: kHIDDataNoPreferredBit = 0x20,
157: kHIDDataNoPreferred = 0x20,
158: kHIDDataNonlinearBit = 0x10,
159: kHIDDataNonlinear = 0x10,
160: kHIDDataWrapBit = 0x08,
161: kHIDDataWrap = 0x08,
162: kHIDDataRelativeBit = 0x04,
163: kHIDDataRelative = 0x04,
164: kHIDDataAbsolute = 0x00,
165: kHIDDataVariableBit = 0x02,
166: kHIDDataVariable = 0x02,
167: kHIDDataArrayBit = 0x02,
168: kHIDDataArray = 0x00,
169: kHIDDataConstantBit = 0x01,
170: kHIDDataConstant = 0x01
171: };
172:
173: /*------------------------------------------------------------------------------*/
174: /* */
175: /* HID Collection Data Definitions */
176: /* */
177: /*------------------------------------------------------------------------------*/
178: enum {
179: kHIDPhysicalCollection = 0x00,
180: kHIDApplicationCollection = 0x01
181: };
182:
183: /*------------------------------------------------------------------------------*/
184: /* */
185: /* HIDLibrary private defs */
186: /* */
187: /*------------------------------------------------------------------------------*/
188:
189: enum
190: {
191: kHIDOSType = 'hid '
192: };
193:
194: struct HIDItem
195: {
196: ByteCount byteCount;
197: SInt32 itemType;
198: SInt32 tag;
199: SInt32 signedValue;
200: UInt32 unsignedValue;
201: };
202: typedef struct HIDItem HIDItem;
203:
204: struct HIDGlobalItems
205: {
206: HIDUsage usagePage;
207: SInt32 logicalMinimum;
208: SInt32 logicalMaximum;
209: SInt32 physicalMinimum;
210: SInt32 physicalMaximum;
211: SInt32 unitExponent;
212: SInt32 units;
213: ByteCount reportSize;
214: SInt32 reportID;
215: SInt32 reportCount;
216: SInt32 reportIndex;
217: };
218: typedef struct HIDGlobalItems HIDGlobalItems;
219:
220: struct HIDReportSizes
221: {
222: SInt32 reportID;
223: SInt32 inputBitCount;
224: SInt32 outputBitCount;
225: SInt32 featureBitCount;
226: };
227: typedef struct HIDReportSizes HIDReportSizes;
228:
229: struct HIDCollection
230: {
231: SInt32 data;
232: SInt32 usagePage;
233: SInt32 firstUsageItem;
234: SInt32 usageItemCount;
235: SInt32 firstReportItem;
236: SInt32 reportItemCount;
237: SInt32 parent;
238: SInt32 children;
239: SInt32 firstChild;
240: SInt32 nextSibling;
241: };
242: typedef struct HIDCollection HIDCollection;
243:
244: enum
245: {
246: kHIDReportItemFlag_Reversed = 0x00000001
247: };
248:
249: struct HIDReportItem
250: {
251: UInt32 reportType;
252: HIDGlobalItems globals;
253: SInt32 startBit;
254: SInt32 parent;
255: SInt32 dataModes;
256: SInt32 firstUsageItem;
257: SInt32 usageItemCount;
258: SInt32 firstStringItem;
259: SInt32 stringItemCount;
260: SInt32 firstDesigItem;
261: SInt32 desigItemCount;
262: UInt32 flags;
263: };
264: typedef struct HIDReportItem HIDReportItem;
265:
266: struct HIDP_UsageItem
267: {
268: Boolean isRange;
269: Boolean reserved;
270: HIDUsage usagePage;
271: HIDUsage usage;
272: SInt32 usageMinimum;
273: SInt32 usageMaximum;
274: };
275: typedef struct HIDP_UsageItem HIDP_UsageItem;
276:
277: struct HIDStringItem
278: {
279: Boolean isRange;
280: Boolean reserved;
281: SInt32 index;
282: SInt32 minimum;
283: SInt32 maximum;
284: };
285: typedef struct HIDStringItem HIDStringItem;
286: typedef HIDStringItem HIDDesignatorItem;
287:
288: struct HIDPreparsedData
289: {
290: OSType hidTypeIfValid;
291: HIDCollection * collections;
292: UInt32 collectionCount;
293: HIDReportItem * reportItems;
294: UInt32 reportItemCount;
295: HIDReportSizes * reports;
296: UInt32 reportCount;
297: HIDP_UsageItem * usageItems;
298: UInt32 usageItemCount;
299: HIDStringItem * stringItems;
300: UInt32 stringItemCount;
301: HIDDesignatorItem * desigItems;
302: UInt32 desigItemCount;
303: UInt8 * rawMemPtr;
304: UInt32 flags;
305: ByteCount numBytesAllocated;
306: };
307: typedef struct HIDPreparsedData HIDPreparsedData;
308: typedef HIDPreparsedData * HIDPreparsedDataPtr;
309:
310: extern
311: OSStatus
312: HIDCheckReport (HIDReportType reportType,
313: HIDPreparsedDataRef preparsedDataRef,
314: HIDReportItem * reportItem,
315: void * report,
316: ByteCount reportLength);
317:
318:
319: extern
320: OSStatus
321: HIDGetData (void * report,
322: ByteCount reportLength,
323: UInt32 start,
324: UInt32 size,
325: SInt32 * value,
326: Boolean signExtend);
327:
328: extern
329: OSStatus
330: HIDPostProcessRIValue (HIDReportItem * reportItem,
331: SInt32 * value);
332:
333: extern
334: OSStatus
335: HIDPreProcessRIValue (HIDReportItem * reportItem,
336: SInt32 * value);
337:
338: extern
339: Boolean
340: HIDHasUsage (HIDPreparsedDataRef preparsedDataRef,
341: HIDReportItem * reportItem,
342: HIDUsage usagePage,
343: HIDUsage usage,
344: UInt32 * usageIndex,
345: UInt32 * count);
346:
347: extern
348: Boolean
349: HIDIsButton (HIDReportItem * reportItem,
350: HIDPreparsedDataRef preparsedDataRef);
351:
352: extern
353: Boolean
354: HIDIsVariable (HIDReportItem * reportItem,
355: HIDPreparsedDataRef preparsedDataRef);
356:
357: extern
358: OSStatus
359: HIDPutData (void * report,
360: ByteCount reportLength,
361: UInt32 start,
362: UInt32 size,
363: SInt32 value);
364:
365: extern
366: OSStatus
367: HIDScaleUsageValueIn (HIDReportItem * reportItem,
368: UInt32 value,
369: SInt32 * scaledValue);
370:
371: extern
372: OSStatus
373: HIDScaleUsageValueOut (HIDReportItem * reportItem,
374: UInt32 value,
375: SInt32 * scaledValue);
376:
377: extern
378: void
379: HIDUsageAndPageFromIndex (HIDPreparsedDataRef preparsedDataRef,
380: HIDReportItem * reportItem,
381: UInt32 index,
382: HIDUsageAndPage * usageAndPage);
383:
384: extern
385: Boolean
386: HIDUsageInRange (HIDP_UsageItem * usageItem,
387: HIDUsage usagePage,
388: HIDUsage usage);
389:
390: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.