/*
 * Copyright (c) 2019 Intel corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_TRACING_TRACING_FORMAT_H
#define ZEPHYR_INCLUDE_TRACING_TRACING_FORMAT_H

#include <toolchain/common.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief A structure to represent tracing data format.
 */
typedef struct tracing_data {
	uint8_t *data;
	uint32_t length;
} __packed tracing_data_t;

/**
 * @brief Macro to trace a message in string format.
 */
#define TRACING_STRING(fmt, ...)					       \
	do {								       \
		tracing_format_string(fmt, ##__VA_ARGS__);		       \
	} while (false)

/**
 * @brief Macro to format data to tracing data format.
 */
#define TRACING_FORMAT_DATA(x)						       \
	((struct tracing_data){.data = (uint8_t *)&(x), .length = sizeof((x))})

/**
 * @brief Macro to trace a message in tracing data format.
 *
 * All the parameters should be struct tracing_data.
 */
#define TRACING_DATA(...)						       \
	do {								       \
		struct tracing_data arg[] = {__VA_ARGS__};		       \
									       \
		tracing_format_data(arg, sizeof(arg) /			       \
				    sizeof(struct tracing_data));	       \
	} while (false)

/**
 * @brief Tracing a message in string format.
 *
 * @param str String to format.
 * @param ... Variable length arguments.
 */
void tracing_format_string(const char *str, ...);

/**
 * @brief Tracing a message in raw data format.
 *
 * @param data   Raw data to be traced.
 * @param length Raw data length.
 */
void tracing_format_raw_data(uint8_t *data, uint32_t length);

/**
 * @brief Tracing a message in tracing data format.
 *
 * @param tracing_data_array Tracing_data format data array to be traced.
 * @param count Tracing_data array data count.
 */
void tracing_format_data(tracing_data_t *tracing_data_array, uint32_t count);

#ifdef __cplusplus
}
#endif

#endif
