xref: /haiku/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.h (revision ed24eb5ff12640d052171c6a7feba37fab8a75d1)
1 /*
2  * Copyright 2008-2011 Michael Lotz <mmlr@mlotz.ch>
3  * Distributed under the terms of the MIT license.
4  */
5 #ifndef USB_KEYBOARD_PROTOCOL_HANDLER_H
6 #define USB_KEYBOARD_PROTOCOL_HANDLER_H
7 
8 
9 #include "ProtocolHandler.h"
10 
11 #include <lock.h>
12 
13 
14 class HIDReportItem;
15 class HIDCollection;
16 
17 
18 #define MAX_MODIFIERS	16
19 #define MAX_KEYS		128
20 #define MAX_LEDS		3
21 
22 
23 class KeyboardProtocolHandler : public ProtocolHandler {
24 public:
25 								KeyboardProtocolHandler(HIDReport &inputReport,
26 									HIDReport *outputReport);
27 	virtual						~KeyboardProtocolHandler();
28 
29 	static	void				AddHandlers(HIDDevice &device,
30 									HIDCollection &collection,
31 									ProtocolHandler *&handlerList);
32 
33 	virtual	status_t			Open(uint32 flags, uint32 *cookie);
34 	virtual	status_t			Close(uint32 *cookie);
35 
36 	virtual	status_t			Control(uint32 *cookie, uint32 op, void *buffer,
37 									size_t length);
38 
39 private:
40 			void				_WriteKey(uint32 key, bool down);
41 			status_t			_SetLEDs(uint8 *data);
42 			status_t			_ReadReport(bigtime_t timeout, uint32 *cookie);
43 
44 private:
45 			mutex				fLock;
46 
47 			HIDReport &			fInputReport;
48 			HIDReport *			fOutputReport;
49 
50 			HIDReportItem *		fModifiers[MAX_MODIFIERS];
51 			HIDReportItem *		fKeys[MAX_KEYS];
52 			HIDReportItem *		fLEDs[MAX_LEDS];
53 
54 			bigtime_t			fRepeatDelay;
55 			bigtime_t			fRepeatRate;
56 			bigtime_t			fCurrentRepeatDelay;
57 			uint32				fCurrentRepeatKey;
58 
59 			uint32				fKeyCount;
60 			uint32				fModifierCount;
61 
62 			uint8				fLastModifiers;
63 			uint16 *			fCurrentKeys;
64 			uint16 *			fLastKeys;
65 
66 			int32				fHasReader;
67 			bool				fHasDebugReader;
68 };
69 
70 
71 #endif // USB_KEYBOARD_PROTOCOL_HANDLER_H
72