LCOV - code coverage report
Current view: top level - zephyr/logging - log_ctrl.h Hit Total Coverage
Test: new.info Lines: 25 31 80.6 %
Date: 2024-12-22 00:14:23

          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 Return number of buffered log messages.
     100             :  *
     101             :  * @return Number of currently buffered log messages.
     102             :  */
     103           1 : __syscall uint32_t log_buffered_cnt(void);
     104             : 
     105             : /** @brief Get number of independent logger sources (modules and instances)
     106             :  *
     107             :  * @param domain_id Domain ID.
     108             :  *
     109             :  * @return Number of sources.
     110             :  */
     111           1 : uint32_t log_src_cnt_get(uint32_t domain_id);
     112             : 
     113             : 
     114             : /** @brief Get name of the source (module or instance).
     115             :  *
     116             :  * @param domain_id Domain ID.
     117             :  * @param source_id Source ID.
     118             :  *
     119             :  * @return Source name or NULL if invalid arguments.
     120             :  */
     121           1 : const char *log_source_name_get(uint32_t domain_id, uint32_t source_id);
     122             : 
     123             : /** @brief Return number of domains present in the system.
     124             :  *
     125             :  * There will be at least one local domain.
     126             :  *
     127             :  * @return Number of domains.
     128             :  */
     129           1 : static inline uint8_t log_domains_count(void)
     130             : {
     131             :         return 1 + (IS_ENABLED(CONFIG_LOG_MULTIDOMAIN) ? z_log_ext_domain_count() : 0);
     132             : }
     133             : 
     134             : /** @brief Get name of the domain.
     135             :  *
     136             :  * @param domain_id Domain ID.
     137             :  *
     138             :  * @return Domain name.
     139             :  */
     140           1 : const char *log_domain_name_get(uint32_t domain_id);
     141             : 
     142             : /**
     143             :  * @brief Function for finding source ID based on source name.
     144             :  *
     145             :  * @param name Source name
     146             :  *
     147             :  * @return Source ID or negative number when source ID is not found.
     148             :  */
     149           1 : int log_source_id_get(const char *name);
     150             : 
     151             : /**
     152             :  * @brief Get source filter for the provided backend.
     153             :  *
     154             :  * @param backend       Backend instance.
     155             :  * @param domain_id     ID of the domain.
     156             :  * @param source_id     Source (module or instance) ID.
     157             :  * @param runtime       True for runtime filter or false for compiled in.
     158             :  *
     159             :  * @return              Severity level.
     160             :  */
     161           1 : uint32_t log_filter_get(struct log_backend const *const backend,
     162             :                         uint32_t domain_id, int16_t source_id, bool runtime);
     163             : 
     164             : /**
     165             :  * @brief Set filter on given source for the provided backend.
     166             :  *
     167             :  * @param backend       Backend instance. NULL for all backends (and frontend).
     168             :  * @param domain_id     ID of the domain.
     169             :  * @param source_id     Source (module or instance) ID.
     170             :  * @param level         Severity level.
     171             :  *
     172             :  * @return Actual level set which may be limited by compiled level. If filter
     173             :  *         was set for all backends then maximal level that was set is returned.
     174             :  */
     175           1 : __syscall uint32_t log_filter_set(struct log_backend const *const backend,
     176             :                                   uint32_t domain_id, int16_t source_id,
     177             :                                   uint32_t level);
     178             : 
     179             : /**
     180             :  * @brief Get source filter for the frontend.
     181             :  *
     182             :  * @param source_id     Source (module or instance) ID.
     183             :  * @param runtime       True for runtime filter or false for compiled in.
     184             :  *
     185             :  * @return              Severity level.
     186             :  */
     187           1 : uint32_t log_frontend_filter_get(int16_t source_id, bool runtime);
     188             : 
     189             : /**
     190             :  * @brief Set filter on given source for the frontend.
     191             :  *
     192             :  * @param source_id     Source (module or instance) ID.
     193             :  * @param level         Severity level.
     194             :  *
     195             :  * @return Actual level set which may be limited by compiled level.
     196             :  */
     197           1 : __syscall uint32_t log_frontend_filter_set(int16_t source_id, uint32_t level);
     198             : 
     199             : /**
     200             :  *
     201             :  * @brief Enable backend with initial maximum filtering level.
     202             :  *
     203             :  * @param backend       Backend instance.
     204             :  * @param ctx           User context.
     205             :  * @param level         Severity level.
     206             :  */
     207           1 : void log_backend_enable(struct log_backend const *const backend,
     208             :                         void *ctx,
     209             :                         uint32_t level);
     210             : 
     211             : /**
     212             :  *
     213             :  * @brief Disable backend.
     214             :  *
     215             :  * @param backend       Backend instance.
     216             :  */
     217           1 : void log_backend_disable(struct log_backend const *const backend);
     218             : 
     219             : /**
     220             :  * @brief Get backend by name.
     221             :  *
     222             :  * @param[in] backend_name Name of the backend as defined by the LOG_BACKEND_DEFINE.
     223             :  *
     224             :  * @retval Pointer to the backend instance if found, NULL if backend is not found.
     225             :  */
     226           1 : const struct log_backend *log_backend_get_by_name(const char *backend_name);
     227             : 
     228             : /** @brief Sets logging format for all active backends.
     229             :  *
     230             :  * @param log_type Log format.
     231             :  *
     232             :  * @retval Pointer to the last backend that failed, NULL for success.
     233             :  */
     234           1 : const struct log_backend *log_format_set_all_active_backends(size_t log_type);
     235             : 
     236             : /**
     237             :  * @brief Check if there is pending data to be processed by the logging subsystem.
     238             :  *
     239             :  * Function can be used to determine if all logs have been flushed. Function
     240             :  * returns false when deferred mode is not enabled.
     241             :  *
     242             :  * @retval true There is pending data.
     243             :  * @retval false No pending data to process.
     244             :  */
     245           1 : static inline bool log_data_pending(void)
     246             : {
     247             :         return IS_ENABLED(CONFIG_LOG_MODE_DEFERRED) ? z_log_msg_pending() : false;
     248             : }
     249             : 
     250             : /**
     251             :  * @brief Configure tag used to prefix each message.
     252             :  *
     253             :  * @param tag Tag.
     254             :  *
     255             :  * @retval 0 on successful operation.
     256             :  * @retval -ENOTSUP if feature is disabled.
     257             :  * @retval -ENOMEM if string is longer than the buffer capacity. Tag will be trimmed.
     258             :  */
     259           1 : int log_set_tag(const char *tag);
     260             : 
     261             : /**
     262             :  * @brief Get current memory usage.
     263             :  *
     264             :  * @param[out] buf_size Capacity of the buffer used for storing log messages.
     265             :  * @param[out] usage Number of bytes currently containing pending log messages.
     266             :  *
     267             :  * @retval -EINVAL if logging mode does not use the buffer.
     268             :  * @retval 0 successfully collected usage data.
     269             :  */
     270           1 : int log_mem_get_usage(uint32_t *buf_size, uint32_t *usage);
     271             : 
     272             : /**
     273             :  * @brief Get maximum memory usage.
     274             :  *
     275             :  * Requires CONFIG_LOG_MEM_UTILIZATION option.
     276             :  *
     277             :  * @param[out] max Maximum number of bytes used for pending log messages.
     278             :  *
     279             :  * @retval -EINVAL if logging mode does not use the buffer.
     280             :  * @retval -ENOTSUP if instrumentation is not enabled.
     281             :  * not been enabled.
     282             :  *
     283             :  * @retval 0 successfully collected usage data.
     284             :  */
     285           1 : int log_mem_get_max_usage(uint32_t *max);
     286             : 
     287             : #if defined(CONFIG_LOG) && !defined(CONFIG_LOG_MODE_MINIMAL)
     288             : #define LOG_CORE_INIT() log_core_init()
     289             : #define LOG_PANIC() log_panic()
     290             : #if defined(CONFIG_LOG_FRONTEND_ONLY)
     291             : #define LOG_INIT() 0
     292             : #define LOG_PROCESS() false
     293             : #else /* !CONFIG_LOG_FRONTEND_ONLY */
     294             : #define LOG_INIT() log_init()
     295             : #define LOG_PROCESS() log_process()
     296             : #endif /* !CONFIG_LOG_FRONTEND_ONLY */
     297             : #else
     298           0 : #define LOG_CORE_INIT() do { } while (false)
     299           0 : #define LOG_INIT() 0
     300           0 : #define LOG_PANIC() /* Empty */
     301           0 : #define LOG_PROCESS() false
     302             : #endif
     303             : 
     304             : #include <zephyr/syscalls/log_ctrl.h>
     305             : 
     306             : /**
     307             :  * @}
     308             :  */
     309             : 
     310             : #ifdef __cplusplus
     311             : }
     312             : #endif
     313             : 
     314             : #endif /* ZEPHYR_INCLUDE_LOGGING_LOG_CTRL_H_ */

Generated by: LCOV version 1.14