From 2ab082bbc492b0fc37afb9be653c3287e778fb57 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 15 Mar 2018 10:57:27 +0100 Subject: [PATCH] Add support for device parenting in discovery phase --- libnymea/devicemanager.cpp | 5 +++++ libnymea/plugin/devicedescriptor.cpp | 26 ++++++++++++++++++++------ libnymea/plugin/devicedescriptor.h | 8 ++++++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/libnymea/devicemanager.cpp b/libnymea/devicemanager.cpp index e80a6051..dcce8372 100644 --- a/libnymea/devicemanager.cpp +++ b/libnymea/devicemanager.cpp @@ -1365,10 +1365,15 @@ void DeviceManager::onAutoDevicesAppeared(const DeviceClassId &deviceClassId, co } foreach (const DeviceDescriptor &deviceDescriptor, deviceDescriptors) { + if (!deviceDescriptor.parentDeviceId().isNull() && !m_configuredDevices.contains(deviceDescriptor.parentDeviceId())) { + qCWarning(dcDeviceManager()) << "Invalid parent device id. Not adding device to the system."; + continue; + } Device *device = new Device(plugin->pluginId(), deviceClassId, this); device->m_autoCreated = true; device->setName(deviceDescriptor.title()); device->setParams(deviceDescriptor.params()); + device->setParentId(deviceDescriptor.parentDeviceId()); DeviceSetupStatus setupStatus = setupDevice(device); switch (setupStatus) { diff --git a/libnymea/plugin/devicedescriptor.cpp b/libnymea/plugin/devicedescriptor.cpp index 93f0b830..b12a3936 100644 --- a/libnymea/plugin/devicedescriptor.cpp +++ b/libnymea/plugin/devicedescriptor.cpp @@ -44,22 +44,24 @@ DeviceDescriptor::DeviceDescriptor(): } -/*! Construct a DeviceDescriptor with the given \a deviceClassId, \a title and \a description.*/ -DeviceDescriptor::DeviceDescriptor(const DeviceClassId &deviceClassId, const QString &title, const QString &description): +/*! Construct a DeviceDescriptor with the given \a deviceClassId, \a title, \a description and \a parentDeviceId.*/ +DeviceDescriptor::DeviceDescriptor(const DeviceClassId &deviceClassId, const QString &title, const QString &description, const DeviceId &parentDeviceId): m_id(DeviceDescriptorId::createDeviceDescriptorId()), m_deviceClassId(deviceClassId), m_title(title), - m_description(description) + m_description(description), + m_parentDeviceId(parentDeviceId) { } -/*! Construct a DeviceDescriptor with the given \a id, \a deviceClassId, \a title and \a description.*/ -DeviceDescriptor::DeviceDescriptor(const DeviceDescriptorId &id, const DeviceClassId &deviceClassId, const QString &title, const QString &description) : +/*! Construct a DeviceDescriptor with the given \a id, \a deviceClassId, \a title, \a description and \a parentDeviceId.*/ +DeviceDescriptor::DeviceDescriptor(const DeviceDescriptorId &id, const DeviceClassId &deviceClassId, const QString &title, const QString &description, const DeviceId &parentDeviceId) : m_id(id), m_deviceClassId(deviceClassId), m_title(title), - m_description(description) + m_description(description), + m_parentDeviceId(parentDeviceId) { } @@ -106,6 +108,18 @@ void DeviceDescriptor::setDescription(const QString &description) m_description = description; } +/*! Returns the parent device id for devices created from this DeviceDescriptor. */ +DeviceId DeviceDescriptor::parentDeviceId() const +{ + return m_parentDeviceId; +} + +/*! Sets the parent device Id for devices created from this DeviceDescriptor. */ +void DeviceDescriptor::setParentDeviceId(const DeviceId &parentDeviceId) +{ + m_parentDeviceId = parentDeviceId; +} + /*! Returns the list of \l{Param}{Params} of this DeviceDescriptor. */ ParamList DeviceDescriptor::params() const { diff --git a/libnymea/plugin/devicedescriptor.h b/libnymea/plugin/devicedescriptor.h index 48014ac5..7ed73dbc 100644 --- a/libnymea/plugin/devicedescriptor.h +++ b/libnymea/plugin/devicedescriptor.h @@ -34,8 +34,8 @@ class LIBNYMEA_EXPORT DeviceDescriptor { public: DeviceDescriptor(); - DeviceDescriptor(const DeviceClassId &deviceClassId, const QString &title = QString(), const QString &description = QString()); - DeviceDescriptor(const DeviceDescriptorId &id, const DeviceClassId &deviceClassId, const QString &title = QString(), const QString &description = QString()); + DeviceDescriptor(const DeviceClassId &deviceClassId, const QString &title = QString(), const QString &description = QString(), const DeviceId &parentDeviceId = DeviceId()); + DeviceDescriptor(const DeviceDescriptorId &id, const DeviceClassId &deviceClassId, const QString &title = QString(), const QString &description = QString(), const DeviceId &parentDeviceId = DeviceId()); bool isValid() const; @@ -48,6 +48,9 @@ public: QString description() const; void setDescription(const QString &description); + DeviceId parentDeviceId() const; + void setParentDeviceId(const DeviceId &parentDeviceId); + ParamList params() const; void setParams(const ParamList ¶ms); @@ -56,6 +59,7 @@ private: DeviceClassId m_deviceClassId; QString m_title; QString m_description; + DeviceId m_parentDeviceId; ParamList m_params; };