mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-21 14:22:33 +00:00
stm32/uart remove DmaUnsynced from public api
Its an internal error which should never be exposed. It should only occur with wrong driver implementations. We log to the user and return an Overrun error since handling DmaUnsynced as an Overrun will resolve it.
This commit is contained in:
parent
be50b62677
commit
edac7cc630
@ -21,6 +21,10 @@ pub trait DmaCtrl {
|
||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||
pub enum Error {
|
||||
Overrun,
|
||||
/// the newly read DMA positions don't make sense compared to the previous
|
||||
/// ones. This can usually only occur due to wrong Driver implementation, if
|
||||
/// the driver author (or the user using raw metapac code) directly resets
|
||||
/// the channel for instance.
|
||||
DmaUnsynced,
|
||||
}
|
||||
|
||||
|
@ -260,8 +260,6 @@ pub enum Error {
|
||||
Parity,
|
||||
/// Buffer too large for DMA
|
||||
BufferTooLong,
|
||||
// TODO: ask what this is and document it (dvdsk)
|
||||
DmaUnsynced,
|
||||
}
|
||||
|
||||
enum ReadCompletionEvent {
|
||||
|
@ -268,7 +268,14 @@ impl ReadReady for RingBufferedUartRx<'_> {
|
||||
fn read_ready(&mut self) -> Result<bool, Self::Error> {
|
||||
let len = self.ring_buf.len().map_err(|e| match e {
|
||||
crate::dma::ringbuffer::Error::Overrun => Self::Error::Overrun,
|
||||
crate::dma::ringbuffer::Error::DmaUnsynced => Self::Error::DmaUnsynced,
|
||||
crate::dma::ringbuffer::Error::DmaUnsynced => {
|
||||
error!(
|
||||
"Ringbuffer error: DmaUNsynced, driver implementation is
|
||||
probably bugged please open an issue"
|
||||
);
|
||||
// we report this as overrun since its recoverable in the same way
|
||||
Self::Error::Overrun
|
||||
}
|
||||
})?;
|
||||
Ok(len > 0)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user