#ifndef CSERIALPORT_SERIALPORT_H #define CSERIALPORT_SERIALPORT_H #include #include 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