1c0abf9e6Sopenharmony_ci# libevdev - wrapper library for evdev input devices
2c0abf9e6Sopenharmony_ci
3c0abf9e6Sopenharmony_cilibevdev是evdev设备的包装库。它将处理evdev设备时的常见任务移动到库中,并向调用方提供库接口,从而避免错误的ioctl等。
4c0abf9e6Sopenharmony_ci
5c0abf9e6Sopenharmony_ci最终目标是libevdev包装了evdev设备可用的所有ioctl,因此不需要直接访问。
6c0abf9e6Sopenharmony_ci
7c0abf9e6Sopenharmony_ci
8c0abf9e6Sopenharmony_ci## 目录结构
9c0abf9e6Sopenharmony_ci
10c0abf9e6Sopenharmony_ci```
11c0abf9e6Sopenharmony_ciREADME.md                   英文说明
12c0abf9e6Sopenharmony_ciREADME_zh.md                中文说明
13c0abf9e6Sopenharmony_ciexport_include/libevdev/    API定义
14c0abf9e6Sopenharmony_ciinclude/                    引用头文件
15c0abf9e6Sopenharmony_cilibevdev/                   封装层实现
16c0abf9e6Sopenharmony_ciREADME.OpenSource           开源说明
17c0abf9e6Sopenharmony_ci```
18c0abf9e6Sopenharmony_ci
19c0abf9e6Sopenharmony_ci## OpenHarmony如何集成libevdev
20c0abf9e6Sopenharmony_ci### 1.头文件引入
21c0abf9e6Sopenharmony_ci```c
22c0abf9e6Sopenharmony_ci#define EVDEV_H
23c0abf9e6Sopenharmony_ci#include <libevdev/libevdev.h>
24c0abf9e6Sopenharmony_ci```
25c0abf9e6Sopenharmony_ci### 2.BUILD.gn添加引用
26c0abf9e6Sopenharmony_ci```c
27c0abf9e6Sopenharmony_cipublic_deps += ["//third_party/libevdev:libevdev"]
28c0abf9e6Sopenharmony_ci```
29c0abf9e6Sopenharmony_ci### 3.调用libevdev函数过程举例
30c0abf9e6Sopenharmony_ci```c
31c0abf9e6Sopenharmony_ci// 下面是一个简单的示例,展示了如何使用libevdev。此示例打开一个设备,检查相对坐标和鼠标左键,如果找到,则监听设备并打印输入事件
32c0abf9e6Sopenharmony_ci
33c0abf9e6Sopenharmony_ci// 打开一个输入设备
34c0abf9e6Sopenharmony_cistruct libevdev *dev = NULL;
35c0abf9e6Sopenharmony_ciint fd;
36c0abf9e6Sopenharmony_ciint rc = 1;
37c0abf9e6Sopenharmony_ci 
38c0abf9e6Sopenharmony_cifd = open("/dev/input/event0", O_RDONLY|O_NONBLOCK);
39c0abf9e6Sopenharmony_circ = libevdev_new_from_fd(fd, &dev);
40c0abf9e6Sopenharmony_ciif (rc < 0) {
41c0abf9e6Sopenharmony_ci        fprintf(stderr, "Failed to init libevdev (%s)\n", strerror(-rc));
42c0abf9e6Sopenharmony_ci        exit(1);
43c0abf9e6Sopenharmony_ci}
44c0abf9e6Sopenharmony_ci// 打印输入设备信息
45c0abf9e6Sopenharmony_ciprintf("Input device name: \"%s\"\n", libevdev_get_name(dev));
46c0abf9e6Sopenharmony_ciprintf("Input device ID: bus %#x vendor %#x product %#x\n",
47c0abf9e6Sopenharmony_ci       libevdev_get_id_bustype(dev),
48c0abf9e6Sopenharmony_ci       libevdev_get_id_vendor(dev),
49c0abf9e6Sopenharmony_ci       libevdev_get_id_product(dev));
50c0abf9e6Sopenharmony_ci// 检查相对坐标和鼠标左键
51c0abf9e6Sopenharmony_ciif (!libevdev_has_event_type(dev, EV_REL) ||
52c0abf9e6Sopenharmony_ci    !libevdev_has_event_code(dev, EV_KEY, BTN_LEFT)) {
53c0abf9e6Sopenharmony_ci        printf("This device does not look like a mouse\n");
54c0abf9e6Sopenharmony_ci        exit(1);
55c0abf9e6Sopenharmony_ci}
56c0abf9e6Sopenharmony_ci 
57c0abf9e6Sopenharmony_ci // 监听该设备并打印输入事件
58c0abf9e6Sopenharmony_cido {
59c0abf9e6Sopenharmony_ci        struct input_event ev;
60c0abf9e6Sopenharmony_ci        rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev);
61c0abf9e6Sopenharmony_ci        if (rc == 0)
62c0abf9e6Sopenharmony_ci                printf("Event: %s %s %d\n",
63c0abf9e6Sopenharmony_ci                       libevdev_event_type_get_name(ev.type),
64c0abf9e6Sopenharmony_ci                       libevdev_event_code_get_name(ev.type, ev.code),
65c0abf9e6Sopenharmony_ci                       ev.value);
66c0abf9e6Sopenharmony_ci} while (rc == 1 || rc == 0 || rc == -EAGAIN);
67c0abf9e6Sopenharmony_ci```
68c0abf9e6Sopenharmony_ci
69c0abf9e6Sopenharmony_ci## libevdev使用文档
70c0abf9e6Sopenharmony_ci
71c0abf9e6Sopenharmony_ci代码仓库 https://gitlab.freedesktop.org/libevdev/libevdev.git
72c0abf9e6Sopenharmony_ci
73c0abf9e6Sopenharmony_ciAPI官方文档  http://www.freedesktop.org/software/libevdev/doc/latest/
74c0abf9e6Sopenharmony_ci
75c0abf9e6Sopenharmony_ciAPI详细定义 https://www.freedesktop.org/software/libevdev/doc/latest/libevdev_8h.html
76c0abf9e6Sopenharmony_ci
77c0abf9e6Sopenharmony_ci补丁包 https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/
78c0abf9e6Sopenharmony_ci
79c0abf9e6Sopenharmony_ciBug上报 https://gitlab.freedesktop.org/libevdev/libevdev/issues/
80c0abf9e6Sopenharmony_ci
81c0abf9e6Sopenharmony_ci问题反馈 http://lists.freedesktop.org/mailman/listinfo/input-tools
82c0abf9e6Sopenharmony_ci
83c0abf9e6Sopenharmony_ci
84c0abf9e6Sopenharmony_ci## License
85c0abf9e6Sopenharmony_ci
86c0abf9e6Sopenharmony_ci见 [LICENSE](MITLicense).
87c0abf9e6Sopenharmony_ci
88c0abf9e6Sopenharmony_ci---
89c0abf9e6Sopenharmony_ci
90