From 29217b9affadf9e2ec8452bd38aa4db66c67af69 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 30 Dec 2013 23:08:35 +0100 Subject: [PATCH] added triggers --- Hive.pro | 2 +- libhive/deviceclass.cpp | 10 ++++++ libhive/deviceclass.h | 7 +++++ libhive/deviceplugin.h | 4 +++ libhive/libhive.pro | 8 +++-- libhive/trigger.cpp | 31 ++++++++++++++++++ libhive/trigger.h | 27 ++++++++++++++++ libhive/triggertype.cpp | 31 ++++++++++++++++++ libhive/triggertype.h | 28 +++++++++++++++++ plugins/deviceplugins/rfswitch/rfswitch.cpp | 35 +++++++++++++++++++++ server/jsonrpcserver.cpp | 10 ++++++ 11 files changed, 190 insertions(+), 3 deletions(-) create mode 100644 libhive/trigger.cpp create mode 100644 libhive/trigger.h create mode 100644 libhive/triggertype.cpp create mode 100644 libhive/triggertype.h diff --git a/Hive.pro b/Hive.pro index 95f81345..409736a8 100644 --- a/Hive.pro +++ b/Hive.pro @@ -3,5 +3,5 @@ TEMPLATE=subdirs SUBDIRS += libhive server plugins server.depends = libhive plugins -plugins.deoends = libhive +libhive.deoends = libhive diff --git a/libhive/deviceclass.cpp b/libhive/deviceclass.cpp index a8bd3406..a716db36 100644 --- a/libhive/deviceclass.cpp +++ b/libhive/deviceclass.cpp @@ -25,3 +25,13 @@ void DeviceClass::setName(const QString &name) { m_name = name; } + +QList DeviceClass::triggers() const +{ + return m_triggers; +} + +void DeviceClass::setTriggers(const QList &triggers) +{ + m_triggers = triggers; +} diff --git a/libhive/deviceclass.h b/libhive/deviceclass.h index 15e6fdad..07712ea7 100644 --- a/libhive/deviceclass.h +++ b/libhive/deviceclass.h @@ -1,6 +1,9 @@ #ifndef DEVICECLASS_H #define DEVICECLASS_H +#include "triggertype.h" + +#include #include class DeviceClass @@ -14,9 +17,13 @@ public: QString name() const; void setName(const QString &name); + QList triggers() const; + void setTriggers(const QList &triggers); + private: QUuid m_id; QString m_name; + QList m_triggers; }; #endif diff --git a/libhive/deviceplugin.h b/libhive/deviceplugin.h index 11a59936..35a650be 100644 --- a/libhive/deviceplugin.h +++ b/libhive/deviceplugin.h @@ -2,6 +2,7 @@ #define DEVICEPLUGIN_H #include "deviceclass.h" +#include "trigger.h" #include @@ -21,6 +22,9 @@ public: virtual QList supportedDevices() const = 0; +signals: + void emitTrigger(const Trigger &trigger); + protected: DeviceManager *deviceManager() const; diff --git a/libhive/libhive.pro b/libhive/libhive.pro index dca77bf0..23b14389 100644 --- a/libhive/libhive.pro +++ b/libhive/libhive.pro @@ -9,11 +9,15 @@ SOURCES += device.cpp \ devicemanager.cpp \ deviceplugin.cpp \ radio433.cpp \ - gpio.cpp + gpio.cpp \ + trigger.cpp \ + triggertype.cpp HEADERS += device.h \ deviceclass.h \ devicemanager.h \ radio433.h \ - gpio.h + gpio.h \ + trigger.h \ + triggertype.h diff --git a/libhive/trigger.cpp b/libhive/trigger.cpp new file mode 100644 index 00000000..7b324ea6 --- /dev/null +++ b/libhive/trigger.cpp @@ -0,0 +1,31 @@ +#include "trigger.h" + +Trigger::Trigger(const QUuid &id): + m_id(id) +{ +} + +QUuid Trigger::id() const +{ + return m_id; +} + +QString Trigger::name() const +{ + return m_name; +} + +void Trigger::setName(const QString &name) +{ + m_name = name; +} + +QVariantList Trigger::params() const +{ + return m_params; +} + +void Trigger::setParams(const QVariantList ¶ms) +{ + m_params = params; +} diff --git a/libhive/trigger.h b/libhive/trigger.h new file mode 100644 index 00000000..202ed46a --- /dev/null +++ b/libhive/trigger.h @@ -0,0 +1,27 @@ +#ifndef TRIGGER_H +#define TRIGGER_H + +#include +#include +#include + +class Trigger +{ +public: + Trigger(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 // TRIGGER_H diff --git a/libhive/triggertype.cpp b/libhive/triggertype.cpp new file mode 100644 index 00000000..59725174 --- /dev/null +++ b/libhive/triggertype.cpp @@ -0,0 +1,31 @@ +#include "triggertype.h" + +TriggerType::TriggerType(const QUuid &id): + m_id(id) +{ +} + +QUuid TriggerType::id() const +{ + return m_id; +} + +QString TriggerType::name() const +{ + return m_name; +} + +void TriggerType::setName(const QString &name) +{ + m_name = name; +} + +QVariantList TriggerType::parameters() const +{ + return m_parameters; +} + +void TriggerType::setParameters(const QVariantList ¶meters) +{ + m_parameters = parameters; +} diff --git a/libhive/triggertype.h b/libhive/triggertype.h new file mode 100644 index 00000000..1a0aa200 --- /dev/null +++ b/libhive/triggertype.h @@ -0,0 +1,28 @@ +#ifndef TRIGGERTYPE_H +#define TRIGGERTYPE_H + +#include +#include + +class TriggerType +{ +public: + TriggerType(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 // TRIGGERTYPE_H diff --git a/plugins/deviceplugins/rfswitch/rfswitch.cpp b/plugins/deviceplugins/rfswitch/rfswitch.cpp index dd1526f6..a59c00bf 100644 --- a/plugins/deviceplugins/rfswitch/rfswitch.cpp +++ b/plugins/deviceplugins/rfswitch/rfswitch.cpp @@ -21,6 +21,41 @@ QList RfSwitch::supportedDevices() const DeviceClass deviceClassRfRemote(QUuid::createUuid()); deviceClassRfRemote.setName("RF Remote"); + QList buttonTriggers; + + QVariantList params; + QVariantMap param; + param.insert("name", "on"); + param.insert("type", "bool"); + params.append(param); + + TriggerType buttonATrigger(QUuid::createUuid()); + buttonATrigger.setName("Button A"); + buttonATrigger.setParameters(params); + buttonTriggers.append(buttonATrigger); + + TriggerType buttonBTrigger(QUuid::createUuid()); + buttonBTrigger.setName("Button B"); + buttonBTrigger.setParameters(params); + buttonTriggers.append(buttonBTrigger); + + TriggerType buttonCTrigger(QUuid::createUuid()); + buttonCTrigger.setName("Button C"); + buttonCTrigger.setParameters(params); + buttonTriggers.append(buttonCTrigger); + + TriggerType buttonDTrigger(QUuid::createUuid()); + buttonDTrigger.setName("Button D"); + buttonDTrigger.setParameters(params); + buttonTriggers.append(buttonDTrigger); + + TriggerType buttonETrigger(QUuid::createUuid()); + buttonETrigger.setName("Button E"); + buttonETrigger.setParameters(params); + buttonTriggers.append(buttonETrigger); + + deviceClassRfRemote.setTriggers(buttonTriggers); + ret.append(deviceClassRfRemote); diff --git a/server/jsonrpcserver.cpp b/server/jsonrpcserver.cpp index a905dcfd..5b0b0277 100644 --- a/server/jsonrpcserver.cpp +++ b/server/jsonrpcserver.cpp @@ -83,6 +83,16 @@ QVariantMap JsonRPCServer::packDeviceClass(const DeviceClass &deviceClass) QVariantMap variant; variant.insert("name", deviceClass.name()); variant.insert("id", deviceClass.id()); + QVariantList triggerTypes; + foreach (const TriggerType &triggerType, deviceClass.triggers()) { + QVariantMap triggerMap; + triggerMap.insert("id", triggerType.id().toString()); + triggerMap.insert("name", triggerType.name()); + triggerMap.insert("params", triggerType.parameters()); + + triggerTypes.append(triggerMap); + } + variant.insert("triggers", triggerTypes); return variant; }