diff options
Diffstat (limited to 'examples/serialbus')
-rw-r--r-- | examples/serialbus/can/bitratebox.cpp | 111 | ||||
-rw-r--r-- | examples/serialbus/can/bitratebox.h | 69 | ||||
-rw-r--r-- | examples/serialbus/can/can.pro | 12 | ||||
-rw-r--r-- | examples/serialbus/can/connectdialog.cpp | 99 | ||||
-rw-r--r-- | examples/serialbus/can/connectdialog.h | 13 | ||||
-rw-r--r-- | examples/serialbus/can/connectdialog.ui | 63 | ||||
-rw-r--r-- | examples/serialbus/can/mainwindow.cpp | 31 | ||||
-rw-r--r-- | examples/serialbus/can/mainwindow.h | 13 | ||||
-rw-r--r-- | examples/serialbus/can/mainwindow.ui | 22 | ||||
-rw-r--r-- | examples/serialbus/modbus/adueditor/mainwindow.cpp | 3 | ||||
-rw-r--r-- | examples/serialbus/modbus/slave/mainwindow.cpp | 8 |
11 files changed, 333 insertions, 111 deletions
diff --git a/examples/serialbus/can/bitratebox.cpp b/examples/serialbus/can/bitratebox.cpp new file mode 100644 index 0000000..07aad9c --- /dev/null +++ b/examples/serialbus/can/bitratebox.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Andre Hartmann <aha_1980@gmx.de> +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the examples of the QtSerialBus module. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "bitratebox.h" + +#include <QLineEdit> + +BitRateBox::BitRateBox(QWidget *parent) : + QComboBox(parent), + m_customSpeedValidator(new QIntValidator(0, 1000000, this)) +{ + fillBitRates(); + + connect(this, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + this, &BitRateBox::checkCustomSpeedPolicy); +} + +BitRateBox::~BitRateBox() +{ + delete m_customSpeedValidator; +} + +int BitRateBox::bitRate() const +{ + if (currentIndex() == (count() - 1)) + return currentText().toInt(); + + return itemData(currentIndex()).toInt(); +} + +bool BitRateBox::isFlexibleDataRateEnabled() const +{ + return m_isFlexibleDataRateEnabled; +} + +void BitRateBox::setFlexibleDateRateEnabled(bool enabled) +{ + m_isFlexibleDataRateEnabled = enabled; + m_customSpeedValidator->setTop(enabled ? 10000000 : 1000000); + fillBitRates(); +} + +void BitRateBox::checkCustomSpeedPolicy(int idx) +{ + const bool isCustomSpeed = !itemData(idx).isValid(); + setEditable(isCustomSpeed); + if (isCustomSpeed) { + clearEditText(); + lineEdit()->setValidator(m_customSpeedValidator); + } +} + +void BitRateBox::fillBitRates() +{ + const QList<int> rates = { + 10000, 20000, 50000, 100000, 125000, 250000, 500000, 800000, 1000000 + }; + const QList<int> dataRates = { + 2000000, 4000000, 8000000 + }; + + clear(); + + for (int rate : rates) + addItem(QString::number(rate), rate); + + if (isFlexibleDataRateEnabled()) { + for (int rate : dataRates) + addItem(QString::number(rate), rate); + } + + addItem(tr("Custom")); + setCurrentIndex(6); // default is 500000 bits/sec +} diff --git a/examples/serialbus/can/bitratebox.h b/examples/serialbus/can/bitratebox.h new file mode 100644 index 0000000..e9df635 --- /dev/null +++ b/examples/serialbus/can/bitratebox.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Andre Hartmann <aha_1980@gmx.de> +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the examples of the QtSerialBus module. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BITRATEBOX_H +#define BITRATEBOX_H + +#include <QComboBox> + +class QIntValidator; + +class BitRateBox : public QComboBox +{ +public: + BitRateBox(QWidget *parent = nullptr); + ~BitRateBox(); + + int bitRate() const; + + bool isFlexibleDataRateEnabled() const; + void setFlexibleDateRateEnabled(bool enabled); + +private slots: + void checkCustomSpeedPolicy(int idx); + +private: + void fillBitRates(); + + int m_isFlexibleDataRateEnabled = false; + QIntValidator *m_customSpeedValidator = nullptr; +}; + +#endif // BITRATEBOX_H diff --git a/examples/serialbus/can/can.pro b/examples/serialbus/can/can.pro index aa2234f..c667dbb 100644 --- a/examples/serialbus/can/can.pro +++ b/examples/serialbus/can/can.pro @@ -3,12 +3,16 @@ QT += serialbus widgets TARGET = can TEMPLATE = app -SOURCES += main.cpp \ +SOURCES += \ + bitratebox.cpp \ + connectdialog.cpp \ + main.cpp \ mainwindow.cpp \ - connectdialog.cpp -HEADERS += mainwindow.h \ - connectdialog.h +HEADERS += \ + bitratebox.h \ + connectdialog.h \ + mainwindow.h \ FORMS += mainwindow.ui \ connectdialog.ui diff --git a/examples/serialbus/can/connectdialog.cpp b/examples/serialbus/can/connectdialog.cpp index 780f0ce..e8088e3 100644 --- a/examples/serialbus/can/connectdialog.cpp +++ b/examples/serialbus/can/connectdialog.cpp @@ -42,16 +42,13 @@ #include "ui_connectdialog.h" #include <QCanBus> -#include <QDebug> ConnectDialog::ConnectDialog(QWidget *parent) : QDialog(parent), - m_ui(new Ui::ConnectDialog), - m_customSpeedValidator(0) + m_ui(new Ui::ConnectDialog) { m_ui->setupUi(this); - m_customSpeedValidator = new QIntValidator(0, 1000000, this); m_ui->errorFilterEdit->setValidator(new QIntValidator(0, 0x1FFFFFFFU, this)); m_ui->loopbackBox->addItem(tr("unspecified"), QVariant()); @@ -65,19 +62,20 @@ ConnectDialog::ConnectDialog(QWidget *parent) : m_ui->canFdBox->addItem(tr("false"), QVariant(false)); m_ui->canFdBox->addItem(tr("true"), QVariant(true)); + m_ui->dataBitrateBox->setFlexibleDateRateEnabled(true); + connect(m_ui->okButton, &QPushButton::clicked, this, &ConnectDialog::ok); connect(m_ui->cancelButton, &QPushButton::clicked, this, &ConnectDialog::cancel); - connect(m_ui->useConfigurationBox, &QCheckBox::clicked, m_ui->configurationBox, &QGroupBox::setEnabled); - - connect(m_ui->speedBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), - this, &ConnectDialog::checkCustomSpeedPolicy); + connect(m_ui->useConfigurationBox, &QCheckBox::clicked, + m_ui->configurationBox, &QGroupBox::setEnabled); connect(m_ui->backendListBox, &QComboBox::currentTextChanged, this, &ConnectDialog::backendChanged); + connect(m_ui->interfaceListBox, &QComboBox::currentTextChanged, + this, &ConnectDialog::interfaceChanged); m_ui->rawFilterEdit->hide(); m_ui->rawFilterLabel->hide(); m_ui->backendListBox->addItems(QCanBus::instance()->plugins()); - fillSpeeds(); updateSettings(); } @@ -92,29 +90,26 @@ ConnectDialog::Settings ConnectDialog::settings() const return m_currentSettings; } -void ConnectDialog::checkCustomSpeedPolicy(int idx) +void ConnectDialog::backendChanged(const QString &backend) { - const bool isCustomSpeed = !m_ui->speedBox->itemData(idx).isValid(); - m_ui->speedBox->setEditable(isCustomSpeed); - if (isCustomSpeed) { - m_ui->speedBox->clearEditText(); - QLineEdit *edit = m_ui->speedBox->lineEdit(); - edit->setValidator(m_customSpeedValidator); - } + m_ui->interfaceListBox->clear(); + m_interfaces = QCanBus::instance()->availableDevices(backend); + for (const QCanBusDeviceInfo &info : qAsConst(m_interfaces)) + m_ui->interfaceListBox->addItem(info.name()); } -void ConnectDialog::backendChanged(const QString &backend) +void ConnectDialog::interfaceChanged(const QString &interface) { - if (backend == QStringLiteral("generic")) - m_ui->interfaceNameEdit->setPlaceholderText(QStringLiteral("can0")); - else if (backend == QStringLiteral("peakcan")) - m_ui->interfaceNameEdit->setPlaceholderText(QStringLiteral("usb0")); - else if (backend == QStringLiteral("socketcan")) - m_ui->interfaceNameEdit->setPlaceholderText(QStringLiteral("can0")); - else if (backend == QStringLiteral("tinycan")) - m_ui->interfaceNameEdit->setPlaceholderText(QStringLiteral("can0.0")); - else if (backend == QStringLiteral("vectorcan")) - m_ui->interfaceNameEdit->setPlaceholderText(QStringLiteral("can0")); + m_ui->isVirtual->setChecked(false); + m_ui->isFlexibleDataRateCapable->setChecked(false); + + for (const QCanBusDeviceInfo &info : qAsConst(m_interfaces)) { + if (info.name() == interface) { + m_ui->isVirtual->setChecked(info.isVirtual()); + m_ui->isFlexibleDataRateCapable->setChecked(info.hasFlexibleDataRate()); + break; + } + } } void ConnectDialog::ok() @@ -133,7 +128,7 @@ QString ConnectDialog::configurationValue(QCanBusDevice::ConfigurationKey key) { QVariant result; - foreach (const ConfigurationItem &item, m_currentSettings.configurations) { + for (const ConfigurationItem &item : qAsConst(m_currentSettings.configurations)) { if (item.first == key) { result = item.second; break; @@ -152,7 +147,7 @@ QString ConnectDialog::configurationValue(QCanBusDevice::ConfigurationKey key) void ConnectDialog::revertSettings() { m_ui->backendListBox->setCurrentText(m_currentSettings.backendName); - m_ui->interfaceNameEdit->setText(m_currentSettings.deviceInterfaceName); + m_ui->interfaceListBox->setCurrentText(m_currentSettings.deviceInterfaceName); m_ui->useConfigurationBox->setChecked(m_currentSettings.useConfigurationEnabled); QString value = configurationValue(QCanBusDevice::LoopbackKey); @@ -165,16 +160,19 @@ void ConnectDialog::revertSettings() m_ui->errorFilterEdit->setText(value); value = configurationValue(QCanBusDevice::BitRateKey); - m_ui->speedBox->setCurrentText(value); + m_ui->bitrateBox->setCurrentText(value); value = configurationValue(QCanBusDevice::CanFdKey); m_ui->canFdBox->setCurrentText(value); + + value = configurationValue(QCanBusDevice::DataBitRateKey); + m_ui->dataBitrateBox->setCurrentText(value); } void ConnectDialog::updateSettings() { m_currentSettings.backendName = m_ui->backendListBox->currentText(); - m_currentSettings.deviceInterfaceName = m_ui->interfaceNameEdit->text(); + m_currentSettings.deviceInterfaceName = m_ui->interfaceListBox->currentText(); m_currentSettings.useConfigurationEnabled = m_ui->useConfigurationBox->isChecked(); if (m_currentSettings.useConfigurationEnabled) { @@ -214,17 +212,9 @@ void ConnectDialog::updateSettings() } // process bitrate - bool ok = false; - int bitrate = 0; - if (m_ui->speedBox->currentIndex() == (m_ui->speedBox->count() - 1)) - bitrate = m_ui->speedBox->currentText().toInt(&ok); - else - bitrate = m_ui->speedBox->itemData(m_ui->speedBox->currentIndex()).toInt(&ok); - - if (ok && (bitrate > 0)) { - ConfigurationItem item; - item.first = QCanBusDevice::BitRateKey; - item.second = QVariant(bitrate); + const int bitrate = m_ui->bitrateBox->bitRate(); + if (bitrate > 0) { + const ConfigurationItem item(QCanBusDevice::BitRateKey, QVariant(bitrate)); m_currentSettings.configurations.append(item); } @@ -233,21 +223,12 @@ void ConnectDialog::updateSettings() fdItem.first = QCanBusDevice::CanFdKey; fdItem.second = m_ui->canFdBox->currentData(); m_currentSettings.configurations.append(fdItem); - } -} -void ConnectDialog::fillSpeeds() -{ - m_ui->speedBox->addItem(QStringLiteral("10000"), 10000); - m_ui->speedBox->addItem(QStringLiteral("20000"), 20000); - m_ui->speedBox->addItem(QStringLiteral("50000"), 50000); - m_ui->speedBox->addItem(QStringLiteral("100000"), 100000); - m_ui->speedBox->addItem(QStringLiteral("125000"), 125000); - m_ui->speedBox->addItem(QStringLiteral("250000"), 250000); - m_ui->speedBox->addItem(QStringLiteral("500000"), 500000); - m_ui->speedBox->addItem(QStringLiteral("800000"), 800000); - m_ui->speedBox->addItem(QStringLiteral("1000000"), 1000000); - m_ui->speedBox->addItem(tr("Custom")); - - m_ui->speedBox->setCurrentIndex(6); // setup 500000 bits/sec by default + // process data bitrate + const int dataBitrate = m_ui->dataBitrateBox->bitRate(); + if (dataBitrate > 0) { + const ConfigurationItem item(QCanBusDevice::DataBitRateKey, QVariant(dataBitrate)); + m_currentSettings.configurations.append(item); + } + } } diff --git a/examples/serialbus/can/connectdialog.h b/examples/serialbus/can/connectdialog.h index a392990..ba90ba6 100644 --- a/examples/serialbus/can/connectdialog.h +++ b/examples/serialbus/can/connectdialog.h @@ -42,6 +42,7 @@ #define CONNECTDIALOG_H #include <QCanBusDevice> +#include <QCanBusDeviceInfo> #include <QDialog> @@ -51,8 +52,6 @@ namespace Ui { class ConnectDialog; } -class QIntValidator; - QT_END_NAMESPACE class ConnectDialog : public QDialog @@ -66,7 +65,7 @@ public: QString backendName; QString deviceInterfaceName; QList<ConfigurationItem> configurations; - bool useConfigurationEnabled; + bool useConfigurationEnabled = false; }; explicit ConnectDialog(QWidget *parent = nullptr); @@ -75,8 +74,8 @@ public: Settings settings() const; private slots: - void checkCustomSpeedPolicy(int idx); void backendChanged(const QString &backend); + void interfaceChanged(const QString &interface); void ok(); void cancel(); @@ -84,12 +83,10 @@ private: QString configurationValue(QCanBusDevice::ConfigurationKey key); void revertSettings(); void updateSettings(); - void fillSpeeds(); -private: - Ui::ConnectDialog *m_ui; - QIntValidator *m_customSpeedValidator; + Ui::ConnectDialog *m_ui = nullptr; Settings m_currentSettings; + QList<QCanBusDeviceInfo> m_interfaces; }; #endif // CONNECTDIALOG_H diff --git a/examples/serialbus/can/connectdialog.ui b/examples/serialbus/can/connectdialog.ui index 5f35b14..aad6bef 100644 --- a/examples/serialbus/can/connectdialog.ui +++ b/examples/serialbus/can/connectdialog.ui @@ -7,14 +7,14 @@ <x>0</x> <y>0</y> <width>441</width> - <height>281</height> + <height>341</height> </rect> </property> <property name="windowTitle"> <string>Connect</string> </property> <layout class="QGridLayout" name="gridLayout_2"> - <item row="4" column="0" colspan="2"> + <item row="5" column="0" colspan="2"> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <spacer name="horizontalSpacer"> @@ -66,7 +66,7 @@ </layout> </widget> </item> - <item row="0" column="1" rowspan="4"> + <item row="0" column="1" rowspan="5"> <widget class="QGroupBox" name="configurationBox"> <property name="enabled"> <bool>false</bool> @@ -127,14 +127,14 @@ <widget class="QComboBox" name="receiveOwnBox"/> </item> <item row="4" column="0"> - <widget class="QLabel" name="speedLabel"> + <widget class="QLabel" name="bitrateLabel"> <property name="text"> - <string>Speed</string> + <string>Bitrate</string> </property> </widget> </item> <item row="4" column="1"> - <widget class="QComboBox" name="speedBox"/> + <widget class="BitRateBox" name="bitrateBox"/> </item> <item row="5" column="0"> <widget class="QLabel" name="canFdLabel"> @@ -146,6 +146,16 @@ <item row="5" column="1"> <widget class="QComboBox" name="canFdBox"/> </item> + <item row="6" column="0"> + <widget class="QLabel" name="dataBitrateLabel"> + <property name="text"> + <string>Data Bitrate</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="BitRateBox" name="dataBitrateBox"/> + </item> </layout> </widget> </item> @@ -156,20 +166,57 @@ </property> <layout class="QGridLayout" name="gridLayout_3"> <item row="0" column="0"> - <widget class="QLineEdit" name="interfaceNameEdit"/> + <widget class="QComboBox" name="interfaceListBox"> + <property name="editable"> + <bool>true</bool> + </property> + </widget> </item> </layout> </widget> </item> - <item row="3" column="0"> + <item row="4" column="0"> <widget class="QCheckBox" name="useConfigurationBox"> <property name="text"> <string>Custom configuration</string> </property> </widget> </item> + <item row="2" column="0"> + <widget class="QGroupBox" name="interfacePropertiesBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="title"> + <string>CAN interface properties</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="isFlexibleDataRateCapable"> + <property name="text"> + <string>Flexible Data Rate</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="isVirtual"> + <property name="text"> + <string>Virtual</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> </layout> </widget> + <customwidgets> + <customwidget> + <class>BitRateBox</class> + <extends>QComboBox</extends> + <header>bitratebox.h</header> + </customwidget> + </customwidgets> <resources/> <connections/> </ui> diff --git a/examples/serialbus/can/mainwindow.cpp b/examples/serialbus/can/mainwindow.cpp index 7c0925b..f950938 100644 --- a/examples/serialbus/can/mainwindow.cpp +++ b/examples/serialbus/can/mainwindow.cpp @@ -50,8 +50,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), - m_ui(new Ui::MainWindow), - m_canDevice(nullptr) + m_ui(new Ui::MainWindow) { m_ui->setupUi(this); @@ -130,7 +129,7 @@ void MainWindow::connectDevice() this, &MainWindow::framesWritten); if (p.useConfigurationEnabled) { - foreach (const ConnectDialog::ConfigurationItem &item, p.configurations) + for (const ConnectDialog::ConfigurationItem &item : p.configurations) m_canDevice->setConfigurationParameter(item.first, item.second); } @@ -185,6 +184,17 @@ void MainWindow::closeEvent(QCloseEvent *event) event->accept(); } +static QString frameFlags(const QCanBusFrame &frame) +{ + if (frame.hasBitrateSwitch() && frame.hasErrorStateIndicator()) + return QStringLiteral(" B E "); + if (frame.hasBitrateSwitch()) + return QStringLiteral(" B - "); + if (frame.hasErrorStateIndicator()) + return QStringLiteral(" - E "); + return QStringLiteral(" - - "); +} + void MainWindow::checkMessages() { if (!m_canDevice) @@ -195,7 +205,7 @@ void MainWindow::checkMessages() QString view; if (frame.frameType() == QCanBusFrame::ErrorFrame) - interpretError(view, frame); + view = m_canDevice->interpretErrorFrame(frame); else view = frame.toString(); @@ -203,7 +213,9 @@ void MainWindow::checkMessages() .arg(frame.timeStamp().seconds(), 10, 10, QLatin1Char(' ')) .arg(frame.timeStamp().microSeconds() / 100, 4, 10, QLatin1Char('0')); - m_ui->receivedMessagesEdit->append(time + view); + const QString flags = frameFlags(frame); + + m_ui->receivedMessagesEdit->append(time + flags + view); } } @@ -233,6 +245,7 @@ void MainWindow::sendMessage() const frame.setFrameId(id); frame.setExtendedFrameFormat(m_ui->effBox->checkState()); frame.setFlexibleDataRateFormat(m_ui->fdBox->checkState()); + frame.setBitrateSwitch(m_ui->bitrateSwitchBox->checkState()); if (m_ui->remoteFrame->isChecked()) frame.setFrameType(QCanBusFrame::RemoteRequestFrame); @@ -243,11 +256,3 @@ void MainWindow::sendMessage() const m_canDevice->writeFrame(frame); } - -void MainWindow::interpretError(QString &view, const QCanBusFrame &frame) -{ - if (!m_canDevice) - return; - - view = m_canDevice->interpretErrorFrame(frame); -} diff --git a/examples/serialbus/can/mainwindow.h b/examples/serialbus/can/mainwindow.h index dca2777..7e9a4ff 100644 --- a/examples/serialbus/can/mainwindow.h +++ b/examples/serialbus/can/mainwindow.h @@ -66,7 +66,7 @@ public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); -private Q_SLOTS: +private slots: void checkMessages(); void sendMessage() const; void receiveError(QCanBusDevice::CanBusError) const; @@ -75,17 +75,16 @@ private Q_SLOTS: void framesWritten(qint64); protected: - void closeEvent(QCloseEvent *event); + void closeEvent(QCloseEvent *event) override; private: void showStatusMessage(const QString &message); void initActionsConnections(); - void interpretError(QString &, const QCanBusFrame &); - Ui::MainWindow *m_ui; - QLabel *m_status; - ConnectDialog *m_connectDialog; - QCanBusDevice *m_canDevice; + Ui::MainWindow *m_ui = nullptr; + QLabel *m_status = nullptr; + ConnectDialog *m_connectDialog = nullptr; + QCanBusDevice *m_canDevice = nullptr; }; #endif // MAINWINDOW_H diff --git a/examples/serialbus/can/mainwindow.ui b/examples/serialbus/can/mainwindow.ui index 38e1157..72dc62b 100644 --- a/examples/serialbus/can/mainwindow.ui +++ b/examples/serialbus/can/mainwindow.ui @@ -40,7 +40,7 @@ </property> </widget> </item> - <item row="0" column="2" rowspan="3"> + <item row="0" column="2" rowspan="4"> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string>Frame Type</string> @@ -84,7 +84,7 @@ </property> </widget> </item> - <item row="1" column="3"> + <item row="2" column="3"> <widget class="QCheckBox" name="effBox"> <property name="toolTip"> <string>Allow extended frames with 29 bit identifier. @@ -96,21 +96,21 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> </property> </widget> </item> - <item row="2" column="3"> + <item row="3" column="3"> <widget class="QPushButton" name="sendButton"> <property name="text"> <string>&Send</string> </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QLineEdit" name="lineEdit"> <property name="placeholderText"> <string>12 34 AB CE</string> </property> </widget> </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>&Data (hex)</string> @@ -120,6 +120,14 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> </property> </widget> </item> + <item row="1" column="3"> + <widget class="QCheckBox" name="bitrateSwitchBox"> + <property name="text"> + <string>&Bitrate Switch +(Higher data rate)</string> + </property> + </widget> + </item> </layout> </item> </layout> @@ -143,7 +151,7 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> <enum>QFrame::StyledPanel</enum> </property> <property name="text"> - <string>Timestamp CAN-ID DLC Data</string> + <string>Timestamp Flags CAN-ID DLC Data</string> </property> </widget> </item> @@ -180,7 +188,7 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> <x>0</x> <y>0</y> <width>551</width> - <height>21</height> + <height>19</height> </rect> </property> <widget class="QMenu" name="menuCalls"> diff --git a/examples/serialbus/modbus/adueditor/mainwindow.cpp b/examples/serialbus/modbus/adueditor/mainwindow.cpp index 2be46d3..60a5448 100644 --- a/examples/serialbus/modbus/adueditor/mainwindow.cpp +++ b/examples/serialbus/modbus/adueditor/mainwindow.cpp @@ -70,7 +70,8 @@ MainWindow::MainWindow(QWidget *parent) setupUi(this); s_instance = this; - foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) + const auto ports = QSerialPortInfo::availablePorts(); + for (const QSerialPortInfo &info : ports) serialPortCombo->addItem(info.portName(), false); serialPortCombo->insertSeparator(serialPortCombo->count()); serialPortCombo->addItem(QStringLiteral("Add port..."), true); diff --git a/examples/serialbus/modbus/slave/mainwindow.cpp b/examples/serialbus/modbus/slave/mainwindow.cpp index 70529d1..ac8cfdd 100644 --- a/examples/serialbus/modbus/slave/mainwindow.cpp +++ b/examples/serialbus/modbus/slave/mainwindow.cpp @@ -283,7 +283,7 @@ void MainWindow::setupDeviceData() } bool ok; - foreach (QLineEdit *widget, registers) { + for (QLineEdit *widget : qAsConst(registers)) { if (widget->objectName().startsWith(QStringLiteral("inReg"))) { modbusDevice->setData(QModbusDataUnit::InputRegisters, widget->property("ID").toInt(), widget->text().toInt(&ok, 16)); @@ -301,19 +301,19 @@ void MainWindow::setupWidgetContainers() QRegularExpression regexp(QStringLiteral("coils_(?<ID>\\d+)")); const QList<QCheckBox *> coils = findChildren<QCheckBox *>(regexp); - foreach (QCheckBox *cbx, coils) + for (QCheckBox *cbx : coils) coilButtons.addButton(cbx, regexp.match(cbx->objectName()).captured("ID").toInt()); connect(&coilButtons, SIGNAL(buttonClicked(int)), this, SLOT(coilChanged(int))); regexp.setPattern(QStringLiteral("disc_(?<ID>\\d+)")); const QList<QCheckBox *> discs = findChildren<QCheckBox *>(regexp); - foreach (QCheckBox *cbx, discs) + for (QCheckBox *cbx : discs) discreteButtons.addButton(cbx, regexp.match(cbx->objectName()).captured("ID").toInt()); connect(&discreteButtons, SIGNAL(buttonClicked(int)), this, SLOT(discreteInputChanged(int))); regexp.setPattern(QLatin1String("(in|hold)Reg_(?<ID>\\d+)")); const QList<QLineEdit *> qle = findChildren<QLineEdit *>(regexp); - foreach (QLineEdit *lineEdit, qle) { + for (QLineEdit *lineEdit : qle) { registers.insert(lineEdit->objectName(), lineEdit); lineEdit->setProperty("ID", regexp.match(lineEdit->objectName()).captured("ID").toInt()); lineEdit->setValidator(new QRegExpValidator(QRegExp(QStringLiteral("[0-9a-f]{0,4}"), |