#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"
#include "IOHIDFamilyPrivate.h"
enum {
kUSB_CAPSLOCKLED_SET = 2,
kUSB_NUMLOCKLED_SET = 1
};
#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;
bool _resyncLED;
UInt8 _ledState;
thread_call_t _asyncLEDThread;
unsigned int _usb_2_adb_keymap[ADB_CONVERTER_LEN + 1];
unsigned int _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