/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef SHELL_UART_H__
#define SHELL_UART_H__

#include <zephyr/drivers/serial/uart_async_rx.h>
#include <zephyr/mgmt/mcumgr/transport/smp_shell.h>
#include <zephyr/shell/shell.h>

#ifdef __cplusplus
extern "C" {
#endif

extern const struct shell_transport_api shell_uart_transport_api;

#ifndef CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE
#define CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE 0
#endif

#ifndef CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE
#define CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE 0
#endif

#ifndef CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT
#define CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT 0
#endif

#ifndef CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE
#define CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE 0
#endif

#define ASYNC_RX_BUF_SIZE (CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_COUNT * \
		(CONFIG_SHELL_BACKEND_SERIAL_ASYNC_RX_BUFFER_SIZE + \
		 UART_ASYNC_RX_BUF_OVERHEAD))

struct shell_uart_common {
	const struct device *dev;
	shell_transport_handler_t handler;
	void *context;
	bool blocking_tx;
#ifdef CONFIG_MCUMGR_TRANSPORT_SHELL
	struct smp_shell_data smp;
#endif /* CONFIG_MCUMGR_TRANSPORT_SHELL */
};

struct shell_uart_int_driven {
	struct shell_uart_common common;
	struct ring_buf tx_ringbuf;
	struct ring_buf rx_ringbuf;
	uint8_t tx_buf[CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE];
	uint8_t rx_buf[CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE];
	struct k_timer dtr_timer;
	atomic_t tx_busy;
};

struct shell_uart_async {
	struct shell_uart_common common;
	struct k_sem tx_sem;
	struct uart_async_rx async_rx;
	struct uart_async_rx_config async_rx_config;
	atomic_t pending_rx_req;
	uint8_t rx_data[ASYNC_RX_BUF_SIZE];
};

struct shell_uart_polling {
	struct shell_uart_common common;
	struct ring_buf rx_ringbuf;
	uint8_t rx_buf[CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE];
	struct k_timer rx_timer;
};

#ifdef CONFIG_SHELL_BACKEND_SERIAL_API_POLLING
#define SHELL_UART_STRUCT struct shell_uart_polling
#elif defined(CONFIG_SHELL_BACKEND_SERIAL_API_ASYNC)
#define SHELL_UART_STRUCT struct shell_uart_async
#else
#define SHELL_UART_STRUCT struct shell_uart_int_driven
#endif

/**
 * @brief Macro for creating shell UART transport instance named @p _name
 *
 * @note Additional arguments are accepted (but ignored) for compatibility with
 * previous Zephyr version, it will be removed in future release.
 */
#define SHELL_UART_DEFINE(_name, ...)                                                              \
	static SHELL_UART_STRUCT _name##_shell_uart;                                               \
	struct shell_transport _name = {                                                           \
		.api = &shell_uart_transport_api,                                                  \
		.ctx = (struct shell_telnet *)&_name##_shell_uart,                                 \
	}

/**
 * @brief This function provides pointer to the shell UART backend instance.
 *
 * Function returns pointer to the shell UART instance. This instance can be
 * next used with shell_execute_cmd function in order to test commands behavior.
 *
 * @returns Pointer to the shell instance.
 */
const struct shell *shell_backend_uart_get_ptr(void);

/**
 * @brief This function provides pointer to the smp shell data of the UART shell transport.
 *
 * @returns Pointer to the smp shell data.
 */
struct smp_shell_data *shell_uart_smp_shell_data_get_ptr(void);

#ifdef __cplusplus
}
#endif

#endif /* SHELL_UART_H__ */
