#ifndef SERIALPROTOCOL_H #define SERIALPROTOCOL_H #include #include #include #include #include #include "ProtocolCommon.h" #include #include /** * @brief 串口协议封装类 * 提供串口通信、协议解析、机械臂坐标发送等功能 */ class SerialProtocol : public QObject { Q_OBJECT public: /** * @brief 串口连接状态枚举(使用公共状态定义) */ using SerialStatus = ConnectionStatus; public: SerialProtocol(QObject* parent = nullptr); ~SerialProtocol(); /** * @brief 打开串口连接 * @param portName 串口名称(如COM1, /dev/ttyUSB0等) * @param baudRate 波特率 * @param dataBits 数据位 (5, 6, 7, 8) * @param stopBits 停止位 (1, 2) * @param parity 校验位 (0-无校验, 1-奇校验, 2-偶校验) * @param flowControl 流控制 (0-无, 1-硬件, 2-软件) * @return 0-成功,其他-错误码 */ int OpenSerial(const std::string& portName, int baudRate = 9600, int dataBits = 8, int stopBits = 1, int parity = 0, int flowControl = 0); /** * @brief 关闭串口连接 */ void CloseSerial(); /** * @brief 发送多目标检测结果数据 * 协议格式:$,DATA,NUM,posX,posY,posZ,posC,posX,posY,posZ,posC...,# * @param multiTargetData 多目标数据结构 * @param cameraId 相机ID(从1开始编号) * @return 0-成功,其他-错误码 */ int SendMultiTargetData(const MultiTargetData& multiTargetData, uint16_t cameraId); /** * @brief 获取当前串口连接状态 * @return 当前状态 */ SerialStatus GetSerialStatus() const; /** * @brief 设置连接状态回调 * @param callback 回调函数 */ void SetConnectionCallback(const ConnectionCallback& callback); /** * @brief 设置工作信号回调 * @param callback 回调函数 */ void SetWorkSignalCallback(const WorkSignalCallback& callback); /** * @brief 获取串口是否已打开 * @return true-已打开,false-未打开 */ bool IsOpen() const; private slots: /** * @brief 串口数据接收槽函数 */ void OnSerialDataReceived(); /** * @brief 串口错误处理槽函数 * @param error 错误类型 */ void OnSerialError(QSerialPort::SerialPortError error); private: /** * @brief 解析接收到的协议数据 * @param data 接收到的数据 */ void ParseProtocolData(const QString& data); /** * @brief 发送数据到串口 * @param data 要发送的数据 * @return 0-成功,其他-错误码 */ int SendData(const std::string& data); /** * @brief 构造数据协议字符串 * @param multiTargetData 多目标数据 * @param cameraId 相机ID * @return 协议字符串 */ std::string BuildDataProtocol(const MultiTargetData& multiTargetData, uint16_t cameraId); private: QSerialPort* m_pSerialPort; // 串口对象 SerialStatus m_serialStatus; // 串口状态 QString m_receiveBuffer; // 接收缓冲区 // 回调函数 ConnectionCallback m_connectionCallback; // 连接状态回调 WorkSignalCallback m_workSignalCallback; // 工作信号回调 // 协议常量 static const QString PROTOCOL_START; // 协议开始标识 "$" static const QString PROTOCOL_END; // 协议结束标识 "#" static const QString CMD_START; // 开始命令 "START" static const QString CMD_DATA; // 数据命令 "DATA" static const QString SEPARATOR; // 分隔符 "," }; #endif // SERIALPROTOCOL_H