X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Flogger%2Finclude%2Flogger.h;h=af95bc81bffbe3ae02f04441e2539acaa247c126;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=81d962d1f4dc704418cceaa936384d9887640355;hpb=155e3a129b0d95d0179cc60f7c254910c0f0aa8e;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/logger/include/logger.h b/resource/csdk/logger/include/logger.h index 81d962d..af95bc8 100644 --- a/resource/csdk/logger/include/logger.h +++ b/resource/csdk/logger/include/logger.h @@ -24,57 +24,127 @@ #include #include #include -#include "oc_logger.h" -#include "oc_console_logger.h" +#include +#include "logger_types.h" #ifdef __ANDROID__ - #include +#include #elif defined(__TIZEN__) #include -#elif defined ARDUINO - #include "Arduino.h" - #include +#elif defined(ARDUINO) +#include "Arduino.h" +#include "avr/pgmspace.h" #endif #ifdef __cplusplus -extern "C" { +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: OC_LOG(INFO, TAG, PCF("Entering function")); +// Example: OIC_LOG(INFO, TAG, PCF("Entering function")); #ifdef ARDUINO - #ifdef __cplusplus - #define PCF(str) ((PROGMEM const char *)(F(str))) +#define PCF(str) ((PROGMEM const char *)(F(str))) #else - #define PCF(str) ((PROGMEM const char *)(PSTR(str))) +#define PCF(str) ((PROGMEM const char *)(PSTR(str))) #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) // Log levels +#ifdef __TIZEN__ +typedef enum { + DEBUG = DLOG_INFO, // DLOG_INFO : 4 + INFO = DLOG_INFO, + 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; -#ifdef __TIZEN__ - -int OCGetTizenLogLevel(LogLevel level); +#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 * @@ -102,7 +172,11 @@ int OCGetTizenLogLevel(LogLevel level); * @param tag - Module name * @param format - variadic log string */ - void OCLogv(LogLevel level, const char * tag, const char * format, ...); + void OCLogv(LogLevel level, const char * tag, const char * format, ...) +#if defined(__GNUC__) + __attribute__ ((format(printf, 3, 4))) +#endif + ; /** * Output a log string with the specified priority level. @@ -123,7 +197,11 @@ int OCGetTizenLogLevel(LogLevel level); * @param bufferSize - max number of byte in buffer */ void OCLogBuffer(LogLevel level, const char * tag, const uint8_t * buffer, uint16_t bufferSize); -#else + + 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 * Only defined for Arduino @@ -136,9 +214,11 @@ int OCGetTizenLogLevel(LogLevel level); * * @param level - DEBUG, INFO, WARNING, ERROR, FATAL * @param tag - Module name + * @param lineNum- line Number * @param logStr - log string */ - void OCLog(LogLevel level, PROGMEM const char * tag, PROGMEM const char * logStr); + void OCLog(LogLevel level, PROGMEM const char *tag, const int lineNum, + PROGMEM const char *logStr); /** * Output the contents of the specified buffer (in hex) with the specified priority level. @@ -148,51 +228,129 @@ int OCGetTizenLogLevel(LogLevel level); * @param buffer - pointer to buffer of bytes * @param bufferSize - max number of byte in buffer */ - void OCLogBuffer(LogLevel level, PROGMEM const char * tag, const uint8_t * buffer, uint16_t bufferSize); + void OCLogBuffer(LogLevel level, const char *tag, const uint8_t *buffer, size_t bufferSize); /** * Output a variable argument list log string with the specified priority level. * * @param level - DEBUG, INFO, WARNING, ERROR, FATAL * @param tag - Module name + * @param lineNum- line Number * @param format - variadic log string */ - void OCLogv(LogLevel level, const char * tag, const char * format, ...); + void OCLogv(LogLevel level, PROGMEM const char *tag, const int lineNum, + PROGMEM const char *format, ...) +#if defined(__GNUC__) + __attribute__ ((format(printf, 4, 5))) +#endif +; #endif #ifdef TB_LOG + #ifdef __TIZEN__ - #define OC_LOG(level,tag,mes) LOG_(LOG_ID_MAIN, OCGetTizenLogLevel(level), tag, mes) - #define OC_LOG_V(level,tag,fmt,args...) LOG_(LOG_ID_MAIN, OCGetTizenLogLevel(level), tag, fmt,##args) - #define OC_LOG_BUFFER(level, tag, buffer, bufferSize) -#else // These macros are defined for Linux, Android, and Arduino - #define OC_LOG_INIT() OCLogInit() - #define OC_LOG_BUFFER(level, tag, buffer, bufferSize) OCLogBuffer((level), PCF(tag), (buffer), (bufferSize)) - - #ifdef ARDUINO - #define OC_LOG_CONFIG(ctx) - #define OC_LOG_SHUTDOWN() - #define OC_LOG(level, tag, logStr) OCLog((level), PCF(tag), PCF(logStr)) - // Use full namespace for logInit to avoid function name collision - #define OC_LOG_INIT() OCLogInit() - // Don't define variable argument log function for Arduino - #define OC_LOG_V(level, tag, format, ...) OCLogv((level), PCF(tag), PCF(format), __VA_ARGS__) - #else - #define OC_LOG_CONFIG(ctx) OCLogConfig((ctx)) - #define OC_LOG(level, tag, logStr) OCLog((level), (tag), (logStr)) - #define OC_LOG_SHUTDOWN() OCLogShutdown() - // Define variable argument log function for Linux and Android - #define OC_LOG_V(level, tag, ...) OCLogv((level), (tag), __VA_ARGS__) - #endif -#endif -#else - #define OC_LOG_CONFIG(ctx) - #define OC_LOG_SHUTDOWN() - #define OC_LOG(level, tag, logStr) - #define OC_LOG_V(level, tag, ...) - #define OC_LOG_BUFFER(level, tag, buffer, bufferSize) - #define OC_LOG_INIT() -#endif +#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) + +// Don't define variable argument log function for Arduino +#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) \ + do { \ + IF_OC_PRINT_LOG_LEVEL((level)) \ + OCLog((level), PCF(tag), __LINE__, PCF(logStr)); \ + } while(0) + +#define OIC_LOG_V(level, tag, ...) + +#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_CONFIG(ctx) OCLogConfig((ctx)) +#define OIC_LOG_SHUTDOWN() OCLogShutdown() +#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 // TB_LOG #ifdef __cplusplus }