/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2015 Simon Stuerz * * Copyright (C) 2014 Michael Zanetti * * * * This file is part of guh. * * * * Guh is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, version 2 of the License. * * * * Guh is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with guh. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*! \class Device \brief A Device represents a installed and configured hardware device. \ingroup devices \inmodule libguh This class holds the values for configured devices. It is associated with a \{DeviceClass} which can be used to get more details about the device. \sa DeviceClass, DeviceDescriptor */ /*! \fn void Device::stateValueChanged(const QUuid &stateTypeId, const QVariant &value) This signal is emitted when the \l{State} with the given \a stateTypeId changed. The \a value parameter describes the new value of the State. */ #include "device.h" #include "types/event.h" #include "loggingcategories.h" #include /*! Construct an Device with the given \a pluginId, \a id, \a deviceClassId and \a parent. */ Device::Device(const PluginId &pluginId, const DeviceId &id, const DeviceClassId &deviceClassId, QObject *parent): QObject(parent), m_id(id), m_deviceClassId(deviceClassId), m_pluginId(pluginId), m_setupComplete(false) { } /*! Construct an Device with the given \a pluginId, \a deviceClassId and \a parent. A new DeviceId will be created for this Device. */ Device::Device(const PluginId &pluginId, const DeviceClassId &deviceClassId, QObject *parent): QObject(parent), m_id(DeviceId::createDeviceId()), m_deviceClassId(deviceClassId), m_pluginId(pluginId), m_setupComplete(false) { } void Device::setupCompleted() { m_setupComplete = true; } /*! Returns the id of this Device. */ DeviceId Device::id() const { return m_id; } /*! Returns the deviceClassId of the associated \l{DeviceClass}. */ DeviceClassId Device::deviceClassId() const { return m_deviceClassId; } /*! Returns the id of the \l{DevicePlugin} this Device is managed by. */ PluginId Device::pluginId() const { return m_pluginId; } /*! Returns the name of this Device. This is visible to the user. */ QString Device::name() const { return m_name; } /*! Set the \a name for this Device. This is visible to the user.*/ void Device::setName(const QString &name) { m_name = name; } /*! Returns the parameter of this Device. It must match the parameter description in the associated \l{DeviceClass}. */ ParamList Device::params() const { return m_params; } /*! Sets the \a params of this Device. It must match the parameter description in the associated \l{DeviceClass}. */ void Device::setParams(const ParamList ¶ms) { m_params = params; } /*! Returns the value of the \l{Param} of this Device with the given \a paramName. */ QVariant Device::paramValue(const QString ¶mName) const { foreach (const Param ¶m, m_params) { if (param.name() == paramName) { return param.value(); } } return QVariant(); } /*! Sets the \a value of the \l{Param} with the given \a paramName. */ void Device::setParamValue(const QString ¶mName, const QVariant &value) { ParamList params; foreach (Param param, m_params) { if (param.name() == paramName) { param.setValue(value); } params.append(param); } m_params = params; } /*! Returns the states of this Device. It must match the \l{StateType} description in the associated \l{DeviceClass}. */ QList Device::states() const { return m_states; } /*! Returns true, a \l{Param} with the given \a paramName exists for this Device. */ bool Device::hasParam(const QString ¶mName) const { foreach (const Param ¶m, m_params) { if (param.name() == paramName) { return true; } } return false; } DeviceId m_id; void Device::setStates(const QList &states) { m_states = states; } /*! Returns true, a \l{State} with the given \a stateTypeId exists for this Device. */ bool Device::hasState(const StateTypeId &stateTypeId) const { foreach (const State &state, m_states) { if (state.stateTypeId() == stateTypeId) { return true; } } return false; } /*! For convenience, this finds the \l{State} matching the given \a stateTypeId and returns the current valie in this Device. */ QVariant Device::stateValue(const StateTypeId &stateTypeId) const { foreach (const State &state, m_states) { if (state.stateTypeId() == stateTypeId) { return state.value(); } } return QVariant(); } /*! For convenience, this finds the \l{State} matching the given \a stateTypeId in this Device and sets the current value to \a value. */ void Device::setStateValue(const StateTypeId &stateTypeId, const QVariant &value) { for (int i = 0; i < m_states.count(); ++i) { if (m_states.at(i).stateTypeId() == stateTypeId) { if (m_states.at(i).value() == value) return; // TODO: check min/max value + possible values // to prevent an invalid state type from the plugin side State newState(stateTypeId, m_id); newState.setValue(value); m_states[i] = newState; emit stateValueChanged(stateTypeId, value); return; } } qCWarning(dcDeviceManager) << "failed setting state for" << m_name << value; } /*! Returns the \l{State} with the given \a stateTypeId of this Device. */ State Device::state(const StateTypeId &stateTypeId) const { for (int i = 0; i < m_states.count(); ++i) { if (m_states.at(i).stateTypeId() == stateTypeId) { return m_states.at(i); } } return State(StateTypeId(), DeviceId()); } /*! Returns the \l{DeviceId} of the parent Device from Device. If the parentId is not set, this device is a parent device. */ DeviceId Device::parentId() const { return m_parentId; } /*! Sets the \a parentId of this Device. If the parentId is not set, this device is a parent device. */ void Device::setParentId(const DeviceId &parentId) { m_parentId = parentId; } /*! Returns true, if setup of this Device is already completed. */ bool Device::setupComplete() const { return m_setupComplete; } void Device::setSetupComplete(const bool &complete) { m_setupComplete = complete; }