Simple interface for Mbed Cloud Client
Embed:
(wiki syntax)
Show/hide line numbers
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 #define __SA_PV_FILE__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) 00035 00036 extern palMutexID_t g_pv_logger_mutex; 00037 /** 00038 * Calls to mbed trace print function 00039 * 00040 * - The function sets mbed trace level according to log level, compose buffer with general data (line,color, file..) and message 00041 * and calls to mbed_vtracef. 00042 */ 00043 void pv_log_trace(int level, const char* filename, int line, const char *func, const char *format, ...); 00044 /** 00045 * Print buffer with mbed trace function 00046 * 00047 */ 00048 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); 00049 00050 #define _SA_PV_LOG_FUNC_ENTER(level, filename, line, func, format, ...) _SA_PV_LOG(level, filename, line, func, "===> " format, ##__VA_ARGS__) 00051 00052 /** Exit function logging 00053 * 00054 * - Should be called in the end of a function, assuming the function doesn't exit early due to an error. 00055 * - Should display values of output variables (with meaning, no need to print buffers). 00056 * - Usage example (with INFO level): SA_PV_LOG_INFO_FUNC_EXIT("argPointerToInt = %d, argPointerToUnsigned32 = %" PRIu32 "", *argPointerToInt, (uint32_t)*argPointerToUnsigned32); 00057 */ 00058 #define _SA_PV_LOG_FUNC_EXIT(level, filename, line, func, format, ...) _SA_PV_LOG(level, filename, line, func, "<=== " format, ##__VA_ARGS__) 00059 00060 // CRITICAL always being output 00061 #define SA_PV_LOG_CRITICAL(format, ...) \ 00062 _SA_PV_LOG(TRACE_LEVEL_CMD, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00063 #define SA_PV_LOG_BYTE_BUFF_CRITICAL(name, buff, buff_size) \ 00064 _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_CMD, __SA_PV_FILE__, __LINE__, __func__, name, buff, buff_size) 00065 #define SA_PV_LOG_CRITICAL_FUNC_EXIT(format, ...) \ 00066 _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_CMD, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00067 00068 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_ERROR) 00069 #define SA_PV_LOG_ERR(format, ...) \ 00070 _SA_PV_LOG(TRACE_LEVEL_ERROR, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00071 #define SA_PV_LOG_BYTE_BUFF_ERR(name, buff, buff_size) \ 00072 _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_ERROR, __SA_PV_FILE__, __LINE__, __func__, name, buff, buff_size) 00073 #define SA_PV_LOG_ERR_FUNC_EXIT(format, ...) \ 00074 _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_ERROR, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00075 00076 #else 00077 #define SA_PV_LOG_ERR(format, arg...) do {} while (0) 00078 #define SA_PV_LOG_BYTE_BUFF_ERR(format, arg...) do {} while (0) 00079 #define SA_PV_LOG_ERR_FUNC_EXIT(format, ...) do {} while (0) 00080 #endif 00081 00082 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_WARN) 00083 #define SA_PV_LOG_WARN(format, ...) \ 00084 _SA_PV_LOG(TRACE_LEVEL_WARN, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00085 #define SA_PV_LOG_BYTE_BUFF_WARN(name, buff, buff_size) \ 00086 _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_WARN, __SA_PV_FILE__, __LINE__, __func__, name, buff, buff_size) 00087 #define SA_PV_LOG_WARN_FUNC_EXIT(format, ...) \ 00088 _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_WARN, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00089 #else 00090 #define SA_PV_LOG_WARN(format, ...) do {} while (0) 00091 #define SA_PV_LOG_BYTE_BUFF_WARN(format, ...) do {} while (0) 00092 #define SA_PV_LOG_WARN_FUNC_EXIT(format, ...) do {} while (0) 00093 #endif 00094 00095 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_INFO) 00096 #define SA_PV_LOG_INFO(format, ...) \ 00097 _SA_PV_LOG(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00098 #define SA_PV_LOG_INFO_FUNC_ENTER(format, ...) \ 00099 _SA_PV_LOG_FUNC_ENTER(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00100 #define SA_PV_LOG_INFO_FUNC_ENTER_NO_ARGS() \ 00101 SA_PV_LOG_INFO_FUNC_ENTER("") 00102 #define SA_PV_LOG_INFO_FUNC_EXIT(format, ...) \ 00103 _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00104 #define SA_PV_LOG_INFO_FUNC_EXIT_NO_ARGS() \ 00105 SA_PV_LOG_INFO_FUNC_EXIT("") 00106 #define SA_PV_LOG_BYTE_BUFF_INFO(name, buff, buff_size) \ 00107 _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_INFO, __SA_PV_FILE__, __LINE__, __func__, name, buff, buff_size) 00108 #else 00109 #define SA_PV_LOG_INFO(format, ...) do {} while (0) 00110 #define SA_PV_LOG_INFO_FUNC_ENTER(format, ...) do {} while (0) 00111 #define SA_PV_LOG_INFO_FUNC_ENTER_NO_ARGS() do {} while (0) 00112 #define SA_PV_LOG_INFO_FUNC_EXIT(format, ...) do {} while (0) 00113 #define SA_PV_LOG_INFO_FUNC_EXIT_NO_ARGS() do {} while (0) 00114 #define SA_PV_LOG_BYTE_BUFF_INFO(format, ...) do {} while (0) 00115 #endif 00116 00117 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_DEBUG) 00118 #define SA_PV_LOG_TRACE(format, ...) \ 00119 _SA_PV_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00120 #define SA_PV_LOG_TRACE_FUNC_ENTER(format, ...) \ 00121 _SA_PV_LOG_FUNC_ENTER(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00122 #define SA_PV_LOG_TRACE_FUNC_ENTER_NO_ARGS() \ 00123 SA_PV_LOG_TRACE_FUNC_ENTER("") 00124 #define SA_PV_LOG_TRACE_FUNC_EXIT(format, ...) \ 00125 _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00126 #define SA_PV_LOG_TRACE_FUNC_EXIT_NO_ARGS() \ 00127 SA_PV_LOG_TRACE_FUNC_EXIT("") 00128 #define SA_PV_LOG_BYTE_BUFF_TRACE(name, buff, buff_size) \ 00129 _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, name, buff, buff_size) 00130 00131 #else 00132 #define SA_PV_LOG_TRACE(format, ...) do {} while (0) 00133 #define SA_PV_LOG_TRACE_FUNC_ENTER(format, ...) do {} while (0) 00134 #define SA_PV_LOG_TRACE_FUNC_ENTER_NO_ARGS() do {} while (0) 00135 #define SA_PV_LOG_TRACE_FUNC_EXIT(format, ...) do {} while (0) 00136 #define SA_PV_LOG_TRACE_FUNC_EXIT_NO_ARGS() do {} while (0) 00137 #define SA_PV_LOG_BYTE_BUFF_TRACE(format, ...) do {} while (0) 00138 #endif 00139 00140 #if (MBED_TRACE_MAX_LEVEL >= TRACE_LEVEL_DEBUG) 00141 #define SA_PV_LOG_DATA(format, ...) \ 00142 _SA_PV_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00143 #define SA_PV_LOG_DATA_FUNC_ENTER(format, ...) \ 00144 _SA_PV_LOG_FUNC_ENTER(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00145 #define SA_PV_LOG_DATA_FUNC_ENTER_NO_ARGS() \ 00146 SA_PV_LOG_DATA_FUNC_ENTER("") 00147 #define SA_PV_LOG_DATA_FUNC_EXIT(format, ...) \ 00148 _SA_PV_LOG_FUNC_EXIT(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, format, ##__VA_ARGS__) 00149 #define SA_PV_LOG_DATA_FUNC_EXIT_NO_ARGS() \ 00150 SA_PV_LOG_DATA_FUNC_EXIT("") 00151 #define SA_PV_LOG_BYTE_BUFF_DATA(name, buff, buff_size) \ 00152 _SA_PV_BYTE_BUFF_LOG(TRACE_LEVEL_DEBUG, __SA_PV_FILE__, __LINE__, __func__, name, buff, buff_size) 00153 #else 00154 #define SA_PV_LOG_DATA(format, ...) do {} while (0) 00155 #define SA_PV_LOG_DATA_FUNC_ENTER(format, ...) do {} while (0) 00156 #define SA_PV_LOG_DATA_FUNC_ENTER_NO_ARGS() do {} while (0) 00157 #define SA_PV_LOG_DATA_FUNC_EXIT(format, ...) do {} while (0) 00158 #define SA_PV_LOG_DATA_FUNC_EXIT_NO_ARGS() do {} while (0) 00159 #define SA_PV_LOG_BYTE_BUFF_DATA(format, ...) do {} while (0) 00160 #endif 00161 00162 /* Should only be called once, additional calls do nothing. */ 00163 #define _SA_PV_LOG(level, file, line, func, format, ...) \ 00164 do{ \ 00165 mbed_tracef(level, "fcc","%s:%d:%s:"format, file, line, func, ##__VA_ARGS__);\ 00166 } while (0) 00167 00168 #define _SA_PV_BYTE_BUFF_LOG(level, file, line, func, name, buff, buff_size) ( mbed_tracef(level, "fcc", "%s"name, mbed_trace_array(buff, buff_size))) 00169 00170 #undef __PV_LOG_H__INSIDE 00171 00172 #ifdef __cplusplus 00173 } 00174 #endif 00175 #endif /*__PV_LOG_H__*/ 00176
Generated on Tue Jul 12 2022 19:01:36 by 1.7.2