16 个版本

0.12.2 2024 年 5 月 8 日
0.12.1 2022 年 12 月 9 日
0.12.0 2022 年 8 月 18 日
0.11.5 2022 年 3 月 5 日
0.9.2 2015 年 7 月 21 日

#95 in Unix API

Download history 2863/week @ 2024-05-03 2632/week @ 2024-05-10 2904/week @ 2024-05-17 2919/week @ 2024-05-24 3465/week @ 2024-05-31 3162/week @ 2024-06-07 3548/week @ 2024-06-14 3231/week @ 2024-06-21 3139/week @ 2024-06-28 3130/week @ 2024-07-05 2976/week @ 2024-07-12 3832/week @ 2024-07-19 3994/week @ 2024-07-26 2928/week @ 2024-08-02 3372/week @ 2024-08-09 3654/week @ 2024-08-16

14,594 个月下载量
37 包(36 个直接)中使用

Apache-2.0 OR MIT

175KB
4K SLoC

evdev

GitHub Workflow Status Crates.io

文档

方便地访问 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