Files
banban/ql-kernel/threadx/common/include/quec_uart.h
T

320 lines
9.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*================================================================
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_ */