aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2022-01-14 22:43:40 +0100
committerDario Nieuwenhuis <[email protected]>2022-01-19 17:59:55 +0100
commitc949519714268afaf9b26d0ff4a7bc3c207b27d2 (patch)
tree7513036217439a02360417aac52c3631a0672407
parent98f24bf819a527997ed983d686c4ab933468439d (diff)
stm32/usart: expose all functionality as inherent methods.
-rw-r--r--embassy-stm32/src/usart/mod.rs44
-rw-r--r--examples/stm32f3/src/bin/usart_dma.rs1
-rw-r--r--examples/stm32f4/src/bin/usart.rs7
-rw-r--r--examples/stm32f4/src/bin/usart_dma.rs1
-rw-r--r--examples/stm32f7/src/bin/usart_dma.rs1
-rw-r--r--examples/stm32h7/src/bin/usart.rs7
-rw-r--r--examples/stm32h7/src/bin/usart_dma.rs1
-rw-r--r--examples/stm32l0/src/bin/usart_dma.rs1
-rw-r--r--examples/stm32l4/src/bin/usart.rs7
-rw-r--r--examples/stm32l4/src/bin/usart_dma.rs1
-rw-r--r--tests/stm32/src/bin/usart.rs5
-rw-r--r--tests/stm32/src/bin/usart_dma.rs1
-rwxr-xr-xtests/stm32/teleprobe.sh12
13 files changed, 49 insertions, 40 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index e46e14eec..5309c6296 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> {
129 } 129 }
130 } 130 }
131 131
132 async fn write_dma(&mut self, buffer: &[u8]) -> Result<(), Error> 132 pub async fn write(&mut self, buffer: &[u8]) -> Result<(), Error>
133 where 133 where
134 TxDma: crate::usart::TxDma<T>, 134 TxDma: crate::usart::TxDma<T>,
135 { 135 {
@@ -146,7 +146,7 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> {
146 Ok(()) 146 Ok(())
147 } 147 }
148 148
149 async fn read_dma(&mut self, buffer: &mut [u8]) -> Result<(), Error> 149 pub async fn read(&mut self, buffer: &mut [u8]) -> Result<(), Error>
150 where 150 where
151 RxDma: crate::usart::RxDma<T>, 151 RxDma: crate::usart::RxDma<T>,
152 { 152 {
@@ -163,7 +163,7 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> {
163 Ok(()) 163 Ok(())
164 } 164 }
165 165
166 pub fn read_blocking(&mut self, buffer: &mut [u8]) -> Result<(), Error> { 166 pub fn blocking_read(&mut self, buffer: &mut [u8]) -> Result<(), Error> {
167 unsafe { 167 unsafe {
168 let r = self.inner.regs(); 168 let r = self.inner.regs();
169 for b in buffer { 169 for b in buffer {
@@ -190,6 +190,25 @@ impl<'d, T: Instance, TxDma, RxDma> Uart<'d, T, TxDma, RxDma> {
190 } 190 }
191 Ok(()) 191 Ok(())
192 } 192 }
193
194 pub fn blocking_write(&mut self, buffer: &[u8]) -> Result<(), Error> {
195 unsafe {
196 let r = self.inner.regs();
197 for &b in buffer {
198 while !sr(r).read().txe() {}
199 tdr(r).write_volatile(b);
200 }
201 }
202 Ok(())
203 }
204
205 pub fn blocking_flush(&mut self) -> Result<(), Error> {
206 unsafe {
207 let r = self.inner.regs();
208 while !sr(r).read().tc() {}
209 }
210 Ok(())
211 }
193} 212}
194 213
195impl<'d, T: Instance, TxDma, RxDma> embedded_hal::serial::Read<u8> for Uart<'d, T, TxDma, RxDma> { 214impl<'d, T: Instance, TxDma, RxDma> embedded_hal::serial::Read<u8> for Uart<'d, T, TxDma, RxDma> {
@@ -224,21 +243,10 @@ impl<'d, T: Instance, TxDma, RxDma> embedded_hal::blocking::serial::Write<u8>
224{ 243{
225 type Error = Error; 244 type Error = Error;
226 fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> { 245 fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> {
227 unsafe { 246 self.blocking_write(buffer)
228 let r = self.inner.regs();
229 for &b in buffer {
230 while !sr(r).read().txe() {}
231 tdr(r).write_volatile(b);
232 }
233 }
234 Ok(())
235 } 247 }
236 fn bflush(&mut self) -> Result<(), Self::Error> { 248 fn bflush(&mut self) -> Result<(), Self::Error> {
237 unsafe { 249 self.blocking_flush()
238 let r = self.inner.regs();
239 while !sr(r).read().tc() {}
240 }
241 Ok(())
242 } 250 }
243} 251}
244 252
@@ -252,7 +260,7 @@ where
252 = impl Future<Output = Result<(), embassy_traits::uart::Error>> + 'a; 260 = impl Future<Output = Result<(), embassy_traits::uart::Error>> + 'a;
253 261
254 fn write<'a>(&'a mut self, buf: &'a [u8]) -> Self::WriteFuture<'a> { 262 fn write<'a>(&'a mut self, buf: &'a [u8]) -> Self::WriteFuture<'a> {
255 self.write_dma(buf) 263 self.write(buf)
256 .map_err(|_| embassy_traits::uart::Error::Other) 264 .map_err(|_| embassy_traits::uart::Error::Other)
257 } 265 }
258} 266}
@@ -267,7 +275,7 @@ where
267 = impl Future<Output = Result<(), embassy_traits::uart::Error>> + 'a; 275 = impl Future<Output = Result<(), embassy_traits::uart::Error>> + 'a;
268 276
269 fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Self::ReadFuture<'a> { 277 fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Self::ReadFuture<'a> {
270 self.read_dma(buf) 278 self.read(buf)
271 .map_err(|_| embassy_traits::uart::Error::Other) 279 .map_err(|_| embassy_traits::uart::Error::Other)
272 } 280 }
273} 281}
diff --git a/examples/stm32f3/src/bin/usart_dma.rs b/examples/stm32f3/src/bin/usart_dma.rs
index 99530b5c0..0e67bb1f1 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;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals; 11use embassy_stm32::Peripherals;
12use embassy_traits::uart::Write as _;
13use example_common::*; 12use example_common::*;
14use heapless::String; 13use heapless::String;
15 14
diff --git a/examples/stm32f4/src/bin/usart.rs b/examples/stm32f4/src/bin/usart.rs
index 391a8b9b0..b5ea98cca 100644
--- a/examples/stm32f4/src/bin/usart.rs
+++ b/examples/stm32f4/src/bin/usart.rs
@@ -7,7 +7,6 @@ mod example_common;
7use cortex_m_rt::entry; 7use cortex_m_rt::entry;
8use embassy_stm32::dma::NoDma; 8use embassy_stm32::dma::NoDma;
9use embassy_stm32::usart::{Config, Uart}; 9use embassy_stm32::usart::{Config, Uart};
10use embedded_hal::blocking::serial::Write;
11use example_common::*; 10use example_common::*;
12 11
13#[entry] 12#[entry]
@@ -19,12 +18,12 @@ fn main() -> ! {
19 let config = Config::default(); 18 let config = Config::default();
20 let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, NoDma, NoDma, config); 19 let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, NoDma, NoDma, config);
21 20
22 unwrap!(usart.bwrite_all(b"Hello Embassy World!\r\n")); 21 unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n"));
23 info!("wrote Hello, starting echo"); 22 info!("wrote Hello, starting echo");
24 23
25 let mut buf = [0u8; 1]; 24 let mut buf = [0u8; 1];
26 loop { 25 loop {
27 unwrap!(usart.read_blocking(&mut buf)); 26 unwrap!(usart.blocking_read(&mut buf));
28 unwrap!(usart.bwrite_all(&buf)); 27 unwrap!(usart.blocking_write(&buf));
29 } 28 }
30} 29}
diff --git a/examples/stm32f4/src/bin/usart_dma.rs b/examples/stm32f4/src/bin/usart_dma.rs
index 0dbdd7c05..862a91ea8 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;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals; 11use embassy_stm32::Peripherals;
12use embassy_traits::uart::Write as _;
13use example_common::*; 12use example_common::*;
14use heapless::String; 13use heapless::String;
15 14
diff --git a/examples/stm32f7/src/bin/usart_dma.rs b/examples/stm32f7/src/bin/usart_dma.rs
index 82af0bc22..00deae8b3 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;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals; 11use embassy_stm32::Peripherals;
12use embassy_traits::uart::Write as _Write;
13use example_common::*; 12use example_common::*;
14 13
15use heapless::String; 14use heapless::String;
diff --git a/examples/stm32h7/src/bin/usart.rs b/examples/stm32h7/src/bin/usart.rs
index 95f0a8604..211e57cda 100644
--- a/examples/stm32h7/src/bin/usart.rs
+++ b/examples/stm32h7/src/bin/usart.rs
@@ -4,7 +4,6 @@
4 4
5#[path = "../example_common.rs"] 5#[path = "../example_common.rs"]
6mod example_common; 6mod example_common;
7use cortex_m::prelude::_embedded_hal_blocking_serial_Write;
8use embassy::executor::Executor; 7use embassy::executor::Executor;
9use embassy::util::Forever; 8use embassy::util::Forever;
10use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
@@ -20,13 +19,13 @@ async fn main_task() {
20 let config = Config::default(); 19 let config = Config::default();
21 let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, NoDma, NoDma, config); 20 let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, NoDma, NoDma, config);
22 21
23 unwrap!(usart.bwrite_all(b"Hello Embassy World!\r\n")); 22 unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n"));
24 info!("wrote Hello, starting echo"); 23 info!("wrote Hello, starting echo");
25 24
26 let mut buf = [0u8; 1]; 25 let mut buf = [0u8; 1];
27 loop { 26 loop {
28 unwrap!(usart.read_blocking(&mut buf)); 27 unwrap!(usart.blocking_read(&mut buf));
29 unwrap!(usart.bwrite_all(&buf)); 28 unwrap!(usart.blocking_write(&buf));
30 } 29 }
31} 30}
32 31
diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs
index d603347ac..a9221e1b6 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;
9use embassy::util::Forever; 9use embassy::util::Forever;
10use embassy_stm32::dma::NoDma; 10use embassy_stm32::dma::NoDma;
11use embassy_stm32::usart::{Config, Uart}; 11use embassy_stm32::usart::{Config, Uart};
12use embassy_traits::uart::Write as _Write;
13use example_common::*; 12use example_common::*;
14 13
15use cortex_m_rt::entry; 14use cortex_m_rt::entry;
diff --git a/examples/stm32l0/src/bin/usart_dma.rs b/examples/stm32l0/src/bin/usart_dma.rs
index 3fe61c13d..543e66f62 100644
--- a/examples/stm32l0/src/bin/usart_dma.rs
+++ b/examples/stm32l0/src/bin/usart_dma.rs
@@ -10,7 +10,6 @@ use example_common::*;
10use embassy::executor::Spawner; 10use embassy::executor::Spawner;
11use embassy_stm32::usart::{Config, Uart}; 11use embassy_stm32::usart::{Config, Uart};
12use embassy_stm32::Peripherals; 12use embassy_stm32::Peripherals;
13use embassy_traits::uart::{Read, Write};
14 13
15#[embassy::main] 14#[embassy::main]
16async fn main(_spawner: Spawner, p: Peripherals) { 15async fn main(_spawner: Spawner, p: Peripherals) {
diff --git a/examples/stm32l4/src/bin/usart.rs b/examples/stm32l4/src/bin/usart.rs
index b6decbc9d..00875c896 100644
--- a/examples/stm32l4/src/bin/usart.rs
+++ b/examples/stm32l4/src/bin/usart.rs
@@ -7,7 +7,6 @@ mod example_common;
7 7
8use embassy_stm32::dma::NoDma; 8use embassy_stm32::dma::NoDma;
9use embassy_stm32::usart::{Config, Uart}; 9use embassy_stm32::usart::{Config, Uart};
10use embedded_hal::blocking::serial::Write;
11use example_common::*; 10use example_common::*;
12 11
13#[cortex_m_rt::entry] 12#[cortex_m_rt::entry]
@@ -19,12 +18,12 @@ fn main() -> ! {
19 let config = Config::default(); 18 let config = Config::default();
20 let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, NoDma, NoDma, config); 19 let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, NoDma, NoDma, config);
21 20
22 unwrap!(usart.bwrite_all(b"Hello Embassy World!\r\n")); 21 unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n"));
23 info!("wrote Hello, starting echo"); 22 info!("wrote Hello, starting echo");
24 23
25 let mut buf = [0u8; 1]; 24 let mut buf = [0u8; 1];
26 loop { 25 loop {
27 unwrap!(usart.read_blocking(&mut buf)); 26 unwrap!(usart.blocking_read(&mut buf));
28 unwrap!(usart.bwrite_all(&buf)); 27 unwrap!(usart.blocking_write(&buf));
29 } 28 }
30} 29}
diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs
index b49d3d882..b3a1e3897 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;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals; 11use embassy_stm32::Peripherals;
12use embassy_traits::uart::Write as _;
13use example_common::*; 12use example_common::*;
14use heapless::String; 13use heapless::String;
15 14
diff --git a/tests/stm32/src/bin/usart.rs b/tests/stm32/src/bin/usart.rs
index f887b084a..44ee730e4 100644
--- a/tests/stm32/src/bin/usart.rs
+++ b/tests/stm32/src/bin/usart.rs
@@ -9,7 +9,6 @@ use embassy::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals; 11use embassy_stm32::Peripherals;
12use embedded_hal::blocking::serial::Write;
13use example_common::*; 12use example_common::*;
14 13
15#[embassy::main(config = "config()")] 14#[embassy::main(config = "config()")]
@@ -42,10 +41,10 @@ async fn main(_spawner: Spawner, p: Peripherals) {
42 // This is because we aren't sending+receiving at the same time. 41 // This is because we aren't sending+receiving at the same time.
43 42
44 let data = [0xC0, 0xDE]; 43 let data = [0xC0, 0xDE];
45 usart.bwrite_all(&data).unwrap(); 44 usart.blocking_write(&data).unwrap();
46 45
47 let mut buf = [0; 2]; 46 let mut buf = [0; 2];
48 usart.read_blocking(&mut buf).unwrap(); 47 usart.blocking_read(&mut buf).unwrap();
49 assert_eq!(buf, data); 48 assert_eq!(buf, data);
50 49
51 info!("Test OK"); 50 info!("Test OK");
diff --git a/tests/stm32/src/bin/usart_dma.rs b/tests/stm32/src/bin/usart_dma.rs
index 96c6a6640..37faaf376 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;
8use embassy::executor::Spawner; 8use embassy::executor::Spawner;
9use embassy_stm32::usart::{Config, Uart}; 9use embassy_stm32::usart::{Config, Uart};
10use embassy_stm32::Peripherals; 10use embassy_stm32::Peripherals;
11use embassy_traits::uart::{Read, Write};
12use example_common::*; 11use example_common::*;
13 12
14#[embassy::main(config = "config()")] 13#[embassy::main(config = "config()")]
diff --git a/tests/stm32/teleprobe.sh b/tests/stm32/teleprobe.sh
new file mode 100755
index 000000000..6eec6ca93
--- /dev/null
+++ b/tests/stm32/teleprobe.sh
@@ -0,0 +1,12 @@
1echo Running target=$1 elf=$2
2STATUSCODE=$(
3 curl \
4 -sS \
5 --output /dev/stderr \
6 --write-out "%{http_code}" \
7 -H "Authorization: Bearer $TELEPROBE_TOKEN" \
8 https://teleprobe.embassy.dev/targets/$1/run --data-binary @$2
9)
10echo
11echo HTTP Status code: $STATUSCODE
12test "$STATUSCODE" -eq 200