#ifndef SERIALPORTMANAGER_H #define SERIALPORTMANAGER_H #include #include class SerialPortManager : public QObject { Q_OBJECT public: explicit SerialPortManager(QObject *parent = nullptr); ~SerialPortManager(); enum ConnectionMode { Manual, Auto }; void setConnectionMode(ConnectionMode mode); void configureSerialPort(const QString &portName, int baudRate, int dataBits, int stopBits, int parity); bool connectSerialPort(); void disconnectSerialPort(); QSerialPort* getSerialPort() const; QByteArray hexStringToByteArray(const QString &hex); void sendModbusCommand(const QString &hexCommand); double receiveModbusResponse(int RESPONSE_LENGTH); double sendModbus_receive(const QString &hexCommand, int RESPONSE_LENGTH); bool sendModbus_receive_2(const QString &hexCommand, int RESPONSE_LENGTH); private: QSerialPort *serialPort; ConnectionMode connectionMode; QString portName; int baudRate; int dataBits; int stopBits; int parity; QString autoConnect(const QByteArray &command, const QByteArray &expectedResponse); bool testPort(QSerialPort &port, const QByteArray &command, const QByteArray &expectedResponse); uint16_t CRC16_Calculate(const QByteArray &data); QByteArray command = "01040000000131CA"; QByteArray expectedResponse = "010402"; }; #endif // SERIALPORTMANAGER_H