320 lines
9.7 KiB
C
320 lines
9.7 KiB
C
/*================================================================
|
||
Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
|
||
Quectel Wireless Solutions Proprietary and Confidential.
|
||
=================================================================*/
|
||
#ifndef _QUEC_UART_H_
|
||
#define _QUEC_UART_H_
|
||
|
||
#include "quec_ring_buffer.h"
|
||
#include "UART.h"
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
typedef void (*uart_callback)(char port, void *para);
|
||
typedef void (*uart_callback_ex)(char port, int len, void *private);
|
||
typedef void (*uart_tx_fwctrl_callback)(char port, char flow_status);
|
||
|
||
|
||
typedef enum QUEC_UART_FLOWCTRL_ENUM
|
||
{
|
||
QUEC_FC_NONE = 0,
|
||
QUEC_FC_HW,
|
||
}QUEC_UART_FLOWCTRL_E;
|
||
|
||
typedef struct quec_uart_msg_struct {
|
||
unsigned char direction; //TX/RX
|
||
unsigned char uart_port;
|
||
unsigned int data_len;
|
||
}quec_uart_msg_t;
|
||
|
||
typedef struct quec_uart_pin_select_struct{
|
||
unsigned char ff_uart_pin_select;
|
||
unsigned char bt_uart_pin_select;
|
||
unsigned char st_uart_pin_select;
|
||
unsigned char u4_uart_pin_select;
|
||
}quec_uart_pin_select_t;
|
||
typedef struct quec_uart_data_struct
|
||
{
|
||
unsigned char uart_state;
|
||
uart_callback uart_cb;
|
||
uart_callback_ex uart_cb_ex;
|
||
uart_tx_fwctrl_callback uart_fwctrl_cb;
|
||
void *callback_private_argv;
|
||
quec_ring_buf_t *tx_rb;
|
||
quec_ring_buf_t *rx_rb;
|
||
unsigned char IsSendingStatus;
|
||
}quec_uart_data_t;
|
||
|
||
typedef enum QUEC_UART_BAUD_ENUM
|
||
{
|
||
QUEC_UART_BAUD_300 = 300,
|
||
QUEC_UART_BAUD_600 = 600,
|
||
QUEC_UART_BAUD_1200 = 1200,
|
||
QUEC_UART_BAUD_2400 = 2400,
|
||
QUEC_UART_BAUD_3600 = 3600,
|
||
QUEC_UART_BAUD_4800 = 4800,
|
||
QUEC_UART_BAUD_7200 = 7200,
|
||
QUEC_UART_BAUD_9600 = 9600,
|
||
QUEC_UART_BAUD_14400 = 14400,
|
||
QUEC_UART_BAUD_19200 = 19200,
|
||
QUEC_UART_BAUD_28800 = 28800,
|
||
QUEC_UART_BAUD_38400 = 38400,
|
||
QUEC_UART_BAUD_57600 = 57600,
|
||
QUEC_UART_BAUD_115200 = 115200,
|
||
QUEC_UART_BAUD_230400 = 230400,
|
||
QUEC_UART_BAUD_256000 = 256000,
|
||
QUEC_UART_BAUD_460800 = 460800,
|
||
QUEC_UART_BAUD_921600 = 921600,
|
||
QUEC_UART_BAUD_1000000 = 1000000,
|
||
QUEC_UART_BAUD_1500000 = 1500000,
|
||
QUEC_UART_BAUD_1842000 = 1842000,
|
||
QUEC_UART_BAUD_1843200 = 1843200,
|
||
QUEC_UART_BAUD_3000000 = 3000000,
|
||
QUEC_UART_BAUD_3686400 = 3686400,
|
||
}QUEC_UART_BAUD_E;
|
||
|
||
typedef enum
|
||
{
|
||
quec_uart_tx,
|
||
quec_uart_rx,
|
||
}Enum_quec_uart_dir;
|
||
|
||
typedef enum QUEC_UART_DATABIT_ENUM
|
||
{
|
||
QUEC_UART_DATABIT_5,
|
||
QUEC_UART_DATABIT_6,
|
||
QUEC_UART_DATABIT_7,
|
||
QUEC_UART_DATABIT_8,
|
||
}QUEC_UART_DATABIT_E;
|
||
|
||
typedef enum QUEC_UART_STOPBIT_ENUM
|
||
{
|
||
QUEC_UART_STOP_1,
|
||
QUEC_UART_STOP_2,
|
||
}QUEC_UART_STOPBIT_E;
|
||
|
||
typedef enum QUEC_UART_PARITYBIT_ENUM
|
||
{
|
||
QUEC_UART_PARITY_NONE,
|
||
QUEC_UART_PARITY_EVEN,
|
||
QUEC_UART_PARITY_ODD,
|
||
}QUEC_UART_PARITYBIT_E;
|
||
|
||
typedef struct quec_uart_config_struct
|
||
{
|
||
QUEC_UART_BAUD_E baudrate;
|
||
QUEC_UART_DATABIT_E data_bit;
|
||
QUEC_UART_STOPBIT_E stop_bit;
|
||
QUEC_UART_PARITYBIT_E parity_bit;
|
||
QUEC_UART_FLOWCTRL_E flow_ctrl;
|
||
}quec_uart_config_t;
|
||
|
||
enum
|
||
{
|
||
QUEC_UART_SUCCESS = 0,
|
||
QUEC_UART_OPEN_FAILED = -1,
|
||
QUEC_UART_ALREAD_OPEN = -2,
|
||
QUEC_UART_ONT_OPEN = -3,
|
||
QUEC_UART_ILLEGAL_PORT = -4,
|
||
QUEC_UART_RB_CFG_FAILED = -5,
|
||
QUEC_UART_DCB_PRAM_ERR = -6,
|
||
QUEC_UART_DCB_CFG_ERR = -7,
|
||
QUEC_UART_WRITE_ERR = -8,
|
||
QUEC_UART_WRITE_PRAM_ERR = -9,
|
||
QUEC_UART_WRITE_MALLOC_ERR = -10,
|
||
QUEC_UART_READ_ERR = -11,
|
||
QUEC_UART_CTS_HIGH = -12,
|
||
QUEC_UART_IS_SENDING = 1,
|
||
QUEC_UART_NOT_SENDING = 0
|
||
};
|
||
|
||
typedef enum
|
||
{
|
||
QUEC2QL_DEBUG_UART_PORT,
|
||
QUEC2QL_BT_UART_PORT,
|
||
QUEC2QL_MAIN_UART_PORT,
|
||
QUEC2QL_USB_CDC_PORT,
|
||
QUEC2QL_U4_UART_PORT,
|
||
QUEC2QL_MAX_UART_PORT,
|
||
}QUEC2QL_UART_PORT_NUMBER_E;
|
||
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_open
|
||
*
|
||
* Description: 打开对应串口
|
||
*
|
||
* Parameters: baudrate:设置波特率
|
||
* flow_ctrl:是否使能流控
|
||
* Returns: 0:打开成功
|
||
*
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
int quec_uart_open(UART_Port port, QUEC_UART_BAUD_E baudrate, QUEC_UART_FLOWCTRL_E flow_ctrl);
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_close
|
||
*
|
||
* Description: 关闭对应串口
|
||
*
|
||
* Parameters: port:要关闭的port口
|
||
*
|
||
* Returns: 0:关闭成功
|
||
* other: faile
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
int quec_uart_close(UART_Port port);
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_set_dcbconfig
|
||
*
|
||
* Description: 设置对应串口模式
|
||
*
|
||
* Parameters: port:对应的串口,cdc口无需设置
|
||
* dcb:模式对象
|
||
* Returns: 0:send_success
|
||
* other: faile
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
int quec_uart_set_dcbconfig(UART_Port port, quec_uart_config_t *dcb);
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_get_dcbconfig
|
||
*
|
||
* Description: 获取对应串口当前的模式
|
||
*
|
||
* Parameters: port:要获取模式的串口
|
||
* dcb:存方模式的内存
|
||
* Returns: 0:send_success
|
||
* other: faile
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
|
||
int quec_uart_get_dcbconfig(UART_Port port, quec_uart_config_t *dcb);
|
||
/***********************************************************************
|
||
*
|
||
* Name: quec_uart_write
|
||
*
|
||
* Description: 往外部发送数据
|
||
*
|
||
* Parameters: data:要发送的数据首地址
|
||
* len:要发送的数据长度
|
||
* Returns: 0:send_success
|
||
* other: faile
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
int quec_uart_write(UART_Port port, unsigned char *data, int len);
|
||
/***********************************************************************
|
||
*
|
||
* Name: quec_uart_read
|
||
*
|
||
* Description: 接收串口数据
|
||
*
|
||
* Parameters: data:要接收的数据存放位置首地址
|
||
* len:要接收的数据长度
|
||
* Returns: 0:send_success
|
||
* other: faile
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
int quec_uart_read(UART_Port port, unsigned char *data, int len);
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_register_cb
|
||
*
|
||
* Description: 注册接收回调不带参数
|
||
*
|
||
* Parameters: port:注册回调的串口号
|
||
* uart_cb:客户回调函数
|
||
* Returns:
|
||
*
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
void quec_uart_register_cb(UART_Port port, uart_callback uart_cb);
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_register_cb_ex
|
||
*
|
||
* Description: 注册回调函数带参
|
||
*
|
||
* Parameters: port:注册回调的串口号
|
||
* uart_cb:客户回调函数
|
||
* private :参数
|
||
* Returns:
|
||
*
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
|
||
void quec_uart_register_cb_ex(UART_Port port, uart_callback_ex uart_cb, void *private);
|
||
/***********************************************************************
|
||
*
|
||
* Name: QUEC_uart_flush_fifo
|
||
*
|
||
* Description: 清空串口fifo
|
||
*
|
||
* Parameters: port:要清空的串口fifo端口号
|
||
*
|
||
* Returns: none
|
||
*
|
||
* Notes:
|
||
*
|
||
***********************************************************************/
|
||
|
||
void quec_uart_flush_fifo(UART_Port port);
|
||
|
||
/*****************************************************************
|
||
* Function: QUEC_uart_is_sending
|
||
*
|
||
* Description:
|
||
* Return the status of the serial port is sending data or not.
|
||
*
|
||
* Parameters:
|
||
* port:
|
||
* [in] uart port.
|
||
* Return:
|
||
* FALSE, not sending.
|
||
* TRUE, is sending.
|
||
*****************************************************************/
|
||
unsigned char quec_uart_is_sending(UART_Port port);
|
||
unsigned int quec_uart_get_rx_data_len(UART_Port port);
|
||
unsigned char quec_check_uart_is_open(UART_Port port);
|
||
int quec_move_uart_buffer_to_rb(UART_Port port, unsigned char *dma_buffer, unsigned int move_len);
|
||
int quec_get_uart_rb_state(UART_Port port);
|
||
void quec_uart_send_msg(UART_Port port);
|
||
int quec_uart_read_fifo_to_rb(UART_Port port, unsigned char *data, int len);
|
||
unsigned char quec_check_uart_tx_fifo_empty(UART_Port portNumber);
|
||
int quec_uart_driver_init(void);
|
||
void quec_uart_baud_selfadatpt_enable(UART_Port port);
|
||
void quec_uart_baud_selfadatpt_disable(UART_Port port,unsigned int *bandrate);
|
||
void quec_aotu_flow_enable(UART_Port portNumber);
|
||
void quec_aotu_flow_Disable(UART_Port portNumber);
|
||
unsigned int quec_uart_get_rxrb_data_len(UART_Port port);
|
||
int quec_uart_write_sync(UART_Port port, unsigned char *data, int len);
|
||
int quec_uart_pin_set_func(UART_Port port, UINT32 PIN_NUM,unsigned int func_num);
|
||
int quec_uart_pin_get_func( UINT32 PIN_NUM);
|
||
int quec_uart_wakeup_mode_enable(UART_Port port);
|
||
int quec_uart_wakeup_mode_disable(UART_Port port);
|
||
int quec_uart_rx_dma_size_set(UART_Port port, UINT32 size);
|
||
int quec_uart_rx_dma_size_get(UART_Port port);
|
||
|
||
void quec_uart_register_TxFwctrl_cb(UART_Port port, uart_tx_fwctrl_callback uart_cb);
|
||
|
||
//STD项目用于UART的初始化
|
||
int quec_stdproj_uart_init(UART_Port port,QUEC_UART_BAUD_E baudrate, QUEC_UART_FLOWCTRL_E flow_ctrl);
|
||
|
||
#ifdef __cplusplus
|
||
} /*"C" */
|
||
#endif
|
||
|
||
#endif /* _QUEC_UART_H_ */
|
||
|
||
|