diff --git a/src/portcontrol.cpp b/src/portcontrol.cpp --- a/src/portcontrol.cpp +++ b/src/portcontrol.cpp @@ -31,12 +31,6 @@ #define TBPORTLIST_MINWIDTH (200) -// setting mappings -const QMap paritySettingMap({ - {QSerialPort::NoParity, "none"}, - {QSerialPort::OddParity, "odd"}, - {QSerialPort::EvenParity, "even"}, - }); PortControl::PortControl(QSerialPort* port, QWidget* parent) : QWidget(parent), @@ -88,87 +82,8 @@ PortControl::PortControl(QSerialPort* po ui->pbOpenPort->setDefaultAction(&openAction); ui->pbReloadPorts->setDefaultAction(&loadPortListAction); - // setup baud rate selection widget - QObject::connect(ui->cbBaudRate, - SELECT::OVERLOAD_OF(&QComboBox::activated), - this, &PortControl::_selectBaudRate); - - // setup parity selection buttons - parityButtons.addButton(ui->rbNoParity, (int) QSerialPort::NoParity); - parityButtons.addButton(ui->rbEvenParity, (int) QSerialPort::EvenParity); - parityButtons.addButton(ui->rbOddParity, (int) QSerialPort::OddParity); - - QObject::connect(&parityButtons, - SELECT::OVERLOAD_OF(&QButtonGroup::buttonClicked), - this, &PortControl::selectParity); - - // setup data bits selection buttons - dataBitsButtons.addButton(ui->rb8Bits, (int) QSerialPort::Data8); - dataBitsButtons.addButton(ui->rb7Bits, (int) QSerialPort::Data7); - dataBitsButtons.addButton(ui->rb6Bits, (int) QSerialPort::Data6); - dataBitsButtons.addButton(ui->rb5Bits, (int) QSerialPort::Data5); - - QObject::connect(&dataBitsButtons, - SELECT::OVERLOAD_OF(&QButtonGroup::buttonClicked), - this, &PortControl::selectDataBits); - - // setup stop bits selection buttons - stopBitsButtons.addButton(ui->rb1StopBit, (int) QSerialPort::OneStop); - stopBitsButtons.addButton(ui->rb2StopBit, (int) QSerialPort::TwoStop); - - QObject::connect(&stopBitsButtons, - SELECT::OVERLOAD_OF(&QButtonGroup::buttonClicked), - this, &PortControl::selectStopBits); - - // setup flow control selection buttons - flowControlButtons.addButton(ui->rbNoFlowControl, - (int) QSerialPort::NoFlowControl); - flowControlButtons.addButton(ui->rbHardwareControl, - (int) QSerialPort::HardwareControl); - flowControlButtons.addButton(ui->rbSoftwareControl, - (int) QSerialPort::SoftwareControl); - - QObject::connect(&flowControlButtons, - SELECT::OVERLOAD_OF(&QButtonGroup::buttonClicked), - this, &PortControl::selectFlowControl); - - // initialize signal leds - ui->ledDTR->setOn(true); - ui->ledRTS->setOn(true); - - // connect output signals - connect(ui->pbDTR, &QPushButton::clicked, [this]() - { - // toggle DTR - ui->ledDTR->toggle(); - if (serialPort->isOpen()) - { - serialPort->setDataTerminalReady(ui->ledDTR->isOn()); - } - }); - - connect(ui->pbRTS, &QPushButton::clicked, [this]() - { - // toggle RTS - ui->ledRTS->toggle(); - if (serialPort->isOpen()) - { - serialPort->setRequestToSend(ui->ledRTS->isOn()); - } - }); - - // setup pin update leds - ui->ledDCD->setColor(Qt::yellow); - ui->ledDSR->setColor(Qt::yellow); - ui->ledRI->setColor(Qt::yellow); - ui->ledCTS->setColor(Qt::yellow); - - pinUpdateTimer.setInterval(1000); // ms - connect(&pinUpdateTimer, &QTimer::timeout, this, &PortControl::updatePinLeds); loadPortList(); - loadBaudRateList(); - ui->cbBaudRate->setCurrentIndex(ui->cbBaudRate->findText("9600")); } PortControl::~PortControl() @@ -188,15 +103,6 @@ void PortControl::loadPortList() } } -void PortControl::loadBaudRateList() -{ - ui->cbBaudRate->clear(); - - for (auto baudRate : QSerialPortInfo::standardBaudRates()) - { - ui->cbBaudRate->addItem(QString::number(baudRate)); - } -} void PortControl::_selectBaudRate(QString baudRate) { @@ -209,55 +115,10 @@ void PortControl::_selectBaudRate(QStrin } } -void PortControl::selectParity(int parity) -{ - if (serialPort->isOpen()) - { - if(!serialPort->setParity((QSerialPort::Parity) parity)) - { - qCritical() << "Can't set parity option!"; - } - } -} - -void PortControl::selectDataBits(int dataBits) -{ - if (serialPort->isOpen()) - { - if(!serialPort->setDataBits((QSerialPort::DataBits) dataBits)) - { - qCritical() << "Can't set numer of data bits!"; - } - } -} - -void PortControl::selectStopBits(int stopBits) -{ - if (serialPort->isOpen()) - { - if(!serialPort->setStopBits((QSerialPort::StopBits) stopBits)) - { - qCritical() << "Can't set number of stop bits!"; - } - } -} - -void PortControl::selectFlowControl(int flowControl) -{ - if (serialPort->isOpen()) - { - if(!serialPort->setFlowControl((QSerialPort::FlowControl) flowControl)) - { - qCritical() << "Can't set flow control option!"; - } - } -} - void PortControl::togglePort() { if (serialPort->isOpen()) { - pinUpdateTimer.stop(); serialPort->close(); qDebug() << "Closed port:" << serialPort->portName(); emit portToggled(false); @@ -289,19 +150,7 @@ void PortControl::togglePort() if (serialPort->open(QIODevice::ReadWrite)) { // set port settings - _selectBaudRate(ui->cbBaudRate->currentText()); - selectParity((QSerialPort::Parity) parityButtons.checkedId()); - selectDataBits((QSerialPort::DataBits) dataBitsButtons.checkedId()); - selectStopBits((QSerialPort::StopBits) stopBitsButtons.checkedId()); - selectFlowControl((QSerialPort::FlowControl) flowControlButtons.checkedId()); - - // set output signals - serialPort->setDataTerminalReady(ui->ledDTR->isOn()); - serialPort->setRequestToSend(ui->ledRTS->isOn()); - - // update pin signals - updatePinLeds(); - pinUpdateTimer.start(); + _selectBaudRate("115200"); qDebug() << "Opened port:" << serialPort->portName(); emit portToggled(true); @@ -446,36 +295,6 @@ required privileges or device is already } } -void PortControl::updatePinLeds(void) -{ - auto pins = serialPort->pinoutSignals(); - ui->ledDCD->setOn(pins & QSerialPort::DataCarrierDetectSignal); - ui->ledDSR->setOn(pins & QSerialPort::DataSetReadySignal); - ui->ledRI->setOn(pins & QSerialPort::RingIndicatorSignal); - ui->ledCTS->setOn(pins & QSerialPort::ClearToSendSignal); -} - -QString PortControl::currentParityText() -{ - return paritySettingMap.value( - (QSerialPort::Parity) parityButtons.checkedId()); -} - -QString PortControl::currentFlowControlText() -{ - if (flowControlButtons.checkedId() == QSerialPort::HardwareControl) - { - return "hardware"; - } - else if (flowControlButtons.checkedId() == QSerialPort::SoftwareControl) - { - return "software"; - } - else // no parity - { - return "none"; - } -} void PortControl::selectPort(QString portName) { @@ -492,19 +311,6 @@ void PortControl::selectPort(QString por selectListedPort(portName); } -void PortControl::selectBaudrate(QString baudRate) -{ - int baudRateIndex = ui->cbBaudRate->findText(baudRate); - if (baudRateIndex < 0) - { - ui->cbBaudRate->setCurrentText(baudRate); - } - else - { - ui->cbBaudRate->setCurrentIndex(baudRateIndex); - } - _selectBaudRate(baudRate); -} void PortControl::openPort() { @@ -514,36 +320,10 @@ void PortControl::openPort() } } -unsigned PortControl::maxBitRate() const -{ - float baud = serialPort->baudRate(); - float dataBits = serialPort->dataBits(); - float parityBits = serialPort->parity() == QSerialPort::NoParity ? 0 : 1; - - float stopBits; - if (serialPort->stopBits() == QSerialPort::OneAndHalfStop) - { - stopBits = 1.5; - } - else - { - stopBits = serialPort->stopBits(); - } - - float frame_size = 1 /* start bit */ + dataBits + parityBits + stopBits; - - return float(baud) / frame_size; -} - void PortControl::saveSettings(QSettings* settings) { settings->beginGroup(SettingGroup_Port); settings->setValue(SG_Port_SelectedPort, selectedPortName()); - settings->setValue(SG_Port_BaudRate, ui->cbBaudRate->currentText()); - settings->setValue(SG_Port_Parity, currentParityText()); - settings->setValue(SG_Port_DataBits, dataBitsButtons.checkedId()); - settings->setValue(SG_Port_StopBits, stopBitsButtons.checkedId()); - settings->setValue(SG_Port_FlowControl, currentFlowControlText()); settings->endGroup(); } @@ -562,52 +342,5 @@ void PortControl::loadSettings(QSettings if (index > -1) ui->cbPortList->setCurrentIndex(index); } - // load baud rate setting if it exists in baud rate list - QString baudSetting = settings->value( - SG_Port_BaudRate, ui->cbBaudRate->currentText()).toString(); - int baudIndex = ui->cbBaudRate->findText(baudSetting); - if (baudIndex > -1) ui->cbBaudRate->setCurrentIndex(baudIndex); - - // load parity setting - QString parityText = - settings->value(SG_Port_Parity, currentParityText()).toString(); - QSerialPort::Parity paritySetting = paritySettingMap.key( - parityText, (QSerialPort::Parity) parityButtons.checkedId()); - parityButtons.button(paritySetting)->setChecked(true); - - // load number of bits - int dataBits = settings->value(SG_Port_DataBits, dataBitsButtons.checkedId()).toInt(); - if (dataBits >=5 && dataBits <= 8) - { - dataBitsButtons.button((QSerialPort::DataBits) dataBits)->setChecked(true); - } - - // load stop bits - int stopBits = settings->value(SG_Port_StopBits, stopBitsButtons.checkedId()).toInt(); - if (stopBits == QSerialPort::OneStop) - { - ui->rb1StopBit->setChecked(true); - } - else if (stopBits == QSerialPort::TwoStop) - { - ui->rb2StopBit->setChecked(true); - } - - // load flow control - QString flowControlSetting = - settings->value(SG_Port_FlowControl, currentFlowControlText()).toString(); - if (flowControlSetting == "hardware") - { - ui->rbHardwareControl->setChecked(true); - } - else if (flowControlSetting == "software") - { - ui->rbSoftwareControl->setChecked(true); - } - else - { - ui->rbNoFlowControl->setChecked(true); - } - settings->endGroup(); }