#ifndef _IOKIT_HID_IOHIDKEYBOARD_H
#define _IOKIT_HID_IOHIDKEYBOARD_H
#include <IOKit/hidsystem/IOHIDTypes.h>
#include <IOKit/hidsystem/IOHIKeyboard.h>
#include "IOHIDDevice.h"
enum {
kUSB_LEFT_CONTROL_BIT = 0x01,
kUSB_LEFT_SHIFT_BIT = 0x02,
kUSB_LEFT_ALT_BIT = 0x04,
kUSB_LEFT_FLOWER_BIT = 0x08,
kUSB_RIGHT_CONTROL_BIT = 0x10,
kUSB_RIGHT_SHIFT_BIT = 0x20,
kUSB_RIGHT_ALT_BIT = 0x040,
kUSB_RIGHT_FLOWER_BIT = 0x80
};
enum {
kUSB_LOWSPEED_MAXPACKET = 8,
kUSB_CAPSLOCKLED_SET = 2,
kUSB_NUMLOCKLED_SET = 1
};
enum {
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
};
#define ADB_CONVERTER_LEN 0xff + 1 //length of array def_usb_2_adb_keymap[]
class IOHIDKeyboard : public IOHIKeyboard
{
OSDeclareDefaultStructors(IOHIDKeyboard)
IOHIDDevice * _provider;
UInt16 _productID;
UInt16 _vendorID;
IOHIDElementCookie _ledCookies[2];
UInt32 * _ledValuePtrs[2];
UInt8 _numLeds;
UInt8 _ledState;
thread_call_t _asyncLEDThread;
UInt32 * _modifierValuePtrs[8];
UInt8 _oldmodifier;
bool _flower_key; bool _control_key;
UInt32 * _keyCodeArrayValuePtr;
UInt32 _keyCodeArrayElementBitSize;
UInt32 _keyCodeArrayElementCount;
UInt32 * _oldArraySelectors;
UInt8 _usb_2_adb_keymap[ADB_CONVERTER_LEN + 1];
void Set_LED_States(UInt8);
UInt32 handlerID();
bool findDesiredElements(OSArray *elements);
static void AsyncLED (OSObject *target);
public:
static IOHIDKeyboard * Keyboard(OSArray *elements);
virtual bool init(OSDictionary * properties = 0);
virtual bool start(IOService * provider);
virtual void stop(IOService * provider);
virtual void free();
virtual void handleReport();
UInt32 interfaceID();
UInt32 deviceType();
UInt32 maxKeyCodes();
const unsigned char * defaultKeymapOfLength(UInt32 * length);
void setAlphaLockFeedback(bool LED_state);
void setNumLockFeedback(bool LED_state);
bool doesKeyLock(unsigned key);
unsigned getLEDStatus();
};
#endif