diff options
Diffstat (limited to 'firmware/libcommon/source/stdio.c')
-rw-r--r-- | firmware/libcommon/source/stdio.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/firmware/libcommon/source/stdio.c b/firmware/libcommon/source/stdio.c index 505c895..06ad611 100644 --- a/firmware/libcommon/source/stdio.c +++ b/firmware/libcommon/source/stdio.c @@ -2,6 +2,7 @@ * ATMEL Microcontroller Software Support * ---------------------------------------------------------------------------- * Copyright (c) 2008, Atmel Corporation + * Copyright (c) 2018, sysmocom -s.f.m.c. GmbH, Author: Kevin Redon <kredon@sysmocom.de> * * All rights reserved. * @@ -436,6 +437,32 @@ signed int vfprintf(FILE *pStream, const char *pFormat, va_list ap) } //------------------------------------------------------------------------------ +/// Outputs a formatted string on the given stream. Format arguments are given +/// in a va_list instance. +/// \note This function is synchronous (i.e. blocks until the print completes) +/// \param pStream Output stream. +/// \param pFormat Format string +/// \param ap Argument list. +//------------------------------------------------------------------------------ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-attribute=format" +signed int vfprintf_sync(FILE *pStream, const char *pFormat, va_list ap) +{ + char pStr[MAX_STRING_SIZE]; + char pError[] = "stdio.c: increase MAX_STRING_SIZE\n\r"; + + // Write formatted string in buffer + if (vsprintf(pStr, pFormat, ap) >= MAX_STRING_SIZE) { + + fputs_sync(pError, stderr); + } + + // Display string + return fputs_sync(pStr, pStream); +} +#pragma GCC diagnostic pop + +//------------------------------------------------------------------------------ /// Outputs a formatted string on the DBGU stream. Format arguments are given /// in a va_list instance. /// \param pFormat Format string @@ -447,6 +474,18 @@ signed int vprintf(const char *pFormat, va_list ap) } //------------------------------------------------------------------------------ +/// Outputs a formatted string on the DBGU stream. Format arguments are given +/// in a va_list instance. +/// \note This function is synchronous (i.e. blocks until the print completes) +/// \param pFormat Format string +/// \param ap Argument list. +//------------------------------------------------------------------------------ +signed int vprintf_sync(const char *pFormat, va_list ap) +{ + return vfprintf_sync(stdout, pFormat, ap); +} + +//------------------------------------------------------------------------------ /// Outputs a formatted string on the given stream, using a variable number of /// arguments. /// \param pStream Output stream. @@ -484,6 +523,25 @@ signed int printf(const char *pFormat, ...) } //------------------------------------------------------------------------------ +/// Outputs a formatted string on the DBGU stream, using a variable number of +/// arguments. +/// \note This function is synchronous (i.e. blocks until the print completes) +/// \param pFormat Format string. +//------------------------------------------------------------------------------ +signed int printf_sync(const char *pFormat, ...) +{ + va_list ap; + signed int result; + + // Forward call to vprintf + va_start(ap, pFormat); + result = vprintf_sync(pFormat, ap); + va_end(ap); + + return result; +} + +//------------------------------------------------------------------------------ /// Writes a formatted string inside another string. /// \param pStr Storage string. /// \param pFormat Format string. |