#evdev #devices #libevdev #bindings #wrapper #interface #ioctl

evdev-rs

为与evdev设备交互而绑定libevdev。它将处理evdev设备的常见任务移入库中,并为调用者提供库接口,从而避免错误的ioctl等。

9个版本 (breaking)

0.6.1 2022年10月22日
0.6.0 2022年7月24日
0.5.0 2021年4月5日
0.4.0 2020年4月26日
0.0.1 2017年9月2日

#240 in 硬件支持

Download history 791/week @ 2024-03-14 698/week @ 2024-03-21 615/week @ 2024-03-28 821/week @ 2024-04-04 921/week @ 2024-04-11 873/week @ 2024-04-18 762/week @ 2024-04-25 758/week @ 2024-05-02 730/week @ 2024-05-09 918/week @ 2024-05-16 728/week @ 2024-05-23 743/week @ 2024-05-30 677/week @ 2024-06-06 685/week @ 2024-06-13 1007/week @ 2024-06-20 612/week @ 2024-06-27

每月3,141次下载
用于 13 crate

MIT/Apache

495KB
13K SLoC

C 8K SLoC // 0.0% comments Rust 4K SLoC // 0.0% comments Python 486 SLoC // 0.0% comments Automake 195 SLoC M4 191 SLoC // 0.2% comments Shell 110 SLoC // 0.2% comments JavaScript 64 SLoC // 0.3% comments

evdev-rs

Build Status Latest Version Documentation

文档

libevdev的Rust封装

# Cargo.toml
[dependencies]
evdev-rs = "0.6.1"

要启用序列化支持,请启用功能 "serde"

# Cargo.toml
[dependencies]
evdev-rs = { version = "0.6.1", features = ["serde"] }

With a newer libevdev version (>= 1.10) enable the feature `libevdev-1-10` to
allow disabling a property. It also extends the `Enable` trait to `InputProp`,
enabling the use of `enable()`, `disable()` and `has()` for `InputProp` as well.

为什么需要一个libevdev封装?

evdev协议很简单,但有些行为很奇特。libevdev可以透明地处理其中的一些奇特性。

evdev crate是libevdev在Rust中的实现,提供了大部分相同的功能。

evdev-rs crate紧密遵循libevdev,因此享有libevdev的所有复杂处理。libevdev透明地处理的一些事情,可能在evdev crate中也可能不在

  • 处理虚拟多点触控设备
  • 槽位和每个槽位状态的同步
  • 在SYN_DROPPED后透明地生成缺失的跟踪ID
  • 在请求无效数据时进行各种边界检查,并返回定义的错误代码(例如,设备上不存在的设备事件代码)
  • 在相同上下文中进行fd交换
  • 基于上下文启用/禁用事件,这样您就可以禁用/启用ABS_FOO,然后不必关心客户端代码中的奇特性。

开发

src/enums.rs可以通过运行./tools/make-enums.sh来生成。

依赖关系

~120–590KB
~13K SLoC