Files
vision_sjtu_19/armor/include/CSerialPort/SerialPort.h
2026-03-28 04:50:38 +08:00

83 lines
1.8 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.

#ifndef CSERIALPORT_SERIALPORT_H
#define CSERIALPORT_SERIALPORT_H
#include <cstdint>
#include <cstring>
namespace itas109 {
enum class Parity {
ParityNone = 0,
ParityOdd = 1,
ParityEven = 2,
};
enum class DataBits {
DataBits5 = 5,
DataBits6 = 6,
DataBits7 = 7,
DataBits8 = 8,
};
enum class StopBits {
StopOne = 1,
StopOneAndHalf = 3,
StopTwo = 2,
};
enum class FlowControl {
FlowNone = 0,
FlowHardware = 1,
FlowSoftware = 2,
};
class CSerialPort {
public:
CSerialPort();
~CSerialPort();
// 初始化串口参数(不打开)
void init(const char* portName,
int baudRate = 115200,
Parity parity = Parity::ParityNone,
DataBits dataBits = DataBits::DataBits8,
StopBits stopBits = StopBits::StopOne,
FlowControl flowControl = FlowControl::FlowNone,
int readTimeoutMs = 1000);
// 打开串口,成功返回 true
bool open();
// 关闭串口
void close();
// 写数据,返回实际写入字节数(失败返回 -1
int writeData(const uint8_t* data, size_t length);
// 读数据,返回实际读取字节数(失败返回 -1
int readData(uint8_t* buffer, size_t maxLength);
// 返回最近一次错误码
int getLastError() const { return m_lastError; }
private:
char m_portName[256];
int m_baudRate;
Parity m_parity;
DataBits m_dataBits;
StopBits m_stopBits;
FlowControl m_flowControl;
int m_readTimeoutMs;
int m_fd; // 文件描述符
int m_lastError;
bool m_isOpen;
// termios 波特率映射
static int toBaudRate(int baud);
};
} // namespace itas109
#endif // CSERIALPORT_SERIALPORT_H