diff --git a/cores/esp32/Print.cpp b/cores/esp32/Print.cpp index 269ad733386..b1b9c0a1e88 100644 --- a/cores/esp32/Print.cpp +++ b/cores/esp32/Print.cpp @@ -44,13 +44,11 @@ size_t Print::write(const uint8_t *buffer, size_t size) return n; } -size_t Print::printf(const char *format, ...) +size_t Print::vprintf(const char *format, va_list arg) { char loc_buf[64]; char * temp = loc_buf; - va_list arg; va_list copy; - va_start(arg, format); va_copy(copy, arg); int len = vsnprintf(temp, sizeof(loc_buf), format, copy); va_end(copy); @@ -74,6 +72,25 @@ size_t Print::printf(const char *format, ...) return len; } +size_t Print::printf(const __FlashStringHelper *ifsh, ...) +{ + va_list arg; + va_start(arg, ifsh); + const char * format = (reinterpret_cast(ifsh)); + size_t ret = vprintf(format, arg); + va_end(arg); + return ret; +} + +size_t Print::printf(const char *format, ...) +{ + va_list arg; + va_start(arg, format); + size_t ret = vprintf(format, arg); + va_end(arg); + return ret; +} + size_t Print::print(const String &s) { return write(s.c_str(), s.length()); diff --git a/cores/esp32/Print.h b/cores/esp32/Print.h index 57284c49762..a543e8c1d0f 100644 --- a/cores/esp32/Print.h +++ b/cores/esp32/Print.h @@ -21,6 +21,7 @@ #define Print_h #include +#include #include #include "WString.h" @@ -72,7 +73,10 @@ class Print return write((const uint8_t *) buffer, size); } + size_t vprintf(const char *format, va_list arg); + size_t printf(const char * format, ...) __attribute__ ((format (printf, 2, 3))); + size_t printf(const __FlashStringHelper *ifsh, ...); // add availableForWrite to make compatible with Arduino Print.h // default to zero, meaning "a single write may block"