#pragma once #include #include #include #include #include #include #include "logger.h" class SerialPort { public: using ReceiveCallback = std::function&)>; using ReceiveStringCallback = std::function; SerialPort(const std::string& id, const std::string& device, int baudrate, Logger& logger, int retry_interval = 5); ~SerialPort(); void start(); // 启动串口(含自动重连) void stop(); // 停止串口 bool is_open() const; bool send_data(const std::vector& data); bool send_data(const std::string& data); void set_receive_callback(ReceiveCallback cb); void set_receive_callback(ReceiveStringCallback cb); private: bool open_port(); void close_port(); void reader_loop(); void reconnect_loop(); bool configure_port(int fd); private: std::string id_; std::string device_; int baudrate_; int fd_ = -1; std::atomic running_{false}; std::atomic stop_flag_{false}; std::thread reader_thread_; std::thread reconnect_thread_; std::mutex send_mutex_; ReceiveCallback receive_callback_; Logger& logger_; int retry_interval_; };