xref: /haiku/src/add-ons/kernel/drivers/input/hid_shared/JoystickProtocolHandler.h (revision abba71575e34f84c3d75be9d29d6e6caa6c033db)
1 /*
2  * Copyright 2008-2011 Michael Lotz <mmlr@mlotz.ch>
3  * Distributed under the terms of the MIT license.
4  */
5 #ifndef USB_JOYSTICK_PROTOCOL_HANDLER_H
6 #define USB_JOYSTICK_PROTOCOL_HANDLER_H
7 
8 
9 #include <InterfaceDefs.h>
10 
11 #include "ProtocolHandler.h"
12 
13 #include <joystick_driver.h>
14 #include <lock.h>
15 
16 
17 class HIDCollection;
18 class HIDReportItem;
19 
20 
21 class JoystickProtocolHandler : public ProtocolHandler {
22 public:
23 									JoystickProtocolHandler(HIDReport &report);
24 	virtual							~JoystickProtocolHandler();
25 
26 	static	void					AddHandlers(HIDDevice &device,
27 										HIDCollection &collection,
28 										ProtocolHandler *&handlerList);
29 
30 	virtual	status_t				Open(uint32 flags, uint32 *cookie);
31 	virtual	status_t				Close(uint32 *cookie);
32 
33 	virtual	status_t				Read(uint32 *cookie, off_t position,
34 										void *buffer, size_t *numBytes);
35 	virtual	status_t				Write(uint32 *cookie, off_t position,
36 										const void *buffer, size_t *numBytes);
37 
38 	virtual	status_t				Control(uint32 *cookie, uint32 op,
39 										void *buffer, size_t length);
40 
41 private:
42 	static	int32					_UpdateThread(void *data);
43 			status_t				_Update();
44 
45 			HIDReport &				fReport;
46 
47 			uint32					fAxisCount;
48 			HIDReportItem **		fAxis;
49 			uint32					fHatCount;
50 			HIDReportItem **		fHats;
51 			uint32					fButtonCount;
52 			uint32					fMaxButton;
53 			HIDReportItem **		fButtons;
54 
55 			joystick_module_info 	fJoystickModuleInfo;
56 			variable_joystick		fCurrentValues;
57 
58 			uint32					fOpenCount;
59 			mutex					fUpdateLock;
60 			thread_id				fUpdateThread;
61 };
62 
63 #endif // USB_JOYSTICK_PROTOCOL_HANDLER_H
64