Skip to content

Commit d72022c

Browse files
authored
feat(uart8250): implement embedded_hal serial traits
1 parent 8805500 commit d72022c

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

Cargo.lock

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

uart8250/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ readme = "README.md"
1515

1616
[dependencies]
1717
bitflags = "1"
18-
# embedded-hal = { version = "=1.0.0-alpha.4", optional = true }
19-
# nb = { version = "1", optional = true }
18+
embedded-hal = { version = "0.2.7", optional = true }
19+
nb = { version = "1.0.0", optional = true }
2020
volatile-register = "0.2"
2121

2222
[features]
2323
default = []
24-
# embedded = ["embedded-hal", "nb"]
24+
embedded = ["embedded-hal", "nb"]
2525
fmt = []

uart8250/src/uart.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
use bitflags::bitflags;
2+
#[cfg(feature = "embedded")]
3+
use core::convert::Infallible;
24
use core::fmt::{self, Display, Formatter};
35

46
use crate::registers::Registers;
@@ -678,6 +680,34 @@ impl<'a> fmt::Write for MmioUart8250<'a> {
678680
}
679681
}
680682

683+
#[cfg(feature = "embedded")]
684+
impl embedded_hal::serial::Read<u8> for MmioUart8250<'_> {
685+
type Error = Infallible;
686+
687+
fn read(&mut self) -> nb::Result<u8, Self::Error> {
688+
self.read_byte().ok_or(nb::Error::WouldBlock)
689+
}
690+
}
691+
692+
#[cfg(feature = "embedded")]
693+
impl embedded_hal::serial::Write<u8> for MmioUart8250<'_> {
694+
type Error = Infallible;
695+
696+
fn write(&mut self, byte: u8) -> nb::Result<(), Self::Error> {
697+
self.write_byte(byte).map_err(|e| match e {
698+
TransmitError::BufferFull => nb::Error::WouldBlock,
699+
})
700+
}
701+
702+
fn flush(&mut self) -> nb::Result<(), Self::Error> {
703+
if self.is_data_holding_registers_empty() {
704+
Ok(())
705+
} else {
706+
Err(nb::Error::WouldBlock)
707+
}
708+
}
709+
}
710+
681711
#[cfg(test)]
682712
mod tests {
683713
use super::*;

0 commit comments

Comments
 (0)