146#include "px_compiler.h"
158 #include "px_log_cfg.h"
162 #define PX_LOG_CFG_LEVEL PX_LOG_LEVEL_NONE
163 #define PX_LOG_CFG_FILTER 0
164 #define PX_LOG_CFG_BUF_SIZE 64
165 #define PX_LOG_CFG_COLOR 0
169#if ( !defined(PX_LOG ) \
170 || !defined(PX_LOG_CFG_LEVEL ) \
171 || !defined(PX_LOG_CFG_FILTER ) \
172 || !defined(PX_LOG_CFG_COLOR ) \
173 || !defined(PX_LOG_CFG_BUF_SIZE) )
174#error "One or more options not defined in 'px_log_cfg.h'"
178#include "px_log_color.h"
190 PX_LOG_LEVEL_INFO = 3,
231 const char * format, ...);
247 const char * format, ...);
264 const char * format, ...);
281 const char * format, ...);
298 const char * format, ...);
307 uint16_t line) PX_ATTR_NORETURN;
349#define PX_LOG_NAME(name) PX_ATTR_UNUSED static const char _px_log_name[] PX_ATTR_PGM = name;
354 #define PX_LOG_LEVEL_IS_E() ((PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_ERROR) && !px_log_filter(PX_LOG_LEVEL_ERROR, _px_log_name))
356 #define PX_LOG_LEVEL_IS_W() ((PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_WARNING) && !px_log_filter(PX_LOG_LEVEL_WARNING, _px_log_name))
358 #define PX_LOG_LEVEL_IS_I() ((PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_INFO) && !px_log_filter(PX_LOG_LEVEL_INFO, _px_log_name))
360 #define PX_LOG_LEVEL_IS_D() ((PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_DEBUG) && !px_log_filter(PX_LOG_LEVEL_DEBUG, _px_log_name))
362 #define PX_LOG_LEVEL_IS_V() ((PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_VERBOSE) && !px_log_filter(PX_LOG_LEVEL_VERBOSE, _px_log_name))
365 #define PX_LOG_LEVEL_IS_E() (PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_ERROR)
367 #define PX_LOG_LEVEL_IS_W() (PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_WARNING)
369 #define PX_LOG_LEVEL_IS_I() (PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_INFO)
371 #define PX_LOG_LEVEL_IS_D() (PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_DEBUG)
373 #define PX_LOG_LEVEL_IS_V() (PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_VERBOSE)
377#define PX_LOG_E(format, ...) \
380 if(PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_ERROR) \
382 _px_log_log_error(_px_log_name, (uint16_t)__LINE__, PX_PGM_STR(format), ## __VA_ARGS__); \
388#define PX_LOG_W(format, ...) \
391 if(PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_WARNING) \
393 _px_log_log_warning(_px_log_name, (uint16_t)__LINE__, PX_PGM_STR(format), ## __VA_ARGS__); \
399#define PX_LOG_I(format, ...) \
402 if(PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_INFO) \
404 _px_log_log_info(_px_log_name, (uint16_t)__LINE__, PX_PGM_STR(format), ## __VA_ARGS__); \
410#define PX_LOG_D(format, ...) \
413 if(PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_DEBUG) \
415 _px_log_log_debug(_px_log_name, (uint16_t)__LINE__, PX_PGM_STR(format), ## __VA_ARGS__); \
421#define PX_LOG_V(format, ...) \
424 if(PX_LOG_CFG_LEVEL >= PX_LOG_LEVEL_VERBOSE) \
426 _px_log_log_verbose(_px_log_name, (uint16_t)__LINE__, PX_PGM_STR(format), ## __VA_ARGS__); \
440#define PX_LOG_ASSERT(expression) \
445 _px_log_assert(_px_log_name, (uint16_t)__LINE__); \
458#define PX_LOG_TRACE(format, ...) _px_log_trace(PX_PGM_STR(format), ## __VA_ARGS__)
465#define PX_LOG_TRACE_CHAR(c) _px_log_trace_char(c)
476#define PX_LOG_TRACE_DATA(data, nr_of_bytes) _px_log_trace_data(data, nr_of_bytes)
487#define PX_LOG_TRACE_HEXDUMP(data, nr_of_bytes) _px_log_trace_hexdump(data, nr_of_bytes)
491 #define PX_LOG_NAME(name)
492 #define PX_LOG_LEVEL_IS_E() 0
493 #define PX_LOG_LEVEL_IS_W() 0
494 #define PX_LOG_LEVEL_IS_I() 0
495 #define PX_LOG_LEVEL_IS_D() 0
496 #define PX_LOG_LEVEL_IS_V() 0
497 #define PX_LOG_E(format, ...) ((void)0)
498 #define PX_LOG_W(format, ...) ((void)0)
499 #define PX_LOG_I(format, ...) ((void)0)
500 #define PX_LOG_D(format, ...) ((void)0)
501 #define PX_LOG_V(format, ...) ((void)0)
502 #define PX_LOG_ASSERT(expression) ((void)0)
503 #define PX_LOG_TRACE(format, ...) ((void)0)
504 #define PX_LOG_TRACE_CHAR(c) ((void)0)
505 #define PX_LOG_TRACE_DATA(data, nr_of_bytes) ((void)0)
506 #define PX_LOG_TRACE_HEXDUMP(data, nr_of_bytes) ((void)0)
void _px_log_log_info(const char *name, uint16_t line, const char *format,...)
Output info info: module name, line and variable argument user format string.
void _px_log_assert(const char *name, uint16_t line) PX_ATTR_NORETURN
Report that an assertion has failed and block indefinitely.
void _px_log_trace(const char *format,...)
Output a user format string.
void _px_log_log_warning(const char *name, uint16_t line, const char *format,...)
Output warning info: module name, line and variable argument user format string.
bool px_log_filter(px_log_level_t level, const char *name)
Run time log filter.
void _px_log_log_verbose(const char *name, uint16_t line, const char *format,...)
Output verbose info: module name, line and variable argument user format string.
void _px_log_trace_hexdump(const void *data, size_t nr_of_bytes)
Output the content of a buffer as a spaced table of HEX values and ASCII characters.
px_log_level_t
Log message level ordered in increasing verbosity.
void _px_log_log_error(const char *name, uint16_t line, const char *format,...)
Output error info: module name, line and variable argument user format string.
void _px_log_trace_char(char c)
Output a character.
void _px_log_log_debug(const char *name, uint16_t line, const char *format,...)
Output debug info: module name, line and variable argument user format string.
void _px_log_trace_data(const void *data, size_t nr_of_bytes)
Output the content of a buffer as an array of HEX values.
@ PX_LOG_LEVEL_ERROR
Critical errors.
@ PX_LOG_LEVEL_WARNING
Warnings.
@ PX_LOG_LEVEL_VERBOSE
Extra details for debugging which can flood normal output.
@ PX_LOG_LEVEL_DEBUG
Extra info for debugging that's not required for normal use.
@ PX_LOG_LEVEL_NONE
No log output.