summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/tinycan
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2015-09-06 13:14:29 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2015-09-07 17:03:53 +0000
commit9a1f5954aa8cb361e5c2877762ffcade850b26da (patch)
tree7cca0fe3855b3f53996d82cb91fc2dc5574d64d4 /src/plugins/canbus/tinycan
parent8ac3bbbbad1a806d4e64a73bc5f5d49937e67868 (diff)
Handle QCBF::ErrorFrame type for the TinyCan plugin
According to the latest native API, now we can handle the QCanBusFrame::ErrorFrame. Note: Not all modules support this function and the feature should be activated. Change-Id: I536fc7c43e96379a8cb40b3dc72fa9f0dfe33399 Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/plugins/canbus/tinycan')
-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);