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