diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2017-01-20 20:58:21 +0100 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2017-01-23 09:28:57 +0000 |
commit | fc4fd4634e8ed6a027658b687de8a9047f9aaab6 (patch) | |
tree | 883c7b3616c58bd1d56f15b6b22b69b601dc56a3 /src/plugins/canbus/socketcan | |
parent | 6f8cb585d14d71fe5f5281794e3b74dffd8fe3df (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.cpp | 17 |
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; } |