X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Flogger%2Fsrc%2Flogger.c;h=b642464f4c22d5a1d77680cfc1bc37ba6d05bb12;hb=935fdb9b67b6c10d007e652e9e2e028fd6ccfe09;hp=ad9afd212423f68256a4bdfc63b55862c053d23b;hpb=00b3660e45c56cb3db35dc2596a054f801b5591a;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/logger/src/logger.c b/resource/csdk/logger/src/logger.c index ad9afd2..b642464 100644 --- a/resource/csdk/logger/src/logger.c +++ b/resource/csdk/logger/src/logger.c @@ -18,6 +18,33 @@ // //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// Defining _POSIX_C_SOURCE macro with 199309L (or greater) as value +// causes header files to expose definitions +// corresponding to the POSIX.1b, Real-time extensions +// (IEEE Std 1003.1b-1993) specification +// +// For this specific file, see use of clock_gettime, +// Refer to http://pubs.opengroup.org/stage7tc1/functions/clock_gettime.html +// and to http://man7.org/linux/man-pages/man2/clock_gettime.2.html +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809L +#endif + +// Platform check can be extended to check and/or define more, or could be +// moved into a config.h +#if !defined(__ARDUINO__) && !defined(ARDUINO) +#define HAVE_UNISTD_H 1 +#endif + +// Pull in _POSIX_TIMERS feature test macro to check for +// clock_gettime() support. +#ifdef HAVE_UNISTD_H +#include + +// if we have unistd.h, we're a Unix system +#include +#include +#endif #include "logger.h" #include "string.h" @@ -33,7 +60,7 @@ static const uint16_t LINE_BUFFER_SIZE = (16 * 2) + 16 + 1; // Show 16 bytes, 2 // Convert LogLevel to platform-specific severity level. Store in PROGMEM on Arduino #ifdef __ANDROID__ static android_LogPriority LEVEL[] = {ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL}; -#elif defined __linux__ +#elif defined(__linux__) || defined(__APPLE__) static const char * LEVEL[] __attribute__ ((unused)) = {"DEBUG", "INFO", "WARNING", "ERROR", "FATAL"}; #elif defined ARDUINO #include @@ -70,7 +97,7 @@ void OCLogInit() { } void OCLogShutdown() { -#ifdef __linux__ +#if defined(__linux__) || defined(__APPLE__) if (logCtx && logCtx->destroy) { logCtx->destroy(logCtx); @@ -99,6 +126,34 @@ void OCLogv(LogLevel level, const char * tag, const char * format, ...) { OCLog(level, tag, buffer); } +static void osalGetTime(int *min,int *sec, int *ms) +{ + if (min && sec && ms) + { +#if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0 + struct timespec when = {}; + clockid_t clk = CLOCK_REALTIME; +#ifdef CLOCK_REALTIME_COARSE + clk = CLOCK_REALTIME_COARSE; +#endif + if (!clock_gettime(clk, &when)) + { + *min = (when.tv_sec / 60) % 60; + *sec = when.tv_sec % 60; + *ms = when.tv_nsec / 1000000; + } +#else + struct timeval now; + if (!gettimeofday(&now, NULL)) + { + *min = (now.tv_sec / 60) % 60; + *sec = now.tv_sec % 60; + *ms = now.tv_usec * 1000; + } +#endif + } +} + /** * Output a log string with the specified priority level. * Only defined for Linux and Android @@ -112,19 +167,24 @@ void OCLog(LogLevel level, const char * tag, const char * logStr) { return; } - #ifdef __ANDROID__ - __android_log_write(LEVEL[level], tag, logStr); - #elif defined __linux__ - if (logCtx && logCtx->write_level) - { - logCtx->write_level(logCtx, LEVEL_XTABLE[level], logStr); +#ifdef __ANDROID__ + __android_log_write(LEVEL[level], tag, logStr); +#elif defined(__linux__) || defined(__APPLE__) + if (logCtx && logCtx->write_level) + { + logCtx->write_level(logCtx, LEVEL_XTABLE[level], logStr); + } + else + { - } - else - { - printf("%s: %s: %s\n", LEVEL[level], tag, logStr); - } - #endif + int min = 0; + int sec = 0; + int ms = 0; + osalGetTime(&min,&sec,&ms); + + printf("%02d:%02d.%03d %s: %s: %s\n", min, sec, ms, LEVEL[level], tag, logStr); + } +#endif } /** @@ -350,3 +410,4 @@ void OCLogBuffer(LogLevel level, const char * tag, const uint8_t * buffer, uint1 #endif +