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 77117a3..e1030fd 100644 --- a/include/sta/debug/printing/printable.hpp +++ b/include/sta/debug/printing/printable.hpp @@ -26,6 +26,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 df6dcba..a3206bb 100644 --- a/src/debug/printing/printable.cpp +++ b/src/debug/printing/printable.cpp @@ -3,12 +3,30 @@ #include #include #include +#include +#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+1]; + vsnprintf(str, n+1, fmt, args); + STA_ASSERT(n > 0); + + println(str); + } + void Printable::print(char c) { print(&c, 1); @@ -182,4 +200,4 @@ namespace sta print(buffer, digits); } -} // namespace sta \ No newline at end of file +} // namespace sta