summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/peakcan
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/peakcan')
-rw-r--r--src/plugins/canbus/peakcan/peakcanbackend.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/plugins/canbus/peakcan/peakcanbackend.cpp b/src/plugins/canbus/peakcan/peakcanbackend.cpp
index 6f3ebba..5460951 100644
--- a/src/plugins/canbus/peakcan/peakcanbackend.cpp
+++ b/src/plugins/canbus/peakcan/peakcanbackend.cpp
@@ -275,7 +275,6 @@ bool PeakCanBackendPrivate::open()
return false;
}
}
-#endif
const TPCANStatus err = ::CAN_SetValue(channelIndex, PCAN_RECEIVE_EVENT, &readHandle, sizeof(readHandle));
if (Q_UNLIKELY(err != PCAN_ERROR_OK)) {
@@ -283,6 +282,14 @@ bool PeakCanBackendPrivate::open()
return false;
}
+#else
+ const TPCANStatus err = ::CAN_GetValue(channelIndex, PCAN_RECEIVE_EVENT, &readHandle, sizeof(readHandle));
+ if (Q_UNLIKELY(err != PCAN_ERROR_OK)) {
+ q->setError(systemErrorString(err), QCanBusDevice::ConnectionError);
+ return false;
+ }
+#endif
+
writeNotifier = new WriteNotifier(this, q);
writeNotifier->setInterval(0);
@@ -306,7 +313,7 @@ void PeakCanBackendPrivate::close()
quint32 value = 0;
const TPCANStatus err = ::CAN_SetValue(channelIndex, PCAN_RECEIVE_EVENT, &value, sizeof(value));
if (Q_UNLIKELY(err != PCAN_ERROR_OK))
- emit q->setError(systemErrorString(err), QCanBusDevice::ConnectionError);
+ q->setError(systemErrorString(err), QCanBusDevice::ConnectionError);
const TPCANStatus st = ::CAN_Uninitialize(channelIndex);
if (Q_UNLIKELY(st != PCAN_ERROR_OK))
@@ -416,6 +423,11 @@ void PeakCanBackendPrivate::startRead()
break;
}
+ // Filter out PCAN status frames, to avoid turning them
+ // into QCanBusFrame::DataFrames with random canId
+ if (Q_UNLIKELY(message.MSGTYPE & PCAN_MESSAGE_STATUS))
+ continue;
+
QCanBusFrame frame(message.ID, QByteArray(reinterpret_cast<const char *>(message.DATA), int(message.LEN)));
const quint64 millis = timestamp.millis + Q_UINT64_C(0xFFFFFFFF) * timestamp.millis_overflow;
const quint64 micros = Q_UINT64_C(1000) * millis + timestamp.micros;