Crate embedded_hal_compat

Crate embedded_hal_compat 

Source
Expand description

A compatibility layer to alleviate (some) of the issues resolving from changes to embedded-hal. This crate lets you easily mix and match drivers and hal implementations using v1.x.x and v0.2.x versions of embedded-hal, just add a .forward() or a .reverse() wherever you see trait bounds errors.

Note that no effort is made to support interoperability between alpha versions, we’ll do our best to keep up with the latest alpha and swap to 1.0.0 on release. In the future these traits may be renamed to support more hal versions.

§Forward compatibility:

Calling ForwardCompat::forward() (or .forward()) on v0.2.x types creates a wrapper for use with v1.0.x consumers, so you can drop these wrapped types into drivers expecting v1.0.x types.

Note that GPIO pins will require annotation with marker types (see markers) to select input / output / combined modes.

 use embedded_hal_compat::{Forward, ForwardCompat, markers::*};

 // Create e-h v0.2.x based type (mock)
 let mut old = OutputPin0_2;
 // Access via e-h v0.2.x methods
 let _ = eh0_2::digital::v2::OutputPin::set_high(&mut old);

 // Apply forward compatibility wrapper
 let mut new: Forward<_, ForwardIoPin> = old.forward();
 // Access via e-h v1.x.x methods
 let _ = eh1_0::digital::OutputPin::set_high(&mut new);

§Backwards compatibility:

Calling ReverseCompat::reverse() (or .reverse()) on v1.0.x types creates a wrapper for use with v0.2.x consumers, so you can drop these wrapped types into drivers expecting v0.2.x types.

Note that input and output pins require .reverse_cell() as a workaround for mutability changes.

 use embedded_hal_compat::ReverseCompat;

 // Create e-h v1.x.x based type (mock)
 let mut new = OutputPin1_0;
 // Access via e-h v1.x.x methods
 let _ = eh1_0::digital::OutputPin::set_high(&mut new);

 // Apply backwards compatibility wrapper
 let mut old = new.reverse_cell();
 // Access via e-h v0.2.x methods
 let _ = eh0_2::digital::v2::OutputPin::set_high(&mut old);
use embedded_hal_compat::ReverseCompat;

// Create e-h v1.x.x based type (mock)
let mut new = InputPin1_0;
// Access via e-h v1.x.x methods
let _ = eh1_0::digital::InputPin::is_high(&mut new);

// Apply backwards compatibility wrapper
let mut old = new.reverse_cell();
// Access via e-h v0.2.x methods
let _ = eh0_2::digital::v2::InputPin::is_high(&mut old);

§Optional features

§alloc

The alloc feature enables an implementation of the I2C and SPI Transactional traits from embedded-hal v0.2.x for the “reverse” direction.

For example, when your MCU implements theembedded-hal 1.0.0 traits and you want to connect with an I2C or SPI driver that uses the Transactional traits of embedded-hal 0.2.x.

For all other cases, this feature is unnecessary.

Do not enable it if you do not need it.

Note that this introduces a dependency on the core allocation library.

Re-exports§

pub use eh0_2;
pub use eh1_0;
pub use embedded_io;embedded-io

Modules§

markers

Structs§

Forward
Forward compatibility container object. This is generic over different E-H types and will provide adaption depending on the bound type.
Reverse
Reverse compatibility container object. This is generic over different E-H types and will provide adaption depending on the bound type.

Traits§

ForwardCompat
Helper trait to convert a type for forward compatibility call .forward() on e-h@0.2.x types to create an e-h@1.x.x compatible wrapper object
ReverseCompat
Convert a type into a reverse compatibility wrapper object call .reverse() on e-h@1.0.x types to create an e-h@0.2.x compatible wrapper object