Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. #ifndef MYSERIALPORT_H
  2. #define MYSERIALPORT_H
  3.  
  4. #include <QEventLoop>
  5. #include <QSerialPort>
  6.  
  7. class SerialPortThread : public QSerialPort
  8. {
  9. Q_OBJECT
  10.  
  11. QEventLoop m_loop; // for thread run
  12. public:
  13. struct Settings {
  14. QString name;
  15. qint32 baudRate;
  16. QString stringBaudRate;
  17. QSerialPort::DataBits dataBits;
  18. QString stringDataBits;
  19. QSerialPort::Parity parity;
  20. QString stringParity;
  21. QSerialPort::StopBits stopBits;
  22. QString stringStopBits;
  23. QSerialPort::FlowControl flowControl;
  24. QString stringFlowControl;
  25. };
  26.  
  27. SerialPortThread(Settings s, QObject *parent = nullptr);
  28. public slots:
  29. void start();
  30. void stop();
  31. void txMsg(QByteArray txMsg);
  32. signals:
  33. void stoped(int status);
  34. void started();
  35. void rxMsg(QByteArray rxMsg);
  36. };
  37.  
  38. #endif // MYSERIALPORT_H
  39.  
  40. #include "serialportthread.h"
  41.  
  42. SerialPortThread::SerialPortThread(Settings s, QObject *parent)
  43. : QSerialPort(s.name, parent)
  44. {
  45. setBaudRate(s.baudRate);
  46. setDataBits(s.dataBits);
  47. setParity(s.parity);
  48. setStopBits(s.stopBits);
  49. setFlowControl(s.flowControl);
  50. connect(this, &QSerialPort::readyRead, [this] {
  51. auto msg = readAll();
  52. emit rxMsg(msg);
  53. });
  54. connect(this, &Connect::stoped, [this] () { m_loop.exit(); });
  55. }
  56.  
  57. void SerialPortThread::start()
  58. {
  59. if (!open(QIODevice::ReadWrite)) {
  60. emit stoped(1); // error
  61. return;
  62. }
  63. emit started();
  64. m_loop.exec();
  65. }
  66.  
  67. void SerialPortThread::stop()
  68. {
  69. if (isOpen()) {
  70. close();
  71. }
  72. m_loop.exit();
  73. emit stoped(0);
  74. }
  75.  
  76. void SerialPortThread::txMsg(QByteArray txMsg)
  77. {
  78. m_serial->write(txMsg);
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement