summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/socketcan/socketcanbackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/socketcan/socketcanbackend.cpp')
-rw-r--r--src/plugins/canbus/socketcan/socketcanbackend.cpp17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/plugins/canbus/socketcan/socketcanbackend.cpp b/src/plugins/canbus/socketcan/socketcanbackend.cpp
index 60f36f9..8974279 100644
--- a/src/plugins/canbus/socketcan/socketcanbackend.cpp
+++ b/src/plugins/canbus/socketcan/socketcanbackend.cpp
@@ -368,7 +368,7 @@ bool SocketCanBackend::writeFrame(const QCanBusFrame &newData)
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 && payloadSize <= CANFD_MAX_DLEN)
+ if (!canFdOptionEnabled && newData.hasFlexibleDataRateFormat())
setError(tr("Sending CAN FD frame although CAN FD option not enabled."),
QCanBusDevice::WriteError);
else
@@ -378,7 +378,7 @@ bool SocketCanBackend::writeFrame(const QCanBusFrame &newData)
}
qint64 bytesWritten = 0;
- if (canFdOptionEnabled) {
+ if (newData.hasFlexibleDataRateFormat()) {
canfd_frame frame;
frame.len = newData.payload().size();
frame.can_id = canId;
@@ -594,16 +594,13 @@ void SocketCanBackend::readSocket()
if (ioctl(canSocket, SIOCGSTAMP, &timeStamp) < 0) {
setError(qt_error_string(errno),
QCanBusDevice::CanBusError::ReadError);
- timeStamp.tv_sec = 0;
- timeStamp.tv_usec = 0;
+ memset(&timeStamp, 0, sizeof(timeStamp));
}
- QCanBusFrame::TimeStamp stamp;
- stamp.setSeconds(timeStamp.tv_sec);
- stamp.setMicroSeconds(timeStamp.tv_usec);
-
+ const QCanBusFrame::TimeStamp stamp(timeStamp.tv_sec, timeStamp.tv_usec);
QCanBusFrame bufferedFrame;
bufferedFrame.setTimeStamp(stamp);
+ bufferedFrame.setFlexibleDataRateFormat(bytesReceived == CANFD_MTU);
bufferedFrame.setExtendedFrameFormat(frame.can_id & CAN_EFF_FLAG);
Q_ASSERT(frame.len <= CANFD_MAX_DLEN);
@@ -615,10 +612,10 @@ void SocketCanBackend::readSocket()
bufferedFrame.setFrameId(frame.can_id & CAN_EFF_MASK);
- QByteArray load(reinterpret_cast<char *>(frame.data), frame.len);
+ const QByteArray load(reinterpret_cast<char *>(frame.data), frame.len);
bufferedFrame.setPayload(load);
- newFrames.append(bufferedFrame);
+ newFrames.append(std::move(bufferedFrame));
}
enqueueReceivedFrames(newFrames);