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