1/*
2 * Copyright 2008-2011 Michael Lotz <mmlr@mlotz.ch>
3 * Distributed under the terms of the MIT license.
4 */
5#ifndef USB_MOUSE_PROTOCOL_HANDLER_H
6#define USB_MOUSE_PROTOCOL_HANDLER_H
7
8
9#include <InterfaceDefs.h>
10
11#include "ProtocolHandler.h"
12
13
14class HIDCollection;
15class HIDReportItem;
16
17
18#ifndef B_MAX_MOUSE_BUTTONS
19#	define B_MAX_MOUSE_BUTTONS		8
20#endif
21
22
23class MouseProtocolHandler : public ProtocolHandler {
24public:
25								MouseProtocolHandler(HIDReport &report,
26									HIDReportItem &xAxis,
27									HIDReportItem &yAxis);
28
29	static	void				AddHandlers(HIDDevice &device,
30									HIDCollection &collection,
31									ProtocolHandler *&handlerList);
32
33	virtual	status_t			Control(uint32 *cookie, uint32 op, void *buffer,
34									size_t length);
35
36private:
37			status_t			_ReadReport(void *buffer, uint32 *cookie);
38
39			HIDReport &			fReport;
40
41			HIDReportItem &		fXAxis;
42			HIDReportItem &		fYAxis;
43			HIDReportItem *		fWheel;
44			HIDReportItem *		fHorizontalPan;
45			HIDReportItem *		fButtons[B_MAX_MOUSE_BUTTONS];
46
47			uint32				fLastButtons;
48			uint32				fClickCount;
49			bigtime_t			fLastClickTime;
50			bigtime_t			fClickSpeed;
51};
52
53#endif // USB_MOUSE_PROTOCOL_HANDLER_H
54