123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- #include "qextserialport.h"
- #include "qextserialenumerator.h"
- #include "dialog.h"
- #include "ui_dialog.h"
- #include <QtCore>
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- //! [0]
- foreach (QextPortInfo info, QextSerialEnumerator::getPorts())
- ui->portBox->addItem(info.portName);
- //make sure user can input their own port name!
- ui->portBox->setEditable(true);
- ui->baudRateBox->addItem("1200", BAUD1200);
- ui->baudRateBox->addItem("2400", BAUD2400);
- ui->baudRateBox->addItem("4800", BAUD4800);
- ui->baudRateBox->addItem("9600", BAUD9600);
- ui->baudRateBox->addItem("19200", BAUD19200);
- ui->baudRateBox->setCurrentIndex(3);
- ui->parityBox->addItem("NONE", PAR_NONE);
- ui->parityBox->addItem("ODD", PAR_ODD);
- ui->parityBox->addItem("EVEN", PAR_EVEN);
- ui->dataBitsBox->addItem("5", DATA_5);
- ui->dataBitsBox->addItem("6", DATA_6);
- ui->dataBitsBox->addItem("7", DATA_7);
- ui->dataBitsBox->addItem("8", DATA_8);
- ui->dataBitsBox->setCurrentIndex(3);
- ui->stopBitsBox->addItem("1", STOP_1);
- ui->stopBitsBox->addItem("2", STOP_2);
- ui->queryModeBox->addItem("Polling", QextSerialPort::Polling);
- ui->queryModeBox->addItem("EventDriven", QextSerialPort::EventDriven);
- //! [0]
- ui->led->turnOff();
- timer = new QTimer(this);
- timer->setInterval(40);
- //! [1]
- PortSettings settings = {BAUD9600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
- port = new QextSerialPort(ui->portBox->currentText(), settings, QextSerialPort::Polling);
- //! [1]
- enumerator = new QextSerialEnumerator(this);
- enumerator->setUpNotifications();
- connect(ui->baudRateBox, SIGNAL(currentIndexChanged(int)), SLOT(onBaudRateChanged(int)));
- connect(ui->parityBox, SIGNAL(currentIndexChanged(int)), SLOT(onParityChanged(int)));
- connect(ui->dataBitsBox, SIGNAL(currentIndexChanged(int)), SLOT(onDataBitsChanged(int)));
- connect(ui->stopBitsBox, SIGNAL(currentIndexChanged(int)), SLOT(onStopBitsChanged(int)));
- connect(ui->queryModeBox, SIGNAL(currentIndexChanged(int)), SLOT(onQueryModeChanged(int)));
- connect(ui->timeoutBox, SIGNAL(valueChanged(int)), SLOT(onTimeoutChanged(int)));
- connect(ui->portBox, SIGNAL(editTextChanged(QString)), SLOT(onPortNameChanged(QString)));
- connect(ui->openCloseButton, SIGNAL(clicked()), SLOT(onOpenCloseButtonClicked()));
- connect(ui->sendButton, SIGNAL(clicked()), SLOT(onSendButtonClicked()));
- connect(timer, SIGNAL(timeout()), SLOT(onReadyRead()));
- connect(port, SIGNAL(readyRead()), SLOT(onReadyRead()));
- connect(enumerator, SIGNAL(deviceDiscovered(QextPortInfo)), SLOT(onPortAddedOrRemoved()));
- connect(enumerator, SIGNAL(deviceRemoved(QextPortInfo)), SLOT(onPortAddedOrRemoved()));
- setWindowTitle(tr("QextSerialPort Demo"));
- }
- Dialog::~Dialog()
- {
- delete ui;
- delete port;
- }
- void Dialog::changeEvent(QEvent *e)
- {
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
- }
- void Dialog::onPortNameChanged(const QString & /*name*/)
- {
- if (port->isOpen()) {
- port->close();
- ui->led->turnOff();
- }
- }
- //! [2]
- void Dialog::onBaudRateChanged(int idx)
- {
- port->setBaudRate((BaudRateType)ui->baudRateBox->itemData(idx).toInt());
- }
- void Dialog::onParityChanged(int idx)
- {
- port->setParity((ParityType)ui->parityBox->itemData(idx).toInt());
- }
- void Dialog::onDataBitsChanged(int idx)
- {
- port->setDataBits((DataBitsType)ui->dataBitsBox->itemData(idx).toInt());
- }
- void Dialog::onStopBitsChanged(int idx)
- {
- port->setStopBits((StopBitsType)ui->stopBitsBox->itemData(idx).toInt());
- }
- void Dialog::onQueryModeChanged(int idx)
- {
- port->setQueryMode((QextSerialPort::QueryMode)ui->queryModeBox->itemData(idx).toInt());
- }
- void Dialog::onTimeoutChanged(int val)
- {
- port->setTimeout(val);
- }
- //! [2]
- //! [3]
- void Dialog::onOpenCloseButtonClicked()
- {
- if (!port->isOpen()) {
- port->setPortName(ui->portBox->currentText());
- port->open(QIODevice::ReadWrite);
- }
- else {
- port->close();
- }
- //If using polling mode, we need a QTimer
- if (port->isOpen() && port->queryMode() == QextSerialPort::Polling)
- timer->start();
- else
- timer->stop();
- //update led's status
- ui->led->turnOn(port->isOpen());
- }
- //! [3]
- //! [4]
- void Dialog::onSendButtonClicked()
- {
- if (port->isOpen() && !ui->sendEdit->toPlainText().isEmpty())
- port->write(ui->sendEdit->toPlainText().toLatin1());
- }
- void Dialog::onReadyRead()
- {
- if (port->bytesAvailable()) {
- ui->recvEdit->moveCursor(QTextCursor::End);
- ui->recvEdit->insertPlainText(QString::fromLatin1(port->readAll()));
- }
- }
- void Dialog::onPortAddedOrRemoved()
- {
- QString current = ui->portBox->currentText();
- ui->portBox->blockSignals(true);
- ui->portBox->clear();
- foreach (QextPortInfo info, QextSerialEnumerator::getPorts())
- ui->portBox->addItem(info.portName);
- ui->portBox->setCurrentIndex(ui->portBox->findText(current));
- ui->portBox->blockSignals(false);
- }
- //! [4]
|