diff options
| author | Grant Miller <[email protected]> | 2021-12-06 22:06:58 -0600 |
|---|---|---|
| committer | Grant Miller <[email protected]> | 2021-12-07 00:03:52 -0600 |
| commit | 3a17e3a2a523773d5e025d99139385616aaebc87 (patch) | |
| tree | 6acd01df6f22b4b898fb6dd92a974a12077fd461 | |
| parent | 20d2151b1d59bb4a1ad2aa4f6697fcc2f259cbd7 (diff) | |
Move async trait impls to mod
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 41 | ||||
| -rw-r--r-- | embassy-stm32/src/spi/v1.rs | 54 | ||||
| -rw-r--r-- | embassy-stm32/src/spi/v2.rs | 54 | ||||
| -rw-r--r-- | embassy-stm32/src/spi/v3.rs | 54 |
4 files changed, 60 insertions, 143 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 76857ae64..f39fc746d 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -7,9 +7,11 @@ use crate::pac::spi::{regs, vals}; | |||
| 7 | use crate::peripherals; | 7 | use crate::peripherals; |
| 8 | use crate::rcc::RccPeripheral; | 8 | use crate::rcc::RccPeripheral; |
| 9 | use crate::time::Hertz; | 9 | use crate::time::Hertz; |
| 10 | use core::future::Future; | ||
| 10 | use core::marker::PhantomData; | 11 | use core::marker::PhantomData; |
| 11 | use embassy::util::Unborrow; | 12 | use embassy::util::Unborrow; |
| 12 | use embassy_hal_common::unborrow; | 13 | use embassy_hal_common::unborrow; |
| 14 | use embassy_traits::spi as traits; | ||
| 13 | 15 | ||
| 14 | #[cfg_attr(spi_v1, path = "v1.rs")] | 16 | #[cfg_attr(spi_v1, path = "v1.rs")] |
| 15 | #[cfg_attr(spi_f1, path = "v1.rs")] | 17 | #[cfg_attr(spi_f1, path = "v1.rs")] |
| @@ -406,6 +408,45 @@ trait Word {} | |||
| 406 | impl Word for u8 {} | 408 | impl Word for u8 {} |
| 407 | impl Word for u16 {} | 409 | impl Word for u16 {} |
| 408 | 410 | ||
| 411 | impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> { | ||
| 412 | type Error = Error; | ||
| 413 | } | ||
| 414 | |||
| 415 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx> traits::Write<u8> for Spi<'d, T, Tx, Rx> { | ||
| 416 | #[rustfmt::skip] | ||
| 417 | type WriteFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 418 | |||
| 419 | fn write<'a>(&'a mut self, data: &'a [u8]) -> Self::WriteFuture<'a> { | ||
| 420 | self.write_dma_u8(data) | ||
| 421 | } | ||
| 422 | } | ||
| 423 | |||
| 424 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::Read<u8> | ||
| 425 | for Spi<'d, T, Tx, Rx> | ||
| 426 | { | ||
| 427 | #[rustfmt::skip] | ||
| 428 | type ReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 429 | |||
| 430 | fn read<'a>(&'a mut self, data: &'a mut [u8]) -> Self::ReadFuture<'a> { | ||
| 431 | self.read_dma_u8(data) | ||
| 432 | } | ||
| 433 | } | ||
| 434 | |||
| 435 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::FullDuplex<u8> | ||
| 436 | for Spi<'d, T, Tx, Rx> | ||
| 437 | { | ||
| 438 | #[rustfmt::skip] | ||
| 439 | type WriteReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 440 | |||
| 441 | fn read_write<'a>( | ||
| 442 | &'a mut self, | ||
| 443 | read: &'a mut [u8], | ||
| 444 | write: &'a [u8], | ||
| 445 | ) -> Self::WriteReadFuture<'a> { | ||
| 446 | self.read_write_dma_u8(read, write) | ||
| 447 | } | ||
| 448 | } | ||
| 449 | |||
| 409 | pub(crate) mod sealed { | 450 | pub(crate) mod sealed { |
| 410 | use super::*; | 451 | use super::*; |
| 411 | 452 | ||
diff --git a/embassy-stm32/src/spi/v1.rs b/embassy-stm32/src/spi/v1.rs index 3a7d948ae..efe7e468c 100644 --- a/embassy-stm32/src/spi/v1.rs +++ b/embassy-stm32/src/spi/v1.rs | |||
| @@ -4,9 +4,7 @@ use crate::dma::NoDma; | |||
| 4 | use crate::spi::{ | 4 | use crate::spi::{ |
| 5 | check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, | 5 | check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, |
| 6 | }; | 6 | }; |
| 7 | use core::future::Future; | ||
| 8 | use core::ptr; | 7 | use core::ptr; |
| 9 | use embassy_traits::spi as traits; | ||
| 10 | pub use embedded_hal::blocking; | 8 | pub use embedded_hal::blocking; |
| 11 | pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; | 9 | pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; |
| 12 | use futures::future::join3; | 10 | use futures::future::join3; |
| @@ -14,8 +12,7 @@ use futures::future::join3; | |||
| 14 | use super::Spi; | 12 | use super::Spi; |
| 15 | 13 | ||
| 16 | impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | 14 | impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { |
| 17 | #[allow(unused)] | 15 | pub(super) async fn write_dma_u8(&mut self, write: &[u8]) -> Result<(), Error> |
| 18 | async fn write_dma_u8(&mut self, write: &[u8]) -> Result<(), Error> | ||
| 19 | where | 16 | where |
| 20 | Tx: TxDmaChannel<T>, | 17 | Tx: TxDmaChannel<T>, |
| 21 | { | 18 | { |
| @@ -43,8 +40,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 43 | Ok(()) | 40 | Ok(()) |
| 44 | } | 41 | } |
| 45 | 42 | ||
| 46 | #[allow(unused)] | 43 | pub(super) async fn read_dma_u8(&mut self, read: &mut [u8]) -> Result<(), Error> |
| 47 | async fn read_dma_u8(&mut self, read: &mut [u8]) -> Result<(), Error> | ||
| 48 | where | 44 | where |
| 49 | Tx: TxDmaChannel<T>, | 45 | Tx: TxDmaChannel<T>, |
| 50 | Rx: RxDmaChannel<T>, | 46 | Rx: RxDmaChannel<T>, |
| @@ -96,8 +92,11 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 96 | Ok(()) | 92 | Ok(()) |
| 97 | } | 93 | } |
| 98 | 94 | ||
| 99 | #[allow(unused)] | 95 | pub(super) async fn read_write_dma_u8( |
| 100 | async fn read_write_dma_u8(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Error> | 96 | &mut self, |
| 97 | read: &mut [u8], | ||
| 98 | write: &[u8], | ||
| 99 | ) -> Result<(), Error> | ||
| 101 | where | 100 | where |
| 102 | Tx: TxDmaChannel<T>, | 101 | Tx: TxDmaChannel<T>, |
| 103 | Rx: RxDmaChannel<T>, | 102 | Rx: RxDmaChannel<T>, |
| @@ -221,45 +220,6 @@ impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T, | |||
| 221 | } | 220 | } |
| 222 | } | 221 | } |
| 223 | 222 | ||
| 224 | impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> { | ||
| 225 | type Error = super::Error; | ||
| 226 | } | ||
| 227 | |||
| 228 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx> traits::Write<u8> for Spi<'d, T, Tx, Rx> { | ||
| 229 | #[rustfmt::skip] | ||
| 230 | type WriteFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 231 | |||
| 232 | fn write<'a>(&'a mut self, data: &'a [u8]) -> Self::WriteFuture<'a> { | ||
| 233 | self.write_dma_u8(data) | ||
| 234 | } | ||
| 235 | } | ||
| 236 | |||
| 237 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::Read<u8> | ||
| 238 | for Spi<'d, T, Tx, Rx> | ||
| 239 | { | ||
| 240 | #[rustfmt::skip] | ||
| 241 | type ReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 242 | |||
| 243 | fn read<'a>(&'a mut self, data: &'a mut [u8]) -> Self::ReadFuture<'a> { | ||
| 244 | self.read_dma_u8(data) | ||
| 245 | } | ||
| 246 | } | ||
| 247 | |||
| 248 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::FullDuplex<u8> | ||
| 249 | for Spi<'d, T, Tx, Rx> | ||
| 250 | { | ||
| 251 | #[rustfmt::skip] | ||
| 252 | type WriteReadFuture<'a> where Self: 'a = impl Future<Output=Result<(), Self::Error>> + 'a; | ||
| 253 | |||
| 254 | fn read_write<'a>( | ||
| 255 | &'a mut self, | ||
| 256 | read: &'a mut [u8], | ||
| 257 | write: &'a [u8], | ||
| 258 | ) -> Self::WriteReadFuture<'a> { | ||
| 259 | self.read_write_dma_u8(read, write) | ||
| 260 | } | ||
| 261 | } | ||
| 262 | |||
| 263 | use super::Word; | 223 | use super::Word; |
| 264 | 224 | ||
| 265 | fn write_word<W: Word>(regs: &'static crate::pac::spi::Spi, word: W) -> Result<(), Error> { | 225 | fn write_word<W: Word>(regs: &'static crate::pac::spi::Spi, word: W) -> Result<(), Error> { |
diff --git a/embassy-stm32/src/spi/v2.rs b/embassy-stm32/src/spi/v2.rs index 2f02dc867..e905a1b9c 100644 --- a/embassy-stm32/src/spi/v2.rs +++ b/embassy-stm32/src/spi/v2.rs | |||
| @@ -1,18 +1,17 @@ | |||
| 1 | #![macro_use] | 1 | #![macro_use] |
| 2 | 2 | ||
| 3 | use crate::dma::NoDma; | 3 | use crate::dma::NoDma; |
| 4 | use crate::spi::{Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, check_error_flags}; | 4 | use crate::spi::{ |
| 5 | use core::future::Future; | 5 | check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, |
| 6 | }; | ||
| 6 | use core::ptr; | 7 | use core::ptr; |
| 7 | use embassy_traits::spi as traits; | ||
| 8 | pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; | 8 | pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; |
| 9 | use futures::future::{join, join3}; | 9 | use futures::future::{join, join3}; |
| 10 | 10 | ||
| 11 | use super::Spi; | 11 | use super::Spi; |
| 12 | 12 | ||
| 13 | impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | 13 | impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { |
| 14 | #[allow(unused)] | 14 | pub(super) async fn write_dma_u8(&mut self, write: &[u8]) -> Result<(), Error> |
| 15 | async fn write_dma_u8(&mut self, write: &[u8]) -> Result<(), Error> | ||
| 16 | where | 15 | where |
| 17 | Tx: TxDmaChannel<T>, | 16 | Tx: TxDmaChannel<T>, |
| 18 | { | 17 | { |
| @@ -49,8 +48,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 49 | Ok(()) | 48 | Ok(()) |
| 50 | } | 49 | } |
| 51 | 50 | ||
| 52 | #[allow(unused)] | 51 | pub(super) async fn read_dma_u8(&mut self, read: &mut [u8]) -> Result<(), Error> |
| 53 | async fn read_dma_u8(&mut self, read: &mut [u8]) -> Result<(), Error> | ||
| 54 | where | 52 | where |
| 55 | Tx: TxDmaChannel<T>, | 53 | Tx: TxDmaChannel<T>, |
| 56 | Rx: RxDmaChannel<T>, | 54 | Rx: RxDmaChannel<T>, |
| @@ -102,8 +100,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 102 | Ok(()) | 100 | Ok(()) |
| 103 | } | 101 | } |
| 104 | 102 | ||
| 105 | #[allow(unused)] | 103 | pub(super) async fn read_write_dma_u8(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Error> |
| 106 | async fn read_write_dma_u8(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Error> | ||
| 107 | where | 104 | where |
| 108 | Tx: TxDmaChannel<T>, | 105 | Tx: TxDmaChannel<T>, |
| 109 | Rx: RxDmaChannel<T>, | 106 | Rx: RxDmaChannel<T>, |
| @@ -270,42 +267,3 @@ impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T, | |||
| 270 | Ok(words) | 267 | Ok(words) |
| 271 | } | 268 | } |
| 272 | } | 269 | } |
| 273 | |||
| 274 | impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> { | ||
| 275 | type Error = super::Error; | ||
| 276 | } | ||
| 277 | |||
| 278 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx> traits::Write<u8> for Spi<'d, T, Tx, Rx> { | ||
| 279 | #[rustfmt::skip] | ||
| 280 | type WriteFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 281 | |||
| 282 | fn write<'a>(&'a mut self, data: &'a [u8]) -> Self::WriteFuture<'a> { | ||
| 283 | self.write_dma_u8(data) | ||
| 284 | } | ||
| 285 | } | ||
| 286 | |||
| 287 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::Read<u8> | ||
| 288 | for Spi<'d, T, Tx, Rx> | ||
| 289 | { | ||
| 290 | #[rustfmt::skip] | ||
| 291 | type ReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 292 | |||
| 293 | fn read<'a>(&'a mut self, data: &'a mut [u8]) -> Self::ReadFuture<'a> { | ||
| 294 | self.read_dma_u8(data) | ||
| 295 | } | ||
| 296 | } | ||
| 297 | |||
| 298 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::FullDuplex<u8> | ||
| 299 | for Spi<'d, T, Tx, Rx> | ||
| 300 | { | ||
| 301 | #[rustfmt::skip] | ||
| 302 | type WriteReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 303 | |||
| 304 | fn read_write<'a>( | ||
| 305 | &'a mut self, | ||
| 306 | read: &'a mut [u8], | ||
| 307 | write: &'a [u8], | ||
| 308 | ) -> Self::WriteReadFuture<'a> { | ||
| 309 | self.read_write_dma_u8(read, write) | ||
| 310 | } | ||
| 311 | } | ||
diff --git a/embassy-stm32/src/spi/v3.rs b/embassy-stm32/src/spi/v3.rs index e63dbcb29..cbe2861e0 100644 --- a/embassy-stm32/src/spi/v3.rs +++ b/embassy-stm32/src/spi/v3.rs | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | #![macro_use] | 1 | #![macro_use] |
| 2 | 2 | ||
| 3 | use crate::dma::NoDma; | 3 | use crate::dma::NoDma; |
| 4 | use crate::spi::{Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, check_error_flags}; | 4 | use crate::spi::{ |
| 5 | use core::future::Future; | 5 | check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, |
| 6 | }; | ||
| 6 | use core::ptr; | 7 | use core::ptr; |
| 7 | use embassy_traits::spi as traits; | ||
| 8 | pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; | 8 | pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; |
| 9 | 9 | ||
| 10 | use futures::future::join3; | 10 | use futures::future::join3; |
| @@ -12,8 +12,7 @@ use futures::future::join3; | |||
| 12 | use super::Spi; | 12 | use super::Spi; |
| 13 | 13 | ||
| 14 | impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | 14 | impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { |
| 15 | #[allow(unused)] | 15 | pub(super) async fn write_dma_u8(&mut self, write: &[u8]) -> Result<(), Error> |
| 16 | async fn write_dma_u8(&mut self, write: &[u8]) -> Result<(), Error> | ||
| 17 | where | 16 | where |
| 18 | Tx: TxDmaChannel<T>, | 17 | Tx: TxDmaChannel<T>, |
| 19 | { | 18 | { |
| @@ -53,8 +52,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 53 | Ok(()) | 52 | Ok(()) |
| 54 | } | 53 | } |
| 55 | 54 | ||
| 56 | #[allow(unused)] | 55 | pub(super) async fn read_dma_u8(&mut self, read: &mut [u8]) -> Result<(), Error> |
| 57 | async fn read_dma_u8(&mut self, read: &mut [u8]) -> Result<(), Error> | ||
| 58 | where | 56 | where |
| 59 | Tx: TxDmaChannel<T>, | 57 | Tx: TxDmaChannel<T>, |
| 60 | Rx: RxDmaChannel<T>, | 58 | Rx: RxDmaChannel<T>, |
| @@ -107,8 +105,7 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 107 | Ok(()) | 105 | Ok(()) |
| 108 | } | 106 | } |
| 109 | 107 | ||
| 110 | #[allow(unused)] | 108 | pub(super) async fn read_write_dma_u8(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Error> |
| 111 | async fn read_write_dma_u8(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Error> | ||
| 112 | where | 109 | where |
| 113 | Tx: TxDmaChannel<T>, | 110 | Tx: TxDmaChannel<T>, |
| 114 | Rx: RxDmaChannel<T>, | 111 | Rx: RxDmaChannel<T>, |
| @@ -344,42 +341,3 @@ impl<'d, T: Instance> embedded_hal::blocking::spi::Transfer<u16> for Spi<'d, T, | |||
| 344 | Ok(words) | 341 | Ok(words) |
| 345 | } | 342 | } |
| 346 | } | 343 | } |
| 347 | |||
| 348 | impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> { | ||
| 349 | type Error = super::Error; | ||
| 350 | } | ||
| 351 | |||
| 352 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx> traits::Write<u8> for Spi<'d, T, Tx, Rx> { | ||
| 353 | #[rustfmt::skip] | ||
| 354 | type WriteFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 355 | |||
| 356 | fn write<'a>(&'a mut self, data: &'a [u8]) -> Self::WriteFuture<'a> { | ||
| 357 | self.write_dma_u8(data) | ||
| 358 | } | ||
| 359 | } | ||
| 360 | |||
| 361 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::Read<u8> | ||
| 362 | for Spi<'d, T, Tx, Rx> | ||
| 363 | { | ||
| 364 | #[rustfmt::skip] | ||
| 365 | type ReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 366 | |||
| 367 | fn read<'a>(&'a mut self, data: &'a mut [u8]) -> Self::ReadFuture<'a> { | ||
| 368 | self.read_dma_u8(data) | ||
| 369 | } | ||
| 370 | } | ||
| 371 | |||
| 372 | impl<'d, T: Instance, Tx: TxDmaChannel<T>, Rx: RxDmaChannel<T>> traits::FullDuplex<u8> | ||
| 373 | for Spi<'d, T, Tx, Rx> | ||
| 374 | { | ||
| 375 | #[rustfmt::skip] | ||
| 376 | type WriteReadFuture<'a> where Self: 'a = impl Future<Output = Result<(), Self::Error>> + 'a; | ||
| 377 | |||
| 378 | fn read_write<'a>( | ||
| 379 | &'a mut self, | ||
| 380 | read: &'a mut [u8], | ||
| 381 | write: &'a [u8], | ||
| 382 | ) -> Self::WriteReadFuture<'a> { | ||
| 383 | self.read_write_dma_u8(read, write) | ||
| 384 | } | ||
| 385 | } | ||
