diff options
| author | Jacob Rosenthal <[email protected]> | 2021-12-16 14:59:08 -0700 |
|---|---|---|
| committer | Jacob Rosenthal <[email protected]> | 2021-12-16 14:59:08 -0700 |
| commit | 1f2bbe3e4a65f652edc0c2381405ea58df199130 (patch) | |
| tree | 82e8799e42e0ebaecffc691fff6f966dc3182a74 /examples | |
| parent | 5d19f87acb32287d7a2034b3344a8aee5ed08fa3 (diff) | |
simplify usb_uart example
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/nrf/src/bin/usb_uart.rs | 60 |
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 | ||
| 16 | use embassy::executor::Spawner; | 16 | use embassy::executor::Spawner; |
| 17 | use embassy::io::{AsyncBufReadExt, AsyncWriteExt}; | 17 | use embassy::io::{AsyncBufReadExt, AsyncWriteExt}; |
| 18 | use embassy::time::{Duration, Timer}; | ||
| 19 | use embassy_nrf::usb::{State, Usb, UsbBus, UsbSerial}; | 18 | use embassy_nrf::usb::{State, Usb, UsbBus, UsbSerial}; |
| 20 | use embassy_nrf::{interrupt, Peripherals}; | 19 | use embassy_nrf::{interrupt, Peripherals}; |
| 21 | use usb_device::device::{UsbDeviceBuilder, UsbVidPid}; | 20 | use usb_device::device::{UsbDeviceBuilder, UsbVidPid}; |
| 22 | 21 | ||
| 23 | #[embassy::main] | 22 | #[embassy::main] |
| 24 | async fn main(_spawner: Spawner, p: Peripherals) { | 23 | async 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 | } |
