1 /*
2  * Copyright (c) 2018 Nordic Semiconductor ASA
3  * Copyright (c) 2021 Intel Corporation
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 #ifndef ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_DICT_H_
8 #define ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_DICT_H_
9 
10 #include <logging/log_output.h>
11 #include <logging/log_msg2.h>
12 #include <stdarg.h>
13 #include <toolchain.h>
14 #include <sys/util.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 /**
21  * Log message type
22  */
23 enum log_dict_output_msg_type {
24 	MSG_NORMAL = 0,
25 	MSG_DROPPED_MSG = 1,
26 };
27 
28 /**
29  * Output header for one dictionary based log message.
30  */
31 struct log_dict_output_normal_msg_hdr_t {
32 	uint8_t type;
33 	uint32_t domain:3;
34 	uint32_t level:3;
35 	uint32_t package_len:10;
36 	uint32_t data_len:12;
37 	uintptr_t source;
38 	log_timestamp_t timestamp;
39 } __packed;
40 
41 /**
42  * Output for one dictionary based log message about
43  * dropped messages.
44  */
45 struct log_dict_output_dropped_msg_t {
46 	uint8_t type;
47 	uint16_t num_dropped_messages;
48 } __packed;
49 
50 /** @brief Process log messages v2 for dictionary-basde logging.
51  *
52  * Function is using provided context with the buffer and output function to
53  * process formatted string and output the data.
54  *
55  * @param log_output Pointer to the log output instance.
56  * @param msg Log message.
57  * @param flags Optional flags.
58  */
59 void log_dict_output_msg2_process(const struct log_output *log_output,
60 				  struct log_msg2 *msg, uint32_t flags);
61 
62 /** @brief Process dropped messages indication for dictionary-based logging.
63  *
64  * Function prints error message indicating lost log messages.
65  *
66  * @param output Pointer to the log output instance.
67  * @param cnt        Number of dropped messages.
68  */
69 void log_dict_output_dropped_process(const struct log_output *output, uint32_t cnt);
70 
71 #ifdef __cplusplus
72 }
73 #endif
74 
75 #endif /* ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_DICT_H_ */
76