Toyomasa Watarai
/
Mbed-example-WS-W27
Mbed Cloud example program for workshop in W27 2018.
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 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
Generated on Tue Jul 12 2022 16:22:11 by 1.7.2