HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
StmLogger.h
Go to the documentation of this file.
1
27#pragma once
28
29#include "BaseLogger.h"
30#include "StmTypes.h"
31#include <cstdarg>
32
36class StmLogger : public BaseLogger {
37public:
39 enum class Backend : hf_u8_t {
40 UART_HAL = 0,
41 SWO_ITM = 1,
42 PRINTF = 2
43 };
44
46 explicit StmLogger(UART_HandleTypeDef* uart_handle = nullptr,
47 Backend backend = Backend::UART_HAL) noexcept;
48
49 ~StmLogger() noexcept override;
50
51 // ── BaseLogger overrides ─────────────────────────────────────────────
52
53 hf_logger_err_t Initialize(const hf_logger_config_t& config) noexcept override;
54 hf_logger_err_t Deinitialize() noexcept override;
55 bool IsInitialized() const noexcept override;
56 bool EnsureInitialized() noexcept override;
57
58 hf_logger_err_t SetLogLevel(const char* tag, hf_log_level_t level) noexcept override;
59 hf_logger_err_t GetLogLevel(const char* tag, hf_log_level_t& level) const noexcept override;
60
61 hf_logger_err_t Error(const char* tag, const char* format, ...) noexcept override;
62 hf_logger_err_t Warn(const char* tag, const char* format, ...) noexcept override;
63 hf_logger_err_t Info(const char* tag, const char* format, ...) noexcept override;
64 hf_logger_err_t Debug(const char* tag, const char* format, ...) noexcept override;
65 hf_logger_err_t Verbose(const char* tag, const char* format, ...) noexcept override;
66 hf_logger_err_t Log(hf_log_level_t level, const char* tag,
67 const char* format, ...) noexcept override;
68 hf_logger_err_t LogV(hf_log_level_t level, const char* tag,
69 const char* format, va_list args) noexcept override;
70 hf_logger_err_t LogWithLocation(hf_log_level_t level, const char* tag, const char* file,
71 hf_u32_t line, const char* function,
72 const char* format, ...) noexcept override;
73
74 hf_logger_err_t Flush() noexcept override;
75 bool IsLevelEnabled(hf_log_level_t level, const char* tag = nullptr) const noexcept override;
76
77 hf_logger_err_t GetStatistics(hf_logger_statistics_t& statistics) const noexcept override;
78 hf_logger_err_t GetDiagnostics(hf_logger_diagnostics_t& diagnostics) const noexcept override;
79 hf_logger_err_t ResetStatistics() noexcept override;
80 hf_logger_err_t ResetDiagnostics() noexcept override;
81 bool IsHealthy() const noexcept override;
82 hf_logger_err_t GetLastError() const noexcept override;
83 hf_logger_err_t GetLastErrorMessage(char* message, hf_u32_t max_length) const noexcept override;
84 hf_logger_err_t PrintStatistics(const char* tag = nullptr, bool detailed = true) const noexcept override;
85 hf_logger_err_t PrintDiagnostics(const char* tag = nullptr, bool detailed = true) const noexcept override;
86 hf_logger_err_t PrintStatus(const char* tag = nullptr, bool detailed = true) const noexcept override;
87
88private:
90 void OutputString(const char* str, hf_u32_t length) noexcept;
91
93 hf_logger_err_t FormatAndOutput(hf_log_level_t level, const char* tag,
94 const char* format, va_list args) noexcept;
95
97 UART_HandleTypeDef* uart_handle_;
103 char format_buffer_[256];
104};
Unified logging base class for all logging implementations.
hf_logger_err_t
Definition BaseLogger.h:88
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
STM32 platform-specific type definitions for hardware abstraction.
Base logger abstract class.
Definition BaseLogger.h:358
STM32 Logger — production-quality logging over UART/SWO/printf.
Definition StmLogger.h:36
bool EnsureInitialized() noexcept override
Ensure logger is initialized (lazy initialization)
Definition StmLogger.cpp:94
hf_logger_err_t Error(const char *tag, const char *format,...) noexcept override
Log a message at ERROR level.
Definition StmLogger.cpp:127
hf_logger_err_t Flush() noexcept override
Flush any buffered output.
Definition StmLogger.cpp:221
hf_logger_err_t GetLastError() const noexcept override
Get last error code.
Definition StmLogger.cpp:252
hf_logger_err_t GetLogLevel(const char *tag, hf_log_level_t &level) const noexcept override
Get log level for a specific tag.
Definition StmLogger.cpp:114
Backend backend_
Output backend.
Definition StmLogger.h:96
StmLogger(UART_HandleTypeDef *uart_handle=nullptr, Backend backend=Backend::UART_HAL) noexcept
Construct with UART backend (most common)
Definition StmLogger.cpp:52
bool IsHealthy() const noexcept override
Check if logger is healthy.
Definition StmLogger.cpp:250
hf_logger_err_t GetDiagnostics(hf_logger_diagnostics_t &diagnostics) const noexcept override
Get logger diagnostics.
Definition StmLogger.cpp:235
hf_logger_err_t LogWithLocation(hf_log_level_t level, const char *tag, const char *file, hf_u32_t line, const char *function, const char *format,...) noexcept override
Log a message with file and line information.
Definition StmLogger.cpp:181
hf_logger_err_t Initialize(const hf_logger_config_t &config) noexcept override
Initialize the logger.
Definition StmLogger.cpp:72
hf_logger_err_t Warn(const char *tag, const char *format,...) noexcept override
Log a message at WARN level.
Definition StmLogger.cpp:135
hf_logger_diagnostics_t diagnostics_
Diagnostics.
Definition StmLogger.h:101
hf_logger_err_t Info(const char *tag, const char *format,...) noexcept override
Log a message at INFO level.
Definition StmLogger.cpp:143
Backend
Output backend selection.
Definition StmLogger.h:39
@ UART_HAL
Use HAL_UART_Transmit.
@ PRINTF
Use printf / _write.
@ SWO_ITM
Use ITM_SendChar (SWO trace)
hf_logger_err_t ResetDiagnostics() noexcept override
Reset diagnostics.
Definition StmLogger.cpp:245
hf_logger_err_t Debug(const char *tag, const char *format,...) noexcept override
Log a message at DEBUG level.
Definition StmLogger.cpp:151
hf_logger_err_t FormatAndOutput(hf_log_level_t level, const char *tag, const char *format, va_list args) noexcept
Format and output a log message.
Definition StmLogger.cpp:316
hf_logger_err_t LogV(hf_log_level_t level, const char *tag, const char *format, va_list args) noexcept override
Log a message with va_list (for internal use)
Definition StmLogger.cpp:176
hf_logger_err_t Verbose(const char *tag, const char *format,...) noexcept override
Log a message at VERBOSE level.
Definition StmLogger.cpp:159
char format_buffer_[256]
Formatting scratch buffer.
Definition StmLogger.h:103
hf_log_level_t global_level_
Current global log level.
Definition StmLogger.h:99
hf_logger_statistics_t statistics_
Statistics.
Definition StmLogger.h:100
UART_HandleTypeDef * uart_handle_
UART HAL handle (for UART backend)
Definition StmLogger.h:97
void OutputString(const char *str, hf_u32_t length) noexcept
Write formatted string to output backend.
Definition StmLogger.cpp:291
hf_logger_err_t Log(hf_log_level_t level, const char *tag, const char *format,...) noexcept override
Log a message at specified level.
Definition StmLogger.cpp:167
hf_logger_err_t last_error_
Last error code.
Definition StmLogger.h:102
hf_logger_err_t Deinitialize() noexcept override
Deinitialize the logger.
Definition StmLogger.cpp:87
hf_logger_err_t GetLastErrorMessage(char *message, hf_u32_t max_length) const noexcept override
Get last error message.
Definition StmLogger.cpp:254
hf_logger_err_t ResetStatistics() noexcept override
Reset statistics.
Definition StmLogger.cpp:240
hf_logger_err_t GetStatistics(hf_logger_statistics_t &statistics) const noexcept override
Get logger statistics.
Definition StmLogger.cpp:230
hf_logger_err_t PrintStatistics(const char *tag=nullptr, bool detailed=true) const noexcept override
Print statistics to log output.
Definition StmLogger.cpp:262
hf_logger_err_t PrintDiagnostics(const char *tag=nullptr, bool detailed=true) const noexcept override
Print diagnostics to log output.
Definition StmLogger.cpp:273
bool initialized_
Init state.
Definition StmLogger.h:98
bool IsInitialized() const noexcept override
Check if logger is initialized.
Definition StmLogger.cpp:92
~StmLogger() noexcept override
Definition StmLogger.cpp:64
hf_logger_err_t SetLogLevel(const char *tag, hf_log_level_t level) noexcept override
Set log level for a specific tag.
Definition StmLogger.cpp:109
bool IsLevelEnabled(hf_log_level_t level, const char *tag=nullptr) const noexcept override
Check if a log level is enabled for a tag.
Definition StmLogger.cpp:119
hf_logger_err_t PrintStatus(const char *tag=nullptr, bool detailed=true) const noexcept override
Print both statistics and diagnostics.
Definition StmLogger.cpp:277
hf_log_level_t
Log levels enumeration.
Definition BaseLogger.h:95
Logger configuration structure.
Definition BaseLogger.h:154
Logger diagnostics structure.
Definition BaseLogger.h:187
Logger statistics structure.
Definition BaseLogger.h:170