Aidan Wynn / libmDot-mbed5

Dependents:   Cloudtracker

Committer:
aidanwynn
Date:
Sat May 15 02:57:09 2021 +0000
Revision:
75:efdc5ef476e3
Parent:
72:b1e07ec1c30d
Downlink Commands added:; Cloudtracker/inc/RadioEvents.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 16:b630e18103e5 1 #ifndef MTSLOG_H
Mike Fiore 16:b630e18103e5 2 #define MTSLOG_H
Mike Fiore 16:b630e18103e5 3
Mike Fiore 16:b630e18103e5 4 #include <string>
Mike Fiore 16:b630e18103e5 5
Mike Fiore 16:b630e18103e5 6 inline const char* className(const std::string& prettyFunction)
Mike Fiore 16:b630e18103e5 7 {
Mike Fiore 16:b630e18103e5 8 size_t colons = prettyFunction.find_last_of("::");
Mike Fiore 16:b630e18103e5 9 if (colons == std::string::npos)
Mike Fiore 16:b630e18103e5 10 return "";
Mike Fiore 16:b630e18103e5 11 size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1;
Mike Fiore 16:b630e18103e5 12 size_t end = colons - begin;
Mike Fiore 16:b630e18103e5 13
Mike Fiore 16:b630e18103e5 14 return prettyFunction.substr(begin,end).c_str();
Mike Fiore 16:b630e18103e5 15 }
Mike Fiore 16:b630e18103e5 16
Mike Fiore 16:b630e18103e5 17 #define __CLASSNAME__ className(__PRETTY_FUNCTION__)
Mike Fiore 16:b630e18103e5 18
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 19 #ifdef MTS_TIMESTAMP_LOG
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 20 #define __LOG__(logLevel, format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 21 mts::MTSLog::printMessage(logLevel, "%s| [%s] " format "\r\n", \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 22 mts::MTSLog::getTime().c_str(), mts::MTSLog::getLogLevelString(logLevel), ##__VA_ARGS__)
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 23 #else
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 24 #define __LOG__(logLevel, format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 25 mts::MTSLog::printMessage(logLevel, "[%s] " format "\r\n", mts::MTSLog::getLogLevelString(logLevel), ##__VA_ARGS__)
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 26 #endif
Mike Fiore 16:b630e18103e5 27
Mike Fiore 16:b630e18103e5 28 #ifdef MTS_DEBUG
Mike Fiore 16:b630e18103e5 29 #define logFatal(format, ...) \
Mike Fiore 16:b630e18103e5 30 mts::MTSLog::printMessage(mts::MTSLog::FATAL_LEVEL, "%s:%s:%d| [%s] " format "\r\n", __CLASSNAME__, __func__, __LINE__, mts::MTSLog::FATAL_LABEL, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 31 #define logError(format, ...) \
Mike Fiore 16:b630e18103e5 32 mts::MTSLog::printMessage(mts::MTSLog::ERROR_LEVEL, "%s:%s:%d| [%s] " format "\r\n", __CLASSNAME__, __func__, __LINE__, mts::MTSLog::ERROR_LABEL, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 33 #define logWarning(format, ...) \
Mike Fiore 16:b630e18103e5 34 mts::MTSLog::printMessage(mts::MTSLog::WARNING_LEVEL, "%s:%s:%d| [%s] " format "\r\n", __CLASSNAME__, __func__, __LINE__, mts::MTSLog::WARNING_LABEL, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 35 #define logInfo(format, ...) \
Mike Fiore 16:b630e18103e5 36 mts::MTSLog::printMessage(mts::MTSLog::INFO_LEVEL, "%s:%s:%d| [%s] " format "\r\n", __CLASSNAME__, __func__, __LINE__, mts::MTSLog::INFO_LABEL, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 37 #define logDebug(format, ...) \
Mike Fiore 16:b630e18103e5 38 mts::MTSLog::printMessage(mts::MTSLog::DEBUG_LEVEL, "%s:%s:%d| [%s] " format "\r\n", __CLASSNAME__, __func__, __LINE__, mts::MTSLog::DEBUG_LABEL, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 39 #define logTrace(format, ...) \
Mike Fiore 16:b630e18103e5 40 mts::MTSLog::printMessage(mts::MTSLog::TRACE_LEVEL, "%s:%s:%d| [%s] " format "\r\n", __CLASSNAME__, __func__, __LINE__, mts::MTSLog::TRACE_LABEL, ##__VA_ARGS__)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 41 #elif defined(MTS_DEBUG_OFF)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 42 #define logFatal(...)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 43 #define logError(...)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 44 #define logWarning(...)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 45 #define logInfo(...)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 46 #define logDebug(...)
Jenkins@KEILDM1.dc.multitech.prv 72:b1e07ec1c30d 47 #define logTrace(...)
Mike Fiore 16:b630e18103e5 48 #else
Mike Fiore 16:b630e18103e5 49 #define logFatal(format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 50 __LOG__(mts::MTSLog::FATAL_LEVEL, format, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 51 #define logError(format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 52 __LOG__(mts::MTSLog::ERROR_LEVEL, format, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 53 #define logWarning(format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 54 __LOG__(mts::MTSLog::WARNING_LEVEL, format, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 55 #define logInfo(format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 56 __LOG__(mts::MTSLog::INFO_LEVEL, format, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 57 #define logDebug(format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 58 __LOG__(mts::MTSLog::DEBUG_LEVEL, format, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 59 #define logTrace(format, ...) \
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 60 __LOG__(mts::MTSLog::TRACE_LEVEL, format, ##__VA_ARGS__)
Mike Fiore 16:b630e18103e5 61 #endif
Mike Fiore 16:b630e18103e5 62
Mike Fiore 16:b630e18103e5 63 namespace mts {
Mike Fiore 16:b630e18103e5 64
Mike Fiore 16:b630e18103e5 65 class MTSLog
Mike Fiore 16:b630e18103e5 66 {
Mike Fiore 16:b630e18103e5 67 public:
Mike Fiore 16:b630e18103e5 68
Mike Fiore 16:b630e18103e5 69 /** Enum of log levels.
Mike Fiore 16:b630e18103e5 70 */
Mike Fiore 16:b630e18103e5 71 enum logLevel {
Mike Fiore 16:b630e18103e5 72 NONE_LEVEL = 0,
Mike Fiore 16:b630e18103e5 73 FATAL_LEVEL = 1,
Mike Fiore 16:b630e18103e5 74 ERROR_LEVEL = 2,
Mike Fiore 16:b630e18103e5 75 WARNING_LEVEL = 3,
Mike Fiore 16:b630e18103e5 76 INFO_LEVEL = 4,
Mike Fiore 16:b630e18103e5 77 DEBUG_LEVEL = 5,
Mike Fiore 16:b630e18103e5 78 TRACE_LEVEL = 6
Mike Fiore 16:b630e18103e5 79 };
Mike Fiore 16:b630e18103e5 80
Mike Fiore 16:b630e18103e5 81 /** Print log message.
Mike Fiore 16:b630e18103e5 82 */
Mike Fiore 16:b630e18103e5 83 static void printMessage(int level, const char* format, ...);
Mike Fiore 16:b630e18103e5 84
Mike Fiore 16:b630e18103e5 85 /** Determine if the given level is currently printable.
Mike Fiore 16:b630e18103e5 86 */
Mike Fiore 16:b630e18103e5 87 static bool printable(int level);
Mike Fiore 16:b630e18103e5 88
Mike Fiore 16:b630e18103e5 89 /** Set log level
Mike Fiore 16:b630e18103e5 90 * Messages with lower priority than the current level will not be printed.
Mike Fiore 16:b630e18103e5 91 * If the level is set to NONE, no messages will print.
Mike Fiore 16:b630e18103e5 92 */
Mike Fiore 16:b630e18103e5 93 static void setLogLevel(int level);
Mike Fiore 16:b630e18103e5 94
Mike Fiore 16:b630e18103e5 95 /** Get the current log level.
Mike Fiore 16:b630e18103e5 96 */
Mike Fiore 16:b630e18103e5 97 static int getLogLevel();
Mike Fiore 16:b630e18103e5 98
Mike Fiore 16:b630e18103e5 99 /** Get string representation of the current log level.
Mike Fiore 16:b630e18103e5 100 */
Mike Fiore 16:b630e18103e5 101 static const char* getLogLevelString();
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 102 static const char* getLogLevelString(int level);
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 103
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 104 /** Get a formatted time string as HH:MM:SS
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 105 */
Jenkins@KEILDM1.dc.multitech.prv 65:acc0468b9aec 106 static std::string getTime();
Mike Fiore 16:b630e18103e5 107
Mike Fiore 16:b630e18103e5 108 static const char* NONE_LABEL;
Mike Fiore 16:b630e18103e5 109 static const char* FATAL_LABEL;
Mike Fiore 16:b630e18103e5 110 static const char* ERROR_LABEL;
Mike Fiore 16:b630e18103e5 111 static const char* WARNING_LABEL;
Mike Fiore 16:b630e18103e5 112 static const char* INFO_LABEL;
Mike Fiore 16:b630e18103e5 113 static const char* DEBUG_LABEL;
Mike Fiore 16:b630e18103e5 114 static const char* TRACE_LABEL;
Mike Fiore 16:b630e18103e5 115
Mike Fiore 16:b630e18103e5 116 private:
Mike Fiore 16:b630e18103e5 117
Mike Fiore 16:b630e18103e5 118 /** Constructor
Mike Fiore 16:b630e18103e5 119 */
Mike Fiore 16:b630e18103e5 120 MTSLog();
Mike Fiore 16:b630e18103e5 121
Mike Fiore 16:b630e18103e5 122 static int currentLevel;
Mike Fiore 16:b630e18103e5 123
Mike Fiore 16:b630e18103e5 124 };
Mike Fiore 16:b630e18103e5 125
Mike Fiore 16:b630e18103e5 126 }
Mike Fiore 16:b630e18103e5 127
Mike Fiore 16:b630e18103e5 128 #endif