From c949519714268afaf9b26d0ff4a7bc3c207b27d2 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Fri, 14 Jan 2022 22:43:40 +0100 Subject: [PATCH] stm32/usart: expose all functionality as inherent methods. --- embassy-stm32/src/usart/mod.rs | 44 ++++++++++++++++----------- examples/stm32f3/src/bin/usart_dma.rs | 1 - examples/stm32f4/src/bin/usart.rs | 7 ++--- examples/stm32f4/src/bin/usart_dma.rs | 1 - examples/stm32f7/src/bin/usart_dma.rs | 1 - examples/stm32h7/src/bin/usart.rs | 7 ++--- examples/stm32h7/src/bin/usart_dma.rs | 1 - examples/stm32l0/src/bin/usart_dma.rs | 1 - examples/stm32l4/src/bin/usart.rs | 7 ++--- examples/stm32l4/src/bin/usart_dma.rs | 1 - tests/stm32/src/bin/usart.rs | 5 ++- tests/stm32/src/bin/usart_dma.rs | 1 - tests/stm32/teleprobe.sh | 12 ++++++++ 13 files changed, 49 insertions(+), 40 deletions(-) create mode 100755 tests/stm32/teleprobe.sh diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs index e46e14ee..5309c629 100644 --- a/embassy-stm32/src/usart/mod.rs +++ b/embassy-stm32/src/usart/mod.rs @@ -129,7 +129,7 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> { } } - async fn write_dma(&mut self, buffer: &[u8]) -> Result<(), Error> + pub async fn write(&mut self, buffer: &[u8]) -> Result<(), Error> where TxDma: crate::usart::TxDma, { @@ -146,7 +146,7 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> { Ok(()) } - async fn read_dma(&mut self, buffer: &mut [u8]) -> Result<(), Error> + pub async fn read(&mut self, buffer: &mut [u8]) -> Result<(), Error> where RxDma: crate::usart::RxDma, { @@ -163,7 +163,7 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> { Ok(()) } - pub fn read_blocking(&mut self, buffer: &mut [u8]) -> Result<(), Error> { + pub fn blocking_read(&mut self, buffer: &mut [u8]) -> Result<(), Error> { unsafe { let r = self.inner.regs(); for b in buffer { @@ -190,6 +190,25 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> { } Ok(()) } + + pub fn blocking_write(&mut self, buffer: &[u8]) -> Result<(), Error> { + unsafe { + let r = self.inner.regs(); + for &b in buffer { + while !sr(r).read().txe() {} + tdr(r).write_volatile(b); + } + } + Ok(()) + } + + pub fn blocking_flush(&mut self) -> Result<(), Error> { + unsafe { + let r = self.inner.regs(); + while !sr(r).read().tc() {} + } + Ok(()) + } } impl<'d, T: Instance, TxDma, RxDma> embedded_hal::serial::Read for Uart<'d, T, TxDma, RxDma> { @@ -224,21 +243,10 @@ impl<'d, T: Instance, TxDma, RxDma> embedded_hal::blocking::serial::Write { type Error = Error; fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> { - unsafe { - let r = self.inner.regs(); - for &b in buffer { - while !sr(r).read().txe() {} - tdr(r).write_volatile(b); - } - } - Ok(()) + self.blocking_write(buffer) } fn bflush(&mut self) -> Result<(), Self::Error> { - unsafe { - let r = self.inner.regs(); - while !sr(r).read().tc() {} - } - Ok(()) + self.blocking_flush() } } @@ -252,7 +260,7 @@ where = impl Future> + 'a; fn write<'a>(&'a mut self, buf: &'a [u8]) -> Self::WriteFuture<'a> { - self.write_dma(buf) + self.write(buf) .map_err(|_| embassy_traits::uart::Error::Other) } } @@ -267,7 +275,7 @@ where = impl Future> + 'a; fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Self::ReadFuture<'a> { - self.read_dma(buf) + self.read(buf) .map_err(|_| embassy_traits::uart::Error::Other) } } diff --git a/examples/stm32f3/src/bin/usart_dma.rs b/examples/stm32f3/src/bin/usart_dma.rs index 99530b5c..0e67bb1f 100644 --- a/examples/stm32f3/src/bin/usart_dma.rs +++ b/examples/stm32f3/src/bin/usart_dma.rs @@ -9,7 +9,6 @@ use embassy::executor::Spawner; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embassy_traits::uart::Write as _; use example_common::*; use heapless::String; diff --git a/examples/stm32f4/src/bin/usart.rs b/examples/stm32f4/src/bin/usart.rs index 391a8b9b..b5ea98cc 100644 --- a/examples/stm32f4/src/bin/usart.rs +++ b/examples/stm32f4/src/bin/usart.rs @@ -7,7 +7,6 @@ mod example_common; use cortex_m_rt::entry; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; -use embedded_hal::blocking::serial::Write; use example_common::*; #[entry] @@ -19,12 +18,12 @@ fn main() -> ! { let config = Config::default(); let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, NoDma, NoDma, config); - unwrap!(usart.bwrite_all(b"Hello Embassy World!\r\n")); + unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n")); info!("wrote Hello, starting echo"); let mut buf = [0u8; 1]; loop { - unwrap!(usart.read_blocking(&mut buf)); - unwrap!(usart.bwrite_all(&buf)); + unwrap!(usart.blocking_read(&mut buf)); + unwrap!(usart.blocking_write(&buf)); } } diff --git a/examples/stm32f4/src/bin/usart_dma.rs b/examples/stm32f4/src/bin/usart_dma.rs index 0dbdd7c0..862a91ea 100644 --- a/examples/stm32f4/src/bin/usart_dma.rs +++ b/examples/stm32f4/src/bin/usart_dma.rs @@ -9,7 +9,6 @@ use embassy::executor::Spawner; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embassy_traits::uart::Write as _; use example_common::*; use heapless::String; diff --git a/examples/stm32f7/src/bin/usart_dma.rs b/examples/stm32f7/src/bin/usart_dma.rs index 82af0bc2..00deae8b 100644 --- a/examples/stm32f7/src/bin/usart_dma.rs +++ b/examples/stm32f7/src/bin/usart_dma.rs @@ -9,7 +9,6 @@ use embassy::executor::Spawner; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embassy_traits::uart::Write as _Write; use example_common::*; use heapless::String; diff --git a/examples/stm32h7/src/bin/usart.rs b/examples/stm32h7/src/bin/usart.rs index 95f0a860..211e57cd 100644 --- a/examples/stm32h7/src/bin/usart.rs +++ b/examples/stm32h7/src/bin/usart.rs @@ -4,7 +4,6 @@ #[path = "../example_common.rs"] mod example_common; -use cortex_m::prelude::_embedded_hal_blocking_serial_Write; use embassy::executor::Executor; use embassy::util::Forever; use embassy_stm32::dma::NoDma; @@ -20,13 +19,13 @@ async fn main_task() { let config = Config::default(); let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, NoDma, NoDma, config); - unwrap!(usart.bwrite_all(b"Hello Embassy World!\r\n")); + unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n")); info!("wrote Hello, starting echo"); let mut buf = [0u8; 1]; loop { - unwrap!(usart.read_blocking(&mut buf)); - unwrap!(usart.bwrite_all(&buf)); + unwrap!(usart.blocking_read(&mut buf)); + unwrap!(usart.blocking_write(&buf)); } } diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs index d603347a..a9221e1b 100644 --- a/examples/stm32h7/src/bin/usart_dma.rs +++ b/examples/stm32h7/src/bin/usart_dma.rs @@ -9,7 +9,6 @@ use embassy::executor::Executor; use embassy::util::Forever; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; -use embassy_traits::uart::Write as _Write; use example_common::*; use cortex_m_rt::entry; diff --git a/examples/stm32l0/src/bin/usart_dma.rs b/examples/stm32l0/src/bin/usart_dma.rs index 3fe61c13..543e66f6 100644 --- a/examples/stm32l0/src/bin/usart_dma.rs +++ b/examples/stm32l0/src/bin/usart_dma.rs @@ -10,7 +10,6 @@ use example_common::*; use embassy::executor::Spawner; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embassy_traits::uart::{Read, Write}; #[embassy::main] async fn main(_spawner: Spawner, p: Peripherals) { diff --git a/examples/stm32l4/src/bin/usart.rs b/examples/stm32l4/src/bin/usart.rs index b6decbc9..00875c89 100644 --- a/examples/stm32l4/src/bin/usart.rs +++ b/examples/stm32l4/src/bin/usart.rs @@ -7,7 +7,6 @@ mod example_common; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; -use embedded_hal::blocking::serial::Write; use example_common::*; #[cortex_m_rt::entry] @@ -19,12 +18,12 @@ fn main() -> ! { let config = Config::default(); let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, NoDma, NoDma, config); - unwrap!(usart.bwrite_all(b"Hello Embassy World!\r\n")); + unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n")); info!("wrote Hello, starting echo"); let mut buf = [0u8; 1]; loop { - unwrap!(usart.read_blocking(&mut buf)); - unwrap!(usart.bwrite_all(&buf)); + unwrap!(usart.blocking_read(&mut buf)); + unwrap!(usart.blocking_write(&buf)); } } diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs index b49d3d88..b3a1e389 100644 --- a/examples/stm32l4/src/bin/usart_dma.rs +++ b/examples/stm32l4/src/bin/usart_dma.rs @@ -9,7 +9,6 @@ use embassy::executor::Spawner; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embassy_traits::uart::Write as _; use example_common::*; use heapless::String; diff --git a/tests/stm32/src/bin/usart.rs b/tests/stm32/src/bin/usart.rs index f887b084..44ee730e 100644 --- a/tests/stm32/src/bin/usart.rs +++ b/tests/stm32/src/bin/usart.rs @@ -9,7 +9,6 @@ use embassy::executor::Spawner; use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embedded_hal::blocking::serial::Write; use example_common::*; #[embassy::main(config = "config()")] @@ -42,10 +41,10 @@ async fn main(_spawner: Spawner, p: Peripherals) { // This is because we aren't sending+receiving at the same time. let data = [0xC0, 0xDE]; - usart.bwrite_all(&data).unwrap(); + usart.blocking_write(&data).unwrap(); let mut buf = [0; 2]; - usart.read_blocking(&mut buf).unwrap(); + usart.blocking_read(&mut buf).unwrap(); assert_eq!(buf, data); info!("Test OK"); diff --git a/tests/stm32/src/bin/usart_dma.rs b/tests/stm32/src/bin/usart_dma.rs index 96c6a664..37faaf37 100644 --- a/tests/stm32/src/bin/usart_dma.rs +++ b/tests/stm32/src/bin/usart_dma.rs @@ -8,7 +8,6 @@ use defmt::assert_eq; use embassy::executor::Spawner; use embassy_stm32::usart::{Config, Uart}; use embassy_stm32::Peripherals; -use embassy_traits::uart::{Read, Write}; use example_common::*; #[embassy::main(config = "config()")] diff --git a/tests/stm32/teleprobe.sh b/tests/stm32/teleprobe.sh new file mode 100755 index 00000000..6eec6ca9 --- /dev/null +++ b/tests/stm32/teleprobe.sh @@ -0,0 +1,12 @@ +echo Running target=$1 elf=$2 +STATUSCODE=$( + curl \ + -sS \ + --output /dev/stderr \ + --write-out "%{http_code}" \ + -H "Authorization: Bearer $TELEPROBE_TOKEN" \ + https://teleprobe.embassy.dev/targets/$1/run --data-binary @$2 +) +echo +echo HTTP Status code: $STATUSCODE +test "$STATUSCODE" -eq 200