#pin #io #gpio #inverted #hal

no-std inverted-pin

带有倒置电平逻辑的嵌入式-hal 输入/输出引脚特质实现

3个版本 (1个稳定版)

1.0.0 2024年1月19日
0.2.0 2022年2月18日
0.1.0 2022年2月17日

#1815 in 嵌入式开发


用于 quectel-bg77

MIT/Apache

12KB
60

倒置输入/输出引脚实现

crates.io Docs MSRV Build Status Coverage Status

这提供了带有倒置逻辑的输入/输出引脚 embedded-hal 特质的实现。

例如,一个 InvertedPin 可以包裹一个 OutputPin,并在将其设置为低时,将包裹的 OutputPin 设置为高。对于 InputPin 也是类似的。

当处理与系统其他部分预期逻辑相反的引脚时,这很有用。

由于 InvertedPin 实现了 OutputPinInputPin 特质,它可以像任何其他 OutputPinInputPin 一样使用,并作为包裹引脚的直接替换。

用法

以下示例演示了同一个驱动程序如何使用正常或倒置输出引脚。

use embedded_hal::digital::OutputPin;
use inverted_pin::InvertedPin;
use linux_embedded_hal::SysfsPin;

struct Driver<P> {
    output: P,
}

impl<P, E> Driver<P>
where
    P: OutputPin<Error = E>,
{
    fn new(pin: P) -> Self {
        Driver { output: pin }
    }

    fn do_something(&mut self) -> Result<(), E> {
        // ...
        self.output.set_high()
    }

    fn destroy(self) -> P {
        self.output
    }
}

fn main() {
    // The same driver can operate with either a normal or an inverted pin.
    let real_pin = SysfsPin::new(25);
    let mut driver_with_real_pin = Driver::new(real_pin);
    driver_with_real_pin.do_something().unwrap();
    let real_pin = driver_with_real_pin.destroy();

    let inverted_pin = InvertedPin::new(real_pin);
    let mut driver_with_inverted_pin = Driver::new(inverted_pin);
    driver_with_inverted_pin.do_something().unwrap();
}

支持

有关问题、问题、功能请求和其他更改,请在 github 项目中提交 问题

许可

许可协议为以下之一

任选其一。

贡献

除非你明确声明,否则任何有意提交以包含在你提交的工作中的贡献,根据 Apache-2.0 许可证定义,应如上所述双重许可,无需任何额外的条款或条件。

依赖

~56KB