summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/socketcan
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2017-01-20 20:58:21 +0100
committerAndré Hartmann <aha_1980@gmx.de>2017-01-23 09:28:57 +0000
commitfc4fd4634e8ed6a027658b687de8a9047f9aaab6 (patch)
tree883c7b3616c58bd1d56f15b6b22b69b601dc56a3 /src/plugins/canbus/socketcan
parent6f8cb585d14d71fe5f5281794e3b74dffd8fe3df (diff)
SocketCAN: Fix frame write error handling
Part I If ConfigurationParameter::CanFdKey is not set, the SocketCAN driver is not forced to CAN FD mode. Therefore, writing CAN FD frames fails, even if the bus (virtual or real) is CAN FD capable. The existing error handling code already checked this, but only if the CAN FD frame payload was longer than eight data bytes. Now the error message also appears when trying to write CAN FD frames with payload size 0...8. Part II In line 348, QCanBusFrame::isValid() is called. This function returns false if the payload size exceeds the frame's maximum payload length. The function SocketCanBackend::writeFrame then early returns with false. The maximum size error handling code is therefore no longer reached and can be removed. Change-Id: I9962a90fabd0678fe9040166b7c19946fbf6fd78 Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Rolf Eike Beer <eb@emlix.com>
Diffstat (limited to 'src/plugins/canbus/socketcan')
-rw-r--r--src/plugins/canbus/socketcan/socketcanbackend.cpp17
1 files changed, 4 insertions, 13 deletions
diff --git a/src/plugins/canbus/socketcan/socketcanbackend.cpp b/src/plugins/canbus/socketcan/socketcanbackend.cpp
index 3226e0e..ffe9e20 100644
--- a/src/plugins/canbus/socketcan/socketcanbackend.cpp
+++ b/src/plugins/canbus/socketcan/socketcanbackend.cpp
@@ -361,19 +361,10 @@ bool SocketCanBackend::writeFrame(const QCanBusFrame &newData)
canId |= CAN_ERR_FLAG;
}
-
- int payloadSize = newData.payload().size();
- if ((!canFdOptionEnabled && payloadSize > CAN_MAX_DLEN)
- || (canFdOptionEnabled && payloadSize > CANFD_MAX_DLEN)) {
- qWarning() << QString("payload (%1 bytes) is too large for chosen frame size of "
- "maximal %2 bytes. Frame is discarded.").
- arg(payloadSize).arg(canFdOptionEnabled ? CANFD_MAX_DLEN : CAN_MAX_DLEN);
- if (!canFdOptionEnabled && newData.hasFlexibleDataRateFormat())
- setError(tr("Sending CAN FD frame although CAN FD option not enabled."),
- QCanBusDevice::WriteError);
- else
- setError(tr("Frame payload exceeds maximum CAN frame payload length."),
- QCanBusDevice::WriteError);
+ if (Q_UNLIKELY(!canFdOptionEnabled && newData.hasFlexibleDataRateFormat())) {
+ const QString error = tr("Sending CAN FD frame although CAN FD option not enabled.");
+ qDebug("%ls", qUtf16Printable(error));
+ setError(error, QCanBusDevice::WriteError);
return false;
}