diff --git a/include/sta/debug/debug.hpp b/include/sta/debug/debug.hpp index 0396ea1..7a09609 100644 --- a/include/sta/debug/debug.hpp +++ b/include/sta/debug/debug.hpp @@ -19,7 +19,7 @@ namespace sta * * @ingroup sta_core_debug */ -# define STA_DEBUG_PRINT(...) sta::Debug->print(__VA_ARGS__) +# define STA_DEBUG_PRINT(...) sta::Debug->print(__VA_ARGS__) /** * @brief Debug print message followed by new-line to UART. @@ -28,12 +28,21 @@ namespace sta * * @ingroup sta_core_debug */ -# define STA_DEBUG_PRINTLN(...) sta::Debug->println(__VA_ARGS__) +# define STA_DEBUG_PRINTLN(...) sta::Debug->println(__VA_ARGS__) + +/** + * @brief Formatted debug printing with new-line. + * + * @param fmt See @ref sta::PrintableUART::printf + * @param ... See @ref sta::PrintableUART::printf + */ +# define STA_DEBUG_PRINTF(fmt, ...) sta::Debug->printf(fmt, __VA_ARGS__) #else // !STA_DEBUGGING_ENABLED -# define STA_DEBUG_PRINT(...) ((void)0) -# define STA_DEBUG_PRINTLN(...) ((void)0) +# define STA_DEBUG_PRINT(...) ((void)0) +# define STA_DEBUG_PRINTLN(...) ((void)0) +# define STA_DEBUG_PRINTF(fmt, ...) ((void)0) #endif // STA_DEBUGGING_ENABLED diff --git a/include/sta/debug/printing/printable.hpp b/include/sta/debug/printing/printable.hpp index 0b4ba3f..c1b5bbc 100644 --- a/include/sta/debug/printing/printable.hpp +++ b/include/sta/debug/printing/printable.hpp @@ -31,6 +31,12 @@ namespace sta class Printable { public: + /** + * @brief fmt The string defining the desired format. + * @breif ... The parameters for the formatted string. + */ + void printf(const char * fmt, ...); + /** * @brief Print single character. * diff --git a/src/debug/printing/printable.cpp b/src/debug/printing/printable.cpp index 10e6b99..f70582c 100644 --- a/src/debug/printing/printable.cpp +++ b/src/debug/printing/printable.cpp @@ -4,17 +4,37 @@ # include # include # include +# include #else # include # include # include +# include #endif // STA_PLATFORM_ARDUINO +#include + #include #include namespace sta { + void Printable::printf(const char * fmt, ...) + { + va_list args; + va_start (args, fmt); + + char temp[1]; + int n = vsnprintf(temp, 1, fmt, args); + + va_start (args, fmt); + char str[n]; + vsnprintf(str, n, fmt, args); + STA_ASSERT(n > 0); + + println(str); + } + void Printable::print(char c) { print(&c, 1); @@ -188,4 +208,4 @@ namespace sta print(buffer, digits); } -} // namespace sta \ No newline at end of file +} // namespace sta