1 /*
2  * Copyright (c) 2021 Converge
3  * Copyright (c) 2023 Nobleo Technology
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 #ifndef ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_CUSTOM_H_
8 #define ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_CUSTOM_H_
9 
10 #include <zephyr/logging/log_output.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /** @brief Custom logging output formatting.
17  * @ingroup log_output
18  * @{
19  */
20 
21 /** @brief Process log messages from an external output function set with
22  * log_custom_output_msg_set
23  *
24  * Function is using provided context with the buffer and output function to
25  * process formatted string and output the data.
26  *
27  * @param log_output Pointer to the log output instance.
28  * @param msg Log message.
29  * @param flags Optional flags.
30  */
31 void log_custom_output_msg_process(const struct log_output *log_output,
32 				 struct log_msg *msg, uint32_t flags);
33 
34 /** @brief Set the formatting log function that will be applied with LOG_OUTPUT_CUSTOM
35  *
36  * @param format Pointer to the external formatter function
37  */
38 void log_custom_output_msg_set(log_format_func_t format);
39 
40 
41 /**
42  * @brief Prototype of a printer function that can print the given timestamp
43  * into a specific logger instance.
44  *
45  * Example usage:
46  * @code{.c}
47  * log_timestamp_printer_t *printer = ...;
48  * printer(log_instance, "%02u:%02u", hours, minutes);
49  * @endcode
50  *
51  * @param output The logger instance to write to
52  * @param fmt The format string
53  * @param ... optional arguments for the format string
54  */
55 typedef int (*log_timestamp_printer_t)(const struct log_output *output, const char *fmt, ...);
56 
57 /**
58  * @brief Prototype of the function that will apply custom formatting
59  * to a timestamp when LOG_OUTPUT_FORMAT_CUSTOM_TIMESTAMP
60  *
61  * Example function:
62  * @code{.c}
63  * int custom_timestamp_formatter(const struct log_output* output,
64  *                                const log_timestamp_t timestamp,
65  *                                const log_timestamp_printer_t printer) {
66  *     return printer(output, "%d ", timestamp);
67  * }
68  * @endcode
69  *
70  * @param output The logger instance to write to
71  * @param timestamp
72  * @param printer The printing function to use when formatting the timestamp.
73  */
74 typedef int (*log_timestamp_format_func_t)(const struct log_output *output,
75 					   const log_timestamp_t timestamp,
76 					   const log_timestamp_printer_t printer);
77 
78 /** @brief Format the timestamp with a external function.
79  *
80  * Function is using provided context with the buffer and output function to
81  * process formatted string and output the data.
82  *
83  * @param output Pointer to the log output instance.
84  * @param timestamp
85  * @param printer The printing function to use when formatting the timestamp.
86  */
87 int log_custom_timestamp_print(const struct log_output *output, const log_timestamp_t timestamp,
88 			      const log_timestamp_printer_t printer);
89 
90 /** @brief Set the timestamp formatting function that will be applied
91  * when LOG_OUTPUT_FORMAT_CUSTOM_TIMESTAMP
92  *
93  * @param format Pointer to the external formatter function
94  */
95 void log_custom_timestamp_set(log_timestamp_format_func_t format);
96 
97 /**
98  * @}
99  */
100 
101 #ifdef __cplusplus
102 }
103 #endif
104 
105 #endif /* ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_CUSTOM_H_ */
106