Typica is a free program for professional coffee roasters. https://typica.us
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dialog.cpp 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include "qextserialport.h"
  2. #include "dialog.h"
  3. #include "ui_dialog.h"
  4. #include <QtCore>
  5. Dialog::Dialog(QWidget *parent) :
  6. QDialog(parent),
  7. ui(new Ui::Dialog)
  8. {
  9. ui->setupUi(this);
  10. //! [0]
  11. #ifdef Q_OS_WIN
  12. ui->portBox->addItems(QStringList()<<"COM1"<<"COM2"<<"COM3"<<"COM4");
  13. #else
  14. ui->portBox->addItems(QStringList()<<"/dev/ttyS0"<<"/dev/ttyS1"<<"/dev/ttyUSB0"<<"/dev/ttyUSB1");
  15. #endif
  16. //make sure user can input their own port name!
  17. ui->portBox->setEditable(true);
  18. ui->baudRateBox->addItem("1200", BAUD1200);
  19. ui->baudRateBox->addItem("2400", BAUD2400);
  20. ui->baudRateBox->addItem("4800", BAUD4800);
  21. ui->baudRateBox->addItem("9600", BAUD9600);
  22. ui->baudRateBox->addItem("19200", BAUD19200);
  23. ui->baudRateBox->setCurrentIndex(3);
  24. ui->parityBox->addItem("NONE", PAR_NONE);
  25. ui->parityBox->addItem("ODD", PAR_ODD);
  26. ui->parityBox->addItem("EVEN", PAR_EVEN);
  27. ui->dataBitsBox->addItem("5", DATA_5);
  28. ui->dataBitsBox->addItem("6", DATA_6);
  29. ui->dataBitsBox->addItem("7", DATA_7);
  30. ui->dataBitsBox->addItem("8", DATA_8);
  31. ui->dataBitsBox->setCurrentIndex(3);
  32. ui->stopBitsBox->addItem("1", STOP_1);
  33. ui->stopBitsBox->addItem("2", STOP_2);
  34. ui->queryModeBox->addItem("Polling", QextSerialPort::Polling);
  35. ui->queryModeBox->addItem("EventDriven", QextSerialPort::EventDriven);
  36. //! [0]
  37. ui->led->turnOff();
  38. timer = new QTimer(this);
  39. timer->setInterval(40);
  40. //! [1]
  41. PortSettings settings = {BAUD9600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
  42. port = new QextSerialPort(ui->portBox->currentText(), settings, QextSerialPort::Polling);
  43. //! [1]
  44. connect(ui->baudRateBox, SIGNAL(currentIndexChanged(int)), SLOT(onBaudRateChanged(int)));
  45. connect(ui->parityBox, SIGNAL(currentIndexChanged(int)), SLOT(onParityChanged(int)));
  46. connect(ui->dataBitsBox, SIGNAL(currentIndexChanged(int)), SLOT(onDataBitsChanged(int)));
  47. connect(ui->stopBitsBox, SIGNAL(currentIndexChanged(int)), SLOT(onStopBitsChanged(int)));
  48. connect(ui->queryModeBox, SIGNAL(currentIndexChanged(int)), SLOT(onQueryModeChanged(int)));
  49. connect(ui->timeoutBox, SIGNAL(valueChanged(int)), SLOT(onTimeoutChanged(int)));
  50. connect(ui->portBox, SIGNAL(editTextChanged(QString)), SLOT(onPortNameChanged(QString)));
  51. connect(ui->openCloseButton, SIGNAL(clicked()), SLOT(onOpenCloseButtonClicked()));
  52. connect(ui->sendButton, SIGNAL(clicked()), SLOT(onSendButtonClicked()));
  53. connect(timer, SIGNAL(timeout()), SLOT(onReadyRead()));
  54. connect(port, SIGNAL(readyRead()), SLOT(onReadyRead()));
  55. setWindowTitle(tr("QextSerialPort Demo"));
  56. }
  57. Dialog::~Dialog()
  58. {
  59. delete ui;
  60. delete port;
  61. }
  62. void Dialog::changeEvent(QEvent *e)
  63. {
  64. QDialog::changeEvent(e);
  65. switch (e->type()) {
  66. case QEvent::LanguageChange:
  67. ui->retranslateUi(this);
  68. break;
  69. default:
  70. break;
  71. }
  72. }
  73. void Dialog::onPortNameChanged(const QString & /*name*/)
  74. {
  75. if (port->isOpen()) {
  76. port->close();
  77. ui->led->turnOff();
  78. }
  79. }
  80. //! [2]
  81. void Dialog::onBaudRateChanged(int idx)
  82. {
  83. port->setBaudRate((BaudRateType)ui->baudRateBox->itemData(idx).toInt());
  84. }
  85. void Dialog::onParityChanged(int idx)
  86. {
  87. port->setParity((ParityType)ui->parityBox->itemData(idx).toInt());
  88. }
  89. void Dialog::onDataBitsChanged(int idx)
  90. {
  91. port->setDataBits((DataBitsType)ui->dataBitsBox->itemData(idx).toInt());
  92. }
  93. void Dialog::onStopBitsChanged(int idx)
  94. {
  95. port->setStopBits((StopBitsType)ui->stopBitsBox->itemData(idx).toInt());
  96. }
  97. void Dialog::onQueryModeChanged(int idx)
  98. {
  99. port->setQueryMode((QextSerialPort::QueryMode)ui->queryModeBox->itemData(idx).toInt());
  100. }
  101. void Dialog::onTimeoutChanged(int val)
  102. {
  103. port->setTimeout(val);
  104. }
  105. //! [2]
  106. //! [3]
  107. void Dialog::onOpenCloseButtonClicked()
  108. {
  109. if (!port->isOpen()) {
  110. port->setPortName(ui->portBox->currentText());
  111. port->open(QIODevice::ReadWrite);
  112. }
  113. else {
  114. port->close();
  115. }
  116. //If using polling mode, we need a QTimer
  117. if (port->isOpen() && port->queryMode() == QextSerialPort::Polling)
  118. timer->start();
  119. else
  120. timer->stop();
  121. //update led's status
  122. ui->led->turnOn(port->isOpen());
  123. }
  124. //! [3]
  125. //! [4]
  126. void Dialog::onSendButtonClicked()
  127. {
  128. if (port->isOpen() && !ui->sendEdit->toPlainText().isEmpty())
  129. port->write(ui->sendEdit->toPlainText().toLatin1());
  130. }
  131. void Dialog::onReadyRead()
  132. {
  133. if (port->bytesAvailable()) {
  134. ui->recvEdit->moveCursor(QTextCursor::End);
  135. ui->recvEdit->insertPlainText(QString::fromLatin1(port->readAll()));
  136. }
  137. }
  138. //! [4]