|
|
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: HIDIsButtonOrValue.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: <USB3> 11/1/99 BWS [2405720] We need a better check for 'bit padding' items,
46: rather than just is constant. We will check to make sure the
47: item is constant, and has no usage, or zero usage.
48: <USB2> 3/5/99 BWS [2311366] HIDIsButton should screen out constants (at least
49: until other functions, like HIDGetButtons, are fixed to be able
50: to properly skip constants)
51: <USB1> 3/5/99 BWS first checked in
52: */
53:
54: #include "HIDLib.h"
55:
56: /*
57: *-----------------------------------------------------------------------------
58: *
59: * HIDIsButton - Is the data button(s)?
60: *
61: * Input:
62: * ptReportItem - Input/Output/Feature
63: * Output:
64: * Returns:
65: * Boolean
66: *
67: *-----------------------------------------------------------------------------
68: */
69: Boolean HIDIsButton(HIDReportItem *ptReportItem, HIDPreparsedDataRef preparsedDataRef)
70: {
71: HIDPreparsedDataPtr ptPreparsedData = (HIDPreparsedDataPtr) preparsedDataRef;
72:
73: /*
74: * Disallow Null Pointers
75: */
76: if (ptReportItem==NULL)
77: return false;
78: /*
79: * Remove items that are constant and have no usage
80: */
81: if ((ptReportItem->dataModes & kHIDDataConstantBit) == kHIDDataConstant)
82: {
83: // if has no usages, then bit filler
84: if (ptReportItem->usageItemCount == 0)
85: return false;
86:
87: // also check to see if there is a usage, but it is zero
88:
89: // if the first usage item is range, then check that one
90: // (we will not worry about report items with multiple zero usages,
91: // as I dont think that is a case that makes sense)
92: if (ptReportItem->firstUsageItem < ptPreparsedData->usageItemCount)
93: {
94: HIDP_UsageItem * ptUsageItem = &ptPreparsedData->usageItems[ptReportItem->firstUsageItem];
95:
96: // if it is a range usage, with both zero usages
97: if ((ptUsageItem->isRange && ptUsageItem->usageMinimum == 0 && ptUsageItem->usageMaximum == 0) &&
98: // or not a range, and zero usage
99: (!ptUsageItem->isRange && ptUsageItem->usage == 0))
100: // then this is bit filler
101: return false;
102: }
103: }
104:
105: /*
106: * Arrays and 1-bit Variables
107: */
108: return (((ptReportItem->dataModes & kHIDDataArrayBit) == kHIDDataArray)
109: || (ptReportItem->globals.reportSize == 1));
110: }
111:
112: /*
113: *-----------------------------------------------------------------------------
114: *
115: * HIDIsVariable - Is the data variable(s)?
116: *
117: * Input:
118: * ptReportItem - Input/Output/Feature
119: * Output:
120: * Returns:
121: * Boolean
122: *
123: *-----------------------------------------------------------------------------
124: */
125: Boolean HIDIsVariable(HIDReportItem *ptReportItem, HIDPreparsedDataRef preparsedDataRef)
126: {
127: HIDPreparsedDataPtr ptPreparsedData = (HIDPreparsedDataPtr) preparsedDataRef;
128:
129: /*
130: * Disallow Null Pointers
131: */
132: if (ptReportItem==NULL)
133: return false;
134:
135: /*
136: * Remove items that are constant and have no usage
137: */
138: if ((ptReportItem->dataModes & kHIDDataConstantBit) == kHIDDataConstant)
139: {
140: // if has no usages, then bit filler
141: if (ptReportItem->usageItemCount == 0)
142: return false;
143:
144: // also check to see if there is a usage, but it is zero
145:
146: // if the first usage item is range, then check that one
147: // (we will not worry about report items with multiple zero usages,
148: // as I dont think that is a case that makes sense)
149: if (ptReportItem->firstUsageItem < ptPreparsedData->usageItemCount)
150: {
151: HIDP_UsageItem * ptUsageItem = &ptPreparsedData->usageItems[ptReportItem->firstUsageItem];
152:
153: // if it is a range usage, with both zero usages
154: if ((ptUsageItem->isRange && ptUsageItem->usageMinimum == 0 && ptUsageItem->usageMaximum == 0) &&
155: // or not a range, and zero usage
156: (!ptUsageItem->isRange && ptUsageItem->usage == 0))
157: // then this is bit filler
158: return false;
159: }
160: }
161:
162: /*
163: * Multi-bit Variables
164: */
165: return (((ptReportItem->dataModes & kHIDDataArrayBit) != kHIDDataArray)
166: && (ptReportItem->globals.reportSize != 1));
167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.