/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 * Copyright (c) 2021 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#ifndef ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_DICT_H_
#define ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_DICT_H_

#include <logging/log_output.h>
#include <logging/log_msg2.h>
#include <stdarg.h>
#include <toolchain.h>
#include <sys/util.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Log message type
 */
enum log_dict_output_msg_type {
	MSG_NORMAL = 0,
	MSG_DROPPED_MSG = 1,
};

/**
 * Output header for one dictionary based log message.
 */
struct log_dict_output_normal_msg_hdr_t {
	uint8_t type;
	uint32_t domain:3;
	uint32_t level:3;
	uint32_t package_len:10;
	uint32_t data_len:12;
	uintptr_t source;
	log_timestamp_t timestamp;
} __packed;

/**
 * Output for one dictionary based log message about
 * dropped messages.
 */
struct log_dict_output_dropped_msg_t {
	uint8_t type;
	uint16_t num_dropped_messages;
} __packed;

/** @brief Process log messages v2 for dictionary-basde logging.
 *
 * Function is using provided context with the buffer and output function to
 * process formatted string and output the data.
 *
 * @param log_output Pointer to the log output instance.
 * @param msg Log message.
 * @param flags Optional flags.
 */
void log_dict_output_msg2_process(const struct log_output *log_output,
				  struct log_msg2 *msg, uint32_t flags);

/** @brief Process dropped messages indication for dictionary-based logging.
 *
 * Function prints error message indicating lost log messages.
 *
 * @param output Pointer to the log output instance.
 * @param cnt        Number of dropped messages.
 */
void log_dict_output_dropped_process(const struct log_output *output, uint32_t cnt);

#ifdef __cplusplus
}
#endif

#endif /* ZEPHYR_INCLUDE_LOGGING_LOG_OUTPUT_DICT_H_ */