Skip to content

Commit d70765c

Browse files
committed
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 <aymane.bahssain@st.com>
1 parent cd91833 commit d70765c

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

api/Print.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ size_t Print::print(unsigned long long n, int base)
130130
else return printULLNumber(n, base);
131131
}
132132

133+
size_t Print::print(float n, int digits)
134+
{
135+
return printFloat(n, digits);
136+
}
137+
133138
size_t Print::print(double n, int digits)
134139
{
135140
return printFloat(n, digits);
@@ -222,6 +227,13 @@ size_t Print::println(unsigned long long num, int base)
222227
return n;
223228
}
224229

230+
size_t Print::println(float num, int digits)
231+
{
232+
size_t n = print(num, digits);
233+
n += println();
234+
return n;
235+
}
236+
225237
size_t Print::println(double num, int digits)
226238
{
227239
size_t n = print(num, digits);
@@ -236,6 +248,34 @@ size_t Print::println(const Printable& x)
236248
return n;
237249
}
238250

251+
int Print::printf(const char *format, ...)
252+
{
253+
va_list ap;
254+
va_start(ap, format);
255+
int retval = vdprintf((int)this, format, ap);
256+
va_end(ap);
257+
return retval;
258+
}
259+
260+
int Print::printf(const __FlashStringHelper *format, ...)
261+
{
262+
va_list ap;
263+
va_start(ap, format);
264+
int retval = vdprintf((int)this, (const char *)format, ap);
265+
va_end(ap);
266+
return retval;
267+
}
268+
269+
int Print::vprintf(const char *format, va_list ap)
270+
{
271+
return vdprintf((int)this, format, ap);
272+
}
273+
274+
int Print::vprintf(const __FlashStringHelper *format, va_list ap)
275+
{
276+
return vdprintf((int)this, (const char *)format, ap);
277+
}
278+
239279
// Private Methods /////////////////////////////////////////////////////////////
240280

241281
size_t Print::printNumber(unsigned long n, uint8_t base)

api/Print.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include <inttypes.h>
2323
#include <stdio.h> // for size_t
24+
#include <stdarg.h> // for printf
2425

2526
#include "String.h"
2627
#include "Printable.h"
@@ -72,6 +73,7 @@ class Print
7273
size_t print(unsigned long, int = DEC);
7374
size_t print(long long, int = DEC);
7475
size_t print(unsigned long long, int = DEC);
76+
size_t print(float, int = 2);
7577
size_t print(double, int = 2);
7678
size_t print(const Printable&);
7779

@@ -86,10 +88,16 @@ class Print
8688
size_t println(unsigned long, int = DEC);
8789
size_t println(long long, int = DEC);
8890
size_t println(unsigned long long, int = DEC);
91+
size_t println(float, int = 2);
8992
size_t println(double, int = 2);
9093
size_t println(const Printable&);
9194
size_t println(void);
9295

96+
int printf(const char *format, ...);
97+
int printf(const __FlashStringHelper *format, ...);
98+
int vprintf(const __FlashStringHelper *format, va_list ap);
99+
int vprintf(const char *format, va_list ap);
100+
93101
virtual void flush() { /* Empty implementation for backward compatibility */ }
94102
};
95103

0 commit comments

Comments
 (0)