Skip to content

Commit 8f747a4

Browse files
Add Print::printf() method for sanity
1 parent 2af4a9c commit 8f747a4

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

api/Print.cpp

+48
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1717
*/
1818

19+
#include <stdarg.h>
1920
#include <stdlib.h>
2021
#include <stdio.h>
2122
#include <string.h>
@@ -235,6 +236,53 @@ size_t Print::println(const Printable& x)
235236
return n;
236237
}
237238

239+
size_t Print::printf(const char *format, ...) {
240+
va_list arg;
241+
va_start(arg, format);
242+
char temp[64];
243+
char* buffer = temp;
244+
size_t len = vsnprintf(temp, sizeof(temp), format, arg);
245+
va_end(arg);
246+
if (len > sizeof(temp) - 1) {
247+
buffer = new char[len + 1];
248+
if (!buffer) {
249+
return 0;
250+
}
251+
va_start(arg, format);
252+
vsnprintf(buffer, len + 1, format, arg);
253+
va_end(arg);
254+
}
255+
len = write((const uint8_t*) buffer, len);
256+
if (buffer != temp) {
257+
delete[] buffer;
258+
}
259+
return len;
260+
}
261+
262+
// TODO - must be better way than cut-n-paste!
263+
size_t Print::printf_P(const char *format, ...) {
264+
va_list arg;
265+
va_start(arg, format);
266+
char temp[64];
267+
char* buffer = temp;
268+
size_t len = vsnprintf(temp, sizeof(temp), format, arg);
269+
va_end(arg);
270+
if (len > sizeof(temp) - 1) {
271+
buffer = new char[len + 1];
272+
if (!buffer) {
273+
return 0;
274+
}
275+
va_start(arg, format);
276+
vsnprintf(buffer, len + 1, format, arg);
277+
va_end(arg);
278+
}
279+
len = write((const uint8_t*) buffer, len);
280+
if (buffer != temp) {
281+
delete[] buffer;
282+
}
283+
return len;
284+
}
285+
238286
// Private Methods /////////////////////////////////////////////////////////////
239287

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

api/Print.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,12 @@ class Print
8989
size_t println(const Printable&);
9090
size_t println(void);
9191

92+
// EFP3 - Add printf() to make life so much easier...
93+
size_t printf(const char *format, ...);
94+
size_t printf_P(const char *format, ...);
95+
9296
virtual void flush() { /* Empty implementation for backward compatibility */ }
9397
};
9498

9599
}
96-
using namespace arduino;
100+
using namespace arduino;

0 commit comments

Comments
 (0)