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

/**
 * @file
 * @brief UART cases header file
 *
 * Header file for UART cases
 */

#ifndef __TEST_UART_H__
#define __TEST_UART_H__

#include <zephyr/drivers/uart.h>
#include <ztest.h>

/* RX and TX pins have to be connected together*/

#if defined(CONFIG_BOARD_NRF52840DK_NRF52840)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(uart0))
#elif defined(CONFIG_BOARD_NRF9160DK_NRF9160)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(uart1))
#elif defined(CONFIG_BOARD_ATSAMD21_XPRO)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(sercom1))
#elif defined(CONFIG_BOARD_ATSAMR21_XPRO)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(sercom3))
#elif defined(CONFIG_BOARD_ATSAME54_XPRO)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(sercom1))
#elif defined(CONFIG_BOARD_NUCLEO_F103RB) || \
	defined(CONFIG_BOARD_NUCLEO_G071RB) || \
	defined(CONFIG_BOARD_NUCLEO_G474RE) || \
	defined(CONFIG_BOARD_NUCLEO_WL55JC)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(usart1))
#elif defined(CONFIG_BOARD_NUCLEO_H723ZG) || \
	defined(CONFIG_BOARD_NUCLEO_H743ZI) || \
	defined(CONFIG_BOARD_STM32F3_DISCO)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(usart2))
#elif defined(CONFIG_BOARD_NUCLEO_L4R5ZI) || \
	defined(CONFIG_BOARD_NUCLEO_L152RE) || \
	defined(CONFIG_BOARD_STM32L562E_DK) || \
	defined(CONFIG_BOARD_NUCLEO_L552ZE_Q)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(usart3))
#elif defined(CONFIG_BOARD_DISCO_L475_IOT1)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(uart4))
#elif defined(CONFIG_BOARD_NUCLEO_F429ZI) || \
	defined(CONFIG_BOARD_NUCLEO_F207ZG)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(usart6))
#elif defined(CONFIG_BOARD_FRDM_K82F)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(lpuart0))
#elif defined(CONFIG_BOARD_MIMXRT1020_EVK) || \
	defined(CONFIG_BOARD_MIMXRT1024_EVK) || \
	defined(CONFIG_BOARD_MIMXRT1160_EVK_CM4) || \
	defined(CONFIG_BOARD_MIMXRT1170_EVK_CM4) || \
	defined(CONFIG_BOARD_MIMXRT1160_EVK_CM7) || \
	defined(CONFIG_BOARD_MIMXRT1170_EVK_CM7) || \
	defined(CONFIG_BOARD_TWR_KE18F)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(lpuart2))
#elif defined(CONFIG_BOARD_MIMXRT1050_EVK) || \
	defined(CONFIG_BOARD_MIMXRT1060_EVK) || \
	defined(CONFIG_BOARD_MIMXRT1064_EVK)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(lpuart3))
#elif defined(CONFIG_BOARD_MIMXRT1010_EVK) || \
	defined(CONFIG_BOARD_MIMXRT1015_EVK)
#define UART_DEVICE_NAME DT_LABEL(DT_NODELABEL(lpuart4))
#else
#define UART_DEVICE_NAME DT_LABEL(DT_CHOSEN(zephyr_console))
#endif

void init_test(void);

void test_single_read(void);
void test_multiple_rx_enable(void);
void test_chained_read(void);
void test_double_buffer(void);
void test_read_abort(void);
void test_write_abort(void);
void test_forever_timeout(void);
void test_long_buffers(void);
void test_chained_write(void);

void test_single_read_setup(void);
void test_multiple_rx_enable_setup(void);
void test_chained_read_setup(void);
void test_double_buffer_setup(void);
void test_read_abort_setup(void);
void test_write_abort_setup(void);
void test_forever_timeout_setup(void);
void test_long_buffers_setup(void);
void test_chained_write_setup(void);

#ifdef CONFIG_USERSPACE
void set_permissions(void);
#endif

#endif /* __TEST_UART_H__ */
