Initial merge-commit of the OIC code. Should successfully do discovery for single...
[platform/upstream/iotivity.git] / csdk / logger / include / logger.h
1 //******************************************************************
2 //
3 // Copyright 2014 Intel Corporation All Rights Reserved.
4 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5
6 #ifndef LOGGER_H_
7 #define LOGGER_H_
8
9 #include <stdint.h>
10 #include <stdio.h>
11 #include <stdarg.h>
12
13 #ifdef __ANDROID__
14     #include <android/log.h>
15 #elif defined ARDUINO
16     #include "Arduino.h"
17     #include <avr/pgmspace.h>
18 #endif
19
20 // Use the PCF macro to wrap strings stored in FLASH on the Arduino
21 // Example:  OC_LOG(INFO, TAG, PCF("Entering function"));
22 #ifdef ARDUINO
23     #define PCF(str)  ((const prog_char*)(F(str)))
24 #else
25     #define PCF(str) str
26 #endif
27
28 // Max buffer size used in variable argument log function
29 #define MAX_LOG_V_BUFFER_SIZE (256)
30
31 // Log levels
32 typedef enum {
33     DEBUG = 0,
34     INFO,
35     WARNING,
36     ERROR,
37     FATAL
38 } LogLevel;
39
40
41 #if defined(__ANDROID__) || defined(__linux__)
42     /**
43      * Output a variable argument list log string with the specified priority level.
44      * Only defined for Linux and Android
45      *
46      * @param level  - DEBUG, INFO, WARNING, ERROR, FATAL
47      * @param tag    - Module name
48      * @param format - variadic log string
49      */
50     void OCLogv(LogLevel level, const char * tag, const char * format, ...);
51
52     /**
53      * Output a log string with the specified priority level.
54      * Only defined for Linux and Android
55      *
56      * @param level  - DEBUG, INFO, WARNING, ERROR, FATAL
57      * @param tag    - Module name
58      * @param logStr - log string
59      */
60     void OCLog(LogLevel level, const char * tag, const char * logStr);
61
62     /**
63      * Output the contents of the specified buffer (in hex) with the specified priority level.
64      *
65      * @param level      - DEBUG, INFO, WARNING, ERROR, FATAL
66      * @param tag        - Module name
67      * @param buffer     - pointer to buffer of bytes
68      * @param bufferSize - max number of byte in buffer
69      */
70     void OCLogBuffer(LogLevel level, const char * tag, const uint8_t * buffer, uint16_t bufferSize);
71 #endif
72
73 #ifdef ARDUINO
74     /**
75      * Initialize the serial logger for Arduino
76      * Only defined for Arduino
77      */
78     void OCLogInit();
79
80     /**
81      * Output a log string with the specified priority level.
82      * Only defined for Arduino.  Uses PROGMEM strings
83      *
84      * @param level  - DEBUG, INFO, WARNING, ERROR, FATAL
85      * @param tag    - Module name
86      * @param logStr - log string
87      */
88     void OCLog(LogLevel level, const prog_char * tag, const prog_char * logStr);
89
90     /**
91      * Output the contents of the specified buffer (in hex) with the specified priority level.
92      *
93      * @param level      - DEBUG, INFO, WARNING, ERROR, FATAL
94      * @param tag        - Module name
95      * @param buffer     - pointer to buffer of bytes
96      * @param bufferSize - max number of byte in buffer
97      */
98     void OCLogBuffer(LogLevel level, const prog_char * tag, const uint8_t * buffer, uint16_t bufferSize);
99 #endif
100
101 #ifdef TB_LOG
102     // These macros are defined for Linux, Android, and Arduino
103     #define OC_LOG(level, tag, logStr)  OCLog((level), (tag), (logStr))
104     #define OC_LOG_BUFFER(level, tag, buffer, bufferSize)  OCLogBuffer((level), (tag), (buffer), (bufferSize))
105
106     #ifdef ARDUINO
107         // Use full namespace for logInit to avoid function name collision
108         #define OC_LOG_INIT()    OCLogInit()
109         // Don't define variable argument log function for Arduino
110         #define OC_LOG_V(level, tag, ...)
111     #else
112         // Don't define LOG_INIT for Linux and Android
113         #define OC_LOG_INIT()
114         // Define variable argument log function for Linux and Android
115         #define OC_LOG_V(level, tag, ...)  OCLogv((level), (tag), __VA_ARGS__)
116     #endif
117
118 #else
119     #define OC_LOG(level, tag, logStr)
120     #define OC_LOG_V(level, tag, ...)
121     #define OC_LOG_BUFFER(level, tag, buffer, bufferSize)
122     #define OC_LOG_INIT()
123 #endif
124
125 #endif /* LOGGER_H_ */