#ifndef _SR_BSP_UART_H
#define _SR_BSP_UART_H

#include "sr_config.h"
//#include "sr_uart.h"

//stm32头文件
#include "stm32f4xx.h"

//配置参数枚举直接赋值为原厂值，省去参数转换
#define BSP_UART_DATA_BIT_5         SR_INVALID   //无效值
#define	BSP_UART_DATA_BIT_6         SR_INVALID   //无效值
#define BSP_UART_DATA_BIT_7         SR_INVALID   //无效值
#define BSP_UART_DATA_BIT_8         UART_WORDLENGTH_8B
#define	BSP_UART_DATA_BIT_9         UART_WORDLENGTH_9B

#define BSP_UART_PARITY_NONE        UART_PARITY_NONE
#define BSP_UART_PARITY_ODD         UART_PARITY_ODD
#define BSP_UART_PARITY_EVEN        UART_PARITY_EVEN

#define BPS_UART_STOP_BIT_1         UART_STOPBITS_1
#define BPS_UART_STOP_BIT_2         UART_STOPBITS_2
#define BPS_UART_STOP_BIT_0_5       SR_INVALID   //无效值
#define BPS_UART_STOP_BIT_1_5       SR_INVALID   //无效值


#define	BSP_UART_FC_NONE            UART_HWCONTROL_NONE
#define	BSP_UART_FC_CTSRTS          UART_HWCONTROL_RTS_CTS

#define BSP_UART_ORDER_LSB          SR_INVALID   //无效值
#define BSP_UART_ORDER_MSB          SR_INVALID   //无效值

//F4系列没用到
#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   //无效值

/**
 * @brief 朝阳应用使用的UART的ID号
 */
typedef enum
{
  SR_UART1 = 1,
  SR_UART2 = 2,
	SR_UART4 = 4,

} SR_UART_ID_E;


/**
 * @brief UART设备信息结构体
 */
typedef struct BSP_UART_INFO
{
  const char *name;  /*!< uart设备的名字*/

  void *trdHandle;   /*!< 第三方平台使用的句柄指针*/
  
	USART_TypeDef  *instance;  /*!< ST平台HAL库变量，对应UART寄存器地址*/
  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
