summaryrefslogtreecommitdiffstats
path: root/examples/serialbus
diff options
context:
space:
mode:
Diffstat (limited to 'examples/serialbus')
-rw-r--r--examples/serialbus/can/bitratebox.cpp111
-rw-r--r--examples/serialbus/can/bitratebox.h69
-rw-r--r--examples/serialbus/can/can.pro12
-rw-r--r--examples/serialbus/can/connectdialog.cpp99
-rw-r--r--examples/serialbus/can/connectdialog.h13
-rw-r--r--examples/serialbus/can/connectdialog.ui63
-rw-r--r--examples/serialbus/can/mainwindow.cpp31
-rw-r--r--examples/serialbus/can/mainwindow.h13
-rw-r--r--examples/serialbus/can/mainwindow.ui22
-rw-r--r--examples/serialbus/modbus/adueditor/mainwindow.cpp3
-rw-r--r--examples/serialbus/modbus/slave/mainwindow.cpp8
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>&amp;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>&amp;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>&amp;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}"),