From a2567bc1e0d3d5521f2a135f96baffa8779b4ea8 Mon Sep 17 00:00:00 2001 From: Jens Lorenz Date: Tue, 6 Oct 2015 09:52:55 +0200 Subject: Utility DLT: Created template parameter pack to generate recursive code and added logDebug Signed-off-by: Jens Lorenz --- AudioManagerUtilities/include/CAmDltWrapper.h | 818 +++----------------------- AudioManagerUtilities/src/CAmDltWrapper.cpp | 100 +--- 2 files changed, 76 insertions(+), 842 deletions(-) diff --git a/AudioManagerUtilities/include/CAmDltWrapper.h b/AudioManagerUtilities/include/CAmDltWrapper.h index 6d52bf1..8dbd0bc 100644 --- a/AudioManagerUtilities/include/CAmDltWrapper.h +++ b/AudioManagerUtilities/include/CAmDltWrapper.h @@ -20,6 +20,7 @@ #include #include +#include #include #include "audiomanagertypes.h" @@ -122,11 +123,63 @@ public: void append(const uint32_t value); void append(const uint64_t value); void append(const int64_t value); - void append(const char*& value); void append(const std::string& value); void append(const bool value); - void append(const am_Error_e value); void append(const std::vector & data); + + // specialization for const char* + template void append(const char* value) + { + #ifdef WITH_DLT + dlt_user_log_write_string(&mDltContextData, value); + #else + mDltContextData.buffer << value; + #endif + } + + // specialization for const am_Error_e + template void CAmDltWrapper::append(const am_Error_e value) + { + const char* str_error[E_MAX] = { + "E_OK", + "E_UNKNOWN", + "E_OUT_OF_RANGE", + "E_NOT_USED", + "E_DATABASE_ERROR", + "E_ALREADY_EXISTS", + "E_NO_CHANGE", + "E_NOT_POSSIBLE", + "E_NON_EXISTENT", + "E_ABORTED", + "E_WRONG_FORMAT" + }; + append(str_error[value]); + } + + // Template to print unknown pointer types with their address + template void append(T* value) + { + std::ostringstream ss; + ss << "0x" << std::hex << (uint64_t)value; + append(ss.str().c_str()); + } + + // Template to print unknown types + template void append(T value) + { + std::ostringstream ss; + ss << std::dec << value; + append(ss.str().c_str()); + } + + // Template parameter pack to generate recursive code + void append(void) {} + template void append(T value, TArgs... args) + { + this->append(value); + this->append(args...); + } + #ifndef WITH_DLT void enableNoDLTDebug(const bool enableNoDLTDebug = true); #endif @@ -154,776 +207,55 @@ inline CAmDltWrapper* getWrapper() } /** - * logs a given value with infolevel with the default context - * @param value - */ -template void logInfo(T value) -{ - CAmDltWrapper* inst(getWrapper()); - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->send(); -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1mDltContext - */ -template void logInfo(T value, T1 value1) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - */ -template void logInfo(T value, T1 value1, T2 value2) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 - * @param value9 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); - inst->append(value9); - inst->send(); - -} - -/** - * logs a given value with infolevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 - * @param value9 - * @param value10 - */ -template void logInfo(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_INFO)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); - inst->append(value9); - inst->append(value10); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - */ -template void logError(T value) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - */ -template void logError(T value, T1 value1) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - */ -template void logError(T value, T1 value1, T2 value2) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 - * @param value9 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); - inst->append(value9); - inst->send(); - -} - -/** - * logs a given value with errorlevel with the default context - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 - * @param value9 - * @param value10 - */ -template void logError(T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(DLT_LOG_ERROR)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); - inst->append(value9); - inst->append(value10); - inst->send(); - -} - -/** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel - * @param value - */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->send(); - -} - -/** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel - * @param value - * @param value1 - */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->send(); - -} - -/** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel - * @param value - * @param value1 - * @param value2 - */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->send(); - -} - -/** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel - * @param value - * @param value1 - * @param value2 - * @param value3 - */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2, T3 value3) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->send(); - -} - -/** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel + * logs given values with debuglevel with the default context * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 + * @param ... */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2, T3 value3, T4 value4) +template +void logDebug(T value, TArgs... args) { - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->send(); - -} - -/** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel - * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5) -{ - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->send(); - + log(NULL, DLT_LOG_DEBUG, value, args...); } /** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel + * logs given values with infolevel with the default context * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 + * @param ... */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6) +template +void logInfo(T value, TArgs... args) { - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->send(); - + log(NULL, DLT_LOG_INFO, value, args...); } /** - * logs a given value with a given context (register first!) and given loglevel - * @param context - * @param loglevel + * logs given values with errorlevel with the default context * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 + * @param ... */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7) +template +void logError(T value, TArgs... args) { - CAmDltWrapper* inst(getWrapper()); - - if (!inst->init(loglevel, context)) - return; - inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->send(); - + log(NULL, DLT_LOG_ERROR, value, args...); } /** - * logs a given value with a given context (register first!) and given loglevel + * logs given values with a given context (register first!) and given loglevel * @param context * @param loglevel * @param value - * @param value1 - * @param value2 - * @param value3 - * @param value4 - * @param value5 - * @param value6 - * @param value7 - * @param value8 + * @param ... */ -template void log(DltContext* const context, DltLogLevelType loglevel, T value, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8) +template +void log(DltContext* const context, DltLogLevelType loglevel, T value, TArgs... args) { CAmDltWrapper* inst(getWrapper()); if (!inst->init(loglevel, context)) return; inst->append(value); - inst->append(value1); - inst->append(value2); - inst->append(value3); - inst->append(value4); - inst->append(value5); - inst->append(value6); - inst->append(value7); - inst->append(value8); + inst->append(args...); inst->send(); - } } diff --git a/AudioManagerUtilities/src/CAmDltWrapper.cpp b/AudioManagerUtilities/src/CAmDltWrapper.cpp index 149edcd..33baa46 100644 --- a/AudioManagerUtilities/src/CAmDltWrapper.cpp +++ b/AudioManagerUtilities/src/CAmDltWrapper.cpp @@ -25,7 +25,6 @@ #include "CAmDltWrapper.h" #include -#include #include #include @@ -227,22 +226,9 @@ void CAmDltWrapper::append(const uint32_t value) #endif } -void CAmDltWrapper::append(const char*& value) -{ -#ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, value); -#else - mDltContextData.buffer << value; -#endif -} - void CAmDltWrapper::append(const std::string& value) { -#ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, value.c_str()); -#else - mDltContextData.buffer << value; -#endif + append(value.c_str()); } void CAmDltWrapper::append(const bool value) @@ -272,90 +258,6 @@ void CAmDltWrapper::append(const uint64_t value) #endif } -void CAmDltWrapper::append(const am_Error_e value) -{ - switch (value) - { - case am_Error_e::E_OK: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_OK"); - #else - mDltContextData.buffer << "E_OK"; - #endif - break; - case am_Error_e::E_ABORTED: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_ABORTED"); - #else - mDltContextData.buffer << "E_ABORTED"; - #endif - break; - case am_Error_e::E_ALREADY_EXISTS: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_ALREADY_EXISTS"); - #else - mDltContextData.buffer << "E_ALREADY_EXISTS"; - #endif - break; - case am_Error_e::E_DATABASE_ERROR: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_DATABASE_ERROR"); - #else - mDltContextData.buffer << "E_DATABASE_ERROR"; - #endif - break; - case am_Error_e::E_NON_EXISTENT: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_NON_EXISTENT"); - #else - mDltContextData.buffer << "E_NON_EXISTENT"; - #endif - break; - case am_Error_e::E_NOT_POSSIBLE: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_NOT_POSSIBLE"); - #else - mDltContextData.buffer << "E_NOT_POSSIBLE"; - #endif - break; - case am_Error_e::E_NOT_USED: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_NOT_USED"); - #else - mDltContextData.buffer << "E_NOT_USED"; - #endif - break; - case am_Error_e::E_NO_CHANGE: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_NO_CHANGE"); - #else - mDltContextData.buffer << "E_NO_CHANGE"; - #endif - break; - case am_Error_e::E_OUT_OF_RANGE: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_OUT_OF_RANGE"); - #else - mDltContextData.buffer << "E_OUT_OF_RANGE"; - #endif - break; - case am_Error_e::E_UNKNOWN: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_UNKNOWN"); - #else - mDltContextData.buffer << "E_UNKNOWN"; - #endif - break; - default: - #ifdef WITH_DLT - dlt_user_log_write_string(&mDltContextData, "E_UNKNOWN"); - #else - mDltContextData.buffer << "E_UNKNOWN"; - #endif - - } -} - void CAmDltWrapper::append(const std::vector & data) { #ifdef WITH_DLT -- cgit v1.2.1