2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
22 /* Copyright (c) 1992 NeXT Computer, Inc. All rights reserved.
24 * EventSrcPCKeyboard.h - PC Keyboard EventSrc subclass definition
27 * 28 Aug 1992 Joe Pasqua
31 #ifndef _IOHIKEYBOARD_H
32 #define _IOHIKEYBOARD_H
34 #include <IOKit/hidsystem/IOHIDevice.h>
35 #include <IOKit/hidsystem/IOHIKeyboardMapper.h>
37 /* Start Action Definitions */
41 * The following entry points were part of the IOHIKeyboardEvents
45 typedef void (*KeyboardEventAction
)( OSObject
* target
,
46 /* eventFlags */ unsigned eventType
,
47 /* flags */ unsigned flags
,
48 /* keyCode */ unsigned key
,
49 /* charCode */ unsigned charCode
,
50 /* charSet */ unsigned charSet
,
51 /* originalCharCode */ unsigned origCharCode
,
52 /* originalCharSet */ unsigned origCharSet
,
53 /* keyboardType */ unsigned keyboardType
,
54 /* repeat */ bool repeat
,
55 /* atTime */ AbsoluteTime ts
);
57 typedef void (*KeyboardSpecialEventAction
)(OSObject
* target
,
58 /* eventType */ unsigned eventType
,
59 /* flags */ unsigned flags
,
60 /* keyCode */ unsigned key
,
61 /* specialty */ unsigned flavor
,
62 /* source id */ UInt64 guid
,
63 /* repeat */ bool repeat
,
64 /* atTime */ AbsoluteTime ts
);
66 typedef void (*UpdateEventFlagsAction
)( OSObject
* target
,
67 /* flags */ unsigned flags
);
69 /* End Action Definitions */
73 /* Default key repeat parameters */
74 #define EV_DEFAULTINITIALREPEAT 500000000ULL // 1/2 sec in nanoseconds
75 #define EV_DEFAULTKEYREPEAT 83333333ULL // 1/12 sec in nanoseconds
76 #define EV_MINKEYREPEAT 16700000ULL // 1/60 sec
78 class IOHIKeyboard
: public IOHIDevice
80 OSDeclareDefaultStructors(IOHIKeyboard
);
83 IOLock
* _deviceLock
; // Lock for all device access
84 IOHIKeyboardMapper
* _keyMap
; // KeyMap instance
86 // The following fields describe the kind of keyboard
87 UInt32 _interfaceType
;
90 // The following fields describe the state of the keyboard
91 UInt32
* _keyState
; // kbdBitVector
92 IOByteCount _keyStateSize
; // kbdBitVector allocated size
93 unsigned _eventFlags
; // Current eventFlags
94 bool _alphaLock
; // true means alpha lock is on
95 bool _numLock
; // true means num lock is on
96 bool _charKeyActive
; // true means char gen. key active
98 // The following fields are used in performing key repeats
99 bool _isRepeat
; // true means we're generating repeat
100 unsigned _codeToRepeat
; // What we are repeating
101 bool _calloutPending
; // true means we've sched. a callout
102 AbsoluteTime _lastEventTime
; // Time last event was dispatched
103 AbsoluteTime _downRepeatTime
; // Time when we should next repeat
104 AbsoluteTime _keyRepeat
; // Delay between key repeats
105 AbsoluteTime _initialKeyRepeat
; // Delay before initial key repeat
108 OSObject
* _keyboardEventTarget
;
109 KeyboardEventAction _keyboardEventAction
;
110 OSObject
* _keyboardSpecialEventTarget
;
111 KeyboardSpecialEventAction _keyboardSpecialEventAction
;
112 OSObject
* _updateEventFlagsTarget
;
113 UpdateEventFlagsAction _updateEventFlagsAction
;
116 virtual void dispatchKeyboardEvent(unsigned int keyCode
,
117 /* direction */ bool goingDown
,
118 /* timeStamp */ AbsoluteTime time
);
121 virtual bool init(OSDictionary
* properties
= 0);
122 virtual bool start(IOService
* provider
);
125 virtual bool open(IOService
* client
,
126 IOOptionBits options
,
127 KeyboardEventAction keAction
,
128 KeyboardSpecialEventAction kseAction
,
129 UpdateEventFlagsAction uefAction
);
130 virtual void close(IOService
* client
, IOOptionBits
);
132 virtual IOHIDKind
hidKind();
133 virtual bool updateProperties( void );
134 virtual IOReturn
setParamProperties(OSDictionary
* dict
);
136 protected: // for subclasses to implement
137 virtual const unsigned char * defaultKeymapOfLength(UInt32
* length
);
138 virtual void setAlphaLockFeedback(bool val
);
139 virtual void setNumLockFeedback(bool val
);
140 virtual UInt32
maxKeyCodes();
144 virtual bool resetKeyboard();
145 virtual void scheduleAutoRepeat();
146 static void _autoRepeat(void * arg
, void *);
147 virtual void autoRepeat();
148 virtual void setRepeat(unsigned eventType
, unsigned keyCode
);
152 * The following methods were part of the KeyMapDelegate protocol;
153 * the declarations have now been merged directly into this class.
157 virtual void keyboardEvent(unsigned eventType
,
158 /* flags */ unsigned flags
,
159 /* keyCode */ unsigned keyCode
,
160 /* charCode */ unsigned charCode
,
161 /* charSet */ unsigned charSet
,
162 /* originalCharCode */ unsigned origCharCode
,
163 /* originalCharSet */ unsigned origCharSet
);
165 virtual void keyboardSpecialEvent(unsigned eventType
,
166 /* flags */ unsigned flags
,
167 /* keyCode */ unsigned keyCode
,
168 /* specialty */ unsigned flavor
);
170 virtual void updateEventFlags(unsigned flags
); // Does not generate events
172 virtual unsigned eventFlags(); // Global event flags
173 virtual unsigned deviceFlags(); // per-device event flags
174 virtual void setDeviceFlags(unsigned flags
); // Set device event flags
175 virtual bool alphaLock(); // current alpha-lock state
176 virtual void setAlphaLock(bool val
); // Set current alpha-lock state
177 virtual bool numLock();
178 virtual void setNumLock(bool val
);
179 virtual bool charKeyActive(); // Is a character gen. key down?
180 virtual void setCharKeyActive(bool val
); // Note that a char gen key is down.
181 virtual bool doesKeyLock(unsigned key
); //does key lock physically
182 virtual unsigned getLEDStatus(); //check hardware for LED status
187 #endif /* !_IOHIKEYBOARD_H */