|
|
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: /*
23: File: HIDParseDescriptor.c
24:
25: Contains: xxx put contents here xxx
26:
27: Version: xxx put version here xxx
28:
29: Copyright: � 1999 by Apple Computer, Inc., all rights reserved.
30:
31: File Ownership:
32:
33: DRI: xxx put dri here xxx
34:
35: Other Contact: xxx put other contact here xxx
36:
37: Technology: xxx put technology here xxx
38:
39: Writers:
40:
41: (BWS) Brent Schorsch
42:
43: Change History (most recent first):
44:
45: <USB1> 3/5/99 BWS first checked in
46: */
47:
48: #include "HIDLib.h"
49:
50: //#include <stdio.h>
51: /*
52: *------------------------------------------------------------------------------
53: *
54: * HIDParseDescriptor - Fill in the PreparsedData structures
55: *
56: * Input:
57: * ptDescriptor - Descriptor Pointer Structure
58: * ptPreparsedData - The PreParsedData Structure
59: * Output:
60: * ptPreparsedData - The PreParsedData Structure
61: * Returns:
62: * kHIDSuccess - Success
63: * kHIDNullPointerErr - Argument, Pointer was Null
64: *
65: * NOTE: HIDCountDescriptorItems MUST have been called to set up the
66: * array pointers in the HIDPreparsedData structure!
67: *
68: *------------------------------------------------------------------------------
69: */
70: OSStatus HIDParseDescriptor(HIDReportDescriptor *ptDescriptor, HIDPreparsedDataPtr ptPreparsedData)
71: {
72: OSStatus iStatus;
73: HIDItem *ptItem;
74: HIDCollection *ptCollection;
75: HIDReportSizes *ptReport;
76: /*
77: * Disallow NULL Pointers
78: */
79: if ((ptDescriptor == NULL) || (ptPreparsedData == NULL))
80: return kHIDNullPointerErr;
81: /*
82: * Initialize Counters
83: */
84: ptPreparsedData->collectionCount = 1;
85: ptPreparsedData->reportItemCount = 0;
86: ptPreparsedData->reportCount = 1;
87: ptPreparsedData->usageItemCount = 0;
88: ptPreparsedData->stringItemCount = 0;
89: ptPreparsedData->desigItemCount = 0;
90: /*
91: * Initialize the Descriptor Data
92: */
93: ptDescriptor->index = 0;
94: ptDescriptor->collectionNesting = 0;
95: ptDescriptor->globalsNesting = 0;
96: ptDescriptor->firstUsageItem = 0;
97: ptDescriptor->firstStringItem = 0;
98: ptDescriptor->firstDesigItem = 0;
99: ptDescriptor->parent = 0;
100: ptDescriptor->sibling = 0;
101: ptDescriptor->globals.usagePage = 0;
102: ptDescriptor->globals.logicalMinimum = 0;
103: ptDescriptor->globals.logicalMaximum = 0;
104: ptDescriptor->globals.physicalMinimum = 0;
105: ptDescriptor->globals.physicalMaximum = 0;
106: ptDescriptor->globals.unitExponent = 0;
107: ptDescriptor->globals.units = 0;
108: ptDescriptor->globals.reportSize = 0;
109: ptDescriptor->globals.reportID = 0;
110: ptDescriptor->globals.reportCount = 0;
111: ptDescriptor->globals.reportIndex = 0;
112: ptDescriptor->haveUsageMin = false;
113: ptDescriptor->haveUsageMax = false;
114: ptDescriptor->haveStringMin = false;
115: ptDescriptor->haveStringMax = false;
116: ptDescriptor->haveDesigMin = false;
117: ptDescriptor->haveDesigMax = false;
118: ptItem = &ptDescriptor->item;
119: /*
120: * Initialize the virtual collection
121: */
122: ptCollection = ptPreparsedData->collections;
123: ptCollection->data = 0;
124: ptCollection->usagePage = 0;
125: ptCollection->firstUsageItem = 0;
126: ptCollection->usageItemCount = 0;
127: ptCollection->firstReportItem = 0;
128: ptCollection->reportItemCount = 0;
129: ptCollection->parent = 0;
130: ptCollection->children = 0;
131: ptCollection->firstChild = 0;
132: ptCollection->nextSibling = 0;
133: /*
134: * Initialize the default report
135: */
136: ptReport = ptPreparsedData->reports;
137: ptReport->reportID = 0;
138: ptReport->inputBitCount = 0;
139: ptReport->outputBitCount = 0;
140: ptReport->featureBitCount = 0;
141:
142: /*
143: * Parse the Descriptor
144: */
145: while ((iStatus = HIDNextItem(ptDescriptor)) == kHIDSuccess)
146: {
147: switch (ptItem->itemType)
148: {
149: case kHIDTypeMain:
150: iStatus = HIDProcessMainItem(ptDescriptor,ptPreparsedData);
151: break;
152: case kHIDTypeGlobal:
153: iStatus = HIDProcessGlobalItem(ptDescriptor,ptPreparsedData);
154: break;
155: case kHIDTypeLocal:
156: iStatus = HIDProcessLocalItem(ptDescriptor,ptPreparsedData);
157: break;
158: }
159: if (iStatus != kHIDSuccess)
160: return iStatus;
161: }
162: if (iStatus == kHIDEndOfDescriptorErr)
163: iStatus = kHIDSuccess;
164: /*
165: * Update the virtual collection
166: */
167: ptCollection = ptPreparsedData->collections;
168: ptCollection->reportItemCount = ptPreparsedData->reportItemCount;
169: /*
170: * Mark the PreparsedData initialized
171: */
172: return iStatus;
173: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.