diff options
Diffstat (limited to 'src/plugins/canbus/socketcan/socketcanbackend.cpp')
-rw-r--r-- | src/plugins/canbus/socketcan/socketcanbackend.cpp | 17 |
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); |