From d70765cbfc98c03cc39177ae240827a73e9e066b Mon Sep 17 00:00:00 2001 From: Aymane Bahssain Date: Tue, 13 Jan 2026 10:07:14 +0100 Subject: [PATCH] feat: enhance Print class with float support and printf functionality - Add float overloads to Print::print/println - Enhance Print with printf() and vprintf() helpers Signed-off-by: Aymane Bahssain --- api/Print.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ api/Print.h | 8 ++++++++ 2 files changed, 48 insertions(+) diff --git a/api/Print.cpp b/api/Print.cpp index 4a6e942a..d827f2ed 100644 --- a/api/Print.cpp +++ b/api/Print.cpp @@ -130,6 +130,11 @@ size_t Print::print(unsigned long long n, int base) else return printULLNumber(n, base); } +size_t Print::print(float n, int digits) +{ + return printFloat(n, digits); +} + size_t Print::print(double n, int digits) { return printFloat(n, digits); @@ -222,6 +227,13 @@ size_t Print::println(unsigned long long num, int base) return n; } +size_t Print::println(float num, int digits) +{ + size_t n = print(num, digits); + n += println(); + return n; +} + size_t Print::println(double num, int digits) { size_t n = print(num, digits); @@ -236,6 +248,34 @@ size_t Print::println(const Printable& x) return n; } +int Print::printf(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + int retval = vdprintf((int)this, format, ap); + va_end(ap); + return retval; +} + +int Print::printf(const __FlashStringHelper *format, ...) +{ + va_list ap; + va_start(ap, format); + int retval = vdprintf((int)this, (const char *)format, ap); + va_end(ap); + return retval; +} + +int Print::vprintf(const char *format, va_list ap) +{ + return vdprintf((int)this, format, ap); +} + +int Print::vprintf(const __FlashStringHelper *format, va_list ap) +{ + return vdprintf((int)this, (const char *)format, ap); +} + // Private Methods ///////////////////////////////////////////////////////////// size_t Print::printNumber(unsigned long n, uint8_t base) diff --git a/api/Print.h b/api/Print.h index 2016d7d5..0782b8ee 100644 --- a/api/Print.h +++ b/api/Print.h @@ -21,6 +21,7 @@ #include #include // for size_t +#include // for printf #include "String.h" #include "Printable.h" @@ -72,6 +73,7 @@ class Print size_t print(unsigned long, int = DEC); size_t print(long long, int = DEC); size_t print(unsigned long long, int = DEC); + size_t print(float, int = 2); size_t print(double, int = 2); size_t print(const Printable&); @@ -86,10 +88,16 @@ class Print size_t println(unsigned long, int = DEC); size_t println(long long, int = DEC); size_t println(unsigned long long, int = DEC); + size_t println(float, int = 2); size_t println(double, int = 2); size_t println(const Printable&); size_t println(void); + int printf(const char *format, ...); + int printf(const __FlashStringHelper *format, ...); + int vprintf(const __FlashStringHelper *format, va_list ap); + int vprintf(const char *format, va_list ap); + virtual void flush() { /* Empty implementation for backward compatibility */ } };