16 个版本
0.12.2 | 2024 年 5 月 8 日 |
---|---|
0.12.1 | 2022 年 12 月 9 日 |
0.12.0 | 2022 年 8 月 18 日 |
0.11.5 |
|
0.9.2 | 2015 年 7 月 21 日 |
#95 in Unix API
14,594 个月下载量
在 37 个 包(36 个直接)中使用
175KB
4K SLoC
evdev
方便地访问 evdev
设备。
evdev
是什么?
evdev
是 Linux 内核的通用输入接口,也被其他内核如 FreeBSD 实现。
libevdev 是一个用 c 语言编写的用户空间库,用于以高级方式与该系统交互,而不是直接使用 ioctl
系统调用。
此包是对 libevdev
的 Rust 重新实现。这里涉及一些技巧,请参阅包文档。
还有一个替代包:evdev-rs,它封装了 libevdev
。
概述
此包提供从输入设备读取事件流的函数。
与 libevdev
类似,此包还提供与 uinput 交互的函数。Uinput 是一个内核模块,允许在用户空间创建虚拟输入设备。
同步
这个库公开了原始的evdev事件,但使用Rust的Iterator
特性来实现。当通过fetch_events
处理事件时,该库将通过注入假状态更新来处理SYN_DROPPED
事件,尝试确保调用者看到的状态转换消息与实际设备状态一致。当通过*_no_sync
处理时,不会进行这种纠正,如果内核环形缓冲区在读取消息之前被溢出,将出现SYN_DROPPED
消息。在可能的情况下,我会尽量与libevdev保持一致。
局限性
没有为类似游戏手柄的设备提供抽象,以将按钮编号映射到逻辑按钮,也没有计划提供。这种事情应该在高一级的crate中发生,可能支持多个平台。
示例
关于如何使用此crate的许多示例可以在本仓库的examples目录中找到。如果您觉得缺少某个evdev crate部分的示例,请随时提交pull request。
一个好的介绍是evtest.rs示例(大致对应于用户空间的evtest工具)。
发布
详细的发布说明可在本仓库的CHANGELOG.md中找到。
依赖
~3–12MB
~132K SLoC