1/*
2 * Copyright 2013 Stephan A��mus <superstippi@gmx.de>
3 * Copyright 2010-2011 Enrique Medina Gremaldos <quiqueiii@gmail.com>
4 * Copyright 2008-2011 Michael Lotz <mmlr@mlotz.ch>
5 * Distributed under the terms of the MIT license.
6 */
7#ifndef USB_TABLET_PROTOCOL_HANDLER_H
8#define USB_TABLET_PROTOCOL_HANDLER_H
9
10
11#include <InterfaceDefs.h>
12
13#include "ProtocolHandler.h"
14
15
16class HIDCollection;
17class HIDReportItem;
18
19
20#ifndef B_MAX_MOUSE_BUTTONS
21#	define B_MAX_MOUSE_BUTTONS		8
22#endif
23
24#ifndef B_MAX_DIGITIZER_SWITCHES
25	#define B_MAX_DIGITIZER_SWITCHES	5
26#endif
27
28class TabletProtocolHandler : public ProtocolHandler {
29public:
30								TabletProtocolHandler(HIDReport &report,
31									HIDReportItem &xAxis,
32									HIDReportItem &yAxis);
33
34	static	void				AddHandlers(HIDDevice &device,
35									HIDCollection &collection,
36									ProtocolHandler *&handlerList);
37
38	virtual	status_t			Control(uint32 *cookie, uint32 op, void *buffer,
39									size_t length);
40
41private:
42			status_t			_ReadReport(void *buffer, uint32 *cookie);
43
44			HIDReport &			fReport;
45
46			HIDReportItem &		fXAxis;
47			HIDReportItem &		fYAxis;
48			HIDReportItem *		fWheel;
49			HIDReportItem *		fButtons[B_MAX_MOUSE_BUTTONS];
50			HIDReportItem *		fSwitches[B_MAX_DIGITIZER_SWITCHES];
51
52			HIDReportItem *		fPressure;
53			HIDReportItem *		fInRange;
54			HIDReportItem *		fTip;
55			HIDReportItem *		fBarrelSwitch;
56			HIDReportItem *		fEraser;
57			HIDReportItem *		fXTilt;
58			HIDReportItem *		fYTilt;
59
60			uint32				fLastButtons;
61			uint32				fLastSwitches;
62			uint32				fClickCount;
63			bigtime_t			fLastClickTime;
64			bigtime_t			fClickSpeed;
65};
66
67#endif // USB_TABLET_PROTOCOL_HANDLER_H
68