From a0c09961704d6b5dceada9e830542c1ba5a2fb34 Mon Sep 17 00:00:00 2001 From: Marcin Szymczyk Date: Thu, 13 Jun 2019 15:00:51 +0200 Subject: [PATCH] logging: add frontend calls in log_core Call frontend instead of processing if CONFIG_LOG_FRONTEND is enabled. Signed-off-by: Marcin Szymczyk --- subsys/logging/Kconfig | 10 ++++ subsys/logging/log_core.c | 108 +++++++++++++++++++++++++------------- 2 files changed, 81 insertions(+), 37 deletions(-) diff --git a/subsys/logging/Kconfig b/subsys/logging/Kconfig index d47a09546be..6050bf5cab7 100644 --- a/subsys/logging/Kconfig +++ b/subsys/logging/Kconfig @@ -14,6 +14,7 @@ if LOG config LOG_RUNTIME_FILTERING bool "Enable runtime reconfiguration of the logger" + depends on !LOG_FRONTEND help Allow runtime configuration of maximal, independent severity level for instance. @@ -68,6 +69,7 @@ config LOG_MAX_LEVEL - 4 DEBUG, maximal level set to LOG_LEVEL_DBG menu "Prepend log message with function name" + depends on !LOG_FRONTEND config LOG_FUNC_NAME_PREFIX_ERR bool "Error messages prepended" @@ -223,6 +225,14 @@ config LOG_CMDS depends on SHELL default y if SHELL +config LOG_FRONTEND + bool "Enable frontend" + default n + select LOG_IMMEDIATE + help + When enabled, logs are redirected to a custom frontend instead + of being processed by the logger. + config LOG_BACKEND_UART bool "Enable UART backend" depends on UART_CONSOLE diff --git a/subsys/logging/log_core.c b/subsys/logging/log_core.c index e16362224c0..694e88ee392 100644 --- a/subsys/logging/log_core.c +++ b/subsys/logging/log_core.c @@ -14,6 +14,7 @@ #include #include #include +#include LOG_MODULE_REGISTER(log); @@ -217,24 +218,32 @@ static inline void msg_finalize(struct log_msg *msg, void log_0(const char *str, struct log_msg_ids src_level) { - struct log_msg *msg = log_msg_create_0(str); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_0(str, src_level); + } else { + struct log_msg *msg = log_msg_create_0(str); - if (msg == NULL) { - return; + if (msg == NULL) { + return; + } + msg_finalize(msg, src_level); } - msg_finalize(msg, src_level); } void log_1(const char *str, log_arg_t arg0, struct log_msg_ids src_level) { - struct log_msg *msg = log_msg_create_1(str, arg0); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_1(str, arg0, src_level); + } else { + struct log_msg *msg = log_msg_create_1(str, arg0); - if (msg == NULL) { - return; + if (msg == NULL) { + return; + } + msg_finalize(msg, src_level); } - msg_finalize(msg, src_level); } void log_2(const char *str, @@ -242,13 +251,17 @@ void log_2(const char *str, log_arg_t arg1, struct log_msg_ids src_level) { - struct log_msg *msg = log_msg_create_2(str, arg0, arg1); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_2(str, arg0, arg1, src_level); + } else { + struct log_msg *msg = log_msg_create_2(str, arg0, arg1); - if (msg == NULL) { - return; + if (msg == NULL) { + return; + } + + msg_finalize(msg, src_level); } - - msg_finalize(msg, src_level); } void log_3(const char *str, @@ -257,13 +270,17 @@ void log_3(const char *str, log_arg_t arg2, struct log_msg_ids src_level) { - struct log_msg *msg = log_msg_create_3(str, arg0, arg1, arg2); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_3(str, arg0, arg1, arg2, src_level); + } else { + struct log_msg *msg = log_msg_create_3(str, arg0, arg1, arg2); - if (msg == NULL) { - return; + if (msg == NULL) { + return; + } + + msg_finalize(msg, src_level); } - - msg_finalize(msg, src_level); } void log_n(const char *str, @@ -271,13 +288,17 @@ void log_n(const char *str, u32_t narg, struct log_msg_ids src_level) { - struct log_msg *msg = log_msg_create_n(str, args, narg); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_n(str, args, narg, src_level); + } else { + struct log_msg *msg = log_msg_create_n(str, args, narg); - if (msg == NULL) { - return; + if (msg == NULL) { + return; + } + + msg_finalize(msg, src_level); } - - msg_finalize(msg, src_level); } void log_hexdump(const char *str, @@ -285,13 +306,17 @@ void log_hexdump(const char *str, u32_t length, struct log_msg_ids src_level) { - struct log_msg *msg = log_msg_hexdump_create(str, data, length); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_hexdump(str, data, length, src_level); + } else { + struct log_msg *msg = log_msg_hexdump_create(str, data, length); - if (msg == NULL) { - return; + if (msg == NULL) { + return; + } + + msg_finalize(msg, src_level); } - - msg_finalize(msg, src_level); } int log_printk(const char *fmt, va_list ap) @@ -350,7 +375,8 @@ static u32_t count_args(const char *fmt) void log_generic(struct log_msg_ids src_level, const char *fmt, va_list ap) { - if (IS_ENABLED(CONFIG_LOG_IMMEDIATE)) { + if (IS_ENABLED(CONFIG_LOG_IMMEDIATE) && + (!IS_ENABLED(CONFIG_LOG_FRONTEND))) { struct log_backend const *backend; u32_t timestamp = timestamp_func(); @@ -388,16 +414,20 @@ void log_string_sync(struct log_msg_ids src_level, const char *fmt, ...) void log_hexdump_sync(struct log_msg_ids src_level, const char *metadata, const u8_t *data, u32_t len) { - struct log_backend const *backend; - u32_t timestamp = timestamp_func(); + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_hexdump(metadata, data, len, src_level); + } else { + struct log_backend const *backend; + u32_t timestamp = timestamp_func(); - for (int i = 0; i < log_backend_count_get(); i++) { - backend = log_backend_get(i); + for (int i = 0; i < log_backend_count_get(); i++) { + backend = log_backend_get(i); - if (log_backend_is_active(backend)) { - log_backend_put_sync_hexdump(backend, src_level, - timestamp, metadata, - data, len); + if (log_backend_is_active(backend)) { + log_backend_put_sync_hexdump(backend, src_level, + timestamp, metadata, + data, len); + } } } } @@ -455,6 +485,10 @@ void log_init(void) assert(log_backend_count_get() < LOG_FILTERS_NUM_OF_SLOTS); int i; + if (IS_ENABLED(CONFIG_LOG_FRONTEND)) { + log_frontend_init(); + } + if (atomic_inc(&initialized) != 0) { return; }