|
|
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: HIDGetCollectionNodes.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: /*
51: *------------------------------------------------------------------------------
52: *
53: * HIDGetCollectionNodes - Get the Collections Database
54: *
55: * Input:
56: * ptLinkCollectionNodes - Node Array provided by caller
57: * piLinkCollectionNodesLength - Maximum Nodes
58: * Output:
59: * piLinkCollectionNodesLength - Actual number of Nodes
60: * Returns:
61: * kHIDSuccess - Success
62: * kHIDNullPointerErr - Argument, Pointer was Null
63: * HidP_NotEnoughRoom - More Nodes than space for them
64: *
65: *------------------------------------------------------------------------------
66: */
67: OSStatus HIDGetCollectionNodes(HIDCollectionNodePtr ptLinkCollectionNodes,
68: UInt32 *piLinkCollectionNodesLength,
69: HIDPreparsedDataRef preparsedDataRef)
70: {
71: HIDPreparsedDataPtr ptPreparsedData = (HIDPreparsedDataPtr) preparsedDataRef;
72: HIDCollectionNodePtr ptLink;
73: HIDCollection *ptCollection;
74: HIDP_UsageItem *ptFirstUsageItem;
75: int iMaxNodes;
76: int collectionCount;
77: int firstUsageItem;
78: int i;
79: /*
80: * Disallow Null Pointers
81: */
82: if ((ptLinkCollectionNodes == NULL)
83: || (piLinkCollectionNodesLength == NULL)
84: || (ptPreparsedData == NULL))
85: return kHIDNullPointerErr;
86: if (ptPreparsedData->hidTypeIfValid != kHIDOSType)
87: return kHIDInvalidPreparsedDataErr;
88: /*
89: * Remember the size of the output array
90: */
91: iMaxNodes = *piLinkCollectionNodesLength;
92: collectionCount = ptPreparsedData->collectionCount;
93: *piLinkCollectionNodesLength = collectionCount;
94: /*
95: * Report if there's not enough room
96: */
97: if (collectionCount > iMaxNodes)
98: return kHIDBufferTooSmallErr;
99: /*
100: * Copy the nodes
101: */
102: for (i=0; i<collectionCount; i++)
103: {
104: ptCollection = &ptPreparsedData->collections[i];
105: ptLink = &ptLinkCollectionNodes[i];
106: firstUsageItem = ptCollection->firstUsageItem;
107: ptFirstUsageItem = &ptPreparsedData->usageItems[firstUsageItem];
108: ptLink->collectionUsage = ptFirstUsageItem->usage;
109: ptLink->collectionUsagePage = ptCollection->usagePage;
110: ptLink->parent = ptCollection->parent;
111: ptLink->numberOfChildren = ptCollection->children;
112: ptLink->nextSibling = ptCollection->nextSibling;
113: ptLink->firstChild = ptCollection->firstChild;
114: }
115: /*
116: * Report if there wasn't enough space
117: */
118: if (iMaxNodes < ptPreparsedData->collectionCount)
119: return kHIDBufferTooSmallErr;
120: return kHIDSuccess;
121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.