83 lines
1.8 KiB
C++
83 lines
1.8 KiB
C++
#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
|