input: add infrastructure for an input subsystem
[platform/upstream/kmscon.git] / src / input.h
1 /*
2  * kmscon - udev input hotplug and evdev handling
3  *
4  * Copyright (c) 2011 Ran Benita <ran234@gmail.com>
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining
7  * a copy of this software and associated documentation files
8  * (the "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sublicense, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24  */
25
26 /*
27  * This module provides an input object which can deliver all useful input
28  * events to the program.
29  *
30  * Its use should be as simple as the following (but also see below):
31  * - Create a new input object.
32  * - Provide a callback function to receive the events.
33  * - Connect the input object to a kmscon_eloop.
34  * - Wake up the input object to begin receiving input events through the
35  *   event loop.
36  *
37  * A few things to note:
38  * - This module uses evdev for input, and reads from input devices directly.
39  *   This requires root privileges; waking up the input object will fail
40  *   without them.
41  * - evdev  has no inhert notion of "focus" like tty input. In other words,
42  *   it will deliver input events whether they are intended for the program
43  *   or not. This may also pose a security risk. Therefore, make sure to put
44  *   the object to sleep when the program is not active, for example by
45  *   reacting to VT changes.
46  */
47
48 #include <inttypes.h>
49 #include <stdbool.h>
50
51 #include "eloop.h"
52
53 struct kmscon_input;
54 struct kmscon_input_device;
55 typedef void (*kmscon_input_cb) (uint16_t type, uint16_t code, int32_t value);
56
57 int kmscon_input_new(struct kmscon_input **out, kmscon_input_cb cb);
58 void kmscon_input_ref(struct kmscon_input *input);
59 void kmscon_input_unref(struct kmscon_input *input);
60
61 int kmscon_input_connect_eloop(struct kmscon_input *input, struct kmscon_eloop *loop);
62 void kmscon_input_disconnect_eloop(struct kmscon_input *input);
63
64 void kmscon_input_sleep(struct kmscon_input *input);
65 void kmscon_input_wake_up(struct kmscon_input *input);
66 bool kmscon_input_is_asleep(struct kmscon_input *input);