From f83587a9978bd212d7cd64a8d68330a8b97572db Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sat, 23 Feb 2019 11:18:22 +0100 Subject: 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 --- src/plugins/canbus/peakcan/peakcanbackend.cpp | 22 ++++++++++++++++++++++ src/plugins/canbus/peakcan/peakcanbackend.h | 1 + 2 files changed, 23 insertions(+) (limited to 'src/plugins/canbus/peakcan') 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 f = std::bind(&PeakCanBackend::resetController, this); setResetControllerFunction(f); + + std::function 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; }; -- cgit v1.2.3