Mbed Cloud example program for workshop in W27 2018.

Dependencies:   MMA7660 LM75B

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pv_log.h Source File

pv_log.h

00001 // ----------------------------------------------------------------------------
00002 // Copyright 2016-2017 ARM Ltd.
00003 //  
00004 // Licensed under the Apache License, Version 2.0 (the "License");
00005 // you may not use this file except in compliance with the License.
00006 // You may obtain a copy of the License at
00007 //  
00008 //     http://www.apache.org/licenses/LICENSE-2.0
00009 //  
00010 // Unless required by applicable law or agreed to in writing, software
00011 // distributed under the License is distributed on an "AS IS" BASIS,
00012 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013 // See the License for the specific language governing permissions and
00014 // limitations under the License.
00015 // ----------------------------------------------------------------------------
00016 
00017 /* Logging macros */
00018 
00019 #ifndef __PV_LOG_H__
00020 #define __PV_LOG_H__
00021 
00022 #ifdef __cplusplus
00023 extern "C" {
00024 #endif
00025 
00026 #define __PV_LOG_H__INSIDE
00027 #include <stdio.h>
00028 #include <inttypes.h>
00029 #include <string.h>
00030 #include <stdbool.h>
00031 #include "pal.h"
00032 #include "mbed-trace/mbed_trace.h"
00033 
00034 
00035 
00036 #define SA_PV_LOG_LEVEL_CRITICAL_COLOR  "\x1B[31m" /* red */
00037 #define SA_PV_LOG_LEVEL_ERR_COLOR   "\x1B[31m" /* red */
00038 #define SA_PV_LOG_LEVEL_WARN_COLOR  "\x1B[33m" /* yellow */
00039 #define SA_PV_LOG_LEVEL_INFO_COLOR      "\x1B[0m"  /* normal */
00040 #define SA_PV_LOG_LEVEL_TRACE_COLOR     "\x1B[0m"  /* normal */
00041 #define SA_PV_LOG_LEVEL_DATA_COLOR      "\x1B[37m" /* white */
00042 
00043 
00044 #define __SA_PV_FILE__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
00045 
00046 extern palMutexID_t g_pv_logger_mutex;
00047 /**
00048 * Calls to mbed trace print function
00049 *
00050 * - The function sets mbed trace level according to log level, compose buffer with general data (line,color, file..) and message
00051 * and calls to mbed_vtracef.
00052 */
00053 void pv_log_trace(int level, const char* filename, int line, const char *func, const char *color, const char *format, ...);
00054 /**
00055 * Print buffer with mbed trace function
00056 *
00057 */
00058 void pv_log_trace_buffer(int level, const char* filename, int line, const char *func, const char *color, const char *name, const uint8_t *buff, uint32_t buff_size);
00059 
00060 #define _SA_PV_LOG_FUNC_ENTER(level, filename, line, func, color, format, ...) _SA_PV_LOG(level, filename, line, func, color, "===> " format, ##__VA_ARGS__)
00061 
00062 /**  Exit function logging
00063  *
00064  * - Should be called in the end of a function, assuming the function doesn't exit early due to an error.
00065  * - Should display values of output variables (with meaning, no need to print buffers).
00066  * - Usage example (with INFO level): SA_PV_LOG_INFO_FUNC_EXIT("argPointerToInt = %d, argPointerToUnsigned32 = %" PRIu32 "", *argPointerToInt, (uint32_t)*argPointerToUnsigned32);
00067  */
00068 #define _SA_PV_LOG_FUNC_EXIT(level, filename, line, func, color, format, ...) _SA_PV_LOG(level, filename, line, func, color, "<=== " format, ##__VA_ARGS__)
00069 
00070 // CRITICAL always being output
00071 #define SA_PV_LOG_CRITICAL(format, ...) \
00072         _SA_PV_LOG(TRACE_LEVEL_CMD, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_CRITICAL_COLOR, format, ##__VA_ARGS__)
00073 #define SA_PV_LOG_BYTE_BUFF_CRITICAL(name, buff, buff_size) \
00074         _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_CMD, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_CRITICAL_COLOR, name, buff, buff_size)
00075 #define SA_PV_LOG_CRITICAL_FUNC_EXIT(format, ...) \
00076         _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_CMD, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_CRITICAL_COLOR, format, ##__VA_ARGS__)
00077 
00078 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_ERROR)
00079 #define SA_PV_LOG_ERR(format, ...) \
00080         _SA_PV_LOG(TRACE_LEVEL_ERROR, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_ERR_COLOR, format, ##__VA_ARGS__)
00081 #define SA_PV_LOG_BYTE_BUFF_ERR(name, buff, buff_size) \
00082         _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_ERROR, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_ERR_COLOR, name, buff, buff_size)
00083 #define SA_PV_LOG_ERR_FUNC_EXIT(format, ...) \
00084         _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_ERROR, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_ERR_COLOR, format, ##__VA_ARGS__)
00085 
00086 #else
00087 #define SA_PV_LOG_ERR(format, arg...) do {} while (0)
00088 #define SA_PV_LOG_BYTE_BUFF_ERR(format, arg...) do {} while (0)
00089 #define SA_PV_LOG_ERR_FUNC_EXIT(format, ...) do {} while (0)
00090 #endif
00091 
00092 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_WARN)
00093 #define SA_PV_LOG_WARN(format, ...) \
00094         _SA_PV_LOG(TRACE_LEVEL_WARN, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_WARN_COLOR, format, ##__VA_ARGS__)
00095 #define SA_PV_LOG_BYTE_BUFF_WARN(name, buff, buff_size) \
00096         _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_WARN, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_WARN_COLOR, name, buff, buff_size)
00097 #define SA_PV_LOG_WARN_FUNC_EXIT(format, ...) \
00098         _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_WARN, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_WARN_COLOR, format, ##__VA_ARGS__)
00099 #else
00100 #define SA_PV_LOG_WARN(format, ...) do {} while (0)
00101 #define SA_PV_LOG_BYTE_BUFF_WARN(format, ...) do {} while (0)
00102 #define SA_PV_LOG_WARN_FUNC_EXIT(format, ...) do {} while (0)
00103 #endif
00104 
00105 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_INFO)
00106 #define SA_PV_LOG_INFO(format, ...) \
00107         _SA_PV_LOG(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_INFO_COLOR, format, ##__VA_ARGS__)
00108 #define SA_PV_LOG_INFO_FUNC_ENTER(format, ...) \
00109         _SA_PV_LOG_FUNC_ENTER(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_INFO_COLOR, format, ##__VA_ARGS__)
00110 #define SA_PV_LOG_INFO_FUNC_ENTER_NO_ARGS() \
00111         SA_PV_LOG_INFO_FUNC_ENTER("")
00112 #define SA_PV_LOG_INFO_FUNC_EXIT(format, ...) \
00113         _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_INFO_COLOR, format, ##__VA_ARGS__)
00114 #define SA_PV_LOG_INFO_FUNC_EXIT_NO_ARGS() \
00115         SA_PV_LOG_INFO_FUNC_EXIT("")
00116 #define SA_PV_LOG_BYTE_BUFF_INFO(name, buff, buff_size) \
00117         _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_INFO_COLOR, name, buff, buff_size)
00118 #else
00119 #define SA_PV_LOG_INFO(format, ...) do {} while (0)
00120 #define SA_PV_LOG_INFO_FUNC_ENTER(format, ...) do {} while (0)
00121 #define SA_PV_LOG_INFO_FUNC_ENTER_NO_ARGS() do {} while (0)
00122 #define SA_PV_LOG_INFO_FUNC_EXIT(format, ...) do {} while (0)
00123 #define SA_PV_LOG_INFO_FUNC_EXIT_NO_ARGS() do {} while (0)
00124 #define SA_PV_LOG_BYTE_BUFF_INFO(format, ...) do {} while (0)
00125 #endif
00126 
00127 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_DEBUG)
00128 #define SA_PV_LOG_TRACE(format, ...) \
00129         _SA_PV_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_TRACE_COLOR, format, ##__VA_ARGS__)
00130 #define SA_PV_LOG_TRACE_FUNC_ENTER(format, ...) \
00131         _SA_PV_LOG_FUNC_ENTER(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_TRACE_COLOR, format, ##__VA_ARGS__)
00132 #define SA_PV_LOG_TRACE_FUNC_ENTER_NO_ARGS() \
00133         SA_PV_LOG_TRACE_FUNC_ENTER("")
00134 #define SA_PV_LOG_TRACE_FUNC_EXIT(format, ...) \
00135         _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_TRACE_COLOR, format, ##__VA_ARGS__)
00136 #define SA_PV_LOG_TRACE_FUNC_EXIT_NO_ARGS() \
00137         SA_PV_LOG_TRACE_FUNC_EXIT("")
00138 #define SA_PV_LOG_BYTE_BUFF_TRACE(name, buff, buff_size) \
00139         _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_TRACE_COLOR, name, buff, buff_size)
00140 
00141 #else
00142 #define SA_PV_LOG_TRACE(format, ...) do {} while (0)
00143 #define SA_PV_LOG_TRACE_FUNC_ENTER(format, ...) do {} while (0)
00144 #define SA_PV_LOG_TRACE_FUNC_ENTER_NO_ARGS() do {} while (0)
00145 #define SA_PV_LOG_TRACE_FUNC_EXIT(format, ...) do {} while (0)
00146 #define SA_PV_LOG_TRACE_FUNC_EXIT_NO_ARGS() do {} while (0)
00147 #define SA_PV_LOG_BYTE_BUFF_TRACE(format, ...) do {} while (0)
00148 #endif
00149 
00150 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_DEBUG)
00151 #define SA_PV_LOG_DATA(format, ...) \
00152         _SA_PV_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_DATA_COLOR, format, ##__VA_ARGS__)
00153 #define SA_PV_LOG_DATA_FUNC_ENTER(format, ...) \
00154   _SA_PV_LOG_FUNC_ENTER(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_DATA_COLOR, format, ##__VA_ARGS__)
00155 #define SA_PV_LOG_DATA_FUNC_ENTER_NO_ARGS() \
00156         SA_PV_LOG_DATA_FUNC_ENTER("")
00157 #define SA_PV_LOG_DATA_FUNC_EXIT(format, ...) \
00158         _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_DATA_COLOR, format, ##__VA_ARGS__)
00159 #define SA_PV_LOG_DATA_FUNC_EXIT_NO_ARGS() \
00160         SA_PV_LOG_DATA_FUNC_EXIT("")
00161 #define SA_PV_LOG_BYTE_BUFF_DATA(name, buff, buff_size) \
00162         _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, SA_PV_LOG_LEVEL_DATA_COLOR, name, buff, buff_size)
00163 #else
00164 #define SA_PV_LOG_DATA(format, ...) do {} while (0)
00165 #define SA_PV_LOG_DATA_FUNC_ENTER(format, ...) do {} while (0)
00166 #define SA_PV_LOG_DATA_FUNC_ENTER_NO_ARGS() do {} while (0)
00167 #define SA_PV_LOG_DATA_FUNC_EXIT(format, ...) do {} while (0)
00168 #define SA_PV_LOG_DATA_FUNC_EXIT_NO_ARGS() do {} while (0)
00169 #define SA_PV_LOG_BYTE_BUFF_DATA(format, ...) do {} while (0)
00170 #endif
00171 
00172 /* Should only be called once, additional calls do nothing. */
00173 #define _SA_PV_LOG(level, file, line, func, color, format, ...) \
00174 do{ \
00175         mbed_tracef(level, "fcc","%s%s:%d:%s:"format,color, file, line, func, ##__VA_ARGS__);\
00176 } while (0)
00177 
00178 #define _SA_PV_BYTE_BUFF_LOG(level, file, line, func, color, name, buff, buff_size) ( mbed_tracef(level, "fcc", "%s"name, mbed_trace_array(buff, buff_size)))
00179 
00180 #undef __PV_LOG_H__INSIDE
00181 
00182 #ifdef __cplusplus
00183 }
00184 #endif
00185 #endif /*__PV_LOG_H__*/
00186