rp-rs / rp-hal

A Rust Embedded-HAL for the rp series microcontrollers
https://crates.io/crates/rp2040-hal
Apache License 2.0
1.4k stars 226 forks source link

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

Open antbern opened 3 weeks ago

antbern commented 3 weeks ago

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:

ithinuel commented 3 weeks ago

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