summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/peakcan
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2019-02-23 11:18:22 +0100
committerAndre Hartmann <aha_1980@gmx.de>2019-07-17 14:21:24 +0200
commitf83587a9978bd212d7cd64a8d68330a8b97572db (patch)
treed6f3421d7dbaf6b5b732f975dde4b2903d2e3454 /src/plugins/canbus/peakcan
parent30df8839a1d0e81580fa570b9fa7d6c4217d8b25 (diff)
Add QCanBusDevice::busStatus()
The original terminology is Error active, Error warning, Error Passive and Bus Off. We map them to GoodStatus, WarningStatus, ErrorStatus and BusOffStatus here. [ChangeLog][QCanBusDevice] Added the function busStatus() to query the CAN bus status from the CAN bus device. Fixes: QTBUG-70766 Change-Id: I22b99e2a02a6b22509005dd177796b861d536281 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/plugins/canbus/peakcan')
-rw-r--r--src/plugins/canbus/peakcan/peakcanbackend.cpp22
-rw-r--r--src/plugins/canbus/peakcan/peakcanbackend.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/canbus/peakcan/peakcanbackend.cpp b/src/plugins/canbus/peakcan/peakcanbackend.cpp
index 30d3b8c..b1a991d 100644
--- a/src/plugins/canbus/peakcan/peakcanbackend.cpp
+++ b/src/plugins/canbus/peakcan/peakcanbackend.cpp
@@ -720,6 +720,9 @@ PeakCanBackend::PeakCanBackend(const QString &name, QObject *parent)
std::function<void()> f = std::bind(&PeakCanBackend::resetController, this);
setResetControllerFunction(f);
+
+ std::function<CanBusStatus()> g = std::bind(&PeakCanBackend::busStatus, this);
+ setCanBusStatusGetter(g);
}
PeakCanBackend::~PeakCanBackend()
@@ -817,4 +820,23 @@ void PeakCanBackend::resetController()
open();
}
+QCanBusDevice::CanBusStatus PeakCanBackend::busStatus() const
+{
+ const TPCANStatus status = ::CAN_GetStatus(d_ptr->channelIndex);
+
+ switch (status & PCAN_ERROR_ANYBUSERR) {
+ case PCAN_ERROR_OK:
+ return QCanBusDevice::CanBusStatus::Good;
+ case PCAN_ERROR_BUSWARNING:
+ return QCanBusDevice::CanBusStatus::Warning;
+ case PCAN_ERROR_BUSPASSIVE:
+ return QCanBusDevice::CanBusStatus::Error;
+ case PCAN_ERROR_BUSOFF:
+ return QCanBusDevice::CanBusStatus::BusOff;
+ default:
+ qCWarning(QT_CANBUS_PLUGINS_PEAKCAN, "Unknown CAN bus status: %lu.", ulong(status));
+ return QCanBusDevice::CanBusStatus::Unknown;
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/canbus/peakcan/peakcanbackend.h b/src/plugins/canbus/peakcan/peakcanbackend.h
index 6a9cda2..a9e108e 100644
--- a/src/plugins/canbus/peakcan/peakcanbackend.h
+++ b/src/plugins/canbus/peakcan/peakcanbackend.h
@@ -73,6 +73,7 @@ public:
private:
void resetController();
+ CanBusStatus busStatus() const;
PeakCanBackendPrivate * const d_ptr;
};