mirror of
https://github.com/embassy-rs/embassy.git
synced 2025-10-02 06:40:32 +00:00
fix: BufferedUartRx embedded_hal_nb::serial::Read impl
This commit is contained in:
parent
f3b98a8748
commit
76756ee702
@ -908,26 +908,16 @@ impl<'d> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d> {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
|
fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
|
||||||
let r = self.info.regs;
|
let state = self.state;
|
||||||
unsafe {
|
let mut rx_reader = unsafe { state.rx_buf.reader() };
|
||||||
let sr = sr(r).read();
|
|
||||||
if sr.pe() {
|
if let Some(data) = rx_reader.pop_one() {
|
||||||
rdr(r).read_volatile();
|
Ok(data)
|
||||||
Err(nb::Error::Other(Error::Parity))
|
|
||||||
} else if sr.fe() {
|
|
||||||
rdr(r).read_volatile();
|
|
||||||
Err(nb::Error::Other(Error::Framing))
|
|
||||||
} else if sr.ne() {
|
|
||||||
rdr(r).read_volatile();
|
|
||||||
Err(nb::Error::Other(Error::Noise))
|
|
||||||
} else if sr.ore() {
|
|
||||||
rdr(r).read_volatile();
|
|
||||||
Err(nb::Error::Other(Error::Overrun))
|
|
||||||
} else if sr.rxne() {
|
|
||||||
Ok(rdr(r).read_volatile())
|
|
||||||
} else {
|
} else {
|
||||||
Err(nb::Error::WouldBlock)
|
if state.rx_buf.is_full() {
|
||||||
|
self.info.interrupt.pend();
|
||||||
}
|
}
|
||||||
|
Err(nb::Error::WouldBlock)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user