From 388e8efeb6bd556a190142624a5c7aeb9dbf97bb Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 18 Jul 2016 16:20:24 +1000 Subject: [PATCH] Fixed issue in F1 and F3 with HardwareSerial read(), which should return -1 if no data in the input buffer, (be non-blocking) --- STM32F1/cores/maple/HardwareSerial.cpp | 9 +++++---- STM32F3/cores/maple/wirish/HardwareSerial.cpp | 11 ++++++----- STM32F3/cores/maple/wirish/HardwareSerial.h | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/STM32F1/cores/maple/HardwareSerial.cpp b/STM32F1/cores/maple/HardwareSerial.cpp index 894470d..44ad460 100644 --- a/STM32F1/cores/maple/HardwareSerial.cpp +++ b/STM32F1/cores/maple/HardwareSerial.cpp @@ -159,10 +159,11 @@ void HardwareSerial::end(void) { */ int HardwareSerial::read(void) { - // Block until a byte becomes available, to save user confusion. - while (!this->available()) - ; - return usart_getc(this->usart_device); + if(usart_data_available(usart_device) > 0) { + return usart_getc(usart_device); + } else { + return -1; + } } int HardwareSerial::available(void) { diff --git a/STM32F3/cores/maple/wirish/HardwareSerial.cpp b/STM32F3/cores/maple/wirish/HardwareSerial.cpp index c4cb5f8..87f80d1 100644 --- a/STM32F3/cores/maple/wirish/HardwareSerial.cpp +++ b/STM32F3/cores/maple/wirish/HardwareSerial.cpp @@ -118,11 +118,12 @@ void HardwareSerial::end(void) { * I/O */ -uint8 HardwareSerial::read(void) { - // Block until a byte becomes available, to save user confusion. - while (!this->available()) - ; - return usart_getc(this->usart_device); +int HardwareSerial::read(void) { + if(usart_data_available(usart_device) > 0) { + return usart_getc(usart_device); + } else { + return -1; + } } uint32 HardwareSerial::available(void) { diff --git a/STM32F3/cores/maple/wirish/HardwareSerial.h b/STM32F3/cores/maple/wirish/HardwareSerial.h index f25362b..260a99e 100644 --- a/STM32F3/cores/maple/wirish/HardwareSerial.h +++ b/STM32F3/cores/maple/wirish/HardwareSerial.h @@ -62,7 +62,7 @@ public: /* I/O */ uint32 available(void); - uint8 read(void); + int read(void); void flush(void); virtual void write(unsigned char); using Print::write;