first stab on the adding a plugin api
This commit is contained in:
parent
033d62a98d
commit
af09702c31
@ -31,6 +31,7 @@
|
||||
#include "zigbeehardwareresourceimplementation.h"
|
||||
#include "loggingcategories.h"
|
||||
#include "nymeasettings.h"
|
||||
#include "hardware/zigbee/zigbeehandler.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QFileInfo>
|
||||
@ -60,6 +61,33 @@ bool ZigbeeHardwareResourceImplementation::enabled() const
|
||||
return m_enabled;
|
||||
}
|
||||
|
||||
|
||||
void ZigbeeHardwareResourceImplementation::registerHandler(ZigbeeHandler *handler, HandlerType type)
|
||||
{
|
||||
qCDebug(dcZigbeeResource()) << "Registering new zigbee handler" << handler->name() << "with type" << type;
|
||||
m_handlers.insert(type, handler);
|
||||
}
|
||||
|
||||
ZigbeeNode *ZigbeeHardwareResourceImplementation::getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress)
|
||||
{
|
||||
ZigbeeNetwork *network = m_zigbeeManager->zigbeeNetworks().value(networkUuid);
|
||||
if (!network) {
|
||||
qCWarning(dcZigbeeResource()) << "Network" << networkUuid << "not found.";
|
||||
return nullptr;
|
||||
}
|
||||
return network->getZigbeeNode(extendedAddress);
|
||||
}
|
||||
|
||||
ZigbeeNetwork::State ZigbeeHardwareResourceImplementation::networkState(const QUuid &networkUuid)
|
||||
{
|
||||
ZigbeeNetwork *network = m_zigbeeManager->zigbeeNetworks().value(networkUuid);
|
||||
if (!network) {
|
||||
qCWarning(dcZigbeeResource()) << "Network" << networkUuid << "not found.";
|
||||
return ZigbeeNetwork::StateUninitialized;
|
||||
}
|
||||
return network->state();
|
||||
}
|
||||
|
||||
void ZigbeeHardwareResourceImplementation::setEnabled(bool enabled)
|
||||
{
|
||||
qCDebug(dcZigbeeResource()) << "Set" << (enabled ? "enabled" : "disabled");
|
||||
@ -116,6 +144,18 @@ void ZigbeeHardwareResourceImplementation::onZigbeeAvailableChanged(bool availab
|
||||
void ZigbeeHardwareResourceImplementation::onZigbeeNodeAdded(const QUuid &networkUuid, ZigbeeNode *node)
|
||||
{
|
||||
qCDebug(dcZigbeeResource()) << node << "joined the network" << m_zigbeeManager->zigbeeNetworks().value(networkUuid);
|
||||
ZigbeeHandler *handler = nullptr;
|
||||
foreach (ZigbeeHandler *tmp, m_handlers) {
|
||||
if (tmp->handleNode(node, networkUuid)) {
|
||||
handler = tmp;
|
||||
qCDebug(dcZigbeeResource()) << "Node" << node << "taken by handler" << handler->name();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!handler) {
|
||||
qCWarning(dcZigbeeResource()) << "No zigbee handler available to handle node" << node;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void ZigbeeHardwareResourceImplementation::onZigbeeNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node)
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
#include <QObject>
|
||||
|
||||
#include "zigbee/zigbeemanager.h"
|
||||
#include "hardware/zigbee/zigbeehardwarereource.h"
|
||||
#include "hardware/zigbee/zigbeehardwareresource.h"
|
||||
|
||||
namespace nymeaserver {
|
||||
|
||||
@ -48,23 +48,30 @@ public:
|
||||
bool available() const override;
|
||||
bool enabled() const override;
|
||||
|
||||
private:
|
||||
bool m_available = false;
|
||||
bool m_enabled = false;
|
||||
ZigbeeManager *m_zigbeeManager = nullptr;
|
||||
void registerHandler(ZigbeeHandler *handler, HandlerType type = HandlerTypeVendor) override;
|
||||
|
||||
protected:
|
||||
void setEnabled(bool enabled) override;
|
||||
ZigbeeNode* getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress) override;
|
||||
ZigbeeNetwork::State networkState(const QUuid &networkUuid) override;
|
||||
|
||||
public slots:
|
||||
bool enable();
|
||||
bool disable();
|
||||
|
||||
protected:
|
||||
void setEnabled(bool enabled) override;
|
||||
|
||||
private slots:
|
||||
void onZigbeeAvailableChanged(bool available);
|
||||
void onZigbeeNodeAdded(const QUuid &networkUuid, ZigbeeNode *node);
|
||||
void onZigbeeNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node);
|
||||
|
||||
private:
|
||||
bool m_available = false;
|
||||
bool m_enabled = false;
|
||||
ZigbeeManager *m_zigbeeManager = nullptr;
|
||||
|
||||
QMultiMap<ZigbeeHardwareResource::HandlerType, ZigbeeHandler*> m_handlers;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
6
libnymea/hardware/zigbee/zigbeehandler.cpp
Normal file
6
libnymea/hardware/zigbee/zigbeehandler.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include "zigbeehandler.h"
|
||||
|
||||
ZigbeeHandler::ZigbeeHandler()
|
||||
{
|
||||
|
||||
}
|
||||
16
libnymea/hardware/zigbee/zigbeehandler.h
Normal file
16
libnymea/hardware/zigbee/zigbeehandler.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef ZIGBEEHANDLER_H
|
||||
#define ZIGBEEHANDLER_H
|
||||
|
||||
#include "zigbeenode.h"
|
||||
|
||||
class ZigbeeHandler
|
||||
{
|
||||
public:
|
||||
ZigbeeHandler();
|
||||
virtual ~ZigbeeHandler() = default;
|
||||
|
||||
virtual QString name() const = 0;
|
||||
virtual bool handleNode(ZigbeeNode *node, const QUuid &networkUuid) = 0;
|
||||
};
|
||||
|
||||
#endif // ZIGBEEHANDLER_H
|
||||
@ -28,7 +28,7 @@
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "zigbeehardwarereource.h"
|
||||
#include "zigbeehardwareresource.h"
|
||||
|
||||
ZigbeeHardwareResource::ZigbeeHardwareResource(QObject *parent) :
|
||||
HardwareResource("Zigbee hardware resource", parent)
|
||||
@ -35,14 +35,32 @@
|
||||
|
||||
#include "hardwareresource.h"
|
||||
|
||||
#include <zigbeeaddress.h>
|
||||
#include <zigbeenetwork.h>
|
||||
|
||||
class ZigbeeHandler;
|
||||
class ZigbeeNode;
|
||||
|
||||
class ZigbeeHardwareResource : public HardwareResource
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum HandlerType {
|
||||
HandlerTypeBranding,
|
||||
HandlerTypeVendor,
|
||||
HandlerTypeCatchAll
|
||||
};
|
||||
Q_ENUM(HandlerType)
|
||||
explicit ZigbeeHardwareResource(QObject *parent = nullptr);
|
||||
virtual ~ZigbeeHardwareResource() = default;
|
||||
|
||||
virtual void registerHandler(ZigbeeHandler *handler, HandlerType type = HandlerTypeVendor) = 0;
|
||||
virtual ZigbeeNode* getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress) = 0;
|
||||
|
||||
virtual ZigbeeNetwork::State networkState(const QUuid &networkUuid) = 0;
|
||||
|
||||
signals:
|
||||
void networkStateChanged(const QUuid &networkUuid, ZigbeeNetwork::State state);
|
||||
|
||||
};
|
||||
|
||||
@ -10,7 +10,8 @@ DEFINES += LIBNYMEA_LIBRARY
|
||||
QMAKE_LFLAGS += -fPIC
|
||||
|
||||
HEADERS += \
|
||||
hardware/zigbee/zigbeehardwarereource.h \
|
||||
hardware/zigbee/zigbeehandler.h \
|
||||
hardware/zigbee/zigbeehardwareresource.h \
|
||||
integrations/browseractioninfo.h \
|
||||
integrations/browseritemactioninfo.h \
|
||||
integrations/browseritemresult.h \
|
||||
@ -103,7 +104,8 @@ HEADERS += \
|
||||
experiences/experienceplugin.h \
|
||||
|
||||
SOURCES += \
|
||||
hardware/zigbee/zigbeehardwarereource.cpp \
|
||||
hardware/zigbee/zigbeehandler.cpp \
|
||||
hardware/zigbee/zigbeehardwareresource.cpp \
|
||||
integrations/browseractioninfo.cpp \
|
||||
integrations/browseritemactioninfo.cpp \
|
||||
integrations/browseritemresult.cpp \
|
||||
|
||||
Reference in New Issue
Block a user