|
|
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: HIDProcessCollection.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: * HIDProcessCollection - Process a Collection MainItem ! 54: * ! 55: * Input: ! 56: * ptDescriptor - The Descriptor Structure ! 57: * ptPreparsedData - The PreParsedData Structure ! 58: * Output: ! 59: * ptDescriptor - The Descriptor Structure ! 60: * ptPreparsedData - The PreParsedData Structure ! 61: * Returns: ! 62: * kHIDSuccess - Success ! 63: * kHIDNullPointerErr - Argument, Pointer was Null ! 64: * ! 65: *------------------------------------------------------------------------------ ! 66: */ ! 67: OSStatus HIDProcessCollection(HIDReportDescriptor *ptDescriptor, HIDPreparsedDataPtr ptPreparsedData) ! 68: { ! 69: HIDCollection *collections; ! 70: HIDCollection *ptCollection; ! 71: int parent; ! 72: int iCollection; ! 73: /* ! 74: * Disallow NULL Pointers ! 75: */ ! 76: if ((ptDescriptor == NULL) || (ptPreparsedData == NULL)) ! 77: return kHIDNullPointerErr; ! 78: /* ! 79: * Initialize the new Collection Structure ! 80: */ ! 81: iCollection = ptPreparsedData->collectionCount++; ! 82: collections = ptPreparsedData->collections; ! 83: ptCollection = &collections[iCollection]; ! 84: ptCollection->data = ptDescriptor->item.unsignedValue; ! 85: ptCollection->firstUsageItem = ptDescriptor->firstUsageItem; ! 86: ptCollection->usageItemCount = ptPreparsedData->usageItemCount - ptDescriptor->firstUsageItem; ! 87: ptDescriptor->firstUsageItem = ptPreparsedData->usageItemCount; ! 88: ptCollection->children = 0; ! 89: ptCollection->nextSibling = ptDescriptor->sibling; ! 90: ptDescriptor->sibling = 0; ! 91: ptCollection->firstChild = 0; ! 92: ptCollection->usagePage = ptDescriptor->globals.usagePage; ! 93: ptCollection->firstReportItem = ptPreparsedData->reportItemCount; ! 94: /* ! 95: * Set up the relationship with the parent Collection ! 96: */ ! 97: parent = ptDescriptor->parent; ! 98: ptCollection->parent = parent; ! 99: collections[parent].firstChild = iCollection; ! 100: collections[parent].children++; ! 101: ptDescriptor->parent = iCollection; ! 102: /* ! 103: * Save the parent Collection Information on the stack ! 104: */ ! 105: ptDescriptor->collectionStack[ptDescriptor->collectionNesting++] = parent; ! 106: return kHIDSuccess; ! 107: } ! 108: ! 109: /* ! 110: *------------------------------------------------------------------------------ ! 111: * ! 112: * HIDProcessEndCollection - Process an EndCollection MainItem ! 113: * ! 114: * Input: ! 115: * ptDescriptor - The Descriptor Structure ! 116: * ptPreparsedData - The PreParsedData Structure ! 117: * Output: ! 118: * ptPreparsedData - The PreParsedData Structure ! 119: * Returns: ! 120: * kHIDSuccess - Success ! 121: * kHIDNullPointerErr - Argument, Pointer was Null ! 122: * ! 123: *------------------------------------------------------------------------------ ! 124: */ ! 125: OSStatus HIDProcessEndCollection(HIDReportDescriptor *ptDescriptor, HIDPreparsedDataPtr ptPreparsedData) ! 126: { ! 127: HIDCollection *ptCollection; ! 128: int iCollection; ! 129: /* ! 130: * Remember the number of ReportItem MainItems in this Collection ! 131: */ ! 132: ptCollection = &ptPreparsedData->collections[ptDescriptor->parent]; ! 133: ptCollection->reportItemCount = ptPreparsedData->reportItemCount - ptCollection->firstReportItem; ! 134: /* ! 135: * Restore the parent Collection Data ! 136: */ ! 137: iCollection = ptDescriptor->collectionStack[--ptDescriptor->collectionNesting]; ! 138: ptDescriptor->sibling = ptDescriptor->parent; ! 139: ptDescriptor->parent = iCollection; ! 140: return kHIDSuccess; ! 141: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.