From 2e62e13455780517047c32279fc8bf2812810602 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Mon, 19 Jul 2021 23:58:26 +0200 Subject: [PATCH] rp2/machine_uart: Fix poll ioctl to also check hardware FIFO. The RX IRQ does not trigger if the FIFO is less than the trigger level, in which case characters may be available in the FIFO, yet not in the ringbuf, and the ioctl returns false. --- ports/rp2/machine_uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/rp2/machine_uart.c b/ports/rp2/machine_uart.c index c6206cebe6..2431f496eb 100644 --- a/ports/rp2/machine_uart.c +++ b/ports/rp2/machine_uart.c @@ -477,7 +477,7 @@ STATIC mp_uint_t machine_uart_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint if (request == MP_STREAM_POLL) { uintptr_t flags = arg; ret = 0; - if ((flags & MP_STREAM_POLL_RD) && ringbuf_avail(&self->read_buffer) > 0) { + if ((flags & MP_STREAM_POLL_RD) && (uart_is_readable(self->uart) || ringbuf_avail(&self->read_buffer) > 0)) { ret |= MP_STREAM_POLL_RD; } if ((flags & MP_STREAM_POLL_WR) && ringbuf_free(&self->write_buffer) > 0) {