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

126 lines
3.9 KiB
C
Raw Normal View History

2025-05-13 17:49:49 +08:00
/*****************************************************************************
* @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