aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJacob Rosenthal <[email protected]>2021-12-15 12:30:48 -0700
committerJacob Rosenthal <[email protected]>2021-12-15 12:30:48 -0700
commit5d19f87acb32287d7a2034b3344a8aee5ed08fa3 (patch)
tree2cd19422740e1d5ca4df49632b2fdea9ac1f52f8 /examples
parentcfb5e8df57cdab5dd4c511494ce1326da2e88a61 (diff)
cleanup example
Diffstat (limited to 'examples')
-rw-r--r--examples/nrf/src/bin/usb_uart.rs48
1 files changed, 25 insertions, 23 deletions
diff --git a/examples/nrf/src/bin/usb_uart.rs b/examples/nrf/src/bin/usb_uart.rs
index fc7ee03b8..56b451140 100644
--- a/examples/nrf/src/bin/usb_uart.rs
+++ b/examples/nrf/src/bin/usb_uart.rs
@@ -40,53 +40,55 @@ async fn main(_spawner: Spawner, p: Peripherals) {
40 irq.set_priority(interrupt::Priority::P3); 40 irq.set_priority(interrupt::Priority::P3);
41 41
42 let mut state = State::new(); 42 let mut state = State::new();
43
44 let usb = unsafe { Usb::new(&mut state, device, serial, irq) }; 43 let usb = unsafe { Usb::new(&mut state, device, serial, irq) };
45 pin_mut!(usb); 44 pin_mut!(usb);
46 45
47 let (mut read_interface, mut write_interface) = usb.as_ref().take_serial_0(); 46 let (mut reader, mut writer) = usb.as_ref().take_serial_0();
48 47
49 unwrap!(write_interface.write_all(b"\r\nSend something\r\n").await); 48 unwrap!(writer.write_all(b"\r\nSend something\r\n").await);
50 49
51 info!("usb initialized!"); 50 info!("usb initialized!");
52 51
53 let mut buf = [0u8; 64]; 52 let mut buf = [0u8; 64];
54 loop { 53 loop {
55 let mut n = 0; 54 let mut n = 0;
56 let left = { 55 let timed_out = {
57 let recv_fut = async { 56 let newline_fut = async {
58 loop { 57 loop {
59 let byte = unwrap!(read_interface.read_byte().await); 58 let char = unwrap!(reader.read_byte().await);
60 unwrap!(write_interface.write_byte(byte).await); 59 // echo input back to screen
61 buf[n] = byte; 60 unwrap!(writer.write_byte(char).await);
61 buf[n] = char;
62 62
63 n += 1; 63 n += 1;
64 if byte == b'\n' || byte == b'\r' || n == buf.len() { 64 if char == b'\n' || char == b'\r' || n == buf.len() {
65 break; 65 break;
66 } 66 }
67 } 67 }
68 }; 68 };
69 pin_mut!(recv_fut); 69 pin_mut!(newline_fut);
70 70
71 let timeout = Timer::after(Duration::from_ticks(32768 * 10)); 71 let timeout_fut = Timer::after(Duration::from_ticks(32768 * 10));
72 72
73 match select(recv_fut, timeout).await { 73 // select chooses whichever returns first
74 Either::Left(_) => true, 74 match select(newline_fut, timeout_fut).await {
75 Either::Right(_) => false, 75 Either::Left(_) => false,
76 Either::Right(_) => true,
76 } 77 }
77 }; 78 };
78 79
79 if left { 80 if timed_out {
80 for c in buf[..n].iter_mut() { 81 unwrap!(writer.write_all(b"\r\nTimed out\r\n").await);
81 if 0x61 <= *c && *c <= 0x7a { 82 } else {
82 *c &= !0x20; 83 for char in buf[..n].iter_mut() {
84 // upper case
85 if 0x61 <= *char && *char <= 0x7a {
86 *char &= !0x20;
83 } 87 }
84 } 88 }
85 unwrap!(write_interface.write_byte(b'\n').await); 89 unwrap!(writer.write_byte(b'\n').await);
86 unwrap!(write_interface.write_all(&buf[..n]).await); 90 unwrap!(writer.write_all(&buf[..n]).await);
87 unwrap!(write_interface.write_byte(b'\n').await); 91 unwrap!(writer.write_byte(b'\n').await);
88 } else {
89 unwrap!(write_interface.write_all(b"\r\nSend something\r\n").await);
90 } 92 }
91 } 93 }
92} 94}