Expand description

v1 compatibility wrappers

This module provides wrappers to support use of v2 implementations with v1 consumers. v2 traits must be explicitly cast to the v1 version using .into(), and will panic on internal errors

extern crate embedded_hal;
use embedded_hal::digital::{v1, v2, v1_compat::OldOutputPin};

struct NewOutputPinImpl {}

impl v2::OutputPin for NewOutputPinImpl {
    type Error = ();
    fn set_low(&mut self) -> Result<(), Self::Error> { Ok(()) }
    fn set_high(&mut self) -> Result<(), Self::Error>{ Ok(()) }
}

struct OldOutputPinConsumer<T: v1::OutputPin> {
    _pin: T,
}

impl <T>OldOutputPinConsumer<T>
where T: v1::OutputPin {
    pub fn new(pin: T) -> OldOutputPinConsumer<T> {
        OldOutputPinConsumer{ _pin: pin }
    }
}

fn main() {
    let pin = NewOutputPinImpl{};
    let _consumer: OldOutputPinConsumer<OldOutputPin<_>> = OldOutputPinConsumer::new(pin.into());
}

Structs

  • Wrapper to allow fallible v2::InputPin traits to be converted to v1::InputPin traits where errors will panic.
  • Wrapper to allow fallible v2::OutputPin traits to be converted to v1::OutputPin traits