35 CAmDltWrapper* CAmDltWrapper::mpDLTWrapper = NULL;
36 pthread_mutex_t CAmDltWrapper::mMutex = PTHREAD_MUTEX_INITIALIZER;
38 const std::vector<const char*> CAmDltWrapper::mStr_error =
55 const std::vector<const char*> CAmDltWrapper::mStr_sourceState =
64 const std::vector<const char*> CAmDltWrapper::mStr_MuteState =
72 const std::vector<const char*> CAmDltWrapper::mStr_DomainState =
76 "DS_INDEPENDENT_STARTUP",
77 "DS_INDEPENDENT_RUNDOWN",
81 const std::vector<const char*> CAmDltWrapper::mStr_ConnectionState =
92 const std::vector<const char*> CAmDltWrapper::mStr_Availability =
100 const std::vector<const char*> CAmDltWrapper::mStr_Interrupt =
108 const std::vector<const char*> CAmDltWrapper::mStr_Handle =
116 "H_SETSINKSOUNDPROPERTY",
117 "H_SETSOURCESOUNDPROPERTY",
118 "H_SETSINKSOUNDPROPERTIES",
119 "H_SETSOURCESOUNDPROPERTIES",
122 "H_SETSINKNOTIFICATION",
123 "H_SETSOURCENOTIFICATION",
127 const std::vector<const char*> CAmDltWrapper::mStr_NotificationStatus =
140 std::string CAmDltWrapper::now()
142 std::time_t t(std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
143 struct tm * timeinfo(localtime(&t));
145 std::strftime(buffer,80,
"%D %T ",timeinfo);
146 return (std::string(buffer));
153 mpDLTWrapper =
new CAmDltWrapper(appid,description,debugEnabled,logDest,Filename,onlyError);
155 return (mpDLTWrapper);
165 return (mDebugEnabled);
170 if (mlogDestination==logDestination::COMMAND_LINE)
179 mNoDltContextData.
buffer <<
"\033[0;31m"<<
"[DEF] [Erro] \033[0m";
185 mNoDltContextData.
buffer <<
"\033[0;33m"<<
"[DEF] [Warn] \033[0m";
193 mNoDltContextData.
buffer <<
"\033[0;36m"<<
"[DEF] [Info] \033[0m";
201 mNoDltContextData.
buffer <<
"\033[0;32m"<<
"[DEF] [Defa] \033[0m";
209 std::string con(mMapContext.at(context));
215 mNoDltContextData.
buffer <<
"\033[0;31m["<<con<<
"] [Erro] \033[0m";
221 mNoDltContextData.
buffer <<
"\033[0;33m["<<con<<
"] [Warn] \033[0m";
229 mNoDltContextData.
buffer <<
"\033[0;36m["<<con<<
"] [Info] \033[0m";
238 mNoDltContextData.
buffer <<
"\033[0;32m["<<con<<
"] [Defa] \033[0m";
255 mNoDltContextData.
buffer <<
"[DEF] [Erro] ";
261 mNoDltContextData.
buffer <<
"[DEF] [Warn] ";
269 mNoDltContextData.
buffer <<
"[DEF] [Info] ";
277 mNoDltContextData.
buffer <<
"[DEF] [Defa] ";
286 std::string con(mMapContext.at(context));
292 mNoDltContextData.
buffer <<
"["<<con<<
"] [Erro] ";
298 mNoDltContextData.
buffer <<
"["<<con<<
"] [Warn] ";
306 mNoDltContextData.
buffer <<
"["<<con<<
"] [Info] ";
315 mNoDltContextData.
buffer <<
"["<<con<<
"] [Defa] ";
327 CAmDltWrapper::CAmDltWrapper(
const char *appid,
const char * description,
const bool debugEnabled,
const logDestination logDest,
const std::string Filename,
bool onlyError) :
328 mDebugEnabled(debugEnabled),
329 mlogDestination(logDest),
331 mOnlyError(onlyError),
334 if (mDebugEnabled && mlogDestination==logDestination::DAEMON)
336 dlt_register_app(appid, description);
338 dlt_register_context(&mDltContext,
"DEF",
"Default Context registered by DLTWrapper Class");
340 else if (mDebugEnabled)
342 if (mlogDestination==logDestination::COMMAND_LINE)
343 std::cout <<
"\033[0;36m[DLT] Registering AppID " << appid <<
" , " << description <<
"\033[0m"<< std::endl;
346 mFilename.open(Filename, std::ofstream::out | std::ofstream::trunc);
347 if (!mFilename.is_open())
349 throw std::runtime_error(
"Cannot open file for logging");
351 mFilename << now() <<
"[DLT] Registering AppID " << appid <<
" , " << description << std::endl;
358 if (mpDLTWrapper && mDebugEnabled && mlogDestination==logDestination::DAEMON)
363 else if (mpDLTWrapper && mDebugEnabled && mlogDestination==logDestination::COMMAND_LINE)
371 if (mDebugEnabled && mlogDestination==logDestination::DAEMON)
373 dlt_unregister_context(&handle);
387 if (mDebugEnabled && mlogDestination==logDestination::DAEMON)
389 dlt_register_context(&handle, contextid, description);
391 else if (mDebugEnabled)
393 mMapContext.emplace(&handle,std::string(contextid));
395 if (mlogDestination==logDestination::COMMAND_LINE)
396 std::cout <<
"\033[0;36m[DLT] Registering Context " << contextid <<
" , " << description <<
"\033[0m"<< std::endl;
398 mFilename << now() <<
"[DLT] Registering Context " << contextid <<
" , " << description << std::endl;
404 if (mDebugEnabled && mlogDestination==logDestination::DAEMON)
406 dlt_register_context_ll_ts(&handle, contextid, description, level, status);
408 else if (mDebugEnabled)
410 mMapContext.emplace(&handle,std::string(contextid));
412 if (mlogDestination==logDestination::COMMAND_LINE)
413 std::cout <<
"\033[0;36m[DLT] Registering Context " << contextid <<
" , " << description <<
"\033[0m"<< std::endl;
415 mFilename << now() <<
" [DLT] Registering Context " << contextid <<
" , " << description << std::endl;
421 pthread_mutex_lock(&mMutex);
422 if (mlogDestination==logDestination::DAEMON)
425 context = &mDltContext;
427 if(dlt_user_log_write_start(context, &mDltContextData, loglevel) < 0)
429 pthread_mutex_unlock(&mMutex);
435 initNoDlt(loglevel,context);
442 if (mlogDestination==logDestination::DAEMON)
444 dlt_user_log_write_finish(&mDltContextData);
448 if (mlogDestination==logDestination::COMMAND_LINE && mLogOn)
449 std::cout << mNoDltContextData.
buffer.str().c_str() << std::endl;
451 mFilename << now() << mNoDltContextData.
buffer.str().c_str() << std::endl;
453 mNoDltContextData.
buffer.str(
"");
454 mNoDltContextData.
buffer.clear();
456 pthread_mutex_unlock(&mMutex);
461 if (mlogDestination==logDestination::DAEMON)
462 dlt_user_log_write_int8(&mDltContextData, value);
469 if (mlogDestination==logDestination::DAEMON)
470 dlt_user_log_write_uint8(&mDltContextData, value);
477 if (mlogDestination==logDestination::DAEMON)
478 dlt_user_log_write_int16(&mDltContextData, value);
485 if (mlogDestination==logDestination::DAEMON)
486 dlt_user_log_write_uint16(&mDltContextData, value);
493 if (mlogDestination==logDestination::DAEMON)
494 dlt_user_log_write_int32(&mDltContextData, value);
501 if (mlogDestination==logDestination::DAEMON)
502 dlt_user_log_write_uint32(&mDltContextData, value);
514 if (mlogDestination==logDestination::DAEMON)
515 dlt_user_log_write_bool(&mDltContextData, static_cast<uint8_t>(value));
522 if (mlogDestination==logDestination::DAEMON)
523 dlt_user_log_write_int64(&mDltContextData, value);
530 if (mlogDestination==logDestination::DAEMON)
531 dlt_user_log_write_uint64(&mDltContextData, value);
538 if (mlogDestination==logDestination::DAEMON)
539 dlt_user_log_write_raw(&mDltContextData,(
void*)data.data(),data.size());
541 mNoDltContextData.
buffer << data.data();
545 #else //------------------------------------------------------------------------------------------------- no DLT !
547 CAmDltWrapper::CAmDltWrapper(
const char *appid,
const char * description,
const bool debugEnabled,
const logDestination logDest,
const std::string Filename,
bool onlyError) :
548 mDebugEnabled(debugEnabled),
549 mlogDestination(logDest),
551 mOnlyError(onlyError),
554 if (logDest==logDestination::DAEMON)
556 std::cout <<
"\033[0;31m[DLT] Cannot Use Daemon Logging, active in CMAKE! Using CommandLine\033[0m"<< std::endl;
557 mlogDestination=logDestination::COMMAND_LINE;
561 if (mlogDestination==logDestination::COMMAND_LINE)
562 std::cout <<
"\033[0;36m[DLT] Registering AppID " << appid <<
" , " << description <<
"\033[0m"<< std::endl;
565 mFilename.open(Filename, std::ofstream::out | std::ofstream::trunc);
566 if (!mFilename.is_open())
568 throw std::runtime_error(
"Cannot open file for logging");
570 mFilename << now() <<
"[DLT] Registering AppID " << appid <<
" , " << description << std::endl;
577 if (mpDLTWrapper && mDebugEnabled && mlogDestination==logDestination::COMMAND_LINE)
593 mMapContext.emplace(&handle,std::string(contextid));
595 if (mlogDestination==logDestination::COMMAND_LINE)
596 std::cout <<
"\033[0;36m[DLT] Registering Context " << contextid <<
" , " << description <<
"\033[0m"<< std::endl;
598 mFilename << now() <<
"[DLT] Registering Context " << contextid <<
" , " << description << std::endl;
606 mMapContext.emplace(&handle,std::string(contextid));
608 if (mlogDestination==logDestination::COMMAND_LINE)
609 std::cout <<
"\033[0;36m[DLT] Registering Context " << contextid <<
" , " << description <<
"\033[0m"<< std::endl;
611 mFilename << now() <<
" [DLT] Registering Context " << contextid <<
" , " << description << std::endl;
617 pthread_mutex_lock(&mMutex);
618 initNoDlt(loglevel,context);
623 if (mlogDestination==logDestination::COMMAND_LINE && mLogOn)
624 std::cout << mNoDltContextData.
buffer.str().c_str() << std::endl;
626 mFilename << now() << mNoDltContextData.
buffer.str().c_str() << std::endl;
628 mNoDltContextData.
buffer.str(
"");
629 mNoDltContextData.
buffer.clear();
630 pthread_mutex_unlock(&mMutex);
685 mNoDltContextData.
buffer << data.data();
std::stringstream buffer
buffer for building log message
static CAmDltWrapper * instanctiateOnce(const char *appid, const char *description, const bool debugEnabled=true, const logDestination logDest=logDestination::DAEMON, const std::string Filename="", bool onlyError=false)
Instanciate the Dlt Wrapper.
SPDX license identifier: MPL-2.0.
bool init(DltLogLevelType loglevel, DltContext *context=NULL)
static CAmDltWrapper * instance()
get the Wrapper Instance
void registerContext(DltContext &handle, const char *contextid, const char *description)
register a context
This structure is used for every context used in an application.
void appendNoDLT(T value)
error with impact to correct functionality
DltTraceStatusType
Definition of DLT trace status.
void unregisterContext(DltContext &handle)
warning, correct behaviour could not be ensured
DltLogLevelType
Definitions of DLT log level.