LCOV - code coverage report
Current view: top level - zephyr/shell - shell_log_backend.h Coverage Total Hit
Test: new.info Lines: 18.8 % 16 3
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2018 Nordic Semiconductor ASA
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_SHELL_LOG_BACKEND_H_
       8              : #define ZEPHYR_INCLUDE_SHELL_LOG_BACKEND_H_
       9              : 
      10              : #include <zephyr/kernel.h>
      11              : #include <zephyr/logging/log_backend.h>
      12              : #include <zephyr/logging/log_output.h>
      13              : #include <zephyr/sys/mpsc_pbuf.h>
      14              : #include <zephyr/sys/atomic.h>
      15              : #ifdef __cplusplus
      16              : extern "C" {
      17              : #endif
      18              : 
      19            0 : extern const struct log_backend_api log_backend_shell_api;
      20              : 
      21              : /** @brief Shell log backend states. */
      22            0 : enum shell_log_backend_state {
      23              :         SHELL_LOG_BACKEND_UNINIT,
      24              :         SHELL_LOG_BACKEND_ENABLED,
      25              :         SHELL_LOG_BACKEND_DISABLED,
      26              :         SHELL_LOG_BACKEND_PANIC,
      27              : };
      28              : 
      29              : /** @brief Shell log backend control block (RW data). */
      30            1 : struct shell_log_backend_control_block {
      31            0 :         atomic_t dropped_cnt;
      32            0 :         enum shell_log_backend_state state;
      33              : };
      34              : 
      35              : /** @brief Shell log backend instance structure (RO data). */
      36            1 : struct shell_log_backend {
      37            0 :         const struct log_backend *backend;
      38            0 :         const struct log_output *log_output;
      39            0 :         struct shell_log_backend_control_block *control_block;
      40            0 :         uint32_t timeout;
      41            0 :         const struct mpsc_pbuf_buffer_config *mpsc_buffer_config;
      42            0 :         struct mpsc_pbuf_buffer *mpsc_buffer;
      43              : };
      44              : 
      45              : /** @brief Shell log backend message structure. */
      46            1 : struct shell_log_backend_msg {
      47            0 :         struct log_msg *msg;
      48            0 :         uint32_t timestamp;
      49              : };
      50              : 
      51              : /** @brief Prototype of function outputting processed data. */
      52              : int z_shell_log_backend_output_func(uint8_t *data, size_t length, void *ctx);
      53              : 
      54              : /** @def Z_SHELL_LOG_BACKEND_DEFINE
      55              :  *  @brief Macro for creating instance of shell log backend.
      56              :  *
      57              :  *  @param _name        Shell name.
      58              :  *  @param _buf         Output buffer.
      59              :  *  @param _size        Output buffer size.
      60              :  *  @param _queue_size  Log message queue size.
      61              :  *  @param _timeout     Timeout in milliseconds for pending on queue full.
      62              :  *                      Message is dropped on timeout.
      63              :  */
      64              : /** @def Z_SHELL_LOG_BACKEND_PTR
      65              :  *  @brief Macro for retrieving pointer to the instance of shell log backend.
      66              :  *
      67              :  *  @param _name Shell name.
      68              :  */
      69              : #ifdef CONFIG_SHELL_LOG_BACKEND
      70              : #define Z_SHELL_LOG_BACKEND_DEFINE(_name, _buf, _size, _queue_size, _timeout) \
      71              :         LOG_BACKEND_DEFINE(_name##_backend, log_backend_shell_api, false); \
      72              :         LOG_OUTPUT_DEFINE(_name##_log_output, z_shell_log_backend_output_func,\
      73              :                           _buf, _size); \
      74              :         static struct shell_log_backend_control_block _name##_control_block; \
      75              :         static uint32_t __aligned(Z_LOG_MSG_ALIGNMENT) \
      76              :                         _name##_buf[_queue_size / sizeof(uint32_t)]; \
      77              :         const struct mpsc_pbuf_buffer_config _name##_mpsc_buffer_config = { \
      78              :                 .buf = _name##_buf, \
      79              :                 .size = ARRAY_SIZE(_name##_buf), \
      80              :                 .notify_drop = NULL, \
      81              :                 .get_wlen = log_msg_generic_get_wlen, \
      82              :                 .flags = MPSC_PBUF_MODE_OVERWRITE, \
      83              :         }; \
      84              :         struct mpsc_pbuf_buffer _name##_mpsc_buffer; \
      85              :         static const struct shell_log_backend _name##_log_backend = { \
      86              :                 .backend = &_name##_backend, \
      87              :                 .log_output = &_name##_log_output, \
      88              :                 .control_block = &_name##_control_block, \
      89              :                 .timeout = _timeout, \
      90              :                 .mpsc_buffer_config = &_name##_mpsc_buffer_config, \
      91              :                 .mpsc_buffer = &_name##_mpsc_buffer, \
      92              :         }
      93              : 
      94              : #define Z_SHELL_LOG_BACKEND_PTR(_name) (&_name##_log_backend)
      95              : #else /* CONFIG_LOG */
      96              : #define Z_SHELL_LOG_BACKEND_DEFINE(_name, _buf, _size, _queue_size, _timeout)
      97              : #define Z_SHELL_LOG_BACKEND_PTR(_name) NULL
      98              : #endif /* CONFIG_LOG */
      99              : 
     100              : /** @brief Enable shell log backend.
     101              :  *
     102              :  * @param backend               Shell log backend instance.
     103              :  * @param ctx                   Pointer to shell instance.
     104              :  * @param init_log_level        Initial log level set to all logging sources.
     105              :  */
     106              : void z_shell_log_backend_enable(const struct shell_log_backend *backend,
     107              :                                 void *ctx, uint32_t init_log_level);
     108              : 
     109              : /** @brief Disable shell log backend.
     110              :  *
     111              :  * @param backend Shell log backend instance.
     112              :  */
     113              : void z_shell_log_backend_disable(const struct shell_log_backend *backend);
     114              : 
     115              : /** @brief Trigger processing of one log entry.
     116              :  *
     117              :  * @param backend Shell log backend instance.
     118              :  *
     119              :  * @return True if message was processed, false if FIFO was empty
     120              :  */
     121              : bool z_shell_log_backend_process(const struct shell_log_backend *backend);
     122              : 
     123              : #ifdef __cplusplus
     124              : }
     125              : #endif
     126              : 
     127              : #endif /* ZEPHYR_INCLUDE_SHELL_LOG_BACKEND_H_ */
        

Generated by: LCOV version 2.0-1