added actions
This commit is contained in:
parent
39c9abc809
commit
adb1c1ca64
32
libhive/action.cpp
Normal file
32
libhive/action.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
#include "action.h"
|
||||
|
||||
Action::Action(const QUuid &id) :
|
||||
m_id(id)
|
||||
{
|
||||
}
|
||||
|
||||
QUuid Action::id() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
QString Action::name() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
void Action::setName(const QString &name)
|
||||
{
|
||||
m_name = name;
|
||||
}
|
||||
|
||||
QVariantList Action::params() const
|
||||
{
|
||||
return m_params;
|
||||
}
|
||||
|
||||
void Action::setParams(const QVariantList ¶ms)
|
||||
{
|
||||
m_params = params;
|
||||
}
|
||||
|
||||
26
libhive/action.h
Normal file
26
libhive/action.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef ACTION_H
|
||||
#define ACTION_H
|
||||
|
||||
#include <QUuid>
|
||||
#include <QVariantList>
|
||||
|
||||
class Action
|
||||
{
|
||||
public:
|
||||
Action(const QUuid &id);
|
||||
|
||||
QUuid id() const;
|
||||
|
||||
QString name() const;
|
||||
void setName(const QString &name);
|
||||
|
||||
QVariantList params() const;
|
||||
void setParams(const QVariantList ¶ms);
|
||||
|
||||
private:
|
||||
QUuid m_id;
|
||||
QString m_name;
|
||||
QVariantList m_params;
|
||||
};
|
||||
|
||||
#endif // ACTION_H
|
||||
21
libhive/actiontype.cpp
Normal file
21
libhive/actiontype.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include "actiontype.h"
|
||||
|
||||
ActionType::ActionType(const QUuid &id):
|
||||
m_id(id)
|
||||
{
|
||||
}
|
||||
|
||||
QUuid ActionType::id() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
QString ActionType::name() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
void ActionType::setName(const QString &name)
|
||||
{
|
||||
m_name = name;
|
||||
}
|
||||
27
libhive/actiontype.h
Normal file
27
libhive/actiontype.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef ACTIONTYPE_H
|
||||
#define ACTIONTYPE_H
|
||||
|
||||
#include <QUuid>
|
||||
#include <QVariantList>
|
||||
|
||||
class ActionType
|
||||
{
|
||||
public:
|
||||
ActionType(const QUuid &id);
|
||||
|
||||
QUuid id() const;
|
||||
|
||||
QString name() const;
|
||||
void setName(const QString &name);
|
||||
|
||||
QVariantList parameters() const;
|
||||
void setParameters(const QVariantList ¶meters);
|
||||
|
||||
private:
|
||||
QUuid m_id;
|
||||
QString m_name;
|
||||
|
||||
QVariantList m_parameters;
|
||||
};
|
||||
|
||||
#endif // ACTIONTYPE_H
|
||||
@ -1,17 +1,19 @@
|
||||
#include "device.h"
|
||||
|
||||
Device::Device(const QUuid &id, const QUuid &deviceClassId, QObject *parent):
|
||||
Device::Device(const QUuid &pluginId, const QUuid &id, const QUuid &deviceClassId, QObject *parent):
|
||||
QObject(parent),
|
||||
m_id(id),
|
||||
m_deviceClassId(deviceClassId)
|
||||
m_deviceClassId(deviceClassId),
|
||||
m_pluginId(pluginId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Device::Device(const QUuid &deviceClassId, QObject *parent):
|
||||
Device::Device(const QUuid &pluginId, const QUuid &deviceClassId, QObject *parent):
|
||||
QObject(parent),
|
||||
m_id(QUuid::createUuid()),
|
||||
m_deviceClassId(deviceClassId)
|
||||
m_deviceClassId(deviceClassId),
|
||||
m_pluginId(pluginId)
|
||||
{
|
||||
|
||||
}
|
||||
@ -26,6 +28,11 @@ QUuid Device::deviceClassId() const
|
||||
return m_deviceClassId;
|
||||
}
|
||||
|
||||
QUuid Device::pluginId() const
|
||||
{
|
||||
return m_pluginId;
|
||||
}
|
||||
|
||||
QString Device::name() const
|
||||
{
|
||||
return m_name;
|
||||
@ -46,6 +53,16 @@ void Device::setTriggers(const QList<Trigger> triggers)
|
||||
m_triggers = triggers;
|
||||
}
|
||||
|
||||
QList<Action> Device::actions() const
|
||||
{
|
||||
return m_actions;
|
||||
}
|
||||
|
||||
void Device::setActions(const QList<Action> &actions)
|
||||
{
|
||||
m_actions = actions;
|
||||
}
|
||||
|
||||
QVariantMap Device::params() const
|
||||
{
|
||||
return m_params;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#define DEVICE_H
|
||||
|
||||
#include "trigger.h"
|
||||
#include "action.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QUuid>
|
||||
@ -10,14 +11,13 @@
|
||||
class Device: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QUuid id READ id CONSTANT)
|
||||
|
||||
friend class DeviceManager;
|
||||
|
||||
public:
|
||||
Device(const QUuid &id, const QUuid &deviceClassId, QObject *parent = 0);
|
||||
Device(const QUuid &deviceClassId, QObject *parent = 0);
|
||||
|
||||
QUuid id() const;
|
||||
QUuid deviceClassId() const;
|
||||
QUuid pluginId() const;
|
||||
|
||||
QString name() const;
|
||||
void setName(const QString &name);
|
||||
@ -25,14 +25,23 @@ public:
|
||||
QList<Trigger> triggers() const;
|
||||
void setTriggers(const QList<Trigger> triggers);
|
||||
|
||||
QList<Action> actions() const;
|
||||
void setActions(const QList<Action> &actions);
|
||||
|
||||
QVariantMap params() const;
|
||||
void setParams(const QVariantMap ¶ms);
|
||||
|
||||
private:
|
||||
Device(const QUuid &pluginId, const QUuid &id, const QUuid &deviceClassId, QObject *parent = 0);
|
||||
Device(const QUuid &pluginId, const QUuid &deviceClassId, QObject *parent = 0);
|
||||
|
||||
private:
|
||||
QUuid m_id;
|
||||
QUuid m_deviceClassId;
|
||||
QUuid m_pluginId;
|
||||
QString m_name;
|
||||
QList<Trigger> m_triggers;
|
||||
QList<Action> m_actions;
|
||||
QVariantMap m_params;
|
||||
};
|
||||
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
#include "deviceclass.h"
|
||||
|
||||
DeviceClass::DeviceClass(const QUuid &id):
|
||||
m_id(id)
|
||||
DeviceClass::DeviceClass(const QUuid &pluginId, const QUuid &id):
|
||||
m_id(id),
|
||||
m_pluginId(pluginId)
|
||||
{
|
||||
|
||||
}
|
||||
@ -16,6 +17,11 @@ QUuid DeviceClass::id() const
|
||||
return m_id;
|
||||
}
|
||||
|
||||
QUuid DeviceClass::pluginId() const
|
||||
{
|
||||
return m_pluginId;
|
||||
}
|
||||
|
||||
QString DeviceClass::name() const
|
||||
{
|
||||
return m_name;
|
||||
@ -45,3 +51,8 @@ void DeviceClass::setParams(const QVariantList ¶ms)
|
||||
{
|
||||
m_params = params;
|
||||
}
|
||||
|
||||
bool DeviceClass::operator==(const DeviceClass &deviceClass) const
|
||||
{
|
||||
return m_id == deviceClass.id();
|
||||
}
|
||||
|
||||
@ -9,10 +9,11 @@
|
||||
class DeviceClass
|
||||
{
|
||||
public:
|
||||
DeviceClass(const QUuid &id);
|
||||
DeviceClass(const QUuid &pluginId, const QUuid &id);
|
||||
virtual ~DeviceClass();
|
||||
|
||||
QUuid id() const;
|
||||
QUuid pluginId() const;
|
||||
|
||||
QString name() const;
|
||||
void setName(const QString &name);
|
||||
@ -23,8 +24,11 @@ public:
|
||||
QVariantList params() const;
|
||||
void setParams(const QVariantList ¶ms);
|
||||
|
||||
bool operator==(const DeviceClass &device) const;
|
||||
|
||||
private:
|
||||
QUuid m_id;
|
||||
QUuid m_pluginId;
|
||||
QString m_name;
|
||||
QList<TriggerType> m_triggers;
|
||||
QVariantList m_params;
|
||||
|
||||
@ -45,7 +45,13 @@ DeviceManager::DeviceError DeviceManager::addConfiguredDevice(const QUuid &devic
|
||||
// TODO: Check if parameter type matches
|
||||
}
|
||||
|
||||
Device *device = new Device(deviceClassId, this);
|
||||
DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId());
|
||||
if (!plugin) {
|
||||
qWarning() << "Cannot find a plugin for this device class!";
|
||||
return DeviceErrorPluginNotFound;
|
||||
}
|
||||
|
||||
Device *device = new Device(plugin->pluginId(), deviceClassId, this);
|
||||
device->setName(deviceClass.name());
|
||||
device->setParams(params);
|
||||
QList<Trigger> triggers;
|
||||
@ -86,7 +92,7 @@ DeviceClass DeviceManager::findDeviceClass(const QUuid &deviceClassId)
|
||||
return deviceClass;
|
||||
}
|
||||
}
|
||||
return DeviceClass(QUuid());
|
||||
return DeviceClass(QUuid(), QUuid());
|
||||
}
|
||||
|
||||
Radio433 *DeviceManager::radio433() const
|
||||
@ -94,6 +100,18 @@ Radio433 *DeviceManager::radio433() const
|
||||
return m_radio433;
|
||||
}
|
||||
|
||||
void DeviceManager::executeAction(const QUuid &actionId, const QVariantMap ¶ms)
|
||||
{
|
||||
foreach (Device *device, m_configuredDevices) {
|
||||
foreach (const Action &action, device->actions()) {
|
||||
if (action.id() == actionId) {
|
||||
m_devicePlugins.value(device->pluginId())->executeAction(device, action);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceManager::loadPlugins()
|
||||
{
|
||||
foreach (QObject *pluginObject, QPluginLoader::staticInstances()) {
|
||||
@ -101,8 +119,11 @@ void DeviceManager::loadPlugins()
|
||||
if (pluginIface) {
|
||||
qDebug() << "*** Loaded plugin" << pluginIface->pluginName();
|
||||
pluginIface->initPlugin(this);
|
||||
m_supportedDevices.append(pluginIface->supportedDevices());
|
||||
m_devicePlugins.append(pluginIface);
|
||||
foreach (const DeviceClass &deviceClass, pluginIface->supportedDevices()) {
|
||||
qDebug() << "* Loaded device class:" << deviceClass.name();
|
||||
m_supportedDevices.append(deviceClass);
|
||||
}
|
||||
m_devicePlugins.insert(pluginIface->pluginId(), pluginIface);
|
||||
connect(pluginIface,SIGNAL(emitTrigger(QUuid,QVariantMap)),this,SIGNAL(emitTrigger(QUuid,QVariantMap)));
|
||||
}
|
||||
|
||||
@ -152,4 +173,3 @@ void DeviceManager::storeConfiguredDevices()
|
||||
settings.endGroup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -18,7 +18,8 @@ public:
|
||||
DeviceErrorNoError,
|
||||
DeviceErrorDeviceNotFound,
|
||||
DeviceErrorDeviceClassNotFound,
|
||||
DeviceErrorMissingParameter
|
||||
DeviceErrorMissingParameter,
|
||||
DeviceErrorPluginNotFound
|
||||
};
|
||||
|
||||
explicit DeviceManager(QObject *parent = 0);
|
||||
@ -36,6 +37,9 @@ public:
|
||||
signals:
|
||||
void emitTrigger(const QUuid &triggerId, const QVariantMap ¶ms);
|
||||
|
||||
public slots:
|
||||
void executeAction(const QUuid &actionId, const QVariantMap ¶ms);
|
||||
|
||||
private slots:
|
||||
void loadPlugins();
|
||||
void loadConfiguredDevices();
|
||||
@ -44,7 +48,8 @@ private slots:
|
||||
private:
|
||||
QList<DeviceClass> m_supportedDevices;
|
||||
QList<Device*> m_configuredDevices;
|
||||
QList<DevicePlugin*> m_devicePlugins;
|
||||
|
||||
QHash<QUuid, DevicePlugin*> m_devicePlugins;
|
||||
|
||||
Radio433* m_radio433;
|
||||
};
|
||||
|
||||
@ -3,10 +3,12 @@
|
||||
|
||||
#include "deviceclass.h"
|
||||
#include "trigger.h"
|
||||
#include "action.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class DeviceManager;
|
||||
class Device;
|
||||
|
||||
class DevicePlugin: public QObject
|
||||
{
|
||||
@ -20,9 +22,13 @@ public:
|
||||
virtual void init() {}
|
||||
|
||||
virtual QString pluginName() const = 0;
|
||||
virtual QUuid pluginId() const = 0;
|
||||
|
||||
virtual QList<DeviceClass> supportedDevices() const = 0;
|
||||
|
||||
public slots:
|
||||
virtual void executeAction(Device *device, const Action &action) = 0;
|
||||
|
||||
signals:
|
||||
void emitTrigger(const QUuid &triggerId, const QVariantMap ¶ms);
|
||||
|
||||
|
||||
@ -11,7 +11,9 @@ SOURCES += device.cpp \
|
||||
radio433.cpp \
|
||||
gpio.cpp \
|
||||
trigger.cpp \
|
||||
triggertype.cpp
|
||||
triggertype.cpp \
|
||||
action.cpp \
|
||||
actiontype.cpp
|
||||
|
||||
HEADERS += device.h \
|
||||
deviceclass.h \
|
||||
@ -20,5 +22,7 @@ HEADERS += device.h \
|
||||
radio433.h \
|
||||
gpio.h \
|
||||
trigger.h \
|
||||
triggertype.h
|
||||
triggertype.h \
|
||||
action.h \
|
||||
actiontype.h
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ QList<DeviceClass> RfRemoteIntertechno::supportedDevices() const
|
||||
{
|
||||
QList<DeviceClass> ret;
|
||||
|
||||
DeviceClass deviceClassRfRemote(intertechnoRemote);
|
||||
DeviceClass deviceClassRfRemote(pluginId(), intertechnoRemote);
|
||||
deviceClassRfRemote.setName("Intertechno Remote");
|
||||
|
||||
QVariantList deviceParams;
|
||||
@ -81,6 +81,16 @@ QString RfRemoteIntertechno::pluginName() const
|
||||
return "RF Remote Intertechno";
|
||||
}
|
||||
|
||||
QUuid RfRemoteIntertechno::pluginId() const
|
||||
{
|
||||
return QUuid("e998d934-0397-42c1-ad63-9141bcac8563");
|
||||
}
|
||||
|
||||
void RfRemoteIntertechno::executeAction(Device *device, const Action &action)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RfRemoteIntertechno::dataReceived(QList<int> rawData)
|
||||
{
|
||||
// filter right here a wrong signal length
|
||||
|
||||
@ -17,6 +17,10 @@ public:
|
||||
QList<DeviceClass> supportedDevices() const override;
|
||||
|
||||
QString pluginName() const;
|
||||
QUuid pluginId() const;
|
||||
|
||||
public slots:
|
||||
void executeAction(Device *device, const Action &action) override;
|
||||
|
||||
private slots:
|
||||
void dataReceived(QList<int> rawData);
|
||||
|
||||
@ -24,7 +24,7 @@ QList<DeviceClass> RfRemoteMumbi::supportedDevices() const
|
||||
// TODO: load list from config with static uuid
|
||||
QList<DeviceClass> ret;
|
||||
|
||||
DeviceClass deviceClassRfRemote(mumbiRemote);
|
||||
DeviceClass deviceClassRfRemote(pluginId(), mumbiRemote);
|
||||
deviceClassRfRemote.setName("Mumbi Remote");
|
||||
|
||||
QVariantList deviceParams;
|
||||
@ -84,7 +84,7 @@ QList<DeviceClass> RfRemoteMumbi::supportedDevices() const
|
||||
|
||||
ret.append(deviceClassRfRemote);
|
||||
|
||||
DeviceClass deviceClassRfRemoteMumbi(mumbiRfRemoteMumbi);
|
||||
DeviceClass deviceClassRfRemoteMumbi(pluginId(), mumbiRfRemoteMumbi);
|
||||
deviceClassRfRemoteMumbi.setName("Mumbi Power Switch");
|
||||
ret.append(deviceClassRfRemoteMumbi);
|
||||
|
||||
@ -93,7 +93,17 @@ QList<DeviceClass> RfRemoteMumbi::supportedDevices() const
|
||||
|
||||
QString RfRemoteMumbi::pluginName() const
|
||||
{
|
||||
return "RF Remote Mumbi";
|
||||
return QStringLiteral("RF Remote Mumbi");
|
||||
}
|
||||
|
||||
QUuid RfRemoteMumbi::pluginId() const
|
||||
{
|
||||
return QUuid("2b267f81-d9ae-4f4f-89a0-7386b547cfd3");
|
||||
}
|
||||
|
||||
void RfRemoteMumbi::executeAction(Device *device, const Action &action)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RfRemoteMumbi::dataReceived(QList<int> rawData)
|
||||
|
||||
@ -17,6 +17,10 @@ public:
|
||||
QList<DeviceClass> supportedDevices() const override;
|
||||
|
||||
QString pluginName() const;
|
||||
QUuid pluginId() const;
|
||||
|
||||
public slots:
|
||||
void executeAction(Device *device, const Action &action) override;
|
||||
|
||||
private slots:
|
||||
void dataReceived(QList<int> rawData);
|
||||
|
||||
Reference in New Issue
Block a user