LCOV - code coverage report
Current view: top level - zephyr/logging - log_ctrl.h Coverage Total Hit
Test: new.info Lines: 81.2 % 32 26
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2018 Nordic Semiconductor ASA
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : #ifndef ZEPHYR_INCLUDE_LOGGING_LOG_CTRL_H_
       7              : #define ZEPHYR_INCLUDE_LOGGING_LOG_CTRL_H_
       8              : 
       9              : #include <zephyr/kernel.h>
      10              : #include <zephyr/logging/log_backend.h>
      11              : #include <zephyr/logging/log_msg.h>
      12              : #include <zephyr/logging/log_internal.h>
      13              : 
      14              : #ifdef __cplusplus
      15              : extern "C" {
      16              : #endif
      17              : 
      18              : /**
      19              :  * @brief Logger
      20              :  * @defgroup logger Logger system
      21              :  * @since 1.13
      22              :  * @ingroup logging
      23              :  * @{
      24              :  * @}
      25              :  */
      26              : 
      27              : /**
      28              :  * @brief Logger control API
      29              :  * @defgroup log_ctrl Logger control API
      30              :  * @since 1.13
      31              :  * @ingroup logger
      32              :  * @{
      33              :  */
      34              : 
      35            0 : typedef log_timestamp_t (*log_timestamp_get_t)(void);
      36              : 
      37              : /** @brief Function system initialization of the logger.
      38              :  *
      39              :  * Function is called during start up to allow logging before user can
      40              :  * explicitly initialize the logger.
      41              :  */
      42            1 : void log_core_init(void);
      43              : 
      44              : /**
      45              :  * @brief Function for user initialization of the logger.
      46              :  *
      47              :  */
      48            1 : void log_init(void);
      49              : 
      50              : /** @brief Trigger the log processing thread to process logs immediately.
      51              :  *
      52              :  *  @note Function  has no effect when CONFIG_LOG_MODE_IMMEDIATE is set.
      53              :  */
      54            1 : void log_thread_trigger(void);
      55              : 
      56              : /**
      57              :  * @brief Function for providing thread which is processing logs.
      58              :  *
      59              :  * See CONFIG_LOG_PROCESS_TRIGGER_THRESHOLD.
      60              :  *
      61              :  * @note Function has asserts and has no effect when CONFIG_LOG_PROCESS_THREAD is set.
      62              :  *
      63              :  * @param process_tid Process thread id. Used to wake up the thread.
      64              :  */
      65            1 : void log_thread_set(k_tid_t process_tid);
      66              : 
      67              : /**
      68              :  * @brief Function for providing timestamp function.
      69              :  *
      70              :  * @param timestamp_getter      Timestamp function.
      71              :  * @param freq                  Timestamping frequency.
      72              :  *
      73              :  * @return 0 on success or error.
      74              :  */
      75            1 : int log_set_timestamp_func(log_timestamp_get_t timestamp_getter,
      76              :                            uint32_t freq);
      77              : 
      78              : /**
      79              :  * @brief Switch the logger subsystem to the panic mode.
      80              :  *
      81              :  * Returns immediately if the logger is already in the panic mode.
      82              :  *
      83              :  * @details On panic the logger subsystem informs all backends about panic mode.
      84              :  *          Backends must switch to blocking mode or halt. All pending logs
      85              :  *          are flushed after switching to panic mode. In panic mode, all log
      86              :  *          messages must be processed in the context of the call.
      87              :  */
      88            1 : __syscall void log_panic(void);
      89              : 
      90              : /**
      91              :  * @brief Process one pending log message.
      92              :  *
      93              :  * @retval true There are more messages pending to be processed.
      94              :  * @retval false No messages pending.
      95              :  */
      96            1 : __syscall bool log_process(void);
      97              : 
      98              : /**
      99              :  * @brief Process all pending log messages
     100              :  */
     101              : #ifdef CONFIG_LOG_MODE_DEFERRED
     102              : void log_flush(void);
     103              : #else
     104            1 : static inline void log_flush(void)
     105              : {
     106              : }
     107              : #endif
     108              : 
     109              : /**
     110              :  * @brief Return number of buffered log messages.
     111              :  *
     112              :  * @return Number of currently buffered log messages.
     113              :  */
     114            1 : __syscall uint32_t log_buffered_cnt(void);
     115              : 
     116              : /** @brief Get number of independent logger sources (modules and instances)
     117              :  *
     118              :  * @param domain_id Domain ID.
     119              :  *
     120              :  * @return Number of sources.
     121              :  */
     122            1 : uint32_t log_src_cnt_get(uint32_t domain_id);
     123              : 
     124              : 
     125              : /** @brief Get name of the source (module or instance).
     126              :  *
     127              :  * @param domain_id Domain ID.
     128              :  * @param source_id Source ID.
     129              :  *
     130              :  * @return Source name or NULL if invalid arguments.
     131              :  */
     132            1 : const char *log_source_name_get(uint32_t domain_id, uint32_t source_id);
     133              : 
     134              : /** @brief Return number of domains present in the system.
     135              :  *
     136              :  * There will be at least one local domain.
     137              :  *
     138              :  * @return Number of domains.
     139              :  */
     140            1 : static inline uint8_t log_domains_count(void)
     141              : {
     142              :         return 1 + (IS_ENABLED(CONFIG_LOG_MULTIDOMAIN) ? z_log_ext_domain_count() : 0);
     143              : }
     144              : 
     145              : /** @brief Get name of the domain.
     146              :  *
     147              :  * @param domain_id Domain ID.
     148              :  *
     149              :  * @return Domain name.
     150              :  */
     151            1 : const char *log_domain_name_get(uint32_t domain_id);
     152              : 
     153              : /**
     154              :  * @brief Function for finding source ID based on source name.
     155              :  *
     156              :  * @param name Source name
     157              :  *
     158              :  * @return Source ID or negative number when source ID is not found.
     159              :  */
     160            1 : int log_source_id_get(const char *name);
     161              : 
     162              : /**
     163              :  * @brief Get source filter for the provided backend.
     164              :  *
     165              :  * @param backend       Backend instance.
     166              :  * @param domain_id     ID of the domain.
     167              :  * @param source_id     Source (module or instance) ID.
     168              :  * @param runtime       True for runtime filter or false for compiled in.
     169              :  *
     170              :  * @return              Severity level.
     171              :  */
     172            1 : uint32_t log_filter_get(struct log_backend const *const backend,
     173              :                         uint32_t domain_id, int16_t source_id, bool runtime);
     174              : 
     175              : /**
     176              :  * @brief Set filter on given source for the provided backend.
     177              :  *
     178              :  * @param backend       Backend instance. NULL for all backends (and frontend).
     179              :  * @param domain_id     ID of the domain.
     180              :  * @param source_id     Source (module or instance) ID.
     181              :  * @param level         Severity level.
     182              :  *
     183              :  * @return Actual level set which may be limited by compiled level. If filter
     184              :  *         was set for all backends then maximal level that was set is returned.
     185              :  */
     186            1 : __syscall uint32_t log_filter_set(struct log_backend const *const backend,
     187              :                                   uint32_t domain_id, int16_t source_id,
     188              :                                   uint32_t level);
     189              : 
     190              : /**
     191              :  * @brief Get source filter for the frontend.
     192              :  *
     193              :  * @param source_id     Source (module or instance) ID.
     194              :  * @param runtime       True for runtime filter or false for compiled in.
     195              :  *
     196              :  * @return              Severity level.
     197              :  */
     198            1 : uint32_t log_frontend_filter_get(int16_t source_id, bool runtime);
     199              : 
     200              : /**
     201              :  * @brief Set filter on given source for the frontend.
     202              :  *
     203              :  * @param source_id     Source (module or instance) ID.
     204              :  * @param level         Severity level.
     205              :  *
     206              :  * @return Actual level set which may be limited by compiled level.
     207              :  */
     208            1 : __syscall uint32_t log_frontend_filter_set(int16_t source_id, uint32_t level);
     209              : 
     210              : /**
     211              :  *
     212              :  * @brief Enable backend with initial maximum filtering level.
     213              :  *
     214              :  * @param backend       Backend instance.
     215              :  * @param ctx           User context.
     216              :  * @param level         Severity level.
     217              :  */
     218            1 : void log_backend_enable(struct log_backend const *const backend,
     219              :                         void *ctx,
     220              :                         uint32_t level);
     221              : 
     222              : /**
     223              :  *
     224              :  * @brief Disable backend.
     225              :  *
     226              :  * @param backend       Backend instance.
     227              :  */
     228            1 : void log_backend_disable(struct log_backend const *const backend);
     229              : 
     230              : /**
     231              :  * @brief Get backend by name.
     232              :  *
     233              :  * @param[in] backend_name Name of the backend as defined by the LOG_BACKEND_DEFINE.
     234              :  *
     235              :  * @retval Pointer to the backend instance if found, NULL if backend is not found.
     236              :  */
     237            1 : const struct log_backend *log_backend_get_by_name(const char *backend_name);
     238              : 
     239              : /** @brief Sets logging format for all active backends.
     240              :  *
     241              :  * @param log_type Log format.
     242              :  *
     243              :  * @retval Pointer to the last backend that failed, NULL for success.
     244              :  */
     245            1 : const struct log_backend *log_format_set_all_active_backends(size_t log_type);
     246              : 
     247              : /**
     248              :  * @brief Check if there is pending data to be processed by the logging subsystem.
     249              :  *
     250              :  * Function can be used to determine if all logs have been flushed. Function
     251              :  * returns false when deferred mode is not enabled.
     252              :  *
     253              :  * @retval true There is pending data.
     254              :  * @retval false No pending data to process.
     255              :  */
     256            1 : static inline bool log_data_pending(void)
     257              : {
     258              :         return IS_ENABLED(CONFIG_LOG_MODE_DEFERRED) ? z_log_msg_pending() : false;
     259              : }
     260              : 
     261              : /**
     262              :  * @brief Configure tag used to prefix each message.
     263              :  *
     264              :  * @param tag Tag.
     265              :  *
     266              :  * @retval 0 on successful operation.
     267              :  * @retval -ENOTSUP if feature is disabled.
     268              :  * @retval -ENOMEM if string is longer than the buffer capacity. Tag will be trimmed.
     269              :  */
     270            1 : int log_set_tag(const char *tag);
     271              : 
     272              : /**
     273              :  * @brief Get current memory usage.
     274              :  *
     275              :  * @param[out] buf_size Capacity of the buffer used for storing log messages.
     276              :  * @param[out] usage Number of bytes currently containing pending log messages.
     277              :  *
     278              :  * @retval -EINVAL if logging mode does not use the buffer.
     279              :  * @retval 0 successfully collected usage data.
     280              :  */
     281            1 : int log_mem_get_usage(uint32_t *buf_size, uint32_t *usage);
     282              : 
     283              : /**
     284              :  * @brief Get maximum memory usage.
     285              :  *
     286              :  * Requires CONFIG_LOG_MEM_UTILIZATION option.
     287              :  *
     288              :  * @param[out] max Maximum number of bytes used for pending log messages.
     289              :  *
     290              :  * @retval -EINVAL if logging mode does not use the buffer.
     291              :  * @retval -ENOTSUP if instrumentation is not enabled.
     292              :  * not been enabled.
     293              :  *
     294              :  * @retval 0 successfully collected usage data.
     295              :  */
     296            1 : int log_mem_get_max_usage(uint32_t *max);
     297              : 
     298              : #if defined(CONFIG_LOG) && !defined(CONFIG_LOG_MODE_MINIMAL)
     299              : #define LOG_CORE_INIT() log_core_init()
     300              : #define LOG_PANIC() log_panic()
     301              : #if defined(CONFIG_LOG_FRONTEND_ONLY)
     302              : #define LOG_INIT() 0
     303              : #define LOG_PROCESS() false
     304              : #else /* !CONFIG_LOG_FRONTEND_ONLY */
     305              : #define LOG_INIT() log_init()
     306              : #define LOG_PROCESS() log_process()
     307              : #endif /* !CONFIG_LOG_FRONTEND_ONLY */
     308              : #else
     309            0 : #define LOG_CORE_INIT() do { } while (false)
     310            0 : #define LOG_INIT() 0
     311            0 : #define LOG_PANIC() /* Empty */
     312            0 : #define LOG_PROCESS() false
     313              : #endif
     314              : 
     315              : #include <zephyr/syscalls/log_ctrl.h>
     316              : 
     317              : /**
     318              :  * @}
     319              :  */
     320              : 
     321              : #ifdef __cplusplus
     322              : }
     323              : #endif
     324              : 
     325              : #endif /* ZEPHYR_INCLUDE_LOGGING_LOG_CTRL_H_ */
        

Generated by: LCOV version 2.0-1