Merge pull request #1159 from PaulKierstead/master

When UART timeout of zero is given, make read() return data already a…
This commit is contained in:
Dan Halbert 2018-09-04 09:47:52 -04:00 committed by GitHub
commit ba6e1b6772
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -249,7 +249,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
uint64_t start_ticks = ticks_ms; uint64_t start_ticks = ticks_ms;
// Busy-wait until timeout or until we've read enough chars. // Busy-wait until timeout or until we've read enough chars.
while (ticks_ms - start_ticks < self->timeout_ms) { while (ticks_ms - start_ticks <= self->timeout_ms) {
// Read as many chars as we can right now, up to len. // Read as many chars as we can right now, up to len.
size_t num_read = io_read(io, data, len); size_t num_read = io_read(io, data, len);
@ -268,6 +268,10 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
#ifdef MICROPY_VM_HOOK_LOOP #ifdef MICROPY_VM_HOOK_LOOP
MICROPY_VM_HOOK_LOOP MICROPY_VM_HOOK_LOOP
#endif #endif
// If we are zero timeout, make sure we don't loop again (in the event
// we read in under 1ms)
if (self->timeout_ms == 0)
break;
} }
if (total_read == 0) { if (total_read == 0) {