summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/tinycan/tinycanbackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/tinycan/tinycanbackend.cpp')
-rw-r--r--src/plugins/canbus/tinycan/tinycanbackend.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/plugins/canbus/tinycan/tinycanbackend.cpp b/src/plugins/canbus/tinycan/tinycanbackend.cpp
index e882a5e..2714bc8 100644
--- a/src/plugins/canbus/tinycan/tinycanbackend.cpp
+++ b/src/plugins/canbus/tinycan/tinycanbackend.cpp
@@ -301,6 +301,7 @@ void TinyCanBackendPrivate::canWriteNotification()
} else {
message.Id = frame.frameId();
message.Flags.Flag.Len = payload.size();
+ message.Flags.Flag.Error = (frame.frameType() == QCanBusFrame::ErrorFrame);
message.Flags.Flag.RTR = (frame.frameType() == QCanBusFrame::RemoteRequestFrame);
message.Flags.Flag.TxD = 1;
message.Flags.Flag.EFF = frame.hasExtendedFrameFormat();
@@ -363,7 +364,13 @@ void TinyCanBackendPrivate::canReadNotification()
int(message.Flags.Flag.Len)));
frame.setTimeStamp(QCanBusFrame::TimeStamp(message.Time.Sec, message.Time.USec));
frame.setExtendedFrameFormat(message.Flags.Flag.EFF);
- frame.setFrameType(message.Flags.Flag.RTR ? QCanBusFrame::RemoteRequestFrame : QCanBusFrame::DataFrame);
+
+ if (message.Flags.Flag.Error)
+ frame.setFrameType(QCanBusFrame::ErrorFrame);
+ else if (message.Flags.Flag.RTR)
+ frame.setFrameType(QCanBusFrame::RemoteRequestFrame);
+ else
+ frame.setFrameType(QCanBusFrame::DataFrame);
newFrames.append(frame);
}
@@ -458,6 +465,20 @@ bool TinyCanBackend::writeFrame(const QCanBusFrame &newData)
if (state() != QCanBusDevice::ConnectedState)
return false;
+ if (newData.frameType() != QCanBusFrame::DataFrame
+ && newData.frameType() != QCanBusFrame::RemoteRequestFrame
+ && newData.frameType() != QCanBusFrame::ErrorFrame) {
+ setError(tr("Unable to write a frame with unacceptable type"),
+ QCanBusDevice::WriteError);
+ return false;
+ }
+
+ if (newData.payload().size() > 8) {
+ setError(tr("Unable to write a frame with unacceptable payload size"),
+ QCanBusDevice::WriteError);
+ return false;
+ }
+
enqueueOutgoingFrame(newData);
d->enableWriteNotification(true);