1 /** 2 * @file lv_log.h 3 * 4 */ 5 6 #ifndef LV_LOG_H 7 #define LV_LOG_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../lv_conf_internal.h" 17 #include <stdint.h> 18 19 #include "lv_types.h" 20 21 /********************* 22 * DEFINES 23 *********************/ 24 25 /*Possible log level. For compatibility declare it independently from `LV_USE_LOG`*/ 26 27 #define LV_LOG_LEVEL_TRACE 0 /**< A lot of logs to give detailed information*/ 28 #define LV_LOG_LEVEL_INFO 1 /**< Log important events*/ 29 #define LV_LOG_LEVEL_WARN 2 /**< Log if something unwanted happened but didn't caused problem*/ 30 #define LV_LOG_LEVEL_ERROR 3 /**< Only critical issue, when the system may fail*/ 31 #define LV_LOG_LEVEL_USER 4 /**< Custom logs from the user*/ 32 #define LV_LOG_LEVEL_NONE 5 /**< Do not log anything*/ 33 #define _LV_LOG_LEVEL_NUM 6 /**< Number of log levels*/ 34 35 LV_EXPORT_CONST_INT(LV_LOG_LEVEL_TRACE); 36 LV_EXPORT_CONST_INT(LV_LOG_LEVEL_INFO); 37 LV_EXPORT_CONST_INT(LV_LOG_LEVEL_WARN); 38 LV_EXPORT_CONST_INT(LV_LOG_LEVEL_ERROR); 39 LV_EXPORT_CONST_INT(LV_LOG_LEVEL_USER); 40 LV_EXPORT_CONST_INT(LV_LOG_LEVEL_NONE); 41 42 typedef int8_t lv_log_level_t; 43 44 #if LV_USE_LOG 45 /********************** 46 * TYPEDEFS 47 **********************/ 48 49 /** 50 * Log print function. Receives a string buffer to print". 51 */ 52 typedef void (*lv_log_print_g_cb_t)(const char * buf); 53 54 /********************** 55 * GLOBAL PROTOTYPES 56 **********************/ 57 58 /** 59 * Register custom print/write function to call when a log is added. 60 * It can format its "File path", "Line number" and "Description" as required 61 * and send the formatted log message to a console or serial port. 62 * @param print_cb a function pointer to print a log 63 */ 64 void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb); 65 66 /** 67 * Print a log message via `printf` if enabled with `LV_LOG_PRINTF` in `lv_conf.h` 68 * and/or a print callback if registered with `lv_log_register_print_cb` 69 * @param format printf-like format string 70 * @param ... parameters for `format` 71 */ 72 void lv_log(const char * format, ...) LV_FORMAT_ATTRIBUTE(1, 2); 73 74 /** 75 * Add a log 76 * @param level the level of log. (From `lv_log_level_t` enum) 77 * @param file name of the file when the log added 78 * @param line line number in the source code where the log added 79 * @param func name of the function when the log added 80 * @param format printf-like format string 81 * @param ... parameters for `format` 82 */ 83 void _lv_log_add(lv_log_level_t level, const char * file, int line, 84 const char * func, const char * format, ...) LV_FORMAT_ATTRIBUTE(5, 6); 85 86 /********************** 87 * MACROS 88 **********************/ 89 #ifndef LV_LOG_TRACE 90 # if LV_LOG_LEVEL <= LV_LOG_LEVEL_TRACE 91 # define LV_LOG_TRACE(...) _lv_log_add(LV_LOG_LEVEL_TRACE, __FILE__, __LINE__, __func__, __VA_ARGS__) 92 # else 93 # define LV_LOG_TRACE(...) do {}while(0) 94 # endif 95 #endif 96 97 #ifndef LV_LOG_INFO 98 # if LV_LOG_LEVEL <= LV_LOG_LEVEL_INFO 99 # define LV_LOG_INFO(...) _lv_log_add(LV_LOG_LEVEL_INFO, __FILE__, __LINE__, __func__, __VA_ARGS__) 100 # else 101 # define LV_LOG_INFO(...) do {}while(0) 102 # endif 103 #endif 104 105 #ifndef LV_LOG_WARN 106 # if LV_LOG_LEVEL <= LV_LOG_LEVEL_WARN 107 # define LV_LOG_WARN(...) _lv_log_add(LV_LOG_LEVEL_WARN, __FILE__, __LINE__, __func__, __VA_ARGS__) 108 # else 109 # define LV_LOG_WARN(...) do {}while(0) 110 # endif 111 #endif 112 113 #ifndef LV_LOG_ERROR 114 # if LV_LOG_LEVEL <= LV_LOG_LEVEL_ERROR 115 # define LV_LOG_ERROR(...) _lv_log_add(LV_LOG_LEVEL_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__) 116 # else 117 # define LV_LOG_ERROR(...) do {}while(0) 118 # endif 119 #endif 120 121 #ifndef LV_LOG_USER 122 # if LV_LOG_LEVEL <= LV_LOG_LEVEL_USER 123 # define LV_LOG_USER(...) _lv_log_add(LV_LOG_LEVEL_USER, __FILE__, __LINE__, __func__, __VA_ARGS__) 124 # else 125 # define LV_LOG_USER(...) do {}while(0) 126 # endif 127 #endif 128 129 #ifndef LV_LOG 130 # if LV_LOG_LEVEL < LV_LOG_LEVEL_NONE 131 # define LV_LOG(...) lv_log(__VA_ARGS__) 132 # else 133 # define LV_LOG(...) do {} while(0) 134 # endif 135 #endif 136 137 #else /*LV_USE_LOG*/ 138 139 /*Do nothing if `LV_USE_LOG 0`*/ 140 #define _lv_log_add(level, file, line, ...) 141 #define LV_LOG_TRACE(...) do {}while(0) 142 #define LV_LOG_INFO(...) do {}while(0) 143 #define LV_LOG_WARN(...) do {}while(0) 144 #define LV_LOG_ERROR(...) do {}while(0) 145 #define LV_LOG_USER(...) do {}while(0) 146 #define LV_LOG(...) do {}while(0) 147 148 #endif /*LV_USE_LOG*/ 149 150 #ifdef __cplusplus 151 } /*extern "C"*/ 152 #endif 153 154 #endif /*LV_LOG_H*/ 155