#ifndef UART_H__
#define UART_H__
/*-----------------use for RH850_D1M1A --------------------*/
#include "r_typedefs.h"

/***************************************************************/
/***************************************************************/

typedef enum
{
    UART_RLIN30 = 0U,
    UART_RLIN31,
    UART_RLIN32,
    UART_RLIN33,
    UART_RLIN_MAX,
} UART_Channel_en_t;

typedef void (*UART_Confirm)(void);
typedef void (*UART_Read_Msg)(uint16_t u16UARTData);

typedef struct
{
    uint32_t u32UARTChEn; /*通道是否使能*/
    uint32_t u32UARTbps;  /*通道实际波特率*/
    UART_Confirm pfnUARTConfirmCallBack;
    UART_Read_Msg pfnUARTReadMsgCallBack;

} UART_Channel_Config_st_t;

/****************************************************************/

extern void UART_CH0_TX_ISR(void);
extern void UART_CH1_TX_ISR(void);
extern void UART_CH2_TX_ISR(void);
extern void UART_CH3_TX_ISR(void);
extern void UART_CH0_RX_ISR(void);
extern void UART_CH1_RX_ISR(void);
extern void UART_CH2_RX_ISR(void);
extern void UART_CH3_RX_ISR(void);

extern uint8_t UART_Ch0_Get_TX_Busy_Flag(void);
extern uint8_t UART_Ch1_Get_TX_Busy_Flag(void);
extern uint8_t UART_Ch2_Get_TX_Busy_Flag(void);
extern uint8_t UART_Ch3_Get_TX_Busy_Flag(void);

extern void UART_Ch0_Send_Multiple_Byte(uint8_t *Data, uint8_t Len);
extern void UART_Ch1_Send_Multiple_Byte(uint8_t *Data, uint8_t Len);
extern void UART_Ch2_Send_Multiple_Byte(uint8_t *Data, uint8_t Len);
extern void UART_Ch3_Send_Multiple_Byte(uint8_t *Data, uint8_t Len);

/*首次上30和每次唤醒时调用*/
extern uint32_t UART_Init(UART_Channel_en_t enUARTCh, UART_Channel_Config_st_t *penUARTCfg);
/*休眠时调用*/
extern void UART_Sleep_Init(UART_Channel_en_t enUARTCh);
/******************************************************/
/******************************************************/
/******************************************************/


extern void Uart_ConfigOperationMode(void);
extern unsigned char Uart_GetRxLevel(void);
extern void Uart_ClearRxFullFlag(void);
extern void Uart_SetBaudrate(unsigned long xBaudrate_u32);
extern void Uart_SetRxGpio(void);
extern void Uart_SetTxGpio(void);
extern void Uart_EnableRx(void);
extern void Uart_DisableRx(void);
extern void TJA1021_Enable(unsigned char state);
extern void Uart_EnableTx(void);
extern void Uart_ClearAllErrorFlag(void);
extern void Uart_SetData(unsigned char xBuffer_pu8);
extern unsigned short Uart_GetData(void);
extern void Uart_DisableReceiveIsrReq(void);
extern void Uart_EnableReceiveIsrReq(void);
extern void Uart_DisableTxInterrupt(void);

#endif

