Add console chars_read implementation

pull/41/head
Andre Richter 5 years ago
parent f11a076c04
commit 582d539212
No known key found for this signature in database
GPG Key ID: 2116C1AB102F615E

@ -275,7 +275,7 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_gpio.rs 06_drivers_gpio_uar
diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
--- 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
+++ 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
@@ -0,0 +1,307 @@
@@ -0,0 +1,317 @@
+// SPDX-License-Identifier: MIT OR Apache-2.0
+//
+// Copyright (c) 2018-2019 Andre Richter <andre.o.richter@gmail.com>
@ -408,6 +408,7 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gp
+pub struct PL011UartInner {
+ base_addr: usize,
+ chars_written: usize,
+ chars_read: usize,
+}
+
+/// Deref to RegisterBlock.
@ -433,6 +434,7 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gp
+ PL011UartInner {
+ base_addr,
+ chars_written: 0,
+ chars_read: 0,
+ }
+ }
+
@ -572,6 +574,9 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gp
+ ret = '\n'
+ }
+
+ // Update statistics.
+ inner.chars_read += 1;
+
+ ret
+ })
+ }
@ -582,6 +587,11 @@ diff -uNr 05_safe_globals/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 06_drivers_gp
+ let mut r = &self.inner;
+ r.lock(|inner| inner.chars_written)
+ }
+
+ fn chars_read(&self) -> usize {
+ let mut r = &self.inner;
+ r.lock(|inner| inner.chars_read)
+ }
+}
diff -uNr 05_safe_globals/src/bsp/driver/bcm.rs 06_drivers_gpio_uart/src/bsp/driver/bcm.rs

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -294,6 +296,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -304,4 +309,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

@ -162,7 +162,7 @@ diff -uNr 06_drivers_gpio_uart/src/arch/aarch64.rs 07_uart_chainloader/src/arch/
diff -uNr 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
--- 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
+++ 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
@@ -275,6 +275,16 @@
@@ -277,6 +277,16 @@
let mut r = &self.inner;
r.lock(|inner| fmt::Write::write_fmt(inner, args))
}
@ -179,27 +179,34 @@ diff -uNr 06_drivers_gpio_uart/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 07_uart_
}
impl interface::console::Read for PL011Uart {
@@ -287,14 +297,17 @@
@@ -288,18 +298,21 @@
arch::nop();
}
// Read one character.
- // Read one character.
- let mut ret = inner.DR.get() as u8 as char;
+ inner.DR.get() as u8 as char
+ })
+ }
-
- // Convert carrige return to newline.
- if ret == '\r' {
- ret = '\n'
- }
-
// Update statistics.
inner.chars_read += 1;
- ret
+ // Read one character.
+ inner.DR.get() as u8 as char
+ })
+ }
+
+ fn clear(&self) {
+ let mut r = &self.inner;
+ r.lock(|inner| {
+ // Read from the RX FIFO until it is indicating empty.
+ while !inner.FR.matches_all(FR::RXFE::SET) {
+ inner.DR.get();
}
-
- ret
+ }
})
}
}

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -296,6 +298,9 @@ impl interface::console::Read for PL011Uart {
arch::nop();
}
// Update statistics.
inner.chars_read += 1;
// Read one character.
inner.DR.get() as u8 as char
})
@ -317,4 +322,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

@ -235,11 +235,11 @@ diff -uNr 07_uart_chainloader/src/arch/aarch64.rs 08_timestamps/src/arch/aarch64
diff -uNr 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
--- 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
+++ 08_timestamps/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs
@@ -297,7 +297,14 @@
@@ -298,11 +298,18 @@
arch::nop();
}
// Read one character.
- inner.DR.get() as u8 as char
+ // Read one character.
+ let mut ret = inner.DR.get() as u8 as char;
+
+ // Convert carrige return to newline.
@ -247,6 +247,11 @@ diff -uNr 07_uart_chainloader/src/bsp/driver/bcm/bcm2xxx_pl011_uart.rs 08_timest
+ ret = '\n'
+ }
+
// Update statistics.
inner.chars_read += 1;
- // Read one character.
- inner.DR.get() as u8 as char
+ ret
})
}

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -304,6 +306,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -324,4 +329,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -304,6 +306,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -324,4 +329,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -304,6 +306,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -324,4 +329,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -304,6 +306,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -324,4 +329,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -304,6 +306,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -324,4 +329,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

Binary file not shown.

Binary file not shown.

@ -130,6 +130,7 @@ register_structs! {
pub struct PL011UartInner {
base_addr: usize,
chars_written: usize,
chars_read: usize,
}
/// Deref to RegisterBlock.
@ -155,6 +156,7 @@ impl PL011UartInner {
PL011UartInner {
base_addr,
chars_written: 0,
chars_read: 0,
}
}
@ -304,6 +306,9 @@ impl interface::console::Read for PL011Uart {
ret = '\n'
}
// Update statistics.
inner.chars_read += 1;
ret
})
}
@ -324,4 +329,9 @@ impl interface::console::Statistics for PL011Uart {
let mut r = &self.inner;
r.lock(|inner| inner.chars_written)
}
fn chars_read(&self) -> usize {
let mut r = &self.inner;
r.lock(|inner| inner.chars_read)
}
}

Loading…
Cancel
Save