xref: /haiku/src/add-ons/input_server/devices/wacom/DeviceReader.h (revision 29ae0e0f61022017dc3af1c46a59bc8a7259b83b)
1 /*
2  * Copyright 2005-2008 Stephan Aßmus <superstippi@gmx.de>. All rights reserved.
3  * Distributed under the terms of the MIT license.
4  */
5 #ifndef USB_DEVICE_MONITOR_H
6 #define USB_DEVICE_MONITOR_H
7 
8 
9 // This class is designed to work with the generic USB input device driver
10 // the driver creates an entry in /dev/input/???
11 // clients can open and read from the device file, the driver will than
12 // block on waiting for an interrupt transfer (timeout is 500 ms) and write
13 // the received data to the supplied buffer. In front of the buffer, it will
14 // write vendorID, productID and maxPacketSize, so you can read from the file
15 // with a buffer of just enough size to contain these fields, in this case, no
16 // interrupt transfer will be triggered, and the client can then configure itself
17 // with a more appropriate setup.
18 
19 #include <SupportDefs.h>
20 
21 class BFile;
22 class BString;
23 
24 class DeviceReader {
25  public:
26 								DeviceReader();
27 	virtual						~DeviceReader();
28 
29 								// initializes the object
30 								// by trying to read from the supplied device file
31 								// on success (B_OK), all member variables will be set
32 								// and the object is ready for operation
33 								// on failure, a hopefully meaningful error is returned
34 	virtual	status_t			SetTo(const char* path);
35 
36 	virtual	status_t			InitCheck() const;
37 
38 			const char*			DevicePath() const;
39 			BFile*				DeviceFile() const;
40 
41 			// query the device for information
42 			uint16				VendorID() const;
43 			uint16				ProductID() const;
44 
45 			size_t				MaxPacketSize() const;
46 
47 			// trigger an interrupt transfer and write the data in the buffer
48 			// it should be save to call this function with
49 			// size != MaxPacketSize, remaining bytes will be zero'd out
50 			ssize_t				ReadData(uint8* data,
51 									const size_t size) const;
52 
53  protected:
54 			void				_Unset();
55 
56 			char*				fDevicePath;
57 			BFile*				fDeviceFile;
58 
59 			uint16				fVendorID;
60 			uint16				fProductID;
61 			size_t				fMaxPacketSize;
62 };
63 #endif // USB_DEVICE_MONITOR_H
64