summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2020-02-16 22:21:53 +0100
committerAndre Hartmann <aha_1980@gmx.de>2024-01-07 09:19:26 +0100
commit0eab51e1e451f92fbaf0df69793cbb4137a5ece4 (patch)
treeccf8b4f06f32015b621823f6b767d4b542b608fc
parent81fc30498ed1bc9f96853926fdac211a8f180ec1 (diff)
CAN: Allow querying all available devices at once
[ChangeLog][CAN Bus] The new overload QCanBus::availableDevices(QStringList *) can be used to query all available CAN interfaces in the system at once. Change-Id: I28d5292f011dcb2f78b4dad055ea36d4e3a57aee Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
-rw-r--r--src/serialbus/qcanbus.cpp22
-rw-r--r--src/serialbus/qcanbus.h1
-rw-r--r--tests/auto/qcanbus/tst_qcanbus.cpp23
3 files changed, 46 insertions, 0 deletions
diff --git a/src/serialbus/qcanbus.cpp b/src/serialbus/qcanbus.cpp
index 7811762..f8130c2 100644
--- a/src/serialbus/qcanbus.cpp
+++ b/src/serialbus/qcanbus.cpp
@@ -148,6 +148,28 @@ QList<QCanBusDeviceInfo> QCanBus::availableDevices(const QString &plugin, QStrin
}
/*!
+ \since 6.8
+ Returns the available devices for all plugins, i.e. all available CAN interfaces.
+
+ In case of failure, the optional parameter \a errorMessage returns a textual
+ error description.
+
+ \note Some plugins might not or only partially support this function.
+
+ \sa createDevice()
+*/
+QList<QCanBusDeviceInfo> QCanBus::availableDevices(QString *errorMessage) const
+{
+ const QStringList allPlugins = plugins();
+ QList<QCanBusDeviceInfo> result;
+
+ for (const QString &plugin : allPlugins)
+ result.append(availableDevices(plugin, errorMessage));
+
+ return result;
+}
+
+/*!
Creates a CAN bus device. \a plugin is the name of the plugin as returned by the \l plugins()
method. \a interfaceName is the CAN bus interface name. In case of failure, the optional
parameter \a errorMessage returns a textual error description.
diff --git a/src/serialbus/qcanbus.h b/src/serialbus/qcanbus.h
index 4e14e71..e952c68 100644
--- a/src/serialbus/qcanbus.h
+++ b/src/serialbus/qcanbus.h
@@ -20,6 +20,7 @@ public:
QStringList plugins() const;
QList<QCanBusDeviceInfo> availableDevices(const QString &plugin, QString *errorMessage = nullptr) const;
+ QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage = nullptr) const;
QCanBusDevice *createDevice(const QString &plugin,
const QString &interfaceName,
diff --git a/tests/auto/qcanbus/tst_qcanbus.cpp b/tests/auto/qcanbus/tst_qcanbus.cpp
index 2fffaf8..72af0cd 100644
--- a/tests/auto/qcanbus/tst_qcanbus.cpp
+++ b/tests/auto/qcanbus/tst_qcanbus.cpp
@@ -17,6 +17,7 @@ private slots:
void initTestCase();
void plugins();
void interfaces();
+ void allInterfaces();
void createDevice();
private:
@@ -63,6 +64,28 @@ void tst_QCanBus::interfaces()
QVERIFY(pluginList.at(0).hasFlexibleDataRate());
}
+void tst_QCanBus::allInterfaces()
+{
+ bool testCanFound = false;
+ bool virtualCanFound = false;
+ const QList<QCanBusDeviceInfo> infoList = bus->availableDevices();
+ QVERIFY(!infoList.isEmpty());
+ for (const QCanBusDeviceInfo &info : infoList) {
+ if (info.plugin() == QStringLiteral("testcan")) {
+ testCanFound = true;
+ QCOMPARE(info.name(), QStringLiteral("can0"));
+ QVERIFY(info.isVirtual());
+ QVERIFY(info.hasFlexibleDataRate());
+ } else if (info.plugin() == QStringLiteral("virtualcan")) {
+ virtualCanFound = true;
+ QVERIFY(info.isVirtual());
+ QVERIFY(info.hasFlexibleDataRate());
+ }
+ }
+ QVERIFY(testCanFound);
+ QVERIFY(virtualCanFound);
+}
+
void tst_QCanBus::createDevice()
{
QString error, error2;