#ifndef DRV_UART_
#define DRV_UART_

#ifdef __cplusplus
extern "C" {
#endif

#include "drv_clk.h"
#include "drv_rcc.h"
#include "drv_dma.h"
#include "drv_gpio.h"
#include "drv_misc.h"
#include "kit_debug.h"
#include "kit_core.h"

typedef enum
{
    kUartDev_1,
    kUartDev_2,
    kUartDev_3,
	kUartDev_4,
    kUartDev_5,
    kUartDev_6,
    kUartDev_7,
    kUartDev_End,
}UartDev;


typedef enum
{
    kUartInterrupt_Rx = 0, 
    kUartInterrupt_Tx,
    kUartInterrupt_End,     
}UartInterrupt;


#define UART_CFG_DATA_LEN_8_BIT         (0x0000u)
#define UART_CFG_DATA_LEN_9_BIT         (0x0001u)
#define UART_CFG_PARITY_NONE            (0x0000u)   //无校验
#define UART_CFG_PARITY_EVEN            (0x0004u)   //偶校验
#define UART_CFG_PARITY_ODD             (0x0006u)   //奇校验
#define UART_CFG_STOP_BIT_1             (0x0000u)
#define UART_CFG_STOP_BIT_0_5           (0x0008u)
#define UART_CFG_STOP_BIT_2             (0x0010u)
#define UART_CFG_STOP_BIT_1_5           (0x0018u)

KitResult drv_uart_init(UartDev dev, uint32_t baudrate, uint32_t uart_config,  uint8_t tx_io, uint8_t rx_io);
KitResult drv_uart_set_dma(UartDev dev, bool is_rx_en, bool is_tx_en);

KitResult drv_uart_dma_async_send(UartDev dev, uint8_t *buf, uint16_t len);
KitResult drv_uart_int_async_send(UartDev dev, uint8_t *buf, uint16_t len);
KitResult drv_uart_series_sync_send(UartDev dev, uint8_t *buf, uint16_t len);
void drv_uart_ctrl_interrupt(UartDev dev, UartInterrupt it_type, bool is_enable);
KitResult drv_uart_set_interrupt(UartDev dev, UartInterrupt it_type, uint16_t priority, KitIrqCall call);

#ifdef __cplusplus
}
#endif

#endif
