1/*
2 * Copyright 2008, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 */
6#ifndef _INPUT_H
7#define _INPUT_H
8
9
10#include <Messenger.h>
11
12
13enum input_method_op {
14	B_INPUT_METHOD_STARTED			= 0,
15	B_INPUT_METHOD_STOPPED			= 1,
16	B_INPUT_METHOD_CHANGED			= 2,
17	B_INPUT_METHOD_LOCATION_REQUEST	= 3
18};
19
20
21enum input_device_type {
22	B_POINTING_DEVICE	= 0,
23	B_KEYBOARD_DEVICE	= 1,
24	B_UNDEFINED_DEVICE	= 2
25};
26
27
28enum input_device_notification {
29	B_INPUT_DEVICE_ADDED	= 0x0001,
30	B_INPUT_DEVICE_STARTED	= 0x0002,
31	B_INPUT_DEVICE_STOPPED	= 0x0004,
32	B_INPUT_DEVICE_REMOVED	= 0x0008
33};
34
35
36class BInputDevice;
37class BList;
38
39BInputDevice*	find_input_device(const char* name);
40status_t		get_input_devices(BList* list);
41status_t		watch_input_devices(BMessenger target, bool start);
42
43
44class BInputDevice {
45public:
46								~BInputDevice();
47
48			const char*			Name() const;
49			input_device_type	Type() const;
50			bool				IsRunning() const;
51
52			status_t			Start();
53			status_t			Stop();
54			status_t			Control(uint32 code, BMessage* message);
55
56	static	status_t			Start(input_device_type type);
57	static	status_t			Stop(input_device_type type);
58	static	status_t			Control(input_device_type type, uint32 code,
59									BMessage* message);
60
61private:
62	friend BInputDevice* find_input_device(const char* name);
63	friend status_t get_input_devices(BList* list);
64
65								BInputDevice();
66			void				_SetNameAndType(const char* name,
67									input_device_type type);
68
69			char*				fName;
70			input_device_type	fType;
71			uint32				_reserved[4];
72};
73
74#endif	// _INPUT_H
75