summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/canbus/peakcan/main.cpp5
-rw-r--r--src/plugins/canbus/socketcan/main.cpp5
-rw-r--r--src/plugins/canbus/systeccan/main.cpp4
-rw-r--r--src/plugins/canbus/tinycan/main.cpp5
-rw-r--r--src/plugins/canbus/vectorcan/main.cpp4
-rw-r--r--src/serialbus/doc/src/qtcanbus-backends.qdoc2
-rw-r--r--src/serialbus/qcanbus.cpp35
-rw-r--r--src/serialbus/qcanbusfactory.cpp45
-rw-r--r--src/serialbus/qcanbusfactory.h14
-rw-r--r--tests/auto/plugins/genericcanbus/main.cpp4
10 files changed, 91 insertions, 32 deletions
diff --git a/src/plugins/canbus/peakcan/main.cpp b/src/plugins/canbus/peakcan/main.cpp
index 453124b..0c1483d 100644
--- a/src/plugins/canbus/peakcan/main.cpp
+++ b/src/plugins/canbus/peakcan/main.cpp
@@ -43,12 +43,11 @@
QT_BEGIN_NAMESPACE
-class PeakCanBusPlugin : public QObject, public QCanBusFactory
+class PeakCanBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
- Q_INTERFACES(QCanBusFactory)
-
+ Q_INTERFACES(QCanBusFactoryV2)
public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override
diff --git a/src/plugins/canbus/socketcan/main.cpp b/src/plugins/canbus/socketcan/main.cpp
index d1e9115..8a44c5e 100644
--- a/src/plugins/canbus/socketcan/main.cpp
+++ b/src/plugins/canbus/socketcan/main.cpp
@@ -45,12 +45,11 @@
QT_BEGIN_NAMESPACE
//! [SocketCanFactory]
-class SocketCanBusPlugin : public QObject, public QCanBusFactory
+class SocketCanBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
- Q_INTERFACES(QCanBusFactory)
-
+ Q_INTERFACES(QCanBusFactoryV2)
public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override
diff --git a/src/plugins/canbus/systeccan/main.cpp b/src/plugins/canbus/systeccan/main.cpp
index d81072d..fcb76a3 100644
--- a/src/plugins/canbus/systeccan/main.cpp
+++ b/src/plugins/canbus/systeccan/main.cpp
@@ -42,11 +42,11 @@
QT_BEGIN_NAMESPACE
-class SystecCanBusPlugin : public QObject, public QCanBusFactory
+class SystecCanBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
- Q_INTERFACES(QCanBusFactory)
+ Q_INTERFACES(QCanBusFactoryV2)
public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override
diff --git a/src/plugins/canbus/tinycan/main.cpp b/src/plugins/canbus/tinycan/main.cpp
index 55c5590..d3fa070 100644
--- a/src/plugins/canbus/tinycan/main.cpp
+++ b/src/plugins/canbus/tinycan/main.cpp
@@ -43,12 +43,11 @@
QT_BEGIN_NAMESPACE
-class TinyCanBusPlugin : public QObject, public QCanBusFactory
+class TinyCanBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
- Q_INTERFACES(QCanBusFactory)
-
+ Q_INTERFACES(QCanBusFactoryV2)
public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override
diff --git a/src/plugins/canbus/vectorcan/main.cpp b/src/plugins/canbus/vectorcan/main.cpp
index 4827c53..1d6844f 100644
--- a/src/plugins/canbus/vectorcan/main.cpp
+++ b/src/plugins/canbus/vectorcan/main.cpp
@@ -42,11 +42,11 @@
QT_BEGIN_NAMESPACE
-class VectorCanBusPlugin : public QObject, public QCanBusFactory
+class VectorCanBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
- Q_INTERFACES(QCanBusFactory)
+ Q_INTERFACES(QCanBusFactoryV2)
public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override
diff --git a/src/serialbus/doc/src/qtcanbus-backends.qdoc b/src/serialbus/doc/src/qtcanbus-backends.qdoc
index 522c6f2..c04cdd1 100644
--- a/src/serialbus/doc/src/qtcanbus-backends.qdoc
+++ b/src/serialbus/doc/src/qtcanbus-backends.qdoc
@@ -95,7 +95,7 @@
\endcode
This key must be passed to \l {QCanBus::createDevice()} together with the interface name of
- the CAN bus adapter. QCanBus loads and instantiates the plugin using the QCanBusFactory
+ the CAN bus adapter. QCanBus loads and instantiates the plugin using the QCanBusFactoryV2
interface which each plugin must implement as central entry point. The interface acts as
a factory and its sole purpose is to return a \l QCanBusDevice instance. The above mentioned
interface name is passed on via the factory's \l QCanBusFactory::createDevice() method.
diff --git a/src/serialbus/qcanbus.cpp b/src/serialbus/qcanbus.cpp
index 3430f57..9a71bdd 100644
--- a/src/serialbus/qcanbus.cpp
+++ b/src/serialbus/qcanbus.cpp
@@ -56,7 +56,7 @@ public:
QCanBusPrivate() { }
QJsonObject meta;
- QCanBusFactory *factory = nullptr;
+ QObject *factory = nullptr;
int index = -1;
};
@@ -121,7 +121,7 @@ static void setErrorMessage(QString *result, const QString &message)
*result = message;
}
-static QCanBusFactory *canBusFactory(const QString &plugin, QString *errorMessage)
+static QObject *canBusFactory(const QString &plugin, QString *errorMessage)
{
if (Q_UNLIKELY(!qCanBusPlugins()->contains(plugin))) {
setErrorMessage(errorMessage, QCanBus::tr("No such plugin: '%1'").arg(plugin));
@@ -130,7 +130,7 @@ static QCanBusFactory *canBusFactory(const QString &plugin, QString *errorMessag
QCanBusPrivate d = qCanBusPlugins()->value(plugin);
if (!d.factory) {
- d.factory = qobject_cast<QCanBusFactory *>(qFactoryLoader->instance(d.index));
+ d.factory = qFactoryLoader->instance(d.index);
if (d.factory)
qCanBusPlugins()->insert(plugin, d);
@@ -154,12 +154,19 @@ static QCanBusFactory *canBusFactory(const QString &plugin, QString *errorMessag
*/
QList<QCanBusDeviceInfo> QCanBus::availableDevices(const QString &plugin, QString *errorMessage) const
{
- const QCanBusFactory *factory = canBusFactory(plugin, errorMessage);
- if (Q_UNLIKELY(!factory))
+ const QObject *obj = canBusFactory(plugin, errorMessage);
+ if (Q_UNLIKELY(!obj))
return QList<QCanBusDeviceInfo>();
+ const QCanBusFactoryV2 *factoryV2 = qobject_cast<QCanBusFactoryV2 *>(obj);
+ if (Q_UNLIKELY(!factoryV2)) {
+ setErrorMessage(errorMessage,
+ tr("The plugin '%1' does not provide this function.").arg(plugin));
+ return QList<QCanBusDeviceInfo>();
+ }
+
QString errorString;
- QList<QCanBusDeviceInfo> result = factory->availableDevices(&errorString);
+ QList<QCanBusDeviceInfo> result = factoryV2->availableDevices(&errorString);
setErrorMessage(errorMessage, errorString);
return result;
@@ -190,11 +197,21 @@ QList<QCanBusDeviceInfo> QCanBus::availableDevices(const QString &plugin, QStrin
QCanBusDevice *QCanBus::createDevice(const QString &plugin, const QString &interfaceName,
QString *errorMessage) const
{
- const QCanBusFactory *factory = canBusFactory(plugin, errorMessage);
- if (Q_UNLIKELY(!factory))
+ const QObject *obj = canBusFactory(plugin, errorMessage);
+ if (Q_UNLIKELY(!obj))
return nullptr;
- return factory->createDevice(interfaceName, errorMessage);
+ const QCanBusFactoryV2 *factoryV2 = qobject_cast<QCanBusFactoryV2 *>(obj);
+ if (Q_LIKELY(factoryV2))
+ return factoryV2->createDevice(interfaceName, errorMessage);
+
+ const QCanBusFactory *factory = qobject_cast<QCanBusFactory *>(obj);
+ if (factory)
+ return factory->createDevice(interfaceName, errorMessage);
+
+ setErrorMessage(errorMessage,
+ tr("The plugin '%1' does not provide this function.").arg(plugin));
+ return nullptr;
}
QCanBus::QCanBus(QObject *parent) :
diff --git a/src/serialbus/qcanbusfactory.cpp b/src/serialbus/qcanbusfactory.cpp
index db6c294..0a0e9b7 100644
--- a/src/serialbus/qcanbusfactory.cpp
+++ b/src/serialbus/qcanbusfactory.cpp
@@ -42,39 +42,72 @@ QT_BEGIN_NAMESPACE
\class QCanBusFactory
\inmodule QtSerialBus
\since 5.8
+ \deprecated
\brief The QCanBusFactory class is a factory class used as the
plugin interface for CAN bus plugins.
All plugins must implement the functions provided by this factory class.
+
+ This class is deprecated, you should use QCanBusFactoryV2 instead.
+
+ \sa QCanBusFactoryV2
*/
/*!
- \fn QList<QCanBusDeviceInfo> QCanBusFactory::availableDevices(QString *errorMessage) const
+ \fn QCanBusDevice *QCanBusFactory::createDevice(const QString &interfaceName,
+ QString *errorMessage) const
- Returns the list of available devices and their capabilities for the QCanBusDevice.
+ Creates a new QCanBusDevice. The caller must take ownership of the returned pointer.
+ \a interfaceName is the CAN interface name and
\a errorMessage contains an error description in case of failure.
+ If the factory cannot create a plugin, it returns \c nullptr.
+*/
+
+/*!
+ \internal
+
+ \fn QCanBusFactory::~QCanBusFactory()
+*/
+
+/*!
+ \class QCanBusFactoryV2
+ \inmodule QtSerialBus
\since 5.9
+
+ \brief The QCanBusFactoryV2 class is a factory class used as the
+ plugin interface for CAN bus plugins.
+
+ All plugins must implement the functions provided by this factory class.
*/
/*!
- \fn QCanBusDevice *QCanBusFactory::createDevice(const QString &interfaceName,
+ \fn QCanBusDevice *QCanBusFactoryV2::createDevice(const QString &interfaceName,
QString *errorMessage) const
Creates a new QCanBusDevice. The caller must take ownership of the returned pointer.
- \a interfaceName is the network/CAN interface name.
+ \a interfaceName is the CAN interface name and
\a errorMessage contains an error description in case of failure.
If the factory cannot create a plugin, it returns \c nullptr.
*/
/*!
- \internal
+ \fn QList<QCanBusDeviceInfo> QCanBusFactoryV2::availableDevices(QString *errorMessage) const
- \fn QCanBusFactory::~QCanBusFactory()
+ Returns the list of available devices and their capabilities for the QCanBusDevice.
+
+ \a errorMessage contains an error description in case of failure.
*/
+/*!
+ * \internal
+ */
+QCanBusFactoryV2::~QCanBusFactoryV2()
+{
+}
+
QT_END_NAMESPACE
diff --git a/src/serialbus/qcanbusfactory.h b/src/serialbus/qcanbusfactory.h
index 2ab9862..b6ddf38 100644
--- a/src/serialbus/qcanbusfactory.h
+++ b/src/serialbus/qcanbusfactory.h
@@ -47,7 +47,6 @@ QT_BEGIN_NAMESPACE
class Q_SERIALBUS_EXPORT QCanBusFactory
{
public:
- virtual QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const = 0;
virtual QCanBusDevice *createDevice(const QString &interfaceName,
QString *errorMessage) const = 0;
protected:
@@ -56,6 +55,19 @@ protected:
Q_DECLARE_INTERFACE(QCanBusFactory, "org.qt-project.Qt.QCanBusFactory")
+class Q_SERIALBUS_EXPORT QCanBusFactoryV2 : public QCanBusFactory
+{
+public:
+ virtual QCanBusDevice *createDevice(const QString &interfaceName,
+ QString *errorMessage) const = 0;
+ virtual QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const = 0;
+
+protected:
+ virtual ~QCanBusFactoryV2();
+};
+
+Q_DECLARE_INTERFACE(QCanBusFactoryV2, "org.qt-project.Qt.QCanBusFactoryV2")
+
QT_END_NAMESPACE
#endif // QCANBUSFACTORY_H
diff --git a/tests/auto/plugins/genericcanbus/main.cpp b/tests/auto/plugins/genericcanbus/main.cpp
index c037313..20465e1 100644
--- a/tests/auto/plugins/genericcanbus/main.cpp
+++ b/tests/auto/plugins/genericcanbus/main.cpp
@@ -42,11 +42,11 @@
QT_BEGIN_NAMESPACE
-class GenericBusPlugin : public QObject, public QCanBusFactory
+class GenericBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
- Q_INTERFACES(QCanBusFactory)
+ Q_INTERFACES(QCanBusFactoryV2)
public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override