#ifndef _IOKIT_HID_IOHIDKEYBOARD_H
#define _IOKIT_HID_IOHIDKEYBOARD_H
#include <IOKit/hidsystem/IOHIDTypes.h>
#include "IOHIKeyboard.h"
#include "IOHIDDevice.h"
#include "IOHIDConsumer.h"
#include "IOHIDElement.h"
#include "IOHIDEventService.h"
enum {
kUSB_CAPSLOCKLED_SET = 2,
kUSB_NUMLOCKLED_SET = 1
};
enum {
kgestUSBUnknownANSIkd = 3,
kgestUSBGenericANSIkd = 40,
kgestUSBGenericISOkd = 41,
kgestUSBGenericJISkd = 42,
kgestUSBCosmoANSIKbd = 198,
kprodUSBCosmoANSIKbd = 0x201, kgestUSBCosmoISOKbd = 199,
kprodUSBCosmoISOKbd = 0x202,
kgestUSBCosmoJISKbd = 200,
kprodUSBCosmoJISKbd = 0x203,
kgestUSBAndyANSIKbd = 204,
kprodUSBAndyANSIKbd = 0x204,
kgestUSBAndyISOKbd = 205,
kprodUSBAndyISOKbd = 0x205,
kgestUSBAndyJISKbd = 206,
kprodUSBAndyJISKbd = 0x206,
kgestQ6ANSIKbd = 31,
kprodQ6ANSIKbd = 0x208,
kgestQ6ISOKbd = 32,
kprodQ6ISOKbd = 0x209,
kgestQ6JISKbd = 33,
kprodQ6JISKbd = 0x20a,
kgestQ30ANSIKbd = 34,
kprodQ30ANSIKbd = 0x20b,
kgestQ30ISOKbd = 35,
kprodQ30ISOKbd = 0x20c,
kgestQ30JISKbd = 36,
kprodQ30JISKbd = 0x20d,
kgestFountainANSIKbd = 37,
kprodFountainANSIKbd = 0x20e,
kgestFountainISOKbd = 38,
kprodFountainISOKbd = 0x20f,
kgestFountainJISKbd = 39,
kprodFountainJISKbd = 0x210,
kgestSantaANSIKbd = 37,
kprodSantaANSIKbd = 0x211,
kgestSantaISOKbd = 38,
kprodSantaISOKbd = 0x212,
kgestSantaJISKbd = 39,
kprodSantaJISKbd = 0x213,
kgestM89ISOKbd = 47,
kgestM90ISOKbd = 44,
};
enum {
kSecondaryKeyFnSpecial = 0x01,
kSecondaryKeyFnNonSpecial = 0x02,
kSecondaryKeyNumPad = 0x04
};
typedef struct _SecondaryKey {
UInt8 bits;
UInt8 swapping;
UInt8 specialKey;
UInt8 fnUsage;
UInt8 numPadUsage;
} SecondaryKey;
#define ADB_CONVERTER_LEN 0xff + 1 //length of array def_usb_2_adb_keymap[]
#define APPLE_ADB_CONVERTER_LEN 0xff + 1 //length of array def_usb_apple_2_adb_keymap[]
class IOHIDKeyboard : public IOHIKeyboard
{
OSDeclareDefaultStructors(IOHIDKeyboard)
IOHIDEventService * _provider;
bool _repeat;
UInt8 _ledState;
thread_call_t _asyncLEDThread;
UInt8 _usb_2_adb_keymap[ADB_CONVERTER_LEN + 1];
UInt8 _usb_apple_2_adb_keymap[APPLE_ADB_CONVERTER_LEN + 1];
bool _containsFKey;
bool _isDispatcher;
void Set_LED_States(UInt8);
UInt32 handlerID();
static void _asyncLED (OSObject *target);
public:
static IOHIDKeyboard * Keyboard(UInt32 supportedModifiers, bool isDispatcher = false);
virtual bool init(OSDictionary * properties = 0);
virtual bool start(IOService * provider);
virtual void stop(IOService * provider);
virtual void free();
inline bool isDispatcher() { return _isDispatcher;};
UInt32 interfaceID();
UInt32 deviceType();
const unsigned char * defaultKeymapOfLength(UInt32 * length);
void setAlphaLockFeedback(bool LED_state);
void setNumLockFeedback(bool LED_state);
unsigned getLEDStatus();
IOReturn setParamProperties( OSDictionary * dict );
void dispatchKeyboardEvent(
AbsoluteTime timeStamp,
UInt32 usagePage,
UInt32 usage,
bool keyDown,
IOOptionBits options = 0);
};
#endif