rp-hal
rp-hal copied to clipboard
`embedded_io::ReadReady/WriteReady` not implemented for uart peripheral
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
It might be simply because no one needed it before. Feel free to open a PR :)