From d4bbdb83b26f8219b6c64bcff3967aa15db07d9c Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Wed, 11 Jan 2017 22:03:34 +0100 Subject: CAN: Introduce CAN FD Bitrate Switch (BRS) QCanBusFrame: Added hasBitrateSwitch and setBitrateSwitch to QCanBusFrame and therefore, increased the QCanBusFrame version number. * Setting QCanBusFrame::setBitrateSwitch(true) also sets QCanBusFrame::setFlexibleDataRateFormat(true) * Setting QCanBusFrame::setFlexibleDataRateFormat(false) also sets QCanBusFrame::setBitrateSwitch(false) QCanBusDevice: Reference implementation and documentation are done for the SocketCAN plugin. The CAN Example allows to send frames with Bitrate Switch enabled and visualize received frames with Bitrate Switch set. Unfortunately, the SocketCAN plugin does not allow to change any bitrate yet, so the newly added data bitrate selection box in ConnectDialog seems a bit useless. This box is however needed once other plugins become CAN FD capable and implement bitrate switching. [ChangeLog][QCanBusFrame] Introduced flag to allow data bitrate switching for CAN FD frames. Reference implementation is done for the SocketCAN plugin. Task-number: QTBUG-56720 Change-Id: Ieab04020f4750c8b0085624d2250ad7cd982cd96 Reviewed-by: Rolf Eike Beer Reviewed-by: Alex Blasche --- examples/serialbus/can/connectdialog.cpp | 12 ++++++++++++ examples/serialbus/can/connectdialog.ui | 10 ++++++++++ examples/serialbus/can/mainwindow.cpp | 6 +++++- examples/serialbus/can/mainwindow.ui | 22 +++++++++++++++------- 4 files changed, 42 insertions(+), 8 deletions(-) (limited to 'examples') diff --git a/examples/serialbus/can/connectdialog.cpp b/examples/serialbus/can/connectdialog.cpp index 5d9e33d..920aeef 100644 --- a/examples/serialbus/can/connectdialog.cpp +++ b/examples/serialbus/can/connectdialog.cpp @@ -62,6 +62,8 @@ 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, @@ -162,6 +164,9 @@ void ConnectDialog::revertSettings() value = configurationValue(QCanBusDevice::CanFdKey); m_ui->canFdBox->setCurrentText(value); + + value = configurationValue(QCanBusDevice::DataBitRateKey); + m_ui->dataBitrateBox->setCurrentText(value); } void ConnectDialog::updateSettings() @@ -218,5 +223,12 @@ void ConnectDialog::updateSettings() fdItem.first = QCanBusDevice::CanFdKey; fdItem.second = m_ui->canFdBox->currentData(); m_currentSettings.configurations.append(fdItem); + + // 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.ui b/examples/serialbus/can/connectdialog.ui index 345ff64..aad6bef 100644 --- a/examples/serialbus/can/connectdialog.ui +++ b/examples/serialbus/can/connectdialog.ui @@ -146,6 +146,16 @@ + + + + Data Bitrate + + + + + + diff --git a/examples/serialbus/can/mainwindow.cpp b/examples/serialbus/can/mainwindow.cpp index 2e75037..b27baaa 100644 --- a/examples/serialbus/can/mainwindow.cpp +++ b/examples/serialbus/can/mainwindow.cpp @@ -202,7 +202,10 @@ 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 = frame.hasBitrateSwitch() + ? QStringLiteral(" B - ") : QStringLiteral(" - - "); + + m_ui->receivedMessagesEdit->append(time + flags + view); } } @@ -232,6 +235,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); 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 @@ - + Frame Type @@ -84,7 +84,7 @@ - + Allow extended frames with 29 bit identifier. @@ -96,21 +96,21 @@ Otherwise, the standard format with 11 bit idenfier is used. - + &Send - + 12 34 AB CE - + &Data (hex) @@ -120,6 +120,14 @@ Otherwise, the standard format with 11 bit idenfier is used. + + + + &Bitrate Switch +(Higher data rate) + + + @@ -143,7 +151,7 @@ Otherwise, the standard format with 11 bit idenfier is used. QFrame::StyledPanel - Timestamp CAN-ID DLC Data + Timestamp Flags CAN-ID DLC Data @@ -180,7 +188,7 @@ Otherwise, the standard format with 11 bit idenfier is used. 0 0 551 - 21 + 19 -- cgit v1.2.3