Skip to content

Commit 1346d77

Browse files
cherrypiejamalevy
authored andcommitted
support backspace
1 parent f4ed097 commit 1346d77

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

src/uart.rs

+19-6
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,31 @@ impl UART {
5454

5555
pub fn read_line<'a>(&mut self, buf: &'a mut [u8], echo: bool) -> &'a [u8] {
5656
let mut max_len = buf.len();
57-
let mut count = 0;
57+
let mut count: usize = 0;
5858
while max_len > 0 {
5959
let cur = self.read_byte();
6060
if cur == b'\r' || cur == b'\n' {
6161
break;
6262
}
63-
if echo {
64-
self.write_byte(cur);
63+
match cur {
64+
b'\r' | b'\n' => break,
65+
// delete and backspace
66+
b'\x7f' | b'\x08' => {
67+
if echo && count > 0 {
68+
self.write_bytes(b"\x08\x20\x08");
69+
}
70+
count = count.checked_sub(1).unwrap_or(0);
71+
max_len = max_len.checked_add(1).unwrap_or(0);
72+
}
73+
_ => {
74+
if echo {
75+
self.write_byte(cur);
76+
}
77+
buf[count] = cur;
78+
count += 1;
79+
max_len -= 1;
80+
}
6581
}
66-
buf[count] = cur;
67-
count += 1;
68-
max_len -= 1;
6982
}
7083
if echo {
7184
self.write_byte(b'\n');

0 commit comments

Comments
 (0)