rp-hal icon indicating copy to clipboard operation
rp-hal copied to clipboard

`embedded_io::ReadReady/WriteReady` not implemented for uart peripheral

Open antbern opened this issue 1 year ago • 1 comments
trafficstars

I am working on a project where I need to do some non-blocking reading from the uart peripheral based on the embedded_io traits. The regular Read trait specifies a blocking read such that it will wait for at least one byte to be available to be read. If one wants to do a non-blocking read, you need to use the ReadReady trait function read_ready to first check if there is data available before doing the read.

However, only the Read trait is implemented (in #727 and #781 ) for the split and unsplit peripherals, but not the ReadReady trait. Is there a reason this has been left out?

It looks like the implementation could be quite simple, something like this for the Reader split peripheral (not tested):

impl<D: UartDevice, P: ValidUartPinout<D>> embedded_io::ReadReady for Reader<D, P> {
    fn read_ready(&mut self) -> Result<bool, Self::Error> {
        Ok(is_readable(self.device))
    }
}

Fixed in:

  • [x] RP2040 HAL (https://github.com/rp-rs/rp-hal/pull/837)
  • [ ] RP235x HAL

antbern avatar Aug 22 '24 15:08 antbern

It might be simply because no one needed it before. Feel free to open a PR :)

ithinuel avatar Aug 22 '24 16:08 ithinuel