Files
MSE-SoftwEng/pico-sensor/McuLib/src/McuLog.h
2025-05-06 13:07:01 +00:00

124 lines
4.4 KiB
C

/**
* Copyright (c) 2017 rxi
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the MIT license. See `McuLog.c` for details.
*/
/* Original source is from https://github.com/rxi/log.c
* McuLib integration and extensions: Copyright (c) 2020 Erich Styger
*/
#ifndef MCULOG_H
#define MCULOG_H
#include "McuLogconfig.h"
#ifdef __cplusplus
extern "C" {
#endif
#if McuLog_CONFIG_IS_ENABLED
#include <stdio.h>
#include <stdbool.h>
#include <stdarg.h>
#include "McuShell.h"
#if McuLog_CONFIG_USE_FILE
#include "McuFatFS.h"
#endif
#define McuLog_VERSION "0.1.2"
#define McuLog_RTT_DATA_LOGGER_CHANNEL (1) /* channel used for the RTT data logger */
typedef enum { McuLog_TRACE, McuLog_DEBUG, McuLog_INFO, McuLog_WARN, McuLog_ERROR, McuLog_FATAL } McuLog_Levels_e;
/* note: gcc supports __BASE_FILE__ instead of __FILE__ */
#ifndef __BASE_FILE__
#define __BASE_FILE__ __FILE__
#endif
#define McuLog_trace(...) McuLog_log(McuLog_TRACE, __BASE_FILE__, __LINE__, __VA_ARGS__)
#define McuLog_debug(...) McuLog_log(McuLog_DEBUG, __BASE_FILE__, __LINE__, __VA_ARGS__)
#define McuLog_info(...) McuLog_log(McuLog_INFO, __BASE_FILE__, __LINE__, __VA_ARGS__)
#define McuLog_warn(...) McuLog_log(McuLog_WARN, __BASE_FILE__, __LINE__, __VA_ARGS__)
#define McuLog_error(...) McuLog_log(McuLog_ERROR, __BASE_FILE__, __LINE__, __VA_ARGS__)
#define McuLog_fatal(...) McuLog_log(McuLog_FATAL, __BASE_FILE__, __LINE__, __VA_ARGS__)
#define McuLog_traceString(str) McuLog_logString(McuLog_TRACE, __BASE_FILE__, __LINE__, str)
#define McuLog_debugString(str) McuLog_logString(McuLog_DEBUG, __BASE_FILE__, __LINE__, str)
#define McuLog_infoString(str) McuLog_logString(McuLog_INFO, __BASE_FILE__, __LINE__, str)
#define McuLog_warnString(str) McuLog_logString(McuLog_WARN, __BASE_FILE__, __LINE__, str)
#define McuLog_errorString(str) McuLog_logString(McuLog_ERROR, __BASE_FILE__, __LINE__, str)
#define McuLog_fatalString(str) McuLog_logString(McuLog_FATAL, __BASE_FILE__, __LINE__, str)
void McuLog_set_console(McuShell_ConstStdIOType *io, uint8_t index);
#if McuLog_CONFIG_USE_MUTEX
typedef void (*log_LockFn)(void *udata, bool lock);
void McuLog_set_lock(log_LockFn fn);
void McuLog_set_udata(void *udata);
#endif
#if McuLog_CONFIG_USE_FILE
void McuLog_set_fp(McuFatFS_FIL *fp);
int McuLog_open_logfile(const unsigned char *logFileName); /* returns 0 on success */
int McuLog_close_logfile(void); /* returns 0 on success */
#endif
void McuLog_set_level(McuLog_Levels_e level);
void McuLog_set_quiet(bool enable);
#if McuLog_CONFIG_USE_COLOR
void McuLog_set_color(bool enable);
#endif
#if McuLog_CONFIG_USE_PRINTF_STYLE
void McuLog_log(McuLog_Levels_e level, const char *file, int line, const char *fmt, ...);
void McuLog_ChannelLog(uint8_t channel, McuLog_Levels_e level, const char *file, int line, const char *fmt, ...);
#endif
void McuLog_logString(McuLog_Levels_e level, const char *file, int line, const char *str);
#if McuLog_CONFIG_PARSE_COMMAND_ENABLED
uint8_t McuLog_ParseCommand(const unsigned char *cmd, bool *handled, const McuShell_StdIOType *io);
#endif
void McuLog_Init(void);
void McuLog_Deinit(void);
#else /* not enabled: do not add anything to the code */
/* dummy implementation to 'nothing' */
#define McuLog_traceString(str) do{}while(0)
#define McuLog_debugString(str) do{}while(0)
#define McuLog_infoString(str) do{}while(0)
#define McuLog_warnString(str) do{}while(0)
#define McuLog_errorString(str) do{}while(0)
#define McuLog_fatalString(str) do{}while(0)
#define McuLog_trace(...) do{}while(0)
#define McuLog_debug(...) do{}while(0)
#define McuLog_info(...) do{}while(0)
#define McuLog_warn(...) do{}while(0)
#define McuLog_error(...) do{}while(0)
#define McuLog_fatal(...) do{}while(0)
#define McuLog_set_console(io,ch) do{}while(0)
#define McuLog_set_udata(udata) do{}while(0)
#define McuLog_set_lock(fn) do{}while(0)
#define McuLog_set_fp(fp) do{}while(0)
#define McuLog_set_level(level) do{}while(0)
#define McuLog_set_quiet(enable) do{}while(0)
#define McuLog_set_color(enable) do{}while(0)
#define McuLog_log(level, file, line, fmt, ...) do{}while(0)
#define McuLog_Init() do{}while(0)
#define McuLog_Deinit() do{}while(0)
#endif /* McuLog_CONFIG_IS_ENABLED */
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* MCULOG_H */