Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef MYSERIALPORT_H
- #define MYSERIALPORT_H
- #include <QEventLoop>
- #include <QSerialPort>
- class SerialPortThread : public QSerialPort
- {
- Q_OBJECT
- QEventLoop m_loop; // for thread run
- public:
- struct Settings {
- QString name;
- qint32 baudRate;
- QString stringBaudRate;
- QSerialPort::DataBits dataBits;
- QString stringDataBits;
- QSerialPort::Parity parity;
- QString stringParity;
- QSerialPort::StopBits stopBits;
- QString stringStopBits;
- QSerialPort::FlowControl flowControl;
- QString stringFlowControl;
- };
- SerialPortThread(Settings s, QObject *parent = nullptr);
- public slots:
- void start();
- void stop();
- void txMsg(QByteArray txMsg);
- signals:
- void stoped(int status);
- void started();
- void rxMsg(QByteArray rxMsg);
- };
- #endif // MYSERIALPORT_H
- #include "serialportthread.h"
- SerialPortThread::SerialPortThread(Settings s, QObject *parent)
- : QSerialPort(s.name, parent)
- {
- setBaudRate(s.baudRate);
- setDataBits(s.dataBits);
- setParity(s.parity);
- setStopBits(s.stopBits);
- setFlowControl(s.flowControl);
- connect(this, &QSerialPort::readyRead, [this] {
- auto msg = readAll();
- emit rxMsg(msg);
- });
- connect(this, &Connect::stoped, [this] () { m_loop.exit(); });
- }
- void SerialPortThread::start()
- {
- if (!open(QIODevice::ReadWrite)) {
- emit stoped(1); // error
- return;
- }
- emit started();
- m_loop.exec();
- }
- void SerialPortThread::stop()
- {
- if (isOpen()) {
- close();
- }
- m_loop.exit();
- emit stoped(0);
- }
- void SerialPortThread::txMsg(QByteArray txMsg)
- {
- m_serial->write(txMsg);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement