Feature gate embedded-hal@0.2.x implementations, rename eh1 feature to embedded-hal (#1273)

* Create an `embedded-hal-02` feature and gate implementations, rename `eh1` to `embedded-hal`

* Use native `Delay` APIs in examples where applicable

* Fix example imports, be explicit about about `embedded-hal-02` feature requirements

* Update `CHANGELOG.md`
This commit is contained in:
Jesse Braham 2024-03-14 15:40:44 +00:00 committed by GitHub
parent 1983a74cb1
commit 3079d9cc49
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
71 changed files with 381 additions and 274 deletions

View File

@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Prefer mutable references over moving for DMA transactions (#1238)
- Support runtime interrupt binding, adapt GPIO driver (#1231)
- Renamed `eh1` feature to `embedded-hal`, feature-gated `embedded-hal@0.2.x` trait implementations (#1273)
### Removed

View File

@ -27,8 +27,8 @@ embassy-sync = { version = "0.5.0", optional = true }
embassy-time-driver = { version = "0.1.0", optional = true }
embedded-can = { version = "0.4.1", optional = true }
embedded-dma = "0.2.0"
embedded-hal = { version = "0.2.7", features = ["unproven"] }
embedded-hal-1 = { version = "1.0.0", optional = true, package = "embedded-hal" }
embedded-hal-02 = { version = "0.2.7", optional = true, features = ["unproven"], package = "embedded-hal" }
embedded-hal = { version = "1.0.0", optional = true }
embedded-hal-async = { version = "1.0.0", optional = true }
embedded-hal-nb = { version = "1.0.0", optional = true }
embedded-io = { version = "0.6.1", optional = true }
@ -74,7 +74,7 @@ esp-metadata = { version = "0.1.0", path = "../esp-metadata" }
serde = { version = "1.0.197", features = ["derive"] }
[features]
default = ["rt", "vectored"]
default = ["embedded-hal-02", "rt", "vectored"]
riscv = ["dep:riscv", "critical-section/restore-state-u8", "esp-riscv-rt?/zero-bss"]
xtensa = ["dep:xtensa-lx", "critical-section/restore-state-u32"]
@ -151,8 +151,8 @@ rv-init-rtc-data = ["esp-riscv-rt?/init-rtc-fast-data", "esp-riscv-rt?/init-rtc-
## Enable support for asynchronous operation, with interfaces provided by
## `embedded-hal-async` and `embedded-io-async`.
async = [
"embedded-hal",
"embedded-hal-async",
"eh1",
"embassy-sync",
"embassy-futures",
"embedded-io",
@ -164,13 +164,15 @@ defmt = [
"embassy-executor?/defmt",
"embassy-futures?/defmt",
"embassy-sync?/defmt",
"embedded-hal-1?/defmt-03",
"embedded-hal?/defmt-03",
"embedded-io/defmt-03",
"embedded-io-async?/defmt-03",
]
## Implement the traits defined in the `0.2.x` release of `embedded-hal`.
embedded-hal-02 = ["dep:embedded-hal-02"]
## Implement the traits defined in the `1.0.0` releases of `embedded-hal` and
## `embedded-hal-nb` for the relevant peripherals.
eh1 = ["embedded-hal-1", "embedded-hal-nb", "embedded-can"]
embedded-hal = ["dep:embedded-hal", "dep:embedded-hal-nb", "dep:embedded-can"]
## Implement the traits defined in `embedded-io` for certain peripherals.
embedded-io = ["dep:embedded-io"]
## Implement the `ufmt_write::uWrite` trait for certain peripherals.
@ -211,11 +213,11 @@ psram-80mhz = []
#! ### Octal RAM Feature Flags
## Use externally connected Octal RAM (2MB).
opsram-2m = []
opsram-2m = []
## Use externally connected Octal RAM (4MB).
opsram-4m = []
opsram-4m = []
## Use externally connected Octal RAM (8MB).
opsram-8m = []
opsram-8m = []
## Use externally connected Octal RAM (16MB).
opsram-16m = []

View File

@ -21,9 +21,10 @@ pub struct AdcPin<PIN, ADCI> {
_phantom: PhantomData<ADCI>,
}
impl<PIN, ADCI> embedded_hal::adc::Channel<ADCI> for AdcPin<PIN, ADCI>
#[cfg(feature = "embedded-hal-02")]
impl<PIN, ADCI> embedded_hal_02::adc::Channel<ADCI> for AdcPin<PIN, ADCI>
where
PIN: embedded_hal::adc::Channel<ADCI, ID = u8>,
PIN: embedded_hal_02::adc::Channel<ADCI, ID = u8>,
{
type ID = u8;
@ -346,15 +347,16 @@ impl<'d, ADC1> ADC<'d, ADC1> {
}
}
impl<'d, ADCI, PIN> embedded_hal::adc::OneShot<ADCI, u16, AdcPin<PIN, ADCI>> for ADC<'d, ADCI>
#[cfg(feature = "embedded-hal-02")]
impl<'d, ADCI, PIN> embedded_hal_02::adc::OneShot<ADCI, u16, AdcPin<PIN, ADCI>> for ADC<'d, ADCI>
where
PIN: embedded_hal::adc::Channel<ADCI, ID = u8>,
PIN: embedded_hal_02::adc::Channel<ADCI, ID = u8>,
ADCI: RegisterAccess,
{
type Error = ();
fn read(&mut self, _pin: &mut AdcPin<PIN, ADCI>) -> nb::Result<u16, Self::Error> {
use embedded_hal::adc::Channel;
use embedded_hal_02::adc::Channel;
if self.attenuations[AdcPin::<PIN, ADCI>::channel() as usize].is_none() {
panic!(
@ -405,7 +407,8 @@ macro_rules! impl_adc_interface {
const CHANNEL: u8 = $channel;
}
impl embedded_hal::adc::Channel<$adc> for crate::gpio::$pin<crate::gpio::Analog> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::adc::Channel<$adc> for crate::gpio::$pin<crate::gpio::Analog> {
type ID = u8;
fn channel() -> u8 { $channel }

View File

@ -117,9 +117,10 @@ pub struct AdcPin<PIN, ADCI, CS = ()> {
_phantom: PhantomData<ADCI>,
}
impl<PIN, ADCI, CS> embedded_hal::adc::Channel<ADCI> for AdcPin<PIN, ADCI, CS>
#[cfg(feature = "embedded-hal-02")]
impl<PIN, ADCI, CS> embedded_hal_02::adc::Channel<ADCI> for AdcPin<PIN, ADCI, CS>
where
PIN: embedded_hal::adc::Channel<ADCI, ID = u8>,
PIN: embedded_hal_02::adc::Channel<ADCI, ID = u8>,
{
type ID = u8;
@ -548,17 +549,18 @@ impl AdcCalEfuse for crate::peripherals::ADC2 {
}
}
impl<'d, ADCI, PIN, CS> embedded_hal::adc::OneShot<ADCI, u16, AdcPin<PIN, ADCI, CS>>
#[cfg(feature = "embedded-hal-02")]
impl<'d, ADCI, PIN, CS> embedded_hal_02::adc::OneShot<ADCI, u16, AdcPin<PIN, ADCI, CS>>
for ADC<'d, ADCI>
where
PIN: embedded_hal::adc::Channel<ADCI, ID = u8>,
PIN: embedded_hal_02::adc::Channel<ADCI, ID = u8>,
ADCI: RegisterAccess,
CS: AdcCalScheme<ADCI>,
{
type Error = ();
fn read(&mut self, pin: &mut AdcPin<PIN, ADCI, CS>) -> nb::Result<u16, Self::Error> {
use embedded_hal::adc::Channel;
use embedded_hal_02::adc::Channel;
if self.attenuations[AdcPin::<PIN, ADCI>::channel() as usize].is_none() {
panic!(
@ -639,7 +641,8 @@ macro_rules! impl_adc_interface {
const CHANNEL: u8 = $channel;
}
impl embedded_hal::adc::Channel<$adc> for crate::gpio::$pin<crate::gpio::Analog> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::adc::Channel<$adc> for crate::gpio::$pin<crate::gpio::Analog> {
type ID = u8;
fn channel() -> u8 { $channel }

View File

@ -86,9 +86,10 @@ pub struct AdcPin<PIN, ADCI, CS = ()> {
_phantom: PhantomData<ADCI>,
}
impl<PIN, ADCI, CS> embedded_hal::adc::Channel<ADCI> for AdcPin<PIN, ADCI, CS>
#[cfg(feature = "embedded-hal-02")]
impl<PIN, ADCI, CS> embedded_hal_02::adc::Channel<ADCI> for AdcPin<PIN, ADCI, CS>
where
PIN: embedded_hal::adc::Channel<ADCI, ID = u8>,
PIN: embedded_hal_02::adc::Channel<ADCI, ID = u8>,
{
type ID = u8;
@ -637,17 +638,18 @@ impl AdcCalEfuse for crate::peripherals::ADC2 {
}
}
impl<'d, ADCI, PIN, CS> embedded_hal::adc::OneShot<ADCI, u16, AdcPin<PIN, ADCI, CS>>
#[cfg(feature = "embedded-hal-02")]
impl<'d, ADCI, PIN, CS> embedded_hal_02::adc::OneShot<ADCI, u16, AdcPin<PIN, ADCI, CS>>
for ADC<'d, ADCI>
where
PIN: embedded_hal::adc::Channel<ADCI, ID = u8>,
PIN: embedded_hal_02::adc::Channel<ADCI, ID = u8>,
ADCI: RegisterAccess,
CS: AdcCalScheme<ADCI>,
{
type Error = ();
fn read(&mut self, pin: &mut AdcPin<PIN, ADCI, CS>) -> nb::Result<u16, Self::Error> {
use embedded_hal::adc::Channel;
use embedded_hal_02::adc::Channel;
if self.attenuations[AdcPin::<PIN, ADCI>::channel() as usize].is_none() {
panic!(
@ -706,7 +708,8 @@ macro_rules! impl_adc_interface {
const CHANNEL: u8 = $channel;
}
impl embedded_hal::adc::Channel<$adc> for crate::gpio::$pin<crate::gpio::Analog> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::adc::Channel<$adc> for crate::gpio::$pin<crate::gpio::Analog> {
type ID = u8;
fn channel() -> u8 { $channel }

View File

@ -18,9 +18,9 @@
//! delay.delay_ms(1000 as u32);
//! ```
//!
//! [DelayMs]: embedded_hal::blocking::delay::DelayMs
//! [DelayUs]: embedded_hal::blocking::delay::DelayUs
//! [embedded-hal]: https://docs.rs/embedded-hal/latest/embedded_hal/
//! [DelayMs]: embedded_hal_02::blocking::delay::DelayMs
//! [DelayUs]: embedded_hal_02::blocking::delay::DelayUs
//! [embedded-hal]: https://docs.rs/embedded-hal/0.2.7/embedded_hal/index.html
use fugit::HertzU64;
@ -33,7 +33,17 @@ pub struct Delay {
freq: HertzU64,
}
impl<T> embedded_hal::blocking::delay::DelayMs<T> for Delay
impl Delay {
/// Delay for the specified number of milliseconds
pub fn delay_millis(&self, ms: u32) {
for _ in 0..ms {
self.delay_micros(1000u32);
}
}
}
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::blocking::delay::DelayMs<T> for Delay
where
T: Into<u32>,
{
@ -44,7 +54,8 @@ where
}
}
impl<T> embedded_hal::blocking::delay::DelayUs<T> for Delay
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::blocking::delay::DelayUs<T> for Delay
where
T: Into<u32>,
{
@ -53,8 +64,8 @@ where
}
}
#[cfg(feature = "eh1")]
impl embedded_hal_1::delay::DelayNs for Delay {
#[cfg(feature = "embedded-hal")]
impl embedded_hal::delay::DelayNs for Delay {
fn delay_ns(&mut self, ns: u32) {
self.delay_nanos(ns);
}

View File

@ -541,7 +541,9 @@ pub struct GpioPin<MODE, const GPIONUM: u8> {
_mode: PhantomData<MODE>,
}
impl<MODE, const GPIONUM: u8> embedded_hal::digital::v2::InputPin for GpioPin<Input<MODE>, GPIONUM>
#[cfg(feature = "embedded-hal-02")]
impl<MODE, const GPIONUM: u8> embedded_hal_02::digital::v2::InputPin
for GpioPin<Input<MODE>, GPIONUM>
where
Self: GpioProperties,
{
@ -554,7 +556,9 @@ where
}
}
impl<const GPIONUM: u8> embedded_hal::digital::v2::InputPin for GpioPin<Output<OpenDrain>, GPIONUM>
#[cfg(feature = "embedded-hal-02")]
impl<const GPIONUM: u8> embedded_hal_02::digital::v2::InputPin
for GpioPin<Output<OpenDrain>, GPIONUM>
where
Self: GpioProperties,
{
@ -567,16 +571,16 @@ where
}
}
#[cfg(feature = "eh1")]
impl<MODE, const GPIONUM: u8> embedded_hal_1::digital::ErrorType for GpioPin<Input<MODE>, GPIONUM>
#[cfg(feature = "embedded-hal")]
impl<MODE, const GPIONUM: u8> embedded_hal::digital::ErrorType for GpioPin<Input<MODE>, GPIONUM>
where
Self: GpioProperties,
{
type Error = Infallible;
}
#[cfg(feature = "eh1")]
impl<MODE, const GPIONUM: u8> embedded_hal_1::digital::InputPin for GpioPin<Input<MODE>, GPIONUM>
#[cfg(feature = "embedded-hal")]
impl<MODE, const GPIONUM: u8> embedded_hal::digital::InputPin for GpioPin<Input<MODE>, GPIONUM>
where
Self: GpioProperties,
{
@ -588,8 +592,8 @@ where
}
}
#[cfg(feature = "eh1")]
impl<const GPIONUM: u8> embedded_hal_1::digital::InputPin for GpioPin<Output<OpenDrain>, GPIONUM>
#[cfg(feature = "embedded-hal")]
impl<const GPIONUM: u8> embedded_hal::digital::InputPin for GpioPin<Output<OpenDrain>, GPIONUM>
where
Self: GpioProperties,
<Self as GpioProperties>::PinType: IsOutputPin,
@ -865,7 +869,8 @@ where
}
}
impl<MODE, const GPIONUM: u8> embedded_hal::digital::v2::OutputPin
#[cfg(feature = "embedded-hal-02")]
impl<MODE, const GPIONUM: u8> embedded_hal_02::digital::v2::OutputPin
for GpioPin<Output<MODE>, GPIONUM>
where
Self: GpioProperties,
@ -882,7 +887,8 @@ where
}
}
impl<MODE, const GPIONUM: u8> embedded_hal::digital::v2::StatefulOutputPin
#[cfg(feature = "embedded-hal-02")]
impl<MODE, const GPIONUM: u8> embedded_hal_02::digital::v2::StatefulOutputPin
for GpioPin<Output<MODE>, GPIONUM>
where
Self: GpioProperties,
@ -896,7 +902,8 @@ where
}
}
impl<MODE, const GPIONUM: u8> embedded_hal::digital::v2::ToggleableOutputPin
#[cfg(feature = "embedded-hal-02")]
impl<MODE, const GPIONUM: u8> embedded_hal_02::digital::v2::ToggleableOutputPin
for GpioPin<Output<MODE>, GPIONUM>
where
Self: GpioProperties,
@ -904,7 +911,7 @@ where
{
type Error = Infallible;
fn toggle(&mut self) -> Result<(), Self::Error> {
use embedded_hal::digital::v2::{OutputPin as _, StatefulOutputPin as _};
use embedded_hal_02::digital::v2::{OutputPin as _, StatefulOutputPin as _};
if self.is_set_high()? {
Ok(self.set_low()?)
} else {
@ -913,8 +920,8 @@ where
}
}
#[cfg(feature = "eh1")]
impl<MODE, const GPIONUM: u8> embedded_hal_1::digital::ErrorType for GpioPin<Output<MODE>, GPIONUM>
#[cfg(feature = "embedded-hal")]
impl<MODE, const GPIONUM: u8> embedded_hal::digital::ErrorType for GpioPin<Output<MODE>, GPIONUM>
where
Self: GpioProperties,
<Self as GpioProperties>::PinType: IsOutputPin,
@ -922,8 +929,8 @@ where
type Error = Infallible;
}
#[cfg(feature = "eh1")]
impl<MODE, const GPIONUM: u8> embedded_hal_1::digital::OutputPin for GpioPin<Output<MODE>, GPIONUM>
#[cfg(feature = "embedded-hal")]
impl<MODE, const GPIONUM: u8> embedded_hal::digital::OutputPin for GpioPin<Output<MODE>, GPIONUM>
where
Self: GpioProperties,
<Self as GpioProperties>::PinType: IsOutputPin,
@ -938,8 +945,8 @@ where
}
}
#[cfg(feature = "eh1")]
impl<MODE, const GPIONUM: u8> embedded_hal_1::digital::StatefulOutputPin
#[cfg(feature = "embedded-hal")]
impl<MODE, const GPIONUM: u8> embedded_hal::digital::StatefulOutputPin
for GpioPin<Output<MODE>, GPIONUM>
where
Self: GpioProperties,
@ -1719,7 +1726,8 @@ where
}
}
impl<MODE, TYPE> embedded_hal::digital::v2::InputPin for AnyPin<Input<MODE>, TYPE> {
#[cfg(feature = "embedded-hal-02")]
impl<MODE, TYPE> embedded_hal_02::digital::v2::InputPin for AnyPin<Input<MODE>, TYPE> {
type Error = core::convert::Infallible;
fn is_high(&self) -> Result<bool, Self::Error> {
@ -1733,13 +1741,13 @@ impl<MODE, TYPE> embedded_hal::digital::v2::InputPin for AnyPin<Input<MODE>, TYP
}
}
#[cfg(feature = "eh1")]
impl<MODE, TYPE> embedded_hal_1::digital::ErrorType for AnyPin<Input<MODE>, TYPE> {
#[cfg(feature = "embedded-hal")]
impl<MODE, TYPE> embedded_hal::digital::ErrorType for AnyPin<Input<MODE>, TYPE> {
type Error = Infallible;
}
#[cfg(feature = "eh1")]
impl<MODE, TYPE> embedded_hal_1::digital::InputPin for AnyPin<Input<MODE>, TYPE> {
#[cfg(feature = "embedded-hal")]
impl<MODE, TYPE> embedded_hal::digital::InputPin for AnyPin<Input<MODE>, TYPE> {
fn is_high(&mut self) -> Result<bool, Self::Error> {
let inner = &mut self.inner;
handle_gpio_input!(inner, target, { target.is_high() })
@ -1751,7 +1759,8 @@ impl<MODE, TYPE> embedded_hal_1::digital::InputPin for AnyPin<Input<MODE>, TYPE>
}
}
impl<MODE, TYPE> embedded_hal::digital::v2::OutputPin for AnyPin<Output<MODE>, TYPE> {
#[cfg(feature = "embedded-hal-02")]
impl<MODE, TYPE> embedded_hal_02::digital::v2::OutputPin for AnyPin<Output<MODE>, TYPE> {
type Error = Infallible;
fn set_low(&mut self) -> Result<(), Self::Error> {
@ -1765,7 +1774,8 @@ impl<MODE, TYPE> embedded_hal::digital::v2::OutputPin for AnyPin<Output<MODE>, T
}
}
impl<MODE, TYPE> embedded_hal::digital::v2::StatefulOutputPin for AnyPin<Output<MODE>, TYPE> {
#[cfg(feature = "embedded-hal-02")]
impl<MODE, TYPE> embedded_hal_02::digital::v2::StatefulOutputPin for AnyPin<Output<MODE>, TYPE> {
fn is_set_high(&self) -> Result<bool, Self::Error> {
let inner = &self.inner;
handle_gpio_output!(inner, target, { target.is_set_high() })
@ -1777,7 +1787,8 @@ impl<MODE, TYPE> embedded_hal::digital::v2::StatefulOutputPin for AnyPin<Output<
}
}
impl<MODE, TYPE> embedded_hal::digital::v2::ToggleableOutputPin for AnyPin<Output<MODE>, TYPE> {
#[cfg(feature = "embedded-hal-02")]
impl<MODE, TYPE> embedded_hal_02::digital::v2::ToggleableOutputPin for AnyPin<Output<MODE>, TYPE> {
type Error = Infallible;
fn toggle(&mut self) -> Result<(), Self::Error> {
@ -1786,13 +1797,13 @@ impl<MODE, TYPE> embedded_hal::digital::v2::ToggleableOutputPin for AnyPin<Outpu
}
}
#[cfg(feature = "eh1")]
impl<MODE, TYPE> embedded_hal_1::digital::ErrorType for AnyPin<Output<MODE>, TYPE> {
#[cfg(feature = "embedded-hal")]
impl<MODE, TYPE> embedded_hal::digital::ErrorType for AnyPin<Output<MODE>, TYPE> {
type Error = Infallible;
}
#[cfg(feature = "eh1")]
impl<MODE, TYPE> embedded_hal_1::digital::OutputPin for AnyPin<Output<MODE>, TYPE> {
#[cfg(feature = "embedded-hal")]
impl<MODE, TYPE> embedded_hal::digital::OutputPin for AnyPin<Output<MODE>, TYPE> {
fn set_low(&mut self) -> Result<(), Self::Error> {
let inner = &mut self.inner;
handle_gpio_output!(inner, target, { target.set_low() })
@ -1804,8 +1815,8 @@ impl<MODE, TYPE> embedded_hal_1::digital::OutputPin for AnyPin<Output<MODE>, TYP
}
}
#[cfg(feature = "eh1")]
impl<MODE, TYPE> embedded_hal_1::digital::StatefulOutputPin for AnyPin<Output<MODE>, TYPE> {
#[cfg(feature = "embedded-hal")]
impl<MODE, TYPE> embedded_hal::digital::StatefulOutputPin for AnyPin<Output<MODE>, TYPE> {
fn is_set_high(&mut self) -> Result<bool, Self::Error> {
let inner = &mut self.inner;
handle_gpio_output!(inner, target, { target.is_set_high() })
@ -3139,7 +3150,7 @@ mod asynch {
impl<'a, P> PinFuture<'a, P>
where
P: crate::gpio::Pin + embedded_hal_1::digital::ErrorType,
P: crate::gpio::Pin + embedded_hal::digital::ErrorType,
{
pub fn new(pin: &'a mut P, event: Event) -> Self {
pin.listen(event);
@ -3149,7 +3160,7 @@ mod asynch {
impl<'a, P> core::future::Future for PinFuture<'a, P>
where
P: crate::gpio::Pin + embedded_hal_1::digital::ErrorType,
P: crate::gpio::Pin + embedded_hal::digital::ErrorType,
{
type Output = Result<(), P::Error>;

View File

@ -62,10 +62,10 @@ pub enum Error {
CommandNrExceeded,
}
#[cfg(feature = "eh1")]
impl embedded_hal_1::i2c::Error for Error {
fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
use embedded_hal_1::i2c::ErrorKind;
#[cfg(feature = "embedded-hal")]
impl embedded_hal::i2c::Error for Error {
fn kind(&self) -> embedded_hal::i2c::ErrorKind {
use embedded_hal::i2c::ErrorKind;
match self {
Self::ExceedingFifo => ErrorKind::Overrun,
@ -187,7 +187,8 @@ pub struct I2C<'d, T> {
peripheral: PeripheralRef<'d, T>,
}
impl<T> embedded_hal::blocking::i2c::Read for I2C<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::blocking::i2c::Read for I2C<'_, T>
where
T: Instance,
{
@ -198,7 +199,8 @@ where
}
}
impl<T> embedded_hal::blocking::i2c::Write for I2C<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::blocking::i2c::Write for I2C<'_, T>
where
T: Instance,
{
@ -209,7 +211,8 @@ where
}
}
impl<T> embedded_hal::blocking::i2c::WriteRead for I2C<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::blocking::i2c::WriteRead for I2C<'_, T>
where
T: Instance,
{
@ -225,13 +228,13 @@ where
}
}
#[cfg(feature = "eh1")]
impl<T> embedded_hal_1::i2c::ErrorType for I2C<'_, T> {
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal::i2c::ErrorType for I2C<'_, T> {
type Error = Error;
}
#[cfg(feature = "eh1")]
impl<T> embedded_hal_1::i2c::I2c for I2C<'_, T>
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal::i2c::I2c for I2C<'_, T>
where
T: Instance,
{
@ -255,7 +258,7 @@ where
fn transaction<'a>(
&mut self,
_address: u8,
_operations: &mut [embedded_hal_1::i2c::Operation<'a>],
_operations: &mut [embedded_hal::i2c::Operation<'a>],
) -> Result<(), Self::Error> {
todo!()
}
@ -337,7 +340,7 @@ mod asynch {
use cfg_if::cfg_if;
use embassy_futures::select::select;
use embassy_sync::waitqueue::AtomicWaker;
use embedded_hal_1::i2c::Operation;
use embedded_hal::i2c::Operation;
use procmacros::interrupt;
use super::*;

View File

@ -285,9 +285,9 @@ where
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
mod ehal1 {
use embedded_hal_1::pwm::{self, ErrorKind, ErrorType, SetDutyCycle};
use embedded_hal::pwm::{self, ErrorKind, ErrorType, SetDutyCycle};
use super::{Channel, ChannelHW, ChannelIFace, Error};
use crate::{gpio::OutputPin, ledc::timer::TimerSpeed};

View File

@ -638,7 +638,8 @@ impl<'d, Pin: OutputPin, PWM: PwmPeripheral, const OP: u8, const IS_A: bool>
}
}
impl<'d, Pin: OutputPin, PWM: PwmPeripheral, const OP: u8, const IS_A: bool> embedded_hal::PwmPin
#[cfg(feature = "embedded-hal-02")]
impl<'d, Pin: OutputPin, PWM: PwmPeripheral, const OP: u8, const IS_A: bool> embedded_hal_02::PwmPin
for PwmPin<'d, Pin, PWM, OP, IS_A>
{
type Duty = u16;
@ -672,17 +673,17 @@ impl<'d, Pin: OutputPin, PWM: PwmPeripheral, const OP: u8, const IS_A: bool> emb
}
/// Implement no error type for the PwmPin because the method are infallible
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<'d, Pin: OutputPin, PWM: PwmPeripheral, const OP: u8, const IS_A: bool>
embedded_hal_1::pwm::ErrorType for PwmPin<'d, Pin, PWM, OP, IS_A>
embedded_hal::pwm::ErrorType for PwmPin<'d, Pin, PWM, OP, IS_A>
{
type Error = core::convert::Infallible;
}
/// Implement the trait SetDutyCycle for PwmPin
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<'d, Pin: OutputPin, PWM: PwmPeripheral, const OP: u8, const IS_A: bool>
embedded_hal_1::pwm::SetDutyCycle for PwmPin<'d, Pin, PWM, OP, IS_A>
embedded_hal::pwm::SetDutyCycle for PwmPin<'d, Pin, PWM, OP, IS_A>
{
/// Get the max duty of the PwmPin
fn max_duty_cycle(&self) -> u16 {

View File

@ -10,15 +10,6 @@ pub use embedded_dma::{
WriteBuffer as _embedded_dma_WriteBuffer,
WriteTarget as _embedded_dma_WriteTarget,
};
pub use embedded_hal::{
digital::v2::{
InputPin as _embedded_hal_digital_v2_InputPin,
OutputPin as _embedded_hal_digital_v2_OutputPin,
StatefulOutputPin as _embedded_hal_digital_v2_StatefulOutputPin,
ToggleableOutputPin as _embedded_hal_digital_v2_ToggleableOutputPin,
},
prelude::*,
};
pub use fugit::{
ExtU32 as _fugit_ExtU32,
ExtU64 as _fugit_ExtU64,

View File

@ -16,7 +16,7 @@
//! method, which returns a 32-bit unsigned integer.
//!
//! Additionally, this driver implements the
//! [Read](embedded_hal::blocking::rng::Read) trait from the `embedded_hal`
//! [Read](embedded_hal_02::blocking::rng::Read) trait from the `embedded_hal`
//! crate, allowing you to generate random bytes by calling the `read` method.
//
//! # Important Note
@ -95,7 +95,8 @@ impl Rng {
}
}
impl embedded_hal::blocking::rng::Read for Rng {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::blocking::rng::Read for Rng {
type Error = Infallible;
fn read(&mut self, buffer: &mut [u8]) -> Result<(), Self::Error> {

View File

@ -69,7 +69,6 @@
//! }
//! ```
use embedded_hal::watchdog::{Watchdog, WatchdogDisable, WatchdogEnable};
#[cfg(not(any(esp32c6, esp32h2)))]
use fugit::HertzU32;
use fugit::MicrosDurationU64;
@ -307,9 +306,7 @@ impl<'d> Rtc<'d> {
}
config.apply();
use embedded_hal::blocking::delay::DelayMs;
delay.delay_ms(100u32);
delay.delay_millis(100u32);
config.start_sleep(wakeup_triggers);
config.finish_sleep();
@ -871,13 +868,15 @@ impl Rwdt {
}
}
impl WatchdogDisable for Rwdt {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::watchdog::WatchdogDisable for Rwdt {
fn disable(&mut self) {
self.disable();
}
}
impl WatchdogEnable for Rwdt {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::watchdog::WatchdogEnable for Rwdt {
type Time = MicrosDurationU64;
fn start<T>(&mut self, period: T)
@ -888,7 +887,8 @@ impl WatchdogEnable for Rwdt {
}
}
impl Watchdog for Rwdt {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::watchdog::Watchdog for Rwdt {
fn feed(&mut self) {
self.feed();
}
@ -949,8 +949,11 @@ impl Default for Swd {
}
}
#[cfg(any(esp32c2, esp32c3, esp32c6, esp32h2, esp32s3))]
impl WatchdogDisable for Swd {
#[cfg(all(
any(esp32c2, esp32c3, esp32c6, esp32h2, esp32s3),
feature = "embedded-hal-02"
))]
impl embedded_hal_02::watchdog::WatchdogDisable for Swd {
fn disable(&mut self) {
self.disable();
}

View File

@ -29,11 +29,11 @@
//! If all you want to do is to communicate to a single device, and you initiate
//! transactions yourself, there are a number of ways to achieve this:
//!
//! - Use the [`FullDuplex`](embedded_hal::spi::FullDuplex) trait to read/write
//! single bytes at a time,
//! - Use the [`SpiBus`](embedded_hal_1::spi::SpiBus) trait (requires the "eh1"
//! feature) and its associated functions to initiate transactions with
//! simultaneous reads and writes, or
//! - Use the [`FullDuplex`](embedded_hal_02::spi::FullDuplex) trait to
//! read/write single bytes at a time,
//! - Use the [`SpiBus`](embedded_hal::spi::SpiBus) trait (requires the
//! "embedded-hal" feature) and its associated functions to initiate
//! transactions with simultaneous reads and writes, or
//! - Use the `ExclusiveDevice` struct from [`embedded-hal-bus`] or `SpiDevice`
//! from [`embassy-embedded-hal`].
//!
@ -716,7 +716,8 @@ where
}
}
impl<T, M> embedded_hal::spi::FullDuplex<u8> for Spi<'_, T, M>
#[cfg(feature = "embedded-hal-02")]
impl<T, M> embedded_hal_02::spi::FullDuplex<u8> for Spi<'_, T, M>
where
T: Instance,
M: IsFullDuplex,
@ -732,7 +733,8 @@ where
}
}
impl<T, M> embedded_hal::blocking::spi::Transfer<u8> for Spi<'_, T, M>
#[cfg(feature = "embedded-hal-02")]
impl<T, M> embedded_hal_02::blocking::spi::Transfer<u8> for Spi<'_, T, M>
where
T: Instance,
M: IsFullDuplex,
@ -744,7 +746,8 @@ where
}
}
impl<T, M> embedded_hal::blocking::spi::Write<u8> for Spi<'_, T, M>
#[cfg(feature = "embedded-hal-02")]
impl<T, M> embedded_hal_02::blocking::spi::Write<u8> for Spi<'_, T, M>
where
T: Instance,
M: IsFullDuplex,
@ -1214,7 +1217,8 @@ pub mod dma {
}
}
impl<'d, T, C, M> embedded_hal::blocking::spi::Transfer<u8> for SpiDma<'d, T, C, M>
#[cfg(feature = "embedded-hal-02")]
impl<'d, T, C, M> embedded_hal_02::blocking::spi::Transfer<u8> for SpiDma<'d, T, C, M>
where
T: InstanceDma<C::Tx<'d>, C::Rx<'d>>,
C: ChannelTypes,
@ -1229,7 +1233,8 @@ pub mod dma {
}
}
impl<'d, T, C, M> embedded_hal::blocking::spi::Write<u8> for SpiDma<'d, T, C, M>
#[cfg(feature = "embedded-hal-02")]
impl<'d, T, C, M> embedded_hal_02::blocking::spi::Write<u8> for SpiDma<'d, T, C, M>
where
T: InstanceDma<C::Tx<'d>, C::Rx<'d>>,
C: ChannelTypes,
@ -1245,8 +1250,9 @@ pub mod dma {
}
}
impl<T: embedded_hal::blocking::spi::Transfer<u8>, const SIZE: usize>
embedded_hal::blocking::spi::Transfer<u8> for FlashSafeDma<T, SIZE>
#[cfg(feature = "embedded-hal-02")]
impl<T: embedded_hal_02::blocking::spi::Transfer<u8>, const SIZE: usize>
embedded_hal_02::blocking::spi::Transfer<u8> for FlashSafeDma<T, SIZE>
{
type Error = T::Error;
@ -1255,8 +1261,9 @@ pub mod dma {
}
}
impl<T: embedded_hal::blocking::spi::Write<u8>, const SIZE: usize>
embedded_hal::blocking::spi::Write<u8> for FlashSafeDma<T, SIZE>
#[cfg(feature = "embedded-hal-02")]
impl<T: embedded_hal_02::blocking::spi::Write<u8>, const SIZE: usize>
embedded_hal_02::blocking::spi::Write<u8> for FlashSafeDma<T, SIZE>
{
type Error = T::Error;
@ -1274,23 +1281,24 @@ pub mod dma {
}
}
impl<T: embedded_hal::spi::FullDuplex<u8>, const SIZE: usize> embedded_hal::spi::FullDuplex<u8>
for FlashSafeDma<T, SIZE>
#[cfg(feature = "embedded-hal-02")]
impl<T: embedded_hal_02::spi::FullDuplex<u8>, const SIZE: usize>
embedded_hal_02::spi::FullDuplex<u8> for FlashSafeDma<T, SIZE>
where
Self: embedded_hal::blocking::spi::Transfer<u8, Error = T::Error>,
Self: embedded_hal::blocking::spi::Write<u8, Error = T::Error>,
Self: embedded_hal_02::blocking::spi::Transfer<u8, Error = T::Error>,
Self: embedded_hal_02::blocking::spi::Write<u8, Error = T::Error>,
{
type Error = T::Error;
fn read(&mut self) -> nb::Result<u8, Self::Error> {
use embedded_hal::blocking::spi::Transfer;
use embedded_hal_02::blocking::spi::Transfer;
let mut buf = [0; 1];
self.transfer(&mut buf)?;
Ok(buf[0])
}
fn send(&mut self, word: u8) -> nb::Result<(), Self::Error> {
use embedded_hal::blocking::spi::Write;
use embedded_hal_02::blocking::spi::Write;
self.write(&[word])?;
Ok(())
}
@ -1454,9 +1462,9 @@ pub mod dma {
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
mod ehal1 {
use embedded_hal_1::spi::{ErrorType, SpiBus};
use embedded_hal::spi::{ErrorType, SpiBus};
use super::*;
@ -1560,14 +1568,14 @@ pub mod dma {
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
mod ehal1 {
use embedded_hal_1::spi::SpiBus;
use embedded_hal::spi::SpiBus;
use embedded_hal_nb::spi::FullDuplex;
use super::*;
impl<T, M> embedded_hal_1::spi::ErrorType for Spi<'_, T, M> {
impl<T, M> embedded_hal::spi::ErrorType for Spi<'_, T, M> {
type Error = super::Error;
}

View File

@ -27,10 +27,10 @@ impl From<DmaError> for Error {
}
}
#[cfg(feature = "eh1")]
impl embedded_hal_1::spi::Error for Error {
fn kind(&self) -> embedded_hal_1::spi::ErrorKind {
embedded_hal_1::spi::ErrorKind::Other
#[cfg(feature = "embedded-hal")]
impl embedded_hal::spi::Error for Error {
fn kind(&self) -> embedded_hal::spi::ErrorKind {
embedded_hal::spi::ErrorKind::Other
}
}

View File

@ -39,10 +39,6 @@ use core::{
ops::{Deref, DerefMut},
};
use embedded_hal::{
timer::{Cancel, CountDown, Periodic},
watchdog::{Watchdog, WatchdogDisable, WatchdogEnable},
};
use fugit::{HertzU32, MicrosDurationU64};
use void::Void;
@ -650,7 +646,8 @@ where
(1_000_000 * micros / period as u64) as u64
}
impl<T> CountDown for Timer<T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::timer::CountDown for Timer<T>
where
T: Instance,
{
@ -693,7 +690,8 @@ where
}
}
impl<T> Cancel for Timer<T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::timer::Cancel for Timer<T>
where
T: Instance,
{
@ -712,7 +710,8 @@ where
}
}
impl<T> Periodic for Timer<T> where T: Instance {}
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::timer::Periodic for Timer<T> where T: Instance {}
/// Watchdog timer
pub struct Wdt<TG> {
@ -844,7 +843,8 @@ where
}
}
impl<TG> WatchdogDisable for Wdt<TG>
#[cfg(feature = "embedded-hal-02")]
impl<TG> embedded_hal_02::watchdog::WatchdogDisable for Wdt<TG>
where
TG: TimerGroupInstance,
{
@ -853,7 +853,8 @@ where
}
}
impl<TG> WatchdogEnable for Wdt<TG>
#[cfg(feature = "embedded-hal-02")]
impl<TG> embedded_hal_02::watchdog::WatchdogEnable for Wdt<TG>
where
TG: TimerGroupInstance,
{
@ -868,7 +869,8 @@ where
}
}
impl<TG> Watchdog for Wdt<TG>
#[cfg(feature = "embedded-hal-02")]
impl<TG> embedded_hal_02::watchdog::Watchdog for Wdt<TG>
where
TG: TimerGroupInstance,
{

View File

@ -3,10 +3,10 @@
//! These are acceptance filters that limit which packets are received by the
//! TWAI peripheral.
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
use embedded_can::{ExtendedId, StandardId};
#[cfg(not(feature = "eh1"))]
use embedded_hal::can::{ExtendedId, StandardId};
#[cfg(not(feature = "embedded-hal"))] // FIXME
use embedded_hal_02::can::{ExtendedId, StandardId};
#[derive(Debug, PartialEq, Eq)]
pub enum FilterType {

View File

@ -75,10 +75,10 @@
//! }
//! ```
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
use embedded_can::{nb::Can, Error, ErrorKind, ExtendedId, Frame, Id, StandardId};
#[cfg(not(feature = "eh1"))]
use embedded_hal::can::{Can, Error, ErrorKind, ExtendedId, Frame, Id, StandardId};
#[cfg(not(feature = "embedded-hal"))] // FIXME
use embedded_hal_02::can::{Can, Error, ErrorKind, ExtendedId, Frame, Id, StandardId};
use fugit::HertzU32;
use self::filter::{Filter, FilterType};
@ -92,7 +92,7 @@ use crate::{
pub mod filter;
/// Structure backing the embedded_hal::can::Frame/embedded_can::Frame trait.
/// Structure backing the embedded_hal_02::can::Frame/embedded_can::Frame trait.
#[derive(Clone, Copy, Debug)]
pub struct EspTwaiFrame {
id: Id,

View File

@ -65,7 +65,7 @@ pub enum Error {
RxFifoOvf,
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::Error for Error {
fn kind(&self) -> embedded_hal_nb::serial::ErrorKind {
embedded_hal_nb::serial::ErrorKind::Other
@ -730,17 +730,17 @@ where
.write(|w| w.rxfifo_full_int_clr().set_bit());
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
fn write_byte(&mut self, word: u8) -> nb::Result<(), Error> {
self.tx.write_byte(word)
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
fn flush_tx(&self) -> nb::Result<(), Error> {
self.tx.flush_tx()
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
fn read_byte(&mut self) -> nb::Result<u8, Error> {
self.rx.read_byte()
}
@ -1230,7 +1230,8 @@ where
}
}
impl<T> embedded_hal::serial::Write<u8> for Uart<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::serial::Write<u8> for Uart<'_, T>
where
T: Instance,
{
@ -1245,7 +1246,8 @@ where
}
}
impl<T> embedded_hal::serial::Write<u8> for UartTx<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::serial::Write<u8> for UartTx<'_, T>
where
T: Instance,
{
@ -1260,7 +1262,8 @@ where
}
}
impl<T> embedded_hal::serial::Read<u8> for Uart<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::serial::Read<u8> for Uart<'_, T>
where
T: Instance,
{
@ -1271,7 +1274,8 @@ where
}
}
impl<T> embedded_hal::serial::Read<u8> for UartRx<'_, T>
#[cfg(feature = "embedded-hal-02")]
impl<T> embedded_hal_02::serial::Read<u8> for UartRx<'_, T>
where
T: Instance,
{
@ -1282,22 +1286,22 @@ where
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::ErrorType for Uart<'_, T> {
type Error = Error;
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::ErrorType for UartTx<'_, T> {
type Error = Error;
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::ErrorType for UartRx<'_, T> {
type Error = Error;
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::Read for Uart<'_, T>
where
T: Instance,
@ -1307,7 +1311,7 @@ where
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::Read for UartRx<'_, T>
where
T: Instance,
@ -1317,7 +1321,7 @@ where
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::Write for Uart<'_, T>
where
T: Instance,
@ -1331,7 +1335,7 @@ where
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl<T> embedded_hal_nb::serial::Write for UartTx<'_, T>
where
T: Instance,

View File

@ -364,15 +364,17 @@ impl ufmt_write::uWrite for UsbSerialJtagTx<'_> {
}
}
impl embedded_hal::serial::Read<u8> for UsbSerialJtag<'_> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::serial::Read<u8> for UsbSerialJtag<'_> {
type Error = Error;
fn read(&mut self) -> nb::Result<u8, Self::Error> {
embedded_hal::serial::Read::read(&mut self.rx)
embedded_hal_02::serial::Read::read(&mut self.rx)
}
}
impl embedded_hal::serial::Read<u8> for UsbSerialJtagRx<'_> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::serial::Read<u8> for UsbSerialJtagRx<'_> {
type Error = Error;
fn read(&mut self) -> nb::Result<u8, Self::Error> {
@ -380,19 +382,21 @@ impl embedded_hal::serial::Read<u8> for UsbSerialJtagRx<'_> {
}
}
impl embedded_hal::serial::Write<u8> for UsbSerialJtag<'_> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::serial::Write<u8> for UsbSerialJtag<'_> {
type Error = Error;
fn write(&mut self, word: u8) -> nb::Result<(), Self::Error> {
embedded_hal::serial::Write::write(&mut self.tx, word)
embedded_hal_02::serial::Write::write(&mut self.tx, word)
}
fn flush(&mut self) -> nb::Result<(), Self::Error> {
embedded_hal::serial::Write::flush(&mut self.tx)
embedded_hal_02::serial::Write::flush(&mut self.tx)
}
}
impl embedded_hal::serial::Write<u8> for UsbSerialJtagTx<'_> {
#[cfg(feature = "embedded-hal-02")]
impl embedded_hal_02::serial::Write<u8> for UsbSerialJtagTx<'_> {
type Error = Error;
fn write(&mut self, word: u8) -> nb::Result<(), Self::Error> {
@ -404,36 +408,36 @@ impl embedded_hal::serial::Write<u8> for UsbSerialJtagTx<'_> {
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::ErrorType for UsbSerialJtag<'_> {
type Error = Error;
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::ErrorType for UsbSerialJtagTx<'_> {
type Error = Error;
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::ErrorType for UsbSerialJtagRx<'_> {
type Error = Error;
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::Read for UsbSerialJtag<'_> {
fn read(&mut self) -> nb::Result<u8, Self::Error> {
embedded_hal_nb::serial::Read::read(&mut self.rx)
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::Read for UsbSerialJtagRx<'_> {
fn read(&mut self) -> nb::Result<u8, Self::Error> {
self.read_byte()
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::Write for UsbSerialJtag<'_> {
fn write(&mut self, word: u8) -> nb::Result<(), Self::Error> {
embedded_hal_nb::serial::Write::write(&mut self.tx, word)
@ -444,7 +448,7 @@ impl embedded_hal_nb::serial::Write for UsbSerialJtag<'_> {
}
}
#[cfg(feature = "eh1")]
#[cfg(feature = "embedded-hal")]
impl embedded_hal_nb::serial::Write for UsbSerialJtagTx<'_> {
fn write(&mut self, word: u8) -> nb::Result<(), Self::Error> {
self.write_byte_nb(word)

View File

@ -17,7 +17,7 @@ embassy-time = "0.3.0"
embassy-time-driver = { version = "0.1.0", optional = true }
embedded-graphics = "0.8.1"
embedded-hal = "1.0.0"
embedded-hal-02 = { version = "0.2.7", package = "embedded-hal" }
embedded-hal-02 = { version = "0.2.7", package = "embedded-hal", features = ["unproven"] }
embedded-hal-async = "1.0.0"
embedded-hal-bus = "0.1.0"
embedded-io-async = "0.6.1"
@ -52,7 +52,8 @@ esp32s3 = ["esp-hal/esp32s3", "esp-backtrace/esp32s3", "esp-println/esp32s3", "e
async = ["esp-hal/async"]
eh1 = ["esp-hal/eh1"]
embedded-hal-02 = ["esp-hal/embedded-hal-02"]
embedded-hal = ["esp-hal/embedded-hal"]
embassy = ["esp-hal/embassy"]

View File

@ -5,10 +5,12 @@
//! maximum and minimum raw values read.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::adc::OneShot;
use esp_backtrace as _;
use esp_hal::{
analog::adc::{AdcConfig, Attenuation, ADC},
@ -42,11 +44,11 @@ fn main() -> ! {
let mut adc1_pin = adc1_config.enable_pin(analog_pin, Attenuation::Attenuation11dB);
let mut adc1 = ADC::<ADC1>::new(peripherals.ADC1, adc1_config);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
let pin_value: u16 = nb::block!(adc1.read(&mut adc1_pin)).unwrap();
println!("ADC reading = {}", pin_value);
delay.delay_ms(1500u32);
delay.delay_millis(1500u32);
}
}

View File

@ -3,10 +3,12 @@
//! 3V3 to see the maximum and minimum raw values read.
//% CHIPS: esp32c2 esp32c3 esp32c6 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::adc::OneShot;
use esp_backtrace as _;
use esp_hal::{
analog::adc::{AdcConfig, Attenuation, ADC},
@ -48,11 +50,11 @@ fn main() -> ! {
adc1_config.enable_pin_with_cal::<_, AdcCal>(analog_pin, Attenuation::Attenuation11dB);
let mut adc1 = ADC::<ADC1>::new(peripherals.ADC1, adc1_config);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
let pin_mv = nb::block!(adc1.read(&mut adc1_pin)).unwrap();
println!("PIN2 ADC reading = {pin_mv} mV");
delay.delay_ms(1500u32);
delay.delay_millis(1500u32);
}
}

View File

@ -8,10 +8,12 @@
//! - RX => GPIO5
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::serial::{Read, Write};
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -49,7 +51,7 @@ fn main() -> ! {
let mut serial1 = Uart::new_with_config(peripherals.UART1, config, Some(pins), &clocks);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
println!("Start");
loop {
@ -61,6 +63,6 @@ fn main() -> ! {
Err(err) => println!("Error {:?}", err),
}
delay.delay_ms(250u32);
delay.delay_millis(250u32);
}
}

View File

@ -3,10 +3,12 @@
//! This assumes that a LED is connected to the pin assigned to `led`. (GPIO0)
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::digital::v2::{OutputPin, ToggleableOutputPin};
use esp_backtrace as _;
use esp_hal::{clock::ClockControl, delay::Delay, gpio::IO, peripherals::Peripherals, prelude::*};
@ -24,10 +26,10 @@ fn main() -> ! {
// Initialize the Delay peripheral, and use it to toggle the LED state in a
// loop.
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
led.toggle().unwrap();
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -6,10 +6,12 @@
//! Additionally demonstrates passing GPIO to a function in a generic way.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::digital::v2::{InputPin, ToggleableOutputPin};
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -40,11 +42,11 @@ fn main() -> ! {
// Initialize the `Delay` peripheral, and use it to toggle the LED state
// in a loop:
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
toggle_pins(&mut pins, &button);
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -3,6 +3,7 @@
//! clock cycles within a given number of RTC_SLOW_CLK cycles.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -10,6 +11,7 @@
use core::cell::RefCell;
use critical_section::Mutex;
use embedded_hal_02::watchdog::WatchdogEnable;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -1,12 +1,14 @@
//! This shows example usage of the CRC functions in ROM
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use core::fmt::Write;
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -43,7 +43,7 @@ fn main() -> ! {
let mut dac1 = DAC1::new(peripherals.DAC1, dac1_pin);
let mut dac2 = DAC2::new(peripherals.DAC2, dac2_pin);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
let mut voltage_dac1: u8 = 200;
let mut voltage_dac2: u8 = 255;
@ -54,6 +54,6 @@ fn main() -> ! {
voltage_dac2 = voltage_dac2.wrapping_sub(1);
dac2.write(voltage_dac2);
delay.delay_ms(50u32);
delay.delay_millis(50u32);
}
}

View File

@ -2,6 +2,7 @@
//! hardware-accelerated and pure software ECC.
//% CHIPS: esp32c2 esp32c6 esp32h2
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -15,6 +16,7 @@ use crypto_bigint::{
U256,
};
use elliptic_curve::sec1::ToEncodedPoint;
use embedded_hal_02::blocking::rng::Read;
use esp_backtrace as _;
use esp_hal::{
ecc::{Ecc, EllipticCurve, Error, WorkMode},

View File

@ -4,7 +4,7 @@
//! signal set by the task running on the other core.
//% CHIPS: esp32 esp32s3
//% FEATURES: embassy embassy-executor-thread embassy-time-timg0 embassy-generic-timers
//% FEATURES: embassy embassy-executor-thread embassy-time-timg0 embassy-generic-timers embedded-hal-02
#![no_std]
#![no_main]
@ -13,6 +13,7 @@
use embassy_executor::Spawner;
use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, signal::Signal};
use embassy_time::{Duration, Ticker};
use embedded_hal_02::digital::v2::OutputPin;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -4,7 +4,7 @@
//! signal set by the task running on the other core.
//% CHIPS: esp32 esp32s3
//% FEATURES: embassy embassy-executor-interrupt embassy-time-timg0 embassy-generic-timers
//% FEATURES: embassy embassy-executor-interrupt embassy-time-timg0 embassy-generic-timers embedded-hal-02
#![no_std]
#![no_main]
@ -12,6 +12,7 @@
use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, signal::Signal};
use embassy_time::{Duration, Ticker};
use embedded_hal_02::digital::v2::OutputPin;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -2,7 +2,7 @@
//! Connect GPIO5 to GPIO4
//% CHIPS: esp32 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: async embassy embassy-executor-thread embassy-time-timg0 embassy-generic-timers
//% FEATURES: async embassy embassy-executor-thread embassy-time-timg0 embassy-generic-timers embedded-hal-02
#![no_std]
#![no_main]
@ -10,6 +10,7 @@
use embassy_executor::Spawner;
use embassy_time::{Duration, Timer};
use embedded_hal_02::digital::v2::ToggleableOutputPin;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -1,10 +1,12 @@
//! Control LED on GPIO1 by the BOOT-BUTTON via ETM
//% CHIPS: esp32c6 esp32h2
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::digital::v2::OutputPin;
use esp_backtrace as _;
use esp_hal::{
etm::Etm,

View File

@ -4,6 +4,7 @@
//! It also blinks an LED like the blinky example.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -11,6 +12,7 @@
use core::cell::RefCell;
use critical_section::Mutex;
use embedded_hal_02::digital::v2::{OutputPin, ToggleableOutputPin};
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -54,11 +56,11 @@ fn main() -> ! {
// Initialize the Delay peripheral, and use it to toggle the LED state in a
// loop.
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
led.toggle().unwrap();
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -67,7 +67,7 @@ fn main() -> ! {
// Initialize the Delay peripheral, and use it to toggle the LED state in a
// loop.
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
let mut color = Hsv {
hue: 0,
@ -88,7 +88,7 @@ fn main() -> ! {
// that the output it's not too bright.
led.write(brightness(gamma(data.iter().cloned()), 10))
.unwrap();
delay.delay_ms(20u8);
delay.delay_millis(20);
}
}
}

View File

@ -4,12 +4,14 @@
//! option.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use core::fmt::Write;
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -53,10 +53,12 @@
//! ```
//% CHIPS: esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::blocking::rng::Read;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -7,10 +7,12 @@
//! - SCL => GPIO5
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::blocking::i2c::WriteRead;
use esp_backtrace as _;
use esp_hal::{clock::ClockControl, gpio::IO, i2c::I2C, peripherals::Peripherals, prelude::*};
use esp_println::println;

View File

@ -8,6 +8,7 @@
//! - SCL => GPIO2
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -21,6 +22,7 @@ use embedded_graphics::{
prelude::*,
text::{Alignment, Text},
};
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -18,10 +18,12 @@
//! D7 GPIO15
//% CHIPS: esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::digital::v2::OutputPin;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -64,7 +66,7 @@ fn main() -> ! {
DmaPriority::Priority0,
);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
let mut backlight = lcd_backlight.into_push_pull_output();
let mut reset = lcd_reset.into_push_pull_output();
@ -96,9 +98,9 @@ fn main() -> ! {
// https://github.com/lovyan03/LovyanGFX/blob/302169a6f23e9a2a6451f03311c366d182193831/src/lgfx/v1/panel/Panel_ST7796.hpp#L28
reset.set_low().unwrap();
delay.delay_us(8_000u32);
delay.delay_micros(8_000u32);
reset.set_high().unwrap();
delay.delay_us(64_000u32);
delay.delay_micros(64_000u32);
// const CMD_FRMCTR1: u8 = 0xB1;
// const CMD_FRMCTR2: u8 = 0xB2;
@ -149,7 +151,7 @@ fn main() -> ! {
i8080.send(CMD_PWCTR3, 0, &[0xA7]).unwrap(); // Power control 3 //Source driving current level=low, Gamma driving current
// level=High
i8080.send(CMD_VMCTR, 0, &[0x18]).unwrap(); // VCOM Control //VCOM=0.9
delay.delay_us(120_000u32);
delay.delay_micros(120_000u32);
i8080
.send(
CMD_GMCTRP1,
@ -170,13 +172,13 @@ fn main() -> ! {
],
)
.unwrap();
delay.delay_us(120_000u32);
delay.delay_micros(120_000u32);
i8080.send(CMD_CSCON, 0, &[0x3C]).unwrap(); // Command Set control // Disable extension command 2 partI
i8080.send(CMD_CSCON, 0, &[0x69]).unwrap(); // Command Set control // Disable
// extension command 2 partII
i8080.send(0x11, 0, &[]).unwrap(); // ExitSleepMode
delay.delay_us(130_000u32);
delay.delay_micros(130_000u32);
i8080.send(0x38, 0, &[]).unwrap(); // ExitIdleMode
i8080.send(0x29, 0, &[]).unwrap(); // SetDisplayOn
@ -239,10 +241,10 @@ fn main() -> ! {
transfer.wait().unwrap();
}
delay.delay_ms(1_000u32);
delay.delay_millis(1_000u32);
}
loop {
delay.delay_ms(1_000u32);
delay.delay_millis(1_000u32);
}
}

View File

@ -6,10 +6,12 @@
//! Make sure to first compile the `esp-lp-hal/examples/uart.rs` example
//% CHIPS: esp32c6
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::serial::Read;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -4,6 +4,7 @@
//! second core.
//% CHIPS: esp32 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -11,6 +12,7 @@
use core::cell::RefCell;
use critical_section::Mutex;
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -57,13 +57,13 @@ fn main() -> ! {
let mut buffer = rx_buffer;
buffer.fill(0u8);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
let transfer = parl_io_rx.read_dma(&mut buffer).unwrap();
transfer.wait().unwrap();
println!("Received: {:02x?} ...", &buffer[..30]);
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -80,13 +80,13 @@ fn main() -> ! {
buffer[i] = (i % 255) as u8;
}
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
let transfer = parl_io_tx.write_dma(&buffer).unwrap();
transfer.wait().unwrap();
println!("Transferred {} bytes", buffer.len());
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -13,12 +13,7 @@ extern crate alloc;
use alloc::{string::String, vec::Vec};
use esp_backtrace as _;
use esp_hal::{
clock::{ClockControl, CpuClock},
peripherals::Peripherals,
prelude::*,
psram,
};
use esp_hal::{clock::ClockControl, peripherals::Peripherals, prelude::*, psram};
use esp_println::println;
#[global_allocator]

View File

@ -93,7 +93,7 @@ fn main() -> ! {
DmaPriority::Priority0,
));
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
// DMA buffer require a static life-time
let (zero_buf, _, _, _) = dma_buffers!(0);
@ -111,7 +111,7 @@ fn main() -> ! {
)
.unwrap();
transfer.wait().unwrap();
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// erase sector
let transfer = spi
@ -124,7 +124,7 @@ fn main() -> ! {
)
.unwrap();
transfer.wait().unwrap();
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// write enable
let transfer = spi
@ -137,7 +137,7 @@ fn main() -> ! {
)
.unwrap();
transfer.wait().unwrap();
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// write data / program page
send.fill(b'!');
@ -152,7 +152,7 @@ fn main() -> ! {
)
.unwrap();
transfer.wait().unwrap();
delay.delay_ms(250u32);
delay.delay_millis(250u32);
loop {
// quad fast read
@ -181,6 +181,6 @@ fn main() -> ! {
}
println!();
delay.delay_ms(250u32);
delay.delay_millis(250u32);
}
}

View File

@ -12,10 +12,12 @@
//! We can also run code from RTC memory.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -2,10 +2,12 @@
//! Connect GPIO5 to GPIO4
//% CHIPS: esp32 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::digital::v2::OutputPin;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -54,7 +56,7 @@ fn main() -> ! {
}
}
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
let mut data = [PulseCode {
level1: true,
@ -74,9 +76,9 @@ fn main() -> ! {
// simulate input
for i in 0u32..5u32 {
out.set_high().unwrap();
delay.delay_us(i * 10 + 20);
delay.delay_micros(i * 10 + 20);
out.set_low().unwrap();
delay.delay_us(i * 20 + 20);
delay.delay_micros(i * 20 + 20);
}
match transaction.wait() {
@ -125,6 +127,6 @@ fn main() -> ! {
}
}
delay.delay_ms(1500u32);
delay.delay_millis(1500u32);
}
}

View File

@ -42,7 +42,7 @@ fn main() -> ! {
let mut channel = rmt.channel0.configure(io.pins.gpio4, tx_config).unwrap();
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
let mut data = [PulseCode {
level1: true,
@ -62,6 +62,6 @@ fn main() -> ! {
loop {
let transaction = channel.transmit(&data);
channel = transaction.wait().unwrap();
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -1,10 +1,12 @@
//! Demonstrates the use of the hardware Random Number Generator (RNG)
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::blocking::rng::Read;
use esp_backtrace as _;
use esp_hal::{peripherals::Peripherals, prelude::*, rng::Rng};
use esp_println::println;

View File

@ -21,10 +21,10 @@ fn main() -> ! {
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
let rtc = Rtc::new(peripherals.LPWR);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
esp_println::println!("rtc time in milliseconds is {}", rtc.get_time_ms());
delay.delay_ms(1000u32);
delay.delay_millis(1000u32);
}
}

View File

@ -5,6 +5,7 @@
//! to reset both the main system and the RTC.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -12,6 +13,7 @@
use core::cell::RefCell;
use critical_section::Mutex;
use embedded_hal_02::watchdog::WatchdogEnable;
use esp_backtrace as _;
use esp_hal::{
interrupt::{self, Priority},

View File

@ -3,6 +3,7 @@
//! espflash won't work)
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -10,6 +11,7 @@
use core::{cell::RefCell, fmt::Write};
use critical_section::Mutex;
use embedded_hal_02::{serial::Read, timer::CountDown};
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -36,6 +36,6 @@ fn main() -> ! {
let timer = TimerWakeupSource::new(Duration::from_secs(5));
println!("sleeping!");
delay.delay_ms(100u32);
delay.delay_millis(100u32);
rtc.sleep_deep(&[&timer], &mut delay);
}

View File

@ -48,6 +48,6 @@ fn main() -> ! {
let timer = TimerWakeupSource::new(Duration::from_secs(30));
let ext0 = Ext0WakeupSource::new(&mut ext0_pin, WakeupLevel::High);
println!("sleeping!");
delay.delay_ms(100u32);
delay.delay_millis(100u32);
rtc.sleep_deep(&[&timer, &ext0], &mut delay);
}

View File

@ -50,6 +50,6 @@ fn main() -> ! {
let mut wakeup_pins: [&mut dyn RTCPin; 2] = [&mut pin_0, &mut pin_2];
let ext1 = Ext1WakeupSource::new(&mut wakeup_pins, WakeupLevel::High);
println!("sleeping!");
delay.delay_ms(100u32);
delay.delay_millis(100u32);
rtc.sleep_deep(&[&timer, &ext1], &mut delay);
}

View File

@ -54,6 +54,6 @@ fn main() -> ! {
let rtcio = Ext1WakeupSource::new(wakeup_pins);
println!("sleeping!");
delay.delay_ms(100u32);
delay.delay_millis(100u32);
rtc.sleep_deep(&[&timer, &rtcio], &mut delay);
}

View File

@ -58,6 +58,6 @@ fn main() -> ! {
let rtcio = RtcioWakeupSource::new(wakeup_pins);
println!("sleeping!");
delay.delay_ms(100u32);
delay.delay_millis(100u32);
rtc.sleep_deep(&[&timer, &rtcio], &mut delay);
}

View File

@ -38,11 +38,11 @@ fn main() -> ! {
interrupt::enable(Interrupt::FROM_CPU_INTR2, Priority::Priority3).unwrap();
interrupt::enable(Interrupt::FROM_CPU_INTR3, Priority::Priority3).unwrap();
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
let mut counter = 0;
loop {
delay.delay_ms(500u32);
delay.delay_millis(500u32);
match counter {
0 => critical_section::with(|cs| {
SWINT

View File

@ -24,7 +24,7 @@
//! data.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: eh1
//% FEATURES: embedded-hal
#![no_std]
#![no_main]
@ -79,7 +79,7 @@ fn main() -> ! {
}
}
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
println!("=== SPI example with embedded-hal-1 traits ===");
loop {
@ -93,7 +93,7 @@ fn main() -> ! {
spi_device_2.transfer(&mut read[..], &write[..]).unwrap();
spi_device_3.transfer(&mut read[..], &write[..]).unwrap();
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// --- Asymmetric transfer (Read more than we write) ---
print!("Starting asymetric transfer (read > write)...");
@ -111,7 +111,7 @@ fn main() -> ! {
.transfer(&mut read[0..2], &write[..])
.expect("Asymmetric transfer failed");
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// --- Symmetric transfer with huge buffer ---
// Only your RAM is the limit!
@ -133,7 +133,7 @@ fn main() -> ! {
.transfer(&mut read[..], &write[..])
.expect("Huge transfer failed");
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// --- Symmetric transfer with huge buffer in-place (No additional allocation
// needed) ---
@ -156,6 +156,6 @@ fn main() -> ! {
.transfer_in_place(&mut write[..])
.expect("Huge transfer failed");
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
}
}

View File

@ -14,7 +14,7 @@
//! data.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: eh1
//% FEATURES: embedded-hal
#![no_std]
#![no_main]
@ -50,7 +50,7 @@ fn main() -> ! {
Some(cs),
);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
println!("=== SPI example with embedded-hal-1 traits ===");
loop {
@ -62,7 +62,7 @@ fn main() -> ! {
SpiBus::transfer(&mut spi, &mut read[..], &write[..]).expect("Symmetric transfer failed");
assert_eq!(write, read);
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// --- Asymmetric transfer (Read more than we write) ---
print!("Starting asymetric transfer (read > write)...");
@ -73,7 +73,7 @@ fn main() -> ! {
assert_eq!(write[0], read[0]);
assert_eq!(read[2], 0x00u8);
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// --- Symmetric transfer with huge buffer ---
// Only your RAM is the limit!
@ -87,7 +87,7 @@ fn main() -> ! {
SpiBus::transfer(&mut spi, &mut read[..], &write[..]).expect("Huge transfer failed");
assert_eq!(write, read);
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// --- Symmetric transfer with huge buffer in-place (No additional allocation
// needed) ---
@ -102,6 +102,6 @@ fn main() -> ! {
assert_eq!(write[byte], byte as u8);
}
println!(" SUCCESS");
delay.delay_ms(250u32);
delay.delay_millis(250u32);
}
}

View File

@ -77,7 +77,7 @@ fn main() -> ! {
Some(cs),
);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
// READ MANUFACTURER ID FROM FLASH CHIP
@ -91,7 +91,7 @@ fn main() -> ! {
)
.unwrap();
println!("Single {:x?}", data);
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// READ MANUFACTURER ID FROM FLASH CHIP
let mut data = [0u8; 2];
@ -104,7 +104,7 @@ fn main() -> ! {
)
.unwrap();
println!("Dual {:x?}", data);
delay.delay_ms(250u32);
delay.delay_millis(250u32);
// READ MANUFACTURER ID FROM FLASH CHIP
let mut data = [0u8; 2];
@ -117,6 +117,6 @@ fn main() -> ! {
)
.unwrap();
println!("Quad {:x?}", data);
delay.delay_ms(1500u32);
delay.delay_millis(1500u32);
}
}

View File

@ -14,10 +14,12 @@
//! data.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::blocking::spi::Transfer;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -48,13 +50,13 @@ fn main() -> ! {
Some(cs),
);
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
let mut data = [0xde, 0xca, 0xfb, 0xad];
spi.transfer(&mut data).unwrap();
println!("{:x?}", data);
delay.delay_ms(250u32);
delay.delay_millis(250u32);
}
}

View File

@ -64,7 +64,7 @@ fn main() -> ! {
DmaPriority::Priority0,
));
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
// DMA buffer require a static life-time
let mut send = tx_buffer;
@ -86,7 +86,7 @@ fn main() -> ! {
// Check is_done until the transfer is almost done (32000 bytes at 100kHz is
// 2.56 seconds), then move to wait().
while !transfer.is_done() && n < 10 {
delay.delay_ms(250u32);
delay.delay_millis(250u32);
n += 1;
}
@ -97,6 +97,6 @@ fn main() -> ! {
&receive[receive.len() - 10..]
);
delay.delay_ms(250u32);
delay.delay_millis(250u32);
}
}

View File

@ -24,10 +24,12 @@
//! so no immediate neighbor is available.
//% CHIPS: esp32c2 esp32c3 esp32c6 esp32h2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::digital::v2::{InputPin, OutputPin};
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
@ -83,7 +85,7 @@ fn main() -> ! {
DmaPriority::Priority0,
));
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
// DMA buffer require a static life-time
let master_send = &mut [0u8; 32000];
@ -149,7 +151,7 @@ fn main() -> ! {
&master_receive[master_receive.len() - 10..]
);
delay.delay_ms(250u32);
delay.delay_millis(250u32);
slave_receive.fill(0xff);
let transfer = spi.dma_read(&mut slave_receive).unwrap();
@ -177,7 +179,7 @@ fn main() -> ! {
&slave_receive[slave_receive.len() - 10..],
);
delay.delay_ms(250u32);
delay.delay_millis(250u32);
let transfer = spi.dma_write(&mut slave_send).unwrap();
master_receive.fill(0);

View File

@ -59,10 +59,10 @@ fn main() -> ! {
// Initialize the Delay peripheral, and use it to toggle the LED state in a
// loop.
let mut delay = Delay::new(&clocks);
let delay = Delay::new(&clocks);
loop {
delay.delay_ms(500u32);
delay.delay_millis(500u32);
}
}

View File

@ -3,6 +3,7 @@
//! There is TIMG0 which contains a general purpose timer and a watchdog timer.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -10,6 +11,7 @@
use core::cell::RefCell;
use critical_section::Mutex;
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -18,14 +18,14 @@
const IS_FIRST_SENDER: bool = true;
// Run this example with the eh1 feature enabled to use embedded-can instead of
// Run this example with the embedded-hal feature enabled to use embedded-can instead of
// embedded-hal-0.2.7. embedded-can was split off from embedded-hal before it's
// upgrade to 1.0.0. cargo run --example twai --features eh1 --release
#[cfg(feature = "eh1")]
// upgrade to 1.0.0. cargo run --example twai --features embedded-hal --release
#[cfg(feature = "embedded-hal")]
use embedded_can::{nb::Can, Frame, StandardId};
// Run this example without the eh1 flag to use the embedded-hal 0.2.7 CAN traits.
// Run this example without the embedded-hal flag to use the embedded-hal 0.2.7 CAN traits.
// cargo run --example twai --release
#[cfg(not(feature = "eh1"))]
#[cfg(not(feature = "embedded-hal"))]
use embedded_hal_02::can::{Can, Frame, StandardId};
use esp_backtrace as _;
use esp_hal::{

View File

@ -4,6 +4,7 @@
//! Most dev-kits use a USB-UART-bridge - in that case you won't see any output.
//% CHIPS: esp32c3 esp32c6 esp32h2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
@ -11,6 +12,7 @@
use core::{cell::RefCell, fmt::Write};
use critical_section::Mutex;
use embedded_hal_02::timer::CountDown;
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,

View File

@ -4,10 +4,15 @@
//! `wdt.feed()` the watchdog will reset the system.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embedded-hal-02
#![no_std]
#![no_main]
use embedded_hal_02::{
timer::CountDown,
watchdog::{Watchdog, WatchdogEnable},
};
use esp_backtrace as _;
use esp_hal::{clock::ClockControl, peripherals::Peripherals, prelude::*, timer::TimerGroup};
use esp_println::println;