diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2020-02-16 22:21:53 +0100 |
---|---|---|
committer | Andre Hartmann <aha_1980@gmx.de> | 2024-01-07 09:19:26 +0100 |
commit | 0eab51e1e451f92fbaf0df69793cbb4137a5ece4 (patch) | |
tree | ccf8b4f06f32015b621823f6b767d4b542b608fc | |
parent | 81fc30498ed1bc9f96853926fdac211a8f180ec1 (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.cpp | 22 | ||||
-rw-r--r-- | src/serialbus/qcanbus.h | 1 | ||||
-rw-r--r-- | tests/auto/qcanbus/tst_qcanbus.cpp | 23 |
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; |