summaryrefslogtreecommitdiffstats
path: root/src/tools/canbusutil/canbusutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/canbusutil/canbusutil.cpp')
-rw-r--r--src/tools/canbusutil/canbusutil.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/tools/canbusutil/canbusutil.cpp b/src/tools/canbusutil/canbusutil.cpp
index d614583..2e7c15f 100644
--- a/src/tools/canbusutil/canbusutil.cpp
+++ b/src/tools/canbusutil/canbusutil.cpp
@@ -50,6 +50,11 @@ void CanBusUtil::setShowTimeStamp(bool showTimeStamp)
m_readTask->setShowTimeStamp(showTimeStamp);
}
+void CanBusUtil::setShowFdFlags(bool showFdFlags)
+{
+ m_readTask->setShowFdFlags(showFdFlags);
+}
+
bool CanBusUtil::start(const QString &pluginName, const QString &deviceName, const QString &data)
{
if (!m_canBus) {
@@ -66,6 +71,8 @@ bool CanBusUtil::start(const QString &pluginName, const QString &deviceName, con
return false;
if (m_listening) {
+ if (m_readTask->isShowFdFlags())
+ m_canDevice->setConfigurationParameter(QCanBusDevice::CanFdKey, true);
connect(m_canDevice.data(), &QCanBusDevice::framesReceived, m_readTask, &ReadTask::checkMessages);
} else {
if (!sendData())
@@ -128,17 +135,25 @@ bool CanBusUtil::setFrameFromPayload(QString payload, QCanBusFrame *frame)
payload = payload.mid(1);
}
- if (payload.size() % 2 != 0) {
- m_output << "Data field invalid: Size is not multiple of two." << endl;
- return false;
- }
-
const QRegularExpression re(QStringLiteral("^[0-9A-Fa-f]*$"));
if (!re.match(payload).hasMatch()) {
m_output << "Data field invalid: Only hex numbers allowed." << endl;
return false;
}
+ if (payload.size() % 2 != 0) {
+ if (frame->hasFlexibleDataRateFormat()) {
+ enum { BitrateSwitchFlag = 1, ErrorStateIndicatorFlag = 2 };
+ const int flags = payload.left(1).toInt(nullptr, 16);
+ frame->setBitrateSwitch(flags & BitrateSwitchFlag);
+ frame->setErrorStateIndicator(flags & ErrorStateIndicatorFlag);
+ payload.remove(0, 1);
+ } else {
+ m_output << "Data field invalid: Size is not multiple of two." << endl;
+ return false;
+ }
+ }
+
QByteArray bytes = QByteArray::fromHex(payload.toLatin1());
const int maxSize = frame->hasFlexibleDataRateFormat() ? 64 : 8;