xref: /haiku/src/add-ons/kernel/drivers/input/usb_hid/HIDDevice.h (revision 002f37b0cca92e4cf72857c72ac95db5a8b09615)
1 /*
2  * Copyright 2008-2011, Michael Lotz <mmlr@mlotz.ch>
3  * Distributed under the terms of the MIT license.
4  */
5 #ifndef USB_HID_DEVICE_H
6 #define USB_HID_DEVICE_H
7 
8 
9 #include "HIDParser.h"
10 
11 #include <USB3.h>
12 
13 
14 class ProtocolHandler;
15 
16 
17 class HIDDevice {
18 public:
19 								HIDDevice(usb_device device,
20 									const usb_configuration_info *config,
21 									size_t interfaceIndex, int32 quirkyIndex);
22 								~HIDDevice();
23 
24 			void				SetParentCookie(int32 cookie);
25 			int32				ParentCookie() const { return fParentCookie; }
26 
27 			status_t			InitCheck() const { return fStatus; }
28 
29 			bool				IsOpen() const { return fOpenCount > 0; }
30 			status_t			Open(ProtocolHandler *handler, uint32 flags);
31 			status_t			Close(ProtocolHandler *handler);
32 			int32				OpenCount() const { return fOpenCount; }
33 
34 			void				Removed();
35 			bool				IsRemoved() const { return fRemoved; }
36 
37 			status_t			MaybeScheduleTransfer();
38 
39 			status_t			SendReport(HIDReport *report);
40 
41 			HIDParser &			Parser() { return fParser; }
42 			ProtocolHandler *	ProtocolHandlerAt(uint32 index) const;
43 
44 			// only to be used for the kernel debugger information
45 			usb_pipe			InterruptPipe() const { return fInterruptPipe; }
46 
47 private:
48 	static	void				_TransferCallback(void *cookie,
49 									status_t status, void *data,
50 									size_t actualLength);
51 
52 private:
53 			status_t			fStatus;
54 			usb_device			fDevice;
55 			usb_pipe			fInterruptPipe;
56 			size_t				fInterfaceIndex;
57 
58 			int32				fTransferScheduled;
59 			size_t				fTransferBufferSize;
60 			uint8 *				fTransferBuffer;
61 
62 			int32				fParentCookie;
63 			int32				fOpenCount;
64 			bool				fRemoved;
65 
66 			HIDParser			fParser;
67 
68 			uint32				fProtocolHandlerCount;
69 			ProtocolHandler *	fProtocolHandlerList;
70 };
71 
72 
73 #endif // USB_HID_DEVICE_H
74