Skip to content

Commit 97379d9

Browse files
committed
add vprintf to Rawserial.
1 parent bb61ea1 commit 97379d9

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

drivers/RawSerial.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,15 @@ int RawSerial::puts(const char *str)
6363
// length is above a certain threshold, otherwise we use just the stack.
6464
int RawSerial::printf(const char *format, ...)
6565
{
66-
lock();
6766
std::va_list arg;
6867
va_start(arg, format);
68+
int len = this->vprintf(format, arg);
69+
va_end(arg);
70+
return len;
71+
}
72+
73+
int RawSerial::vprintf(const char *format, std::va_list arg) {
74+
lock();
6975
// ARMCC microlib does not properly handle a size of 0.
7076
// As a workaround supply a dummy buffer with a size of 1.
7177
char dummy_buf[1];
@@ -80,7 +86,6 @@ int RawSerial::printf(const char *format, ...)
8086
puts(temp);
8187
delete[] temp;
8288
}
83-
va_end(arg);
8489
unlock();
8590
return len;
8691
}

drivers/RawSerial.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "drivers/SerialBase.h"
2626
#include "hal/serial_api.h"
2727
#include "platform/NonCopyable.h"
28+
#include <cstdarg>
2829

2930
namespace mbed {
3031
/** \addtogroup drivers */
@@ -89,6 +90,7 @@ class RawSerial: public SerialBase, private NonCopyable<RawSerial> {
8990
int puts(const char *str);
9091

9192
int printf(const char *format, ...) MBED_PRINTF_METHOD(1, 2);
93+
int vprintf(const char *format, std::va_list arg);
9294

9395
#if !(DOXYGEN_ONLY)
9496
protected:

0 commit comments

Comments
 (0)