Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-stm32l0l1-src-1 by
Diff: common/RawSerial.cpp
- Revision:
- 64:7b352733b00a
- Parent:
- 36:ab3ee77451e7
- Child:
- 299:fb529cc9bc22
--- a/common/RawSerial.cpp Thu Dec 19 09:00:06 2013 +0000 +++ b/common/RawSerial.cpp Thu Dec 19 13:15:07 2013 +0000 @@ -15,9 +15,12 @@ */ #include "RawSerial.h" #include "wait_api.h" +#include <cstdarg> #if DEVICE_SERIAL +#define STRING_STACK_LIMIT 120 + namespace mbed { RawSerial::RawSerial(PinName tx, PinName rx) : SerialBase(tx, rx) { @@ -31,6 +34,34 @@ return _base_putc(c); } +int RawSerial::puts(const char *str) { + while (*str) + putc(*str ++); + return 0; +} + +// Experimental support for printf in RawSerial. No Stream inheritance +// means we can't call printf() directly, so we use sprintf() instead. +// We only call malloc() for the sprintf() buffer if the buffer +// length is above a certain threshold, otherwise we use just the stack. +int RawSerial::printf(const char *format, ...) { + std::va_list arg; + va_start(arg, format); + int len = vsnprintf(NULL, 0, format, arg); + if (len < STRING_STACK_LIMIT) { + char temp[STRING_STACK_LIMIT]; + vsprintf(temp, format, arg); + puts(temp); + } else { + char *temp = new char[len + 1]; + vsprintf(temp, format, arg); + puts(temp); + delete[] temp; + } + va_end(arg); + return len; +} + } // namespace mbed #endif