#ifndef ATCMD_SERIALPORT_H #define ATCMD_SERIALPORT_H #include #include #include #include #include #include #ifdef _WIN32 #include using speed_t = unsigned int; #else #include #include #include #endif class SerialPort { public: // 处理接收数据函数模板 using ReceiveCallback = std::function &)>; // 打开串口设备 SerialPort(const std::string &device, int baudrate); ~SerialPort(); // 配置串口参数 void configure(int baudrate, int fd); // 发送数据 ssize_t write(const std::vector& data); ssize_t write(const std::string & data); ssize_t write(unsigned char *str,int size); // 开始接收线程 void start_receiving(const ReceiveCallback &callback); // 停止接收线程 void stop_receiving(); void close(); private: #ifdef _WIN32 HANDLE fd_ = INVALID_HANDLE_VALUE; #else int fd_ = -1; #endif std::atomic running_; std::thread receiver_thread_; // 接收数据 std::vector read(); //获取波特率 speed_t getBaudRate(int baudrate); }; #endif //ATCMD_SERIALPORT_H