#ifndef _SR_BSP_UART_H
#define _SR_BSP_UART_H

#include "luat_uart.h"
#include "sr_config.h"

#if   0
#define BSP_UART_DATA_BIT_5     5
#define BSP_UART_DATA_BIT_6     6
#define BSP_UART_DATA_BIT_7     7
#endif
#define BSP_UART_DATA_BIT_8     8
#define BSP_UART_DATA_BIT_9     9
#define IS_UART_DATA_BIT(x)     ((x) == BSP_UART_DATA_BIT_8 || (x) == BSP_UART_DATA_BIT_9)

#define BSP_UART_PARITY_NONE     LUAT_PARITY_NONE
#define BSP_UART_PARITY_ODD      LUAT_PARITY_ODD
#define BSP_UART_PARITY_EVEN     LUAT_PARITY_EVEN
#define IS_UART_PARITY(x)       ((x) == BSP_UART_PARITY_NONE || (x) == BSP_UART_PARITY_ODD || (x) == BSP_UART_PARITY_EVEN)

  
  
#define BPS_UART_STOP_BIT_1     1
#define BPS_UART_STOP_BIT_2     2
#define BPS_UART_STOP_BIT_0_5   LUAT_0_5_STOP_BITS
#define BPS_UART_STOP_BIT_1_5   LUAT_1_5_STOP_BITS
#define IS_UART_STOP_BIT(x)     ((x) == BPS_UART_STOP_BIT_1 || (x) == BPS_UART_STOP_BIT_2 || (x) == BPS_UART_STOP_BIT_0_5 || (x) == BPS_UART_STOP_BIT_1_5)

#define BSP_UART_FC_CTSRTS      1
#define BSP_UART_FC_NONE        0
#define IS_UART_FC(x)           ((x) == BSP_UART_FC_CTSRTS || (x) == BSP_UART_FC_NONE)

#define BSP_UART_ORDER_LSB      LUAT_BIT_ORDER_LSB
#define BSP_UART_ORDER_MSB      LUAT_BIT_ORDER_MSB
#define IS_UART_ORDER(x)        ((x) == BSP_UART_ORDER_LSB || (x) == BSP_UART_ORDER_MSB)

//合宙平台没用到
#define BSP_UART_CLKS_PCLK1      SR_INVALID   //无效值
#define BSP_UART_CLKS_SYSCLK     SR_INVALID   //无效值
#define BSP_UART_CLKS_HSI        SR_INVALID   //无效值
#define BSP_UART_CLKS_LSE        SR_INVALID   //无效值

typedef enum
{
  SR_UART0 = 0,
  SR_UART1 = 1,
  SR_UART2 = 2,

} SR_UART_ID_E;

// 串口适配使用的私有数据
typedef struct BSP_UART_INFO
{
  const char *name; /*!< uart设备的名字*/

  void *trdHandle; /*!< 第三方平台使用的句柄指针*/

  int8_t srId; /*!< 朝阳使用的ID*/

} BSP_UART_INFO_T;

SR_DEVICE_T *BspUartOpen(SR_UART_ID_E uartId);
int BspUartClose(SR_DEVICE_T *dev);
int BspUartConfig(SR_DEVICE_T *dev, SR_UART_CFG_T *config);
srSSize_t BspUartRead(SR_DEVICE_T *dev, void *buffer, srSize_t size);
srSSize_t BspUartWrite(SR_DEVICE_T *dev, void *buffer, srSize_t size);
int BspUartSetCallback(SR_DEVICE_T *dev, UartEventCb cb, void *args);

int BspUartClkIoSel(SR_DEVICE_T *dev,uint32_t clk,SR_UART_IO_T *io);
#endif
