#gpio #linux #devices #access #events #chip #dev-gpiochip

gpiochip

用于使用 Linux /dev/gpiochip 设备的包

2 个版本

使用旧的 Rust 2015

0.1.1 2018年6月27日
0.1.0 2018年6月12日

硬件支持 中排名第 1360

每月下载量 28

ISC 许可证

22KB
362 代码行

Rust gpiochip

Rust gpiochip 旨在在不需要封装任何C代码或直接进行底层系统调用的前提下,为用户提供对 Linux gpiochip 设备的完全访问。

示例

extern crate gpiochip as gpio;

/// Print information about first gpiochip
fn main() {
    let chip = gpio::GpioChip::new("/dev/gpiochip0").unwrap();

    println!("GPIOChip 0:");
    println!(" Name:  {:?}", chip.name);
    println!(" Label: {:?}", chip.label);
    println!(" Lines: {:?}", chip.lines);
    println!("");

    for i in 0..chip.lines {
        let info = chip.info(i).unwrap();

        println!(" GPIO {:?}: {:?}", info.gpio, info.name);
        println!("     Consumer: {:?}", info.consumer);
        println!("     Flags: {:?}", info.flags);
    }
}
extern crate gpiochip as gpio;

/// Simple get/set example
fn main() {
    let chip = gpio::GpioChip::new("/dev/gpiochip0").unwrap();
    let gpio_a = chip.request("gpioA", gpio::RequestFlags::INPUT, 0, 0).unwrap();
    let gpio_b = chip.request("gpioA", gpio::RequestFlags::OUTPUT | gpio::RequestFlags::ACTIVE_LOW, 1, 0).unwrap();

    let val = gpio_a.get().unwrap();
    gpio_b.set(val).unwrap();
}
extern crate gpiochip as gpio;

/// GPIO events
fn main() {
    let chip = gpio::GpioChip::new("/dev/gpiochip0").unwrap();

    let gpio_a = chip.request_event("gpioA", 0, gpio::RequestFlags::INPUT, gpio::EventRequestFlags::BOTH_EDGES).unwrap();
    let gpio_b = chip.request_event("gpioB", 1, gpio::RequestFlags::INPUT, gpio::EventRequestFlags::BOTH_EDGES).unwrap();

    let bitmap = gpio::wait_for_event(&[&gpio_a, &gpio_b], 1000).unwrap();

    if bitmap & 0b01 == 0b01 {
        let event = gpio_a.read().unwrap();
        println!("gpioA: event @ {:?} - {:?}", event.timestamp, event.id);
    }

    if bitmap & 0b10 == 0b10 {
        let event = gpio_b.read().unwrap();
        println!("gpioB: event @ {:?} - {:?}", event.timestamp, event.id);
    }
}

许可证

© 2018 Sebastian Reichel

ISC 许可证

在此授予任何目的(无论是否付费)使用、复制、修改和/或分发此软件的许可,前提是上述版权声明和本许可声明出现在所有副本中。

软件按“原样”提供,作者对此软件不承担任何保证,包括所有明示或暗示的保证,包括适销性和适用性。在任何情况下,作者均不对任何特殊、直接、间接或后果性损害或任何因使用或性能此软件而产生的任何损害(包括但不限于使用、数据或利润损失)负责,无论该损害是因合同、疏忽还是其他侵权行为引起的,无论该损害是否与使用或性能此软件有关。

依赖项

~2MB
~41K SLoC