|
|
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: HIDScaleUsageValue.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: * HIDScaleUsageValueIn
54: *
55: * Input:
56: * ptReportItem - The ReportItem in which the data resides
57: * iValue - The unscaled data
58: * piScaledValue - The scaled value
59: * Output:
60: * piScaledValue - The scaled value
61: * Returns:
62: * kHIDSuccess
63: *
64: *------------------------------------------------------------------------------
65: */
66: OSStatus HIDScaleUsageValueIn (HIDReportItem *ptReportItem, UInt32 iValue, SInt32 *piScaledValue)
67: {
68: long int lData;
69: long int lDeltaL;
70: long int lDeltaP;
71: long int lL, lP;
72: long int lScaledData;
73: long int lLMin, lLMax;
74: /*
75: * Disallow Null Pointers
76: */
77: if ((ptReportItem == NULL) || (piScaledValue == NULL))
78: return kHIDNullPointerErr;
79: /*
80: * Convert the data to Long Integer
81: */
82: lData = iValue;
83: /*
84: * range check the Logical Value
85: */
86: lLMax = ptReportItem->globals.logicalMaximum;
87: lLMin = ptReportItem->globals.logicalMinimum;
88: if ((lData < lLMin) || (lData > lLMax))
89: {
90: if ((ptReportItem->dataModes & kHIDDataNullStateBit) == kHIDDataNullState)
91: return kHIDNullStateErr;
92: return kHIDValueOutOfRangeErr;
93: }
94: /*
95: * (PhysicalValue - PhysicalMinimum)/(PhysicalMaximum - PhysicalMinimum)
96: * = (LogicalValue - LogicalMinimum)/(LogicalMaximum - LogicalMinimum)
97: *
98: * Calculate the ranges
99: * Zero ranges are invalid!
100: * lDeltaL = (LogicalMaximum - LogicalMinimum)
101: * lDeltaP = (PhysicalMaximum - PhysicalMinimum)
102: */
103: lDeltaL = lLMax - lLMin;
104: lDeltaP = ptReportItem->globals.physicalMaximum - ptReportItem->globals.physicalMinimum;
105: if ((lDeltaL == 0) || (lDeltaP == 0))
106: return kHIDBadLogPhysValuesErr;
107: /*
108: * (PhysicalValue - PhysicalMinimum)/lDeltaP
109: * = (LogicalValue - LogicalMinimum)/lDeltaL
110: * lL = (LogicalValue - LogicalMinimum)
111: */
112: lL = lData - ptReportItem->globals.logicalMinimum;
113: /*
114: * (PhysicalValue - PhysicalMinimum)/lDeltaP = lL/lDeltaL
115: * (PhysicalValue - PhysicalMinimum) = (lDeltaP * lL)/lDeltaL
116: * lP = (PhysicalValue - PhysicalMinimum) = (lDeltaP * lL)/lDeltaL
117: */
118: lP = (lL* lDeltaP)/lDeltaL;
119: /*
120: * lP = (PhysicalValue - PhysicalMinimum)
121: * PhysicalValue = lP + PhysicalMinimum;
122: */
123: lScaledData = lP + ptReportItem->globals.physicalMinimum;
124: *piScaledValue = (int) lScaledData;
125: return kHIDSuccess;
126: }
127:
128: /*
129: *------------------------------------------------------------------------------
130: *
131: * HIDScaleUsageValueOut
132: *
133: * Input:
134: * ptReportItem - The ReportItem in which the data will go
135: * iValue - The unscaled data
136: * piScaledValue - The scaled value
137: * Output:
138: * piScaledValue - The scaled value
139: * Returns:
140: * kHIDSuccess
141: *
142: *------------------------------------------------------------------------------
143: */
144: OSStatus HIDScaleUsageValueOut (HIDReportItem *ptReportItem, UInt32 iValue, SInt32 *piScaledValue)
145: {
146: long int lData;
147: long int lDeltaL;
148: long int lDeltaP;
149: long int lL, lP;
150: long int lPMax, lPMin;
151: /*
152: * Convert the data to Long Integer
153: */
154: lData = iValue;
155: /*
156: * range check the Logical Value
157: */
158: lPMax = ptReportItem->globals.physicalMaximum;
159: lPMin = ptReportItem->globals.physicalMinimum;
160: if ((lData < lPMin) || (lData > lPMax))
161: {
162: if ((ptReportItem->dataModes & kHIDDataNullStateBit) == kHIDDataNullState)
163: return kHIDNullStateErr;
164: return kHIDValueOutOfRangeErr;
165: }
166: /*
167: * (PhysicalValue - PhysicalMinimum)/(PhysicalMaximum - PhysicalMinimum)
168: * = (LogicalValue - LogicalMinimum)/(LogicalMaximum - LogicalMinimum)
169: *
170: * Calculate the ranges
171: * Zero ranges are invalid!
172: * lDeltaL = (LogicalMaximum - LogicalMinimum)
173: * lDeltaP = (PhysicalMaximum - PhysicalMinimum)
174: */
175: lDeltaL = ptReportItem->globals.logicalMaximum - ptReportItem->globals.logicalMinimum;
176: lDeltaP = ptReportItem->globals.physicalMaximum - ptReportItem->globals.physicalMinimum;
177: if ((lDeltaL == 0) || (lDeltaP == 0))
178: return kHIDBadLogPhysValuesErr;
179: /*
180: * (PhysicalValue - PhysicalMinimum)/lDeltaP
181: * = (LogicalValue - LogicalMinimum)/lDeltaL
182: * lP = (PhysicalValue - PhysicalMinimum)
183: */
184: lP = lData - ptReportItem->globals.physicalMinimum;
185: /*
186: * (LogicalValue - LogicalMinimum)/lDeltaL = lP/lDeltaP
187: * (LogicalValue - LogicalMinimum)/lDeltaL = (lDeltaL * lP)/lDeltaP
188: * lL = (LogicalValue - LogicalMinimum) = (lDeltaL * lP)/lDeltaP
189: */
190: lL = (lP* lDeltaL)/lDeltaP;
191: /*
192: * lL = (LogicalValue - LogicalMinimum)
193: * LogicalValue = lL + LogicalMinimum;
194: */
195: lData = lL + ptReportItem->globals.logicalMinimum;
196: *piScaledValue = (int) lData;
197: return kHIDSuccess;
198: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.