Chameleon

Chameleon Svn Source Tree

Root/branches/rewrite/i386/include/IOKit/hidsystem/IOHIPointing.h

Source at commit 1129 created 12 years 11 months ago.
By meklort, Change options.o so that it reloads the system config as well. Also change it so that it uses that config for variables (NOTE: if the calue exists in chameleonConfig, it's used instead.
1/*
2 * @APPLE_LICENSE_HEADER_START@
3 *
4 * Copyright (c) 1999-2009 Apple Computer, Inc. All Rights Reserved.
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#ifndef _IOHIPOINTING_H
24#define _IOHIPOINTING_H
25
26#include <IOKit/hidsystem/IOHIPointing.h>
27#include <IOKit/hidsystem/IOHIDevice.h>
28#include <IOKit/hidsystem/IOHIDTypes.h>
29
30/* Start Action Definitions */
31
32/*
33 * HISTORICAL NOTE:
34 * The following entry points were part of the IOHIPointingEvents
35 * protocol.
36 */
37typedef void (*RelativePointerEventAction)(OSObject * target,
38 /* buttons */ int buttons,
39 /* deltaX */ int dx,
40 /* deltaY */ int dy,
41 /* atTime */ AbsoluteTime ts);
42
43typedef void (*AbsolutePointerEventAction)(OSObject * target,
44 /* buttons */ int buttons,
45 /* at */ IOGPoint * newLoc,
46 /* withBounds */ IOGBounds *bounds,
47 /* inProximity */ bool proximity,
48 /* withPressure */ int pressure,
49 /* withAngle */ int stylusAngle,
50 /* atTime */ AbsoluteTime ts);
51
52typedef void (*ScrollWheelEventAction)(OSObject * target,
53 short deltaAxis1,
54 short deltaAxis2,
55 short deltaAxis3,
56 AbsoluteTime ts);
57
58/* Event Callback Definitions */
59
60typedef void (*RelativePointerEventCallback)(
61 /* target */ OSObject * target,
62 /* buttons */ int buttons,
63 /* deltaX */ int dx,
64 /* deltaY */ int dy,
65 /* atTime */ AbsoluteTime ts,
66 /* sender */ OSObject * sender,
67 /* refcon */ void * refcon);
68
69typedef void (*AbsolutePointerEventCallback)(
70 /* target */ OSObject * target,
71 /* buttons */ int buttons,
72 /* at */ IOGPoint * newLoc,
73 /* withBounds */ IOGBounds *bounds,
74 /* inProximity */ bool proximity,
75 /* withPressure */ int pressure,
76 /* withAngle */ int stylusAngle,
77 /* atTime */ AbsoluteTime ts,
78 /* sender */ OSObject * sender,
79 /* refcon */ void * refcon);
80
81typedef void (*ScrollWheelEventCallback)(
82 /* target */ OSObject * target,
83 /* delta1 */ short deltaAxis1,
84 /* delta2 */ short deltaAxis2,
85 /* delta3 */ short deltaAxis3,
86 /* fixedDelta1 */ IOFixed fixedDelta1,
87 /* fixedDelta2 */ IOFixed fixedDelta2,
88 /* fixedDelta3 */ IOFixed fixedDelta3,
89 /* pointDelta1 */ SInt32 pointDelta1,
90 /* pointDelta2 */ SInt32 pointDelta2,
91 /* pointDelta3 */ SInt32 pointDelta3,
92 /* reserved */ SInt32 options,
93 /* atTime */ AbsoluteTime ts,
94 /* sender */ OSObject * sender,
95 /* refcon */ void * refcon);
96
97/* End Action Definitions */
98
99/* Default accel level parameters */
100#define EV_DEFAULTPOINTERACCELLEVEL 0x0000b000
101#define EV_DEFAULTSCROLLACCELLEVEL 0x00005000
102
103class IOHIDPointingDevice;
104struct ScrollAccelInfo;
105
106class IOHIPointing : public IOHIDevice
107{
108 OSDeclareDefaultStructors(IOHIPointing);
109
110 friend class IOHITablet;
111 friend class IOHIDPointing;
112
113private:
114 IOLock *_deviceLock; // Lock for all device access
115 int_buttonMode; // The "handedness" of the pointer
116 IOFixed_acceleration;
117 bool_convertAbsoluteToRelative;
118 bool_contactToMove;
119 bool_hadContact;
120 IOGPoint _previousLocation;
121 UInt8_pressureThresholdToClick;// A scale factor of 0 to 255 to determine how much pressure is necessary to generate a primary mouse click - a value of 255 means no click will be generated
122 void *_scaleSegments;
123 IOItemCount_scaleSegCount;
124 IOFixed_fractX;
125 IOFixed_fractY;
126
127 OSObject * _relativePointerEventTarget;
128 RelativePointerEventAction _relativePointerEventAction;
129 OSObject * _absolutePointerEventTarget;
130 AbsolutePointerEventAction _absolutePointerEventAction;
131 OSObject * _scrollWheelEventTarget;
132 ScrollWheelEventAction _scrollWheelEventAction;
133
134 struct ExpansionData {
135 UInt32 scrollType;
136
137 ScrollAccelInfo * scrollWheelInfo;
138 ScrollAccelInfo * scrollPointerInfo;
139
140 IOFixedscrollFixedDeltaAxis1;
141 IOFixedscrollFixedDeltaAxis2;
142 IOFixedscrollFixedDeltaAxis3;
143 SInt32scrollPointDeltaAxis1;
144 SInt32scrollPointDeltaAxis2;
145 SInt32scrollPointDeltaAxis3;
146 UInt32 scrollButtonMask;
147
148 // Added to post events to the HID Manager
149 IOHIDPointingDevice* hidPointingNub;
150 IOService * openClient;
151
152 boolisSeized;
153 UInt32 accelerateMode;
154
155 UInt32 scrollZoomMask;
156 bool lastScrollWasZoom;
157 bool scrollOff;
158 };
159
160 ExpansionData * _reserved;
161
162 void setPointingMode(UInt32 accelerateMode);
163 UInt32 getPointingMode ();
164 void setScrollType(UInt32 scrollType);
165 UInt32 getScrollType();
166
167 void dispatchScrollWheelEventWithAccelInfo(
168 SInt32 deltaAxis1,
169 SInt32 deltaAxis2,
170 SInt32 deltaAxis3,
171 ScrollAccelInfo * info,
172 AbsoluteTime ts);
173
174
175protected:
176 virtual void dispatchRelativePointerEvent(int dx,
177 int dy,
178 UInt32 buttonState,
179 AbsoluteTime ts);
180
181 virtual void dispatchAbsolutePointerEvent(IOGPoint *newLoc,
182 IOGBounds *bounds,
183 UInt32buttonState,
184 boolproximity,
185 intpressure,
186 intpressureMin,
187 intpressureMax,
188 intstylusAngle,
189 AbsoluteTimets);
190
191 virtual void dispatchScrollWheelEvent(short deltaAxis1,
192 short deltaAxis2,
193 short deltaAxis3,
194 AbsoluteTime ts);
195
196public:
197 virtual bool init(OSDictionary * properties = 0);
198 virtual bool start(IOService * provider);
199 virtual void free();
200
201 virtual bool open(IOService * client,
202 IOOptionBits options,
203 RelativePointerEventAction rpeAction,
204 AbsolutePointerEventAction apeAction,
205 ScrollWheelEventAction sweAction);
206
207 bool open( IOService *client,
208 IOOptionBitsoptions,
209 void *,
210 RelativePointerEventCallbackrpeCallback,
211 AbsolutePointerEventCallbackapeCallback,
212 ScrollWheelEventCallbacksweCallback);
213
214 virtual void close(IOService * client, IOOptionBits );
215 virtual IOReturn message( UInt32 type, IOService * provider,
216 void * argument = 0 );
217
218 virtual IOHIDKind hidKind();
219 virtual bool updateProperties( void );
220 virtual IOReturn setParamProperties( OSDictionary * dict );
221 virtual IOReturn powerStateWillChangeTo( IOPMPowerFlags powerFlags,
222 unsigned long newState, IOService * device);
223 virtual IOReturn powerStateDidChangeTo( IOPMPowerFlags powerFlags,
224 unsigned long newState, IOService * device);
225
226protected: // for subclasses to implement
227 virtual OSData * copyAccelerationTable();
228 virtual IOItemCount buttonCount();
229 virtual IOFixed resolution();
230
231 // RY: Adding method to copy scroll wheel accel table.
232 // Unfortunately, we don't have any padding, so this
233 // is going to be non-virtual.
234 /*virtual*/ OSData * copyScrollAccelerationTable();
235
236private:
237 virtual bool resetPointer();
238 virtual void scalePointer(int * dxp, int * dyp);
239 virtual void setupForAcceleration(IOFixed accl);
240
241 // RY: Adding methods to support scroll wheel accel.
242 // Unfortunately, we don't have any padding, so these
243 // are going to be non-virtual.
244 /*virtual*/ bool resetScroll();
245 /*virtual*/ void setupScrollForAcceleration(IOFixed accl);
246
247 // RY: We have to make sure that subclasses that will
248 // take advantage of this have their defined resolution
249 // in their property table.
250 /*virtual*/ IOFixedscrollResolutionForType(SInt32 type=-1);
251 /*virtual*/ IOFixed scrollReportRate();
252 /*virtual*/ OSData * copyScrollAccelerationTableForType(SInt32 type=-1);
253
254private:
255 static void _relativePointerEvent( IOHIPointing * self,
256 int buttons,
257 /* deltaX */ int dx,
258 /* deltaY */ int dy,
259 /* atTime */ AbsoluteTime ts);
260
261 /* Tablet event reporting */
262 static void _absolutePointerEvent(IOHIPointing * self,
263 int buttons,
264 /* at */ IOGPoint * newLoc,
265 /* withBounds */ IOGBounds *bounds,
266 /* inProximity */ bool proximity,
267 /* withPressure */ int pressure,
268 /* withAngle */ int stylusAngle,
269 /* atTime */ AbsoluteTime ts);
270
271 /* Mouse scroll wheel event reporting */
272 static void _scrollWheelEvent(IOHIPointing *self,
273 short deltaAxis1,
274 short deltaAxis2,
275 short deltaAxis3,
276 AbsoluteTime ts);
277
278};
279
280#endif /* !_IOHIPOINTING_H */
281

Archive Download this file

Revision: 1129