3个版本
0.2.3 | 2023年1月21日 |
---|---|
0.2.2 | 2022年10月15日 |
0.2.1 | 2022年9月15日 |
0.2.0 |
|
在#libgpiod中排名第5
83KB
2K SLoC
libgpiod的Rust接口,用于async-std
Rust包用于与Linux GPIO字符设备接口。此包支持async-std异步运行时。
它通过chardev模块提供对Linux GPIO的接口。此接口涉及调用ioctl函数,这些函数是不安全的,需要一些不直观的变量映射。为了简化此过程,此包提供了一个[Chip]结构,它封装了安全Rust函数中的接口。这里提供的功能高度受到libgpiod的启发。
由于所有功能都依赖于Linux函数调用,此包仅适用于Linux系统。
ABI兼容性
目前支持v1(>= 4.0)和v2(>= v5.10)ABI,但仅对v2实现了边缘检测。基于Sysfs的API(< 4.0)不支持。
包
- gpiod-core - 核心抽象和低级接口(不适用于最终用户)
- gpiod - 仅支持同步操作的单向接口
- tokio-gpiod - 为tokio爱好者提供的异步接口
- async-std-gpiod - 为async-std爱好者提供的异步接口
使用示例
输入值
use async_std_gpiod::{Chip, Options};
#[async_std::main]
async fn main() -> std::io::Result<()> {
let chip = Chip::new("gpiochip0").await?; // open chip
let opts = Options::input([27, 3, 11]) // configure lines offsets
.consumer("my-inputs"); // optionally set consumer string
let inputs = chip.request_lines(opts).await?;
let values = inputs.get_values([false; 3]).await?;
println!("values: {:?}", values);
Ok(())
}
输出值
use async_std_gpiod::{Chip, Options};
#[async_std::main]
async fn main() -> std::io::Result<()> {
let chip = Chip::new("gpiochip0").await?; // open chip
let opts = Options::output([9, 21]) // configure lines offsets
.values([false, true]) // optionally set initial values
.consumer("my-outputs"); // optionally set consumer string
let outputs = chip.request_lines(opts).await?;
outputs.set_values([true, false]).await?;
Ok(())
}
监控值
use async_std_gpiod::{Chip, Options, EdgeDetect};
#[async_std::main]
async fn main() -> std::io::Result<()> {
let chip = Chip::new("gpiochip0").await?; // open chip
let opts = Options::input([4, 7]) // configure lines offsets
.edge(EdgeDetect::Both) // configure edges to detect
.consumer("my-inputs"); // optionally set consumer string
let mut inputs = chip.request_lines(opts).await?;
loop {
let event = inputs.read_event().await?;
println!("event: {:?}", event);
}
Ok(())
}
依赖项
~6–15MB
~202K SLoC