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§
Structs§
- Forward compatibility container object. This is generic over different E-H types and will provide adaption depending on the bound type.
- Reverse compatibility container object. This is generic over different E-H types and will provide adaption depending on the bound type.
Traits§
- Helper trait to convert a type for forward compatibility call
.forward()
one-h@0.2.x
types to create ane-h@1.x.x
compatible wrapper object - Convert a type into a reverse compatibility wrapper object call
.reverse()
one-h@1.0.x
types to create ane-h@0.2.x
compatible wrapper object