aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrant Miller <[email protected]>2021-12-06 22:06:58 -0600
committerGrant Miller <[email protected]>2021-12-07 00:03:52 -0600
commit3a17e3a2a523773d5e025d99139385616aaebc87 (patch)
tree6acd01df6f22b4b898fb6dd92a974a12077fd461
parent20d2151b1d59bb4a1ad2aa4f6697fcc2f259cbd7 (diff)
Move async trait impls to mod
-rw-r--r--embassy-stm32/src/spi/mod.rs41
-rw-r--r--embassy-stm32/src/spi/v1.rs54
-rw-r--r--embassy-stm32/src/spi/v2.rs54
-rw-r--r--embassy-stm32/src/spi/v3.rs54
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};
7use crate::peripherals; 7use crate::peripherals;
8use crate::rcc::RccPeripheral; 8use crate::rcc::RccPeripheral;
9use crate::time::Hertz; 9use crate::time::Hertz;
10use core::future::Future;
10use core::marker::PhantomData; 11use core::marker::PhantomData;
11use embassy::util::Unborrow; 12use embassy::util::Unborrow;
12use embassy_hal_common::unborrow; 13use embassy_hal_common::unborrow;
14use 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 {}
406impl Word for u8 {} 408impl Word for u8 {}
407impl Word for u16 {} 409impl Word for u16 {}
408 410
411impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> {
412 type Error = Error;
413}
414
415impl<'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
424impl<'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
435impl<'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
409pub(crate) mod sealed { 450pub(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;
4use crate::spi::{ 4use crate::spi::{
5 check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, 5 check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize,
6}; 6};
7use core::future::Future;
8use core::ptr; 7use core::ptr;
9use embassy_traits::spi as traits;
10pub use embedded_hal::blocking; 8pub use embedded_hal::blocking;
11pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; 9pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3};
12use futures::future::join3; 10use futures::future::join3;
@@ -14,8 +12,7 @@ use futures::future::join3;
14use super::Spi; 12use super::Spi;
15 13
16impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { 14impl<'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
224impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> {
225 type Error = super::Error;
226}
227
228impl<'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
237impl<'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
248impl<'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
263use super::Word; 223use super::Word;
264 224
265fn write_word<W: Word>(regs: &'static crate::pac::spi::Spi, word: W) -> Result<(), Error> { 225fn 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
3use crate::dma::NoDma; 3use crate::dma::NoDma;
4use crate::spi::{Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, check_error_flags}; 4use crate::spi::{
5use core::future::Future; 5 check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize,
6};
6use core::ptr; 7use core::ptr;
7use embassy_traits::spi as traits;
8pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; 8pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3};
9use futures::future::{join, join3}; 9use futures::future::{join, join3};
10 10
11use super::Spi; 11use super::Spi;
12 12
13impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { 13impl<'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
274impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> {
275 type Error = super::Error;
276}
277
278impl<'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
287impl<'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
298impl<'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
3use crate::dma::NoDma; 3use crate::dma::NoDma;
4use crate::spi::{Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize, check_error_flags}; 4use crate::spi::{
5use core::future::Future; 5 check_error_flags, Error, Instance, RegsExt, RxDmaChannel, TxDmaChannel, WordSize,
6};
6use core::ptr; 7use core::ptr;
7use embassy_traits::spi as traits;
8pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; 8pub use embedded_hal::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3};
9 9
10use futures::future::join3; 10use futures::future::join3;
@@ -12,8 +12,7 @@ use futures::future::join3;
12use super::Spi; 12use super::Spi;
13 13
14impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { 14impl<'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
348impl<'d, T: Instance, Tx, Rx> traits::Spi<u8> for Spi<'d, T, Tx, Rx> {
349 type Error = super::Error;
350}
351
352impl<'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
361impl<'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
372impl<'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}