Source to iokit/IOKit/hidsystem/IOHIKeyboardMapper.h
/*
* Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* The contents of this file constitute Original Code as defined in and
* are subject to the Apple Public Source License Version 1.1 (the
* "License"). You may not use this file except in compliance with the
* License. Please obtain a copy of the License at
* http://www.apple.com/publicsource and read it before using this file.
*
* This Original Code and all software distributed under the License are
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
* License for the specific language governing rights and limitations
* under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#ifndef _IOHIKEYBOARDMAPPER_H
#define _IOHIKEYBOARDMAPPER_H
#include <IOKit/hidsystem/ev_keymap.h>
class IOHIKeyboard;
/*
* Key ip/down state is tracked in a bit list. Bits are set
* for key-down, and cleared for key-up. The bit vector and macros
* for it's manipulation are defined here.
*/
typedef UInt32 * kbdBitVector;
#define EVK_BITS_PER_UNIT 32
#define EVK_BITS_MASK 31
#define EVK_BITS_SHIFT 5 // 1<<5 == 32, for cheap divide
#define EVK_KEYDOWN(n, bits) \
(bits)[((n)>>EVK_BITS_SHIFT)] |= (1 << ((n) & EVK_BITS_MASK))
#define EVK_KEYUP(n, bits) \
(bits)[((n)>>EVK_BITS_SHIFT)] &= ~(1 << ((n) & EVK_BITS_MASK))
#define EVK_IS_KEYDOWN(n, bits) \
(((bits)[((n)>>EVK_BITS_SHIFT)] & (1 << ((n) & EVK_BITS_MASK))) != 0)
class IOHIKeyboardMapper : public OSObject
{
OSDeclareDefaultStructors(IOHIKeyboardMapper);
private:
IOHIKeyboard * _delegate; // KeyMap delegate
bool _mappingShouldBeFreed; // true if map can be IOFree'd
NXParsedKeyMapping _parsedMapping; // current system-wide keymap
public:
static IOHIKeyboardMapper * keyboardMapper(
IOHIKeyboard * delegate,
const UInt8 * mapping,
UInt32 mappingLength,
bool mappingShouldBeFreed );
virtual bool init(IOHIKeyboard * delegate,
const UInt8 * mapping,
UInt32 mappingLength,
bool mappingShouldBeFreed);
virtual void free();
virtual const UInt8 * mapping();
virtual UInt32 mappingLength();
virtual bool serialize(OSSerialize *s) const;
virtual void translateKeyCode(UInt8 key, bool keyDown, kbdBitVector keyBits);
private:
virtual bool parseKeyMapping(const UInt8 * mapping,
UInt32 mappingLength,
NXParsedKeyMapping * parsedMapping) const;
virtual void calcModBit(int bit, kbdBitVector keyBits);
virtual void doModCalc(int key, kbdBitVector keyBits);
virtual void doCharGen(int keyCode, bool down);
};
#endif _IOHIKEYBOARDMAPPER_H
/*
* HISTORICAL NOTE:
* The "delegate" object had to respond to the following protocol;
* this protocol has since been merged into the IOHIKeyboard class.
*
* @protocol KeyMapDelegate
*
* - keyboardEvent :(unsigned)eventType
* flags :(unsigned)flags
* keyCode :(unsigned)keyCode
* charCode:(unsigned)charCode
* charSet :(unsigned)charSet
* originalCharCode:(unsigned)origCharCode
* originalCharSet:(unsigned)origCharSet;
*
* - keyboardSpecialEvent:(unsigned)eventType
* flags :(unsigned)flags
* keyCode :(unsigned)keyCode
* specialty:(unsigned)flavor;
*
* - updateEventFlags:(unsigned)flags; // Does not generate events
*
* - (unsigned)eventFlags; // Global event flags
* - (unsigned)deviceFlags; // per-device event flags
* - setDeviceFlags:(unsigned)flags; // Set device event flags
* - (bool)alphaLock; // current alpha-lock state
* - setAlphaLock:(bool)val; // Set current alpha-lock state
* - (bool)charKeyActive; // Is a character gen. key down?
* - setCharKeyActive:(bool)val; // Note that a char gen key is down.
*
* @end
*/