aboutsummaryrefslogtreecommitdiff
path: root/examples/nrf
diff options
context:
space:
mode:
authorJacob Rosenthal <[email protected]>2021-12-16 14:59:08 -0700
committerJacob Rosenthal <[email protected]>2021-12-16 14:59:08 -0700
commit1f2bbe3e4a65f652edc0c2381405ea58df199130 (patch)
tree82e8799e42e0ebaecffc691fff6f966dc3182a74 /examples/nrf
parent5d19f87acb32287d7a2034b3344a8aee5ed08fa3 (diff)
simplify usb_uart example
Diffstat (limited to 'examples/nrf')
-rw-r--r--examples/nrf/src/bin/usb_uart.rs60
1 files changed, 30 insertions, 30 deletions
diff --git a/examples/nrf/src/bin/usb_uart.rs b/examples/nrf/src/bin/usb_uart.rs
index 56b451140..8c386daa7 100644
--- a/examples/nrf/src/bin/usb_uart.rs
+++ b/examples/nrf/src/bin/usb_uart.rs
@@ -15,15 +15,15 @@ use panic_probe as _; // print out panic messages
15 15
16use embassy::executor::Spawner; 16use embassy::executor::Spawner;
17use embassy::io::{AsyncBufReadExt, AsyncWriteExt}; 17use embassy::io::{AsyncBufReadExt, AsyncWriteExt};
18use embassy::time::{Duration, Timer};
19use embassy_nrf::usb::{State, Usb, UsbBus, UsbSerial}; 18use embassy_nrf::usb::{State, Usb, UsbBus, UsbSerial};
20use embassy_nrf::{interrupt, Peripherals}; 19use embassy_nrf::{interrupt, Peripherals};
21use usb_device::device::{UsbDeviceBuilder, UsbVidPid}; 20use usb_device::device::{UsbDeviceBuilder, UsbVidPid};
22 21
23#[embassy::main] 22#[embassy::main]
24async fn main(_spawner: Spawner, p: Peripherals) { 23async fn main(_spawner: Spawner, p: Peripherals) {
25 let mut tx_buffer = [0u8; 1024]; 24 let mut rx_buffer = [0u8; 64];
26 let mut rx_buffer = [0u8; 640]; 25 // we send back input + cr + lf
26 let mut tx_buffer = [0u8; 66];
27 27
28 let usb_bus = UsbBus::new(p.USBD); 28 let usb_bus = UsbBus::new(p.USBD);
29 29
@@ -45,50 +45,50 @@ async fn main(_spawner: Spawner, p: Peripherals) {
45 45
46 let (mut reader, mut writer) = usb.as_ref().take_serial_0(); 46 let (mut reader, mut writer) = usb.as_ref().take_serial_0();
47 47
48 unwrap!(writer.write_all(b"\r\nSend something\r\n").await);
49
50 info!("usb initialized!"); 48 info!("usb initialized!");
51 49
50 unwrap!(
51 writer
52 .write_all(b"\r\nInput returned upper cased on CR+LF\r\n")
53 .await
54 );
55
52 let mut buf = [0u8; 64]; 56 let mut buf = [0u8; 64];
53 loop { 57 loop {
54 let mut n = 0; 58 let mut n = 0;
55 let timed_out = { 59
56 let newline_fut = async { 60 async {
57 loop { 61 loop {
58 let char = unwrap!(reader.read_byte().await); 62 let char = unwrap!(reader.read_byte().await);
59 // echo input back to screen 63
60 unwrap!(writer.write_byte(char).await); 64 // throw away, read more on cr, exit on lf
61 buf[n] = char; 65 if char == b'\r' {
62 66 continue;
63 n += 1; 67 } else if char == b'\n' {
64 if char == b'\n' || char == b'\r' || n == buf.len() { 68 break;
65 break;
66 }
67 } 69 }
68 };
69 pin_mut!(newline_fut);
70 70
71 let timeout_fut = Timer::after(Duration::from_ticks(32768 * 10)); 71 buf[n] = char;
72 n += 1;
72 73
73 // select chooses whichever returns first 74 // stop if we're out of room
74 match select(newline_fut, timeout_fut).await { 75 if n == buf.len() {
75 Either::Left(_) => false, 76 break;
76 Either::Right(_) => true, 77 }
77 } 78 }
78 }; 79 }
80 .await;
79 81
80 if timed_out { 82 if n > 0 {
81 unwrap!(writer.write_all(b"\r\nTimed out\r\n").await);
82 } else {
83 for char in buf[..n].iter_mut() { 83 for char in buf[..n].iter_mut() {
84 // upper case 84 // upper case
85 if 0x61 <= *char && *char <= 0x7a { 85 if 0x61 <= *char && *char <= 0x7a {
86 *char &= !0x20; 86 *char &= !0x20;
87 } 87 }
88 } 88 }
89 unwrap!(writer.write_byte(b'\n').await);
90 unwrap!(writer.write_all(&buf[..n]).await); 89 unwrap!(writer.write_all(&buf[..n]).await);
91 unwrap!(writer.write_byte(b'\n').await); 90 unwrap!(writer.write_all(b"\r\n").await);
91 unwrap!(writer.flush().await);
92 } 92 }
93 } 93 }
94} 94}