diff --git a/Hive.pro b/Hive.pro index f8fa2f2e..95f81345 100644 --- a/Hive.pro +++ b/Hive.pro @@ -3,4 +3,5 @@ TEMPLATE=subdirs SUBDIRS += libhive server plugins server.depends = libhive plugins +plugins.deoends = libhive diff --git a/libhive/devicemanager.cpp b/libhive/devicemanager.cpp index 8854140d..96ada1c7 100644 --- a/libhive/devicemanager.cpp +++ b/libhive/devicemanager.cpp @@ -15,24 +15,9 @@ Q_IMPORT_PLUGIN(RfSwitch) DeviceManager::DeviceManager(QObject *parent) : QObject(parent) { - - qDebug() << "creating radio"; m_radio433 = new Radio433(this); - qDebug() << "loading plugins"; - foreach (QObject *pluginObject, QPluginLoader::staticInstances()) { - DevicePlugin *pluginIface = qobject_cast(pluginObject); - qDebug() << "got plugin instance"; - if (pluginIface) { - qDebug() << "got device plugin" << pluginIface->pluginName(); - } - } - // TODO: load dynamically -// RfSwitch *rfSwitch = new RfSwitch(this); -// m_supportedDevices.append(rfSwitch->supportedDevices()); -// m_devicePlugins.append(rfSwitch); - - + QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection); } QList DeviceManager::supportedDevices() @@ -45,8 +30,21 @@ QList DeviceManager::devices() const return m_devices; } -Radio433 *DeviceManager::radio() const +Radio433 *DeviceManager::radio433() const { return m_radio433; } +void DeviceManager::loadPlugins() +{ + foreach (QObject *pluginObject, QPluginLoader::staticInstances()) { + DevicePlugin *pluginIface = qobject_cast(pluginObject); + if (pluginIface) { + qDebug() << "*** Loaded plugin" << pluginIface->pluginName(); + pluginIface->initPlugin(this); + m_supportedDevices.append(pluginIface->supportedDevices()); + m_devicePlugins.append(pluginIface); + } + } +} + diff --git a/libhive/devicemanager.h b/libhive/devicemanager.h index 4153b401..4c3e29f8 100644 --- a/libhive/devicemanager.h +++ b/libhive/devicemanager.h @@ -19,11 +19,12 @@ public: QList devices() const; - Radio433 *radio() const; + Radio433 *radio433() const; signals: -public slots: +private slots: + void loadPlugins(); private: QList m_supportedDevices; diff --git a/libhive/deviceplugin.cpp b/libhive/deviceplugin.cpp index 38a1410f..02439a46 100644 --- a/libhive/deviceplugin.cpp +++ b/libhive/deviceplugin.cpp @@ -7,9 +7,10 @@ DevicePlugin::~DevicePlugin() } -void DevicePlugin::init(DeviceManager *deviceManager) +void DevicePlugin::initPlugin(DeviceManager *deviceManager) { m_deviceManager = deviceManager; + init(); } DeviceManager *DevicePlugin::deviceManager() const diff --git a/libhive/deviceplugin.h b/libhive/deviceplugin.h index 642ddc6f..11a59936 100644 --- a/libhive/deviceplugin.h +++ b/libhive/deviceplugin.h @@ -13,7 +13,9 @@ public: DevicePlugin(); virtual ~DevicePlugin(); - void init(DeviceManager *deviceManager); + void initPlugin(DeviceManager *deviceManager); + + virtual void init() {} virtual QString pluginName() const = 0; diff --git a/plugins/deviceplugins/rfswitch/rfswitch.cpp b/plugins/deviceplugins/rfswitch/rfswitch.cpp index d214bc97..dd1526f6 100644 --- a/plugins/deviceplugins/rfswitch/rfswitch.cpp +++ b/plugins/deviceplugins/rfswitch/rfswitch.cpp @@ -1,11 +1,19 @@ #include "rfswitch.h" #include "devicemanager.h" +#include "radio433.h" + +#include RfSwitch::RfSwitch() { } +void RfSwitch::init() +{ + connect(deviceManager()->radio433(), &Radio433::dataReceived, this, &RfSwitch::dataReceived); +} + QList RfSwitch::supportedDevices() const { // TODO: load list from config with static uuid @@ -27,3 +35,8 @@ QString RfSwitch::pluginName() const { return "RF Switch"; } + +void RfSwitch::dataReceived(QList rawData) +{ + qDebug() << "data received from Radio433" << rawData; +} diff --git a/plugins/deviceplugins/rfswitch/rfswitch.h b/plugins/deviceplugins/rfswitch/rfswitch.h index 8d036d5f..2e23de01 100644 --- a/plugins/deviceplugins/rfswitch/rfswitch.h +++ b/plugins/deviceplugins/rfswitch/rfswitch.h @@ -13,14 +13,13 @@ class RfSwitch : public QObject, public DevicePlugin public: explicit RfSwitch(); + void init() override; QList supportedDevices() const override; QString pluginName() const; -signals: - -public slots: - +private slots: + void dataReceived(QList rawData); }; #endif // RFSWITCH_H