diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2015-09-06 13:14:29 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2015-09-07 17:03:53 +0000 |
commit | 9a1f5954aa8cb361e5c2877762ffcade850b26da (patch) | |
tree | 7cca0fe3855b3f53996d82cb91fc2dc5574d64d4 /src/plugins/canbus/tinycan | |
parent | 8ac3bbbbad1a806d4e64a73bc5f5d49937e67868 (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.cpp | 23 |
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); |