X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=resource%2Fcsdk%2Flogger%2Finclude%2Flogger.h;h=af95bc81bffbe3ae02f04441e2539acaa247c126;hb=3c093548382bb2542c87a67e6e5fa32552c29cb3;hp=fcab1930722021c0a4f2a97424be3e1537392446;hpb=084ac4fa5ac4792acb4d5123e13bcbadab803001;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/logger/include/logger.h b/resource/csdk/logger/include/logger.h index fcab193..af95bc8 100644 --- a/resource/csdk/logger/include/logger.h +++ b/resource/csdk/logger/include/logger.h @@ -21,11 +21,10 @@ #ifndef LOGGER_H_ #define LOGGER_H_ -#define IOTIVITY_VERSION "1.1.0" - #include #include #include +#include #include "logger_types.h" #ifdef __ANDROID__ @@ -42,6 +41,14 @@ extern "C" { #endif +/** +* Helper for unused warning. +*/ +#ifndef UNUSED +#define UNUSED(x) (void)(x) +#endif + + // Use the PCF macro to wrap strings stored in FLASH on the Arduino // Example: OIC_LOG(INFO, TAG, PCF("Entering function")); #ifdef ARDUINO @@ -52,7 +59,7 @@ extern "C" #endif //__cplusplus #else #define PCF(str) str -#endif +#endif // ARDUINO // Max buffer size used in variable argument log function #define MAX_LOG_V_BUFFER_SIZE (256) @@ -60,26 +67,84 @@ extern "C" // Log levels #ifdef __TIZEN__ typedef enum { - DEBUG = DLOG_DEBUG, + DEBUG = DLOG_INFO, // DLOG_INFO : 4 INFO = DLOG_INFO, - WARNING = DLOG_WARN, - ERROR = DLOG_ERROR, - FATAL = DLOG_ERROR + WARNING = DLOG_WARN, // DLOG_WARN : 5 + ERROR = DLOG_ERROR, // DLOG_ERROR : 6 + FATAL = DLOG_ERROR, + DEBUG_LITE = DLOG_INFO, + INFO_LITE = DLOG_INFO, + INFO_PRIVATE = 255, } LogLevel; #else + +/** @todo temporary work-around until better names with prefixes are used for the enum values. */ +#ifdef ERROR +#undef ERROR +#endif + typedef enum { DEBUG = 0, INFO, WARNING, ERROR, - FATAL + FATAL, + DEBUG_LITE, // The DEBUG log for Lite device + INFO_LITE, // The INFO log for Lite device + INFO_PRIVATE, // The log contained private data } LogLevel; + +#endif // __TIZEN__ + +#ifdef SET_LOG_DEBUG +#define IF_OC_PRINT_LOG_LEVEL(level) if (DEBUG <= (level)) +#elif defined(SET_LOG_INFO) +#define IF_OC_PRINT_LOG_LEVEL(level) if (INFO <= (level)) +#elif defined(SET_LOG_ERROR) +#define IF_OC_PRINT_LOG_LEVEL(level) if (ERROR <= (level) && INFO_PRIVATE != (level)) +#elif defined(SET_LOG_WARNING) +#define IF_OC_PRINT_LOG_LEVEL(level) if (WARNING <= (level) && INFO_PRIVATE != (level)) +#elif defined(SET_LOG_FATAL) +#define IF_OC_PRINT_LOG_LEVEL(level) if (FATAL <= (level) && INFO_PRIVATE != (level)) +#else +#define IF_OC_PRINT_LOG_LEVEL(level) if (DEBUG <= (level)) #endif +#define IF_OC_PRINT_PRIVATE_LOG_LEVEL(level) \ + if (false == OCGetPrivateLogLevel() || (true == OCGetPrivateLogLevel() && INFO_PRIVATE != (level))) \ + +#define MAX_LOG_BUFFER_SIZE (4096) + +/** + * Set log level and privacy log to print. + * + * @param level - log level. + * @param hidePrivateLogEntries - Hide Private Log. + */ +void OCSetLogLevel(LogLevel level, bool hidePrivateLogEntries); + +/** + * get private log flag. + * @return private log flag + */ +bool OCGetPrivateLogLevel(); + #ifdef __TIZEN__ -#define OCLog(level,tag,mes) -#define OCLogv(level,tag,fmt,args...) -#elif defined(ANDROID) || defined(__linux__) || defined(__APPLE__) +/** + * Output the contents of the specified buffer (in hex) with the specified priority level. + * + * @param[in] level DEBUG, INFO, WARNING, ERROR, FATAL + * @param[in] tag Module name + * @param[in] buffer pointer to buffer of bytes + * @param[in] bufferSize max number of byte in buffer + */ +void OCLogBuffer(LogLevel level, const char * tag, const uint8_t * buffer, uint16_t bufferSize); +void OCPrintCALogBuffer(LogLevel level, const char *tag, const uint8_t *buffer, + uint16_t bufferSize, uint8_t isHeader); + +#define OCLog(level,tag,mes) LOG_(LOG_ID_MAIN, (level), (tag), mes) +#define OCLogv(level,tag,fmt,args...) LOG_(LOG_ID_MAIN, (level),tag,fmt,##args) +#elif !defined(ARDUINO) /** * Configure logger to use a context that defines a custom logger function * @@ -132,6 +197,10 @@ typedef enum { * @param bufferSize - max number of byte in buffer */ void OCLogBuffer(LogLevel level, const char * tag, const uint8_t * buffer, uint16_t bufferSize); + + void OCPrintCALogBuffer(LogLevel level, const char *tag, const uint8_t *buffer, + uint16_t bufferSize, uint8_t isHeader); + #else // For arduino platforms /** * Initialize the serial logger for Arduino @@ -180,47 +249,108 @@ typedef enum { #ifdef TB_LOG #ifdef __TIZEN__ - -#define OIC_LOG(level,tag,mes) LOG_(LOG_ID_MAIN, (level), (tag), mes) -#define OIC_LOG_V(level,tag,fmt,args...) LOG_(LOG_ID_MAIN, level, tag, fmt, ##args) -#define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) - -#else // These macros are defined for Linux, Android, and Arduino - +#define OIC_LOG(level,tag,mes) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + IF_OC_PRINT_PRIVATE_LOG_LEVEL((level)) \ + { \ + if ((level) == INFO_PRIVATE) \ + LOG_(LOG_ID_MAIN, DLOG_INFO, (tag), mes); \ + else \ + LOG_(LOG_ID_MAIN, (level), (tag), mes); \ + } \ + } while(0) + +#define OIC_LOG_V(level,tag,fmt,args...) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + IF_OC_PRINT_PRIVATE_LOG_LEVEL((level)) \ + { \ + if ((level) == INFO_PRIVATE) \ + LOG_(LOG_ID_MAIN, DLOG_INFO, (tag), fmt, ##args); \ + else \ + LOG_(LOG_ID_MAIN, (level), (tag), fmt, ##args); \ + } \ + } while(0) + +#define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLogBuffer((level), (tag), (buffer), (bufferSize)); \ + } while(0) + +#define OIC_LOG_CA_BUFFER(level, tag, buffer, bufferSize, isHeader) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCPrintCALogBuffer((level), (tag), (buffer), (bufferSize), (isHeader)); \ + } while(0) + +#else // NO __TIZEN__ - These macros are defined for Linux, Android, Win32, and Arduino #define OIC_LOG_INIT() OCLogInit() #ifdef ARDUINO +#define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLogBuffer((level), PCF(tag), (buffer), (bufferSize)); \ + } while(0) -#define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) OCLogBuffer((level), PCF(tag), (buffer), (bufferSize)) // Don't define variable argument log function for Arduino -#define OIC_LOG_V(level, tag, format, ...) OCLogv((level), PCF(tag), __LINE__, PCF(format),__VA_ARGS__) +#define OIC_LOG_V(level, tag, format, ...) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLogv((level), PCF(tag), __LINE__, PCF(format),__VA_ARGS__); \ + } while(0) #define OIC_LOG_CONFIG(ctx) #define OIC_LOG_SHUTDOWN() -#define OIC_LOG(level, tag, logStr) OCLog((level), PCF(tag), __LINE__, PCF(logStr)) +#define OIC_LOG(level, tag, logStr) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLog((level), PCF(tag), __LINE__, PCF(logStr)); \ + } while(0) + #define OIC_LOG_V(level, tag, ...) -#else +#else // NO ARDUINO +#define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLogBuffer((level), (tag), (buffer), (bufferSize)); \ + } while(0) + +#define OIC_LOG_CA_BUFFER(level, tag, buffer, bufferSize, isHeader) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCPrintCALogBuffer((level), (tag), (buffer), (bufferSize), (isHeader)); \ + } while(0) -#define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) OCLogBuffer((level), (tag), (buffer), (bufferSize)) #define OIC_LOG_CONFIG(ctx) OCLogConfig((ctx)) #define OIC_LOG_SHUTDOWN() OCLogShutdown() -#define OIC_LOG(level, tag, logStr) OCLog((level), (tag), (logStr)) -// Define variable argument log function for Linux and Android -#define OIC_LOG_V(level, tag, ...) OCLogv((level), (tag), __VA_ARGS__) - -#endif //ARDUINO -#endif //__TIZEN__ - -#else //TB_LOG - +#define OIC_LOG(level, tag, logStr) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLog((level), (tag), (logStr)); \ + } while(0) + +// Define variable argument log function for Linux, Android, and Win32 +#define OIC_LOG_V(level, tag, ...) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLogv((level), (tag), __VA_ARGS__); \ + } while(0) + +#endif // ARDUINO +#endif // __TIZEN__ +#else // NO TB_LOG #define OIC_LOG_CONFIG(ctx) #define OIC_LOG_SHUTDOWN() #define OIC_LOG(level, tag, logStr) #define OIC_LOG_V(level, tag, ...) #define OIC_LOG_BUFFER(level, tag, buffer, bufferSize) +#define OIC_LOG_CA_BUFFER(level, tag, buffer, bufferSize, isHeader) #define OIC_LOG_INIT() -#endif +#endif // TB_LOG #ifdef __cplusplus }