From 4cab71b5bac6bb8d41b9b9558cd6bfd930dd5e4d Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Wed, 24 Jan 2024 19:50:56 +0100 Subject: [PATCH 1/4] Add async `Delay` implementation for `tokio`. --- Cargo.toml | 4 +++- src/delay.rs | 13 ++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ea35bed..590aa91 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ edition = "2018" [features] gpio_sysfs = ["sysfs_gpio"] gpio_cdev = ["gpio-cdev"] -async-tokio = ["gpio-cdev/async-tokio"] +async-tokio = ["gpio-cdev/async-tokio", "dep:embedded-hal-async", "tokio/time"] i2c = ["i2cdev"] spi = ["spidev"] @@ -24,6 +24,7 @@ default = [ "gpio_cdev", "gpio_sysfs", "i2c", "spi" ] [dependencies] embedded-hal = "1" embedded-hal-nb = "1" +embedded-hal-async = { version = "1", optional = true } gpio-cdev = { version = "0.6.0", optional = true } sysfs_gpio = { version = "0.6.1", optional = true } i2cdev = { version = "0.6.0", optional = true } @@ -31,6 +32,7 @@ nb = "1" serialport = { version = "4.2.0", default-features = false } spidev = { version = "0.6.0", optional = true } nix = "0.27.1" +tokio = { version = "1", default-features = false, optional = true } [dev-dependencies] openpty = "0.2.0" diff --git a/src/delay.rs b/src/delay.rs index ffd435a..7dac367 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -2,16 +2,23 @@ //! //! [`embedded-hal`]: https://docs.rs/embedded-hal -use cast::u64; use embedded_hal::delay::DelayNs; use std::thread; use std::time::Duration; -/// Empty struct that provides delay functionality on top of `thread::sleep` +/// Empty struct that provides delay functionality on top of `thread::sleep`, +/// and `tokio::time::sleep` if the `async-tokio` feature is enabled. pub struct Delay; impl DelayNs for Delay { fn delay_ns(&mut self, n: u32) { - thread::sleep(Duration::from_nanos(u64(n))); + thread::sleep(Duration::from_nanos(n.into())); + } +} + +#[cfg(feature = "async-tokio")] +impl embedded_hal_async::delay::DelayNs for Delay { + async fn delay_ns(&mut self, n: u32) { + tokio::time::sleep(Duration::from_nanos(n.into())).await; } } From b80b2f8f887796bb907fbc2d8d0ca949c7ca57e5 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Wed, 24 Jan 2024 20:01:44 +0100 Subject: [PATCH 2/4] Also implement `delay_us` and `delay_ms`. --- src/delay.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/delay.rs b/src/delay.rs index 7dac367..b9eaea9 100644 --- a/src/delay.rs +++ b/src/delay.rs @@ -14,6 +14,14 @@ impl DelayNs for Delay { fn delay_ns(&mut self, n: u32) { thread::sleep(Duration::from_nanos(n.into())); } + + fn delay_us(&mut self, n: u32) { + thread::sleep(Duration::from_micros(n.into())); + } + + fn delay_ms(&mut self, n: u32) { + thread::sleep(Duration::from_millis(n.into())); + } } #[cfg(feature = "async-tokio")] @@ -21,4 +29,12 @@ impl embedded_hal_async::delay::DelayNs for Delay { async fn delay_ns(&mut self, n: u32) { tokio::time::sleep(Duration::from_nanos(n.into())).await; } + + async fn delay_us(&mut self, n: u32) { + tokio::time::sleep(Duration::from_micros(n.into())).await; + } + + async fn delay_ms(&mut self, n: u32) { + tokio::time::sleep(Duration::from_millis(n.into())).await; + } } From 6f8c35632d03ba5b9e0129727089ff1fac260a35 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Wed, 24 Jan 2024 19:54:01 +0100 Subject: [PATCH 3/4] Increase Rust version used for `clippy`. --- .github/workflows/clippy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml index f5fc395..af11e80 100644 --- a/.github/workflows/clippy.yml +++ b/.github/workflows/clippy.yml @@ -13,6 +13,6 @@ jobs: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: - toolchain: 1.73.0 + toolchain: 1.75.0 components: clippy - run: cargo clippy --all-features -- --deny=warnings From f7b1505a1eecd2a9e4c9e9c39ecbfd122534e13a Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Wed, 24 Jan 2024 20:03:46 +0100 Subject: [PATCH 4/4] Update changelog. --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8d0219..06cdae9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added + +- Added async `DelayNs` implementation for `tokio`. + ## [v0.4.0] - 2024-01-10 ### Changed