/* * Copyright 2008-2011 Michael Lotz * Distributed under the terms of the MIT license. */ #ifndef USB_KEYBOARD_PROTOCOL_HANDLER_H #define USB_KEYBOARD_PROTOCOL_HANDLER_H #include "ProtocolHandler.h" #include class HIDReportItem; class HIDCollection; #define MAX_MODIFIERS 16 #define MAX_KEYS 128 #define MAX_LEDS 3 class KeyboardProtocolHandler : public ProtocolHandler { public: KeyboardProtocolHandler(HIDReport &inputReport, HIDReport *outputReport); virtual ~KeyboardProtocolHandler(); static void AddHandlers(HIDDevice &device, HIDCollection &collection, ProtocolHandler *&handlerList); virtual status_t Open(uint32 flags, uint32 *cookie); virtual status_t Close(uint32 *cookie); virtual status_t Control(uint32 *cookie, uint32 op, void *buffer, size_t length); private: void _WriteKey(uint32 key, bool down); status_t _SetLEDs(uint8 *data); status_t _ReadReport(bigtime_t timeout, uint32 *cookie); private: mutex fLock; HIDReport & fInputReport; HIDReport * fOutputReport; HIDReportItem * fModifiers[MAX_MODIFIERS]; HIDReportItem * fKeys[MAX_KEYS]; HIDReportItem * fLEDs[MAX_LEDS]; bigtime_t fRepeatDelay; bigtime_t fRepeatRate; bigtime_t fCurrentRepeatDelay; uint32 fCurrentRepeatKey; uint32 fKeyCount; uint32 fModifierCount; uint8 fLastModifiers; uint16 * fCurrentKeys; uint16 * fLastKeys; int32 fHasReader; bool fHasDebugReader; }; #endif // USB_KEYBOARD_PROTOCOL_HANDLER_H