From 00776994e1869c1482b5cbe186cd0454f88da714 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 23 Aug 2017 16:59:04 +0200 Subject: [PATCH 1/2] Some updates on Stream and Print class. --- cores/arduino/Print.cpp | 4 ++-- cores/arduino/Print.h | 9 +++++++++ cores/arduino/Stream.h | 1 - 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index 33ee7210f..136329cca 100644 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -238,14 +238,14 @@ size_t Print::printFloat(double number, uint8_t digits) // Print the decimal point, but only if there are digits beyond if (digits > 0) { - n += print("."); + n += print('.'); } // Extract digits from the remainder one at a time while (digits-- > 0) { remainder *= 10.0; - unsigned int toPrint = (unsigned int)remainder; + unsigned int toPrint = (unsigned int)(remainder); n += print(toPrint); remainder -= toPrint; } diff --git a/cores/arduino/Print.h b/cores/arduino/Print.h index 9fc267424..dfb645cbb 100644 --- a/cores/arduino/Print.h +++ b/cores/arduino/Print.h @@ -28,6 +28,9 @@ #define DEC 10 #define HEX 16 #define OCT 8 +#ifdef BIN // Prevent warnings if BIN is previously defined in "iotnx4.h" or similar +#undef BIN +#endif #define BIN 2 class Print @@ -54,6 +57,10 @@ class Print return write((const uint8_t *)buffer, size); } + // default to zero, meaning "a single write may block" + // should be overriden by subclasses with buffering + virtual int availableForWrite() { return 0; } + size_t print(const __FlashStringHelper *); size_t print(const String &); size_t print(const char[]); @@ -78,6 +85,8 @@ class Print size_t println(double, int = 2); size_t println(const Printable&); size_t println(void); + + virtual void flush() { /* Empty implementation for backward compatibility */ } }; #endif diff --git a/cores/arduino/Stream.h b/cores/arduino/Stream.h index 5c9701f59..c3311c3cd 100644 --- a/cores/arduino/Stream.h +++ b/cores/arduino/Stream.h @@ -59,7 +59,6 @@ class Stream : public Print virtual int available() = 0; virtual int read() = 0; virtual int peek() = 0; - virtual void flush() = 0; Stream() {_timeout=1000;} From 402a335d933744478b9164e52ebfba81cd7b27a4 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Wed, 23 Aug 2017 12:51:23 -0400 Subject: [PATCH 2/2] Change return value of I2S:: availableForWrite to match new Print API --- libraries/I2S/src/I2S.cpp | 2 +- libraries/I2S/src/I2S.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/I2S/src/I2S.cpp b/libraries/I2S/src/I2S.cpp index cf8e8683f..97690e0f3 100644 --- a/libraries/I2S/src/I2S.cpp +++ b/libraries/I2S/src/I2S.cpp @@ -280,7 +280,7 @@ size_t I2SClass::write(const uint8_t *buffer, size_t size) return write((const void*)buffer, size); } -size_t I2SClass::availableForWrite() +int I2SClass::availableForWrite() { if (_state != I2S_STATE_TRANSMITTER) { enableTransmitter(); diff --git a/libraries/I2S/src/I2S.h b/libraries/I2S/src/I2S.h index 12ec0863d..855f26b4c 100644 --- a/libraries/I2S/src/I2S.h +++ b/libraries/I2S/src/I2S.h @@ -51,7 +51,7 @@ class I2SClass : public Stream virtual size_t write(uint8_t); virtual size_t write(const uint8_t *buffer, size_t size); - virtual size_t availableForWrite(); + virtual int availableForWrite(); int read(void* buffer, size_t size);