diff --git a/api/Print.cpp b/api/Print.cpp index 4f0016c4..b1c34112 100644 --- a/api/Print.cpp +++ b/api/Print.cpp @@ -144,6 +144,15 @@ size_t Print::print(const Printable& x) return x.printTo(*this); } +size_t Print::printf(char const * fmt, ...) +{ + va_list args; + va_start(args, fmt); + size_t const n = vprintf(fmt, args); + va_end(args); + return n; +} + size_t Print::println(void) { return write("\r\n"); @@ -233,6 +242,16 @@ size_t Print::println(const Printable& x) return n; } +size_t Print::printfln(char const * fmt, ...) +{ + va_list args; + va_start(args, fmt); + size_t n = vprintf(fmt, args); + va_end(args); + n += println(); + return n; +} + // Private Methods ///////////////////////////////////////////////////////////// size_t Print::printNumber(unsigned long n, uint8_t base) @@ -374,3 +393,13 @@ size_t Print::printFloat(double number, uint8_t digits) return n; } + +size_t Print::vprintf(char const * fmt, va_list args) +{ + static size_t const MSG_BUF_SIZE = 64; + char msg_buf[MSG_BUF_SIZE] = {0}; + + int const length = vsnprintf(msg_buf, MSG_BUF_SIZE, fmt, args); + + return write(msg_buf, length); +} diff --git a/api/Print.h b/api/Print.h index 6a06bad6..971b3806 100644 --- a/api/Print.h +++ b/api/Print.h @@ -36,6 +36,7 @@ class Print size_t printNumber(unsigned long, uint8_t); size_t printULLNumber(unsigned long long, uint8_t); size_t printFloat(double, uint8_t); + size_t vprintf(char const * fmt, va_list args); protected: void setWriteError(int err = 1) { write_error = err; } public: @@ -67,6 +68,7 @@ class Print size_t print(unsigned long long, int = DEC); size_t print(double, int = 2); size_t print(const Printable&); + size_t printf(char const * fmt, ...); size_t println(const __FlashStringHelper *); size_t println(const String &s); @@ -82,5 +84,6 @@ class Print size_t println(double, int = 2); size_t println(const Printable&); size_t println(void); + size_t printfln(char const * fmt, ...); };