forked from gary/ems
2
0
Fork 0
sun_ems/ems_c/driver/drv_uart.h

126 lines
3.9 KiB
C
Raw Permalink 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 2024-2024, . POWER SUPPLY CO., LTD.
* @file drv_uart.h
* @brief 串口底层驱动程序
* @author Gary
* @date 2024/09/02
* @remark 初修订
*****************************************************************************/
#ifndef DRY_UART_H
#define DRY_UART_H
#include <stdint.h>
#include <pthread.h>
#include <unistd.h>
#include "drv_comm.h"
#include "bsp_rtdb.h"
// 波特率
typedef enum
{
kUart_Baud_Start = 0,
kUart_Baud_115200 = kUart_Baud_Start,
kUart_Baud_57600,
kUart_Baud_38400,
kUart_Baud_19200,
kUart_Baud_9600,
kUart_Baud_4800,
kUart_Baud_2400,
kUart_Baud_1800,
kUart_Baud_1200,
kUart_Baud_600,
kUart_Baud_300,
kUart_Baud_200,
kUart_Baud_150,
kUart_Baud_End
} uart_baud_e;
// 校验位
typedef enum
{
kUart_Parity_Start = 0,
kUart_Parity_None = kUart_Parity_Start,
kUart_Parity_Odd,
kUart_Parity_Even,
kUart_Parity_Mark,
kUart_Parity_Space,
kUart_Parity_End
} uart_parity_e;
// 停止位
typedef enum
{
kUart_Stop_Start = 0,
kUart_Stop_1 = kUart_Stop_Start,
kUart_Stop_2,
kUart_Stop_End
} uart_stop_e;
// 数据位
typedef enum
{
kUart_Data_Start = 0,
kUart_Data_5 = kUart_Data_Start,
kUart_Data_6,
kUart_Data_7,
kUart_Data_8,
kUart_Data_End
} uart_data_e;
// 流控制
typedef enum
{
kUart_Flow_Start = 0,
kUart_Flow_Disable = kUart_Flow_Start,
kUart_Flow_Hardware_Enable,
kUart_Flow_Software_Enable,
kUart_Flow_End
} uart_flow_e;
// 串口驱动结构体
typedef struct
{
int32_t fd; // 串口对应的标识符
uint8_t uartId; // COM口对应序号
uint8_t address[MAX_UART_ADDR_LEN]; // 通道驱动地址
uint16_t uId; // 设备序号
conn_status_e status; // 连接状态 0离线 1在线
uart_data_e data; // 数据位
uart_stop_e stop; // 停止位
uart_baud_e baud; // 波特率
uart_parity_e parity; // 校验位
uart_flow_e flow; // 流控制
uint16_t timeout; // 超时时间(milisecond)
uint16_t error_cnt; // 超时次数
uint32_t send_len; // 发送的数据长度
uint32_t recv_len; // 接收的数据长度
uint8_t send_buf[MAX_UART_DATA_LEN]; // 发送数据buffer数组
uint8_t recv_buf[MAX_UART_DATA_LEN]; // 接收数据buffer数组
} uart_lib_t;
/*****************************************************************************
* @brief 打开串口驱动
* @param[in] p_uart: 串口驱动结构体指针
* @return 0-成功 1-失败
*****************************************************************************/
int32_t drvUartOpen(uart_lib_t* p_uart);
/*****************************************************************************
* @brief 关闭串口驱动
* @param[in] p_uart: 串口驱动结构体指针
* @return 0-成功 1-失败
*****************************************************************************/
int32_t drvUartClose(uart_lib_t* p_uart);
/*****************************************************************************
* @brief 串口驱动发送
* @param[in] p_uart: 串口驱动结构体指针
* @return 0-成功 1-失败
*****************************************************************************/
int32_t drvUartSend(uart_lib_t* p_uart);
/*****************************************************************************
* @brief 串口驱动接收
* @param[in] p_uart: 串口驱动结构体指针
* @return 0-成功 1-失败
*****************************************************************************/
int32_t drvUartRecv(uart_lib_t* p_uart);
#endif