Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit da20581

Browse files
committedMar 19, 2019
Enabling printf style output method with variadic arguments
1 parent e1eb8de commit da20581

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed
 

‎api/Print.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,15 @@ size_t Print::print(const Printable& x)
144144
return x.printTo(*this);
145145
}
146146

147+
size_t Print::printf(char const * fmt, ...)
148+
{
149+
va_list args;
150+
va_start(args, fmt);
151+
size_t const n = vprintf(fmt, args);
152+
va_end(args);
153+
return n;
154+
}
155+
147156
size_t Print::println(void)
148157
{
149158
return write("\r\n");
@@ -233,6 +242,16 @@ size_t Print::println(const Printable& x)
233242
return n;
234243
}
235244

245+
size_t Print::printfln(char const * fmt, ...)
246+
{
247+
va_list args;
248+
va_start(args, fmt);
249+
size_t n = vprintf(fmt, args);
250+
va_end(args);
251+
n += println();
252+
return n;
253+
}
254+
236255
// Private Methods /////////////////////////////////////////////////////////////
237256

238257
size_t Print::printNumber(unsigned long n, uint8_t base)
@@ -374,3 +393,13 @@ size_t Print::printFloat(double number, uint8_t digits)
374393

375394
return n;
376395
}
396+
397+
size_t Print::vprintf(char const * fmt, va_list args)
398+
{
399+
static size_t const MSG_BUF_SIZE = 64;
400+
char msg_buf[MSG_BUF_SIZE] = {0};
401+
402+
int const length = vsnprintf(msg_buf, MSG_BUF_SIZE, fmt, args);
403+
404+
return write(msg_buf, length);
405+
}

‎api/Print.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Print
3636
size_t printNumber(unsigned long, uint8_t);
3737
size_t printULLNumber(unsigned long long, uint8_t);
3838
size_t printFloat(double, uint8_t);
39+
size_t vprintf(char const * fmt, va_list args);
3940
protected:
4041
void setWriteError(int err = 1) { write_error = err; }
4142
public:
@@ -67,6 +68,7 @@ class Print
6768
size_t print(unsigned long long, int = DEC);
6869
size_t print(double, int = 2);
6970
size_t print(const Printable&);
71+
size_t printf(char const * fmt, ...);
7072

7173
size_t println(const __FlashStringHelper *);
7274
size_t println(const String &s);
@@ -82,5 +84,6 @@ class Print
8284
size_t println(double, int = 2);
8385
size_t println(const Printable&);
8486
size_t println(void);
87+
size_t printfln(char const * fmt, ...);
8588
};
8689

0 commit comments

Comments
 (0)
Please sign in to comment.