• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# libevdev - wrapper library for evdev input devices
2
3libevdev is a wrapper library for evdev devices. it moves the common tasks when dealing with evdev devices into a library and provides a library interface to the callers, thus avoiding erroneous ioctls, etc.
4
5The eventual goal is that libevdev wraps all ioctls available to evdev devices, thus making direct access unnecessary.
6
7
8## Directory structure
9
10```
11README.md                   English description
12README_zh.md                Chinese description
13export_include/libevdev/    API Definition
14include/                    Reference header file
15libevdev/                   Encapsulation layer implementation
16README.OpenSource           Open Source Description
17```
18
19## How OpenHarmony integrates libevdev
20### 1.Header file import
21```c
22#define EVDEV_H
23#include <libevdev/libevdev.h>
24```
25### 2.BUILD.gn add Reference
26```c
27public_deps += ["//third_party/libevdev:libevdev"]
28```
29### 3.Example of calling libevdev function
30```c
31// Below is a simple example that shows how libevdev could be used. This example opens a device, checks for relative axes and a left mouse button and if it finds them monitors the device to print the event.
32
33// open a device
34struct libevdev *dev = NULL;
35int fd;
36int rc = 1;
37
38fd = open("/dev/input/event0", O_RDONLY|O_NONBLOCK);
39rc = libevdev_new_from_fd(fd, &dev);
40if (rc < 0) {
41        fprintf(stderr, "Failed to init libevdev (%s)\n", strerror(-rc));
42        exit(1);
43}
44// print the device info
45printf("Input device name: \"%s\"\n", libevdev_get_name(dev));
46printf("Input device ID: bus %#x vendor %#x product %#x\n",
47       libevdev_get_id_bustype(dev),
48       libevdev_get_id_vendor(dev),
49       libevdev_get_id_product(dev));
50// hecks for relative axes and a left mouse button
51if (!libevdev_has_event_type(dev, EV_REL) ||
52    !libevdev_has_event_code(dev, EV_KEY, BTN_LEFT)) {
53        printf("This device does not look like a mouse\n");
54        exit(1);
55}
56
57 // monitors the device to print the event
58do {
59        struct input_event ev;
60        rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev);
61        if (rc == 0)
62                printf("Event: %s %s %d\n",
63                       libevdev_event_type_get_name(ev.type),
64                       libevdev_event_code_get_name(ev.type, ev.code),
65                       ev.value);
66} while (rc == 1 || rc == 0 || rc == -EAGAIN);
67```
68
69## libevdev Working with documents
70
71Code gitlab https://gitlab.freedesktop.org/libevdev/libevdev.git
72
73Official API Document  http://www.freedesktop.org/software/libevdev/doc/latest/
74
75Detailed API definition https://www.freedesktop.org/software/libevdev/doc/latest/libevdev_8h.html
76
77Patches https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/
78
79Bugs https://gitlab.freedesktop.org/libevdev/libevdev/issues/
80
81Questions http://lists.freedesktop.org/mailman/listinfo/input-tools
82
83
84## License
85
86See [LICENSE](MITLicense).
87
88---
89
90