diff --git a/subsys/logging/Kconfig b/subsys/logging/Kconfig index f7d16b9866b..63c035484ed 100644 --- a/subsys/logging/Kconfig +++ b/subsys/logging/Kconfig @@ -553,6 +553,19 @@ config LOG_BACKEND_RB_SLOT_SIZE Size of the message slot inside ring buffer. All log messages are split to similar sized logging slots. +config LOG_BACKEND_RB_CLEAR + bool "Clear ring buffer slot" + default y + help + Clearing ring buffer slot helps to write more easy tools to read logs + on different platforms. + +config LOG_BACKEND_RB_TIMESTAMP + bool "Add timestamp to the log" + default y + help + Add timestamp to the logging string. + endif # LOG_BACKEND_RB config LOG_BACKEND_SHOW_COLOR diff --git a/subsys/logging/log_backend_rb.c b/subsys/logging/log_backend_rb.c index c37a9ce7aca..ff8f26ce3ec 100644 --- a/subsys/logging/log_backend_rb.c +++ b/subsys/logging/log_backend_rb.c @@ -8,6 +8,7 @@ #include #include #include +#include #include static struct ring_buf ringbuf; @@ -40,7 +41,6 @@ static void trace(const uint8_t *data, size_t length) static uint16_t log_id; volatile uint8_t *t, *region; int space; - int i; space = ring_buf_space_get(&ringbuf); if (space < CONFIG_LOG_BACKEND_RB_SLOT_SIZE) { @@ -57,15 +57,23 @@ static void trace(const uint8_t *data, size_t length) region = t; /* Add magic number at the beginning of the slot */ - *(uint16_t *)t = magic; + sys_put_le16(magic, (uint8_t *)t); t += 2; /* Add log id */ - *(uint16_t *)t = log_id++; + sys_put_le16(log_id++, (uint8_t *)t); t += 2; - for (i = 0; i < MIN(length, CONFIG_LOG_BACKEND_RB_SLOT_SIZE - 4); i++) { - *t++ = data[i]; + length = MIN(length, CONFIG_LOG_BACKEND_RB_SLOT_SIZE - 4); + + memcpy((void *)t, data, length); + t += length; + + /* Clear logging slot */ + if (IS_ENABLED(CONFIG_LOG_BACKEND_RB_CLEAR) && + length < CONFIG_LOG_BACKEND_RB_SLOT_SIZE - 4) { + memset((void *)t, 0, + CONFIG_LOG_BACKEND_RB_SLOT_SIZE - 4 - length); } SOC_DCACHE_FLUSH((void *)region, CONFIG_LOG_BACKEND_RB_SLOT_SIZE); @@ -88,12 +96,16 @@ LOG_OUTPUT_DEFINE(log_output_rb, char_out, rb_log_buf, sizeof(rb_log_buf)); static void put(const struct log_backend *const backend, struct log_msg *msg) { - log_msg_get(msg); - uint32_t flags = LOG_OUTPUT_FLAG_LEVEL; - if (IS_ENABLED(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP)) { - flags |= LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP; + log_msg_get(msg); + + if (IS_ENABLED(CONFIG_LOG_BACKEND_RB_TIMESTAMP)) { + flags |= LOG_OUTPUT_FLAG_TIMESTAMP; + + if (IS_ENABLED(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP)) { + flags |= LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP; + } } log_output_msg_process(&log_output_rb, msg, flags); @@ -120,8 +132,12 @@ static void sync_string(const struct log_backend *const backend, uint32_t flags = LOG_OUTPUT_FLAG_LEVEL; uint32_t key; - if (IS_ENABLED(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP)) { - flags |= LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP; + if (IS_ENABLED(CONFIG_LOG_BACKEND_RB_TIMESTAMP)) { + flags |= LOG_OUTPUT_FLAG_TIMESTAMP; + + if (IS_ENABLED(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP)) { + flags |= LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP; + } } key = irq_lock(); @@ -134,11 +150,15 @@ static void sync_hexdump(const struct log_backend *const backend, struct log_msg_ids src_level, uint32_t timestamp, const char *metadata, const uint8_t *data, uint32_t length) { - uint32_t flags = LOG_OUTPUT_FLAG_LEVEL | LOG_OUTPUT_FLAG_TIMESTAMP; + uint32_t flags = LOG_OUTPUT_FLAG_LEVEL; uint32_t key; - if (IS_ENABLED(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP)) { - flags |= LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP; + if (IS_ENABLED(CONFIG_LOG_BACKEND_RB_TIMESTAMP)) { + flags |= LOG_OUTPUT_FLAG_TIMESTAMP; + + if (IS_ENABLED(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP)) { + flags |= LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP; + } } key = irq_lock(); @@ -147,7 +167,7 @@ static void sync_hexdump(const struct log_backend *const backend, irq_unlock(key); } -const struct log_backend_api log_backend_adsp_api = { +const struct log_backend_api log_backend_rb_api = { .put = IS_ENABLED(CONFIG_LOG_IMMEDIATE) ? NULL : put, .put_sync_string = IS_ENABLED(CONFIG_LOG_IMMEDIATE) ? sync_string : NULL, @@ -158,4 +178,4 @@ const struct log_backend_api log_backend_adsp_api = { .dropped = IS_ENABLED(CONFIG_LOG_IMMEDIATE) ? NULL : dropped, }; -LOG_BACKEND_DEFINE(log_backend_adsp, log_backend_adsp_api, true); +LOG_BACKEND_DEFINE(log_backend_adsp, log_backend_rb_api, true);