update nullptr and improve upnp discovery
This commit is contained in:
parent
f02a9fcdd4
commit
89b860a7eb
@ -1,3 +1,25 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2017 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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 *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#include "bluetoothlowenergymanager.h"
|
#include "bluetoothlowenergymanager.h"
|
||||||
#include "loggingcategories.h"
|
#include "loggingcategories.h"
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,25 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2017 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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 *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#ifndef BLUETOOTHLOWENERGYMANAGER_H
|
#ifndef BLUETOOTHLOWENERGYMANAGER_H
|
||||||
#define BLUETOOTHLOWENERGYMANAGER_H
|
#define BLUETOOTHLOWENERGYMANAGER_H
|
||||||
|
|
||||||
|
|||||||
@ -206,15 +206,12 @@ DeviceManager::DeviceManager(const QLocale &locale, QObject *parent) :
|
|||||||
qRegisterMetaType<DeviceDescriptor>();
|
qRegisterMetaType<DeviceDescriptor>();
|
||||||
|
|
||||||
m_hardwareManager = new HardwareManager(this);
|
m_hardwareManager = new HardwareManager(this);
|
||||||
connect(m_hardwareManager->pluginTimer(), &PluginTimer::timerEvent, this, &DeviceManager::timerEvent);
|
|
||||||
// connect(m_hardwareManager->upnpDiscovery(), &UpnpDiscovery::discoveryFinished, this, &DeviceManager::upnpDiscoveryFinished);
|
|
||||||
// connect(m_hardwareManager->upnpDiscovery(), &UpnpDiscovery::upnpNotify, this, &DeviceManager::upnpNotifyReceived);
|
|
||||||
// connect(m_hardwareManager->bluetoothScanner(), &BluetoothScanner::bluetoothDiscoveryFinished, this, &DeviceManager::bluetoothDiscoveryFinished);
|
|
||||||
|
|
||||||
// Give hardware a chance to start up before loading plugins etc.
|
// Give hardware a chance to start up before loading plugins etc.
|
||||||
QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection);
|
||||||
QMetaObject::invokeMethod(this, "loadConfiguredDevices", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "loadConfiguredDevices", Qt::QueuedConnection);
|
||||||
QMetaObject::invokeMethod(this, "startMonitoringAutoDevices", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "startMonitoringAutoDevices", Qt::QueuedConnection);
|
||||||
|
|
||||||
// Make sure this is always emitted after plugins and devices are loaded
|
// Make sure this is always emitted after plugins and devices are loaded
|
||||||
QMetaObject::invokeMethod(this, "onLoaded", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "onLoaded", Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
@ -1430,73 +1427,6 @@ void DeviceManager::slotDeviceStateValueChanged(const QUuid &stateTypeId, const
|
|||||||
emit eventTriggered(event);
|
emit eventTriggered(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
//void DeviceManager::radio433SignalReceived(QList<int> rawData)
|
|
||||||
//{
|
|
||||||
// QList<DevicePlugin*> targetPlugins;
|
|
||||||
|
|
||||||
// foreach (Device *device, m_configuredDevices) {
|
|
||||||
// DeviceClass deviceClass = m_supportedDevices.value(device->deviceClassId());
|
|
||||||
// DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId());
|
|
||||||
// if (plugin->requiredHardware().testFlag(HardwareResource::TypeRadio433) && !targetPlugins.contains(plugin)) {
|
|
||||||
// targetPlugins.append(plugin);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// foreach (DevicePlugin *plugin, m_discoveringPlugins) {
|
|
||||||
// if (plugin->requiredHardware().testFlag(HardwareResource::TypeRadio433) && !targetPlugins.contains(plugin)) {
|
|
||||||
// targetPlugins.append(plugin);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// foreach (DevicePlugin *plugin, targetPlugins) {
|
|
||||||
// plugin->radioData(rawData);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void DeviceManager::replyReady(const PluginId &pluginId, QNetworkReply *reply)
|
|
||||||
//{
|
|
||||||
// foreach (DevicePlugin *devicePlugin, m_devicePlugins) {
|
|
||||||
// if (devicePlugin->requiredHardware().testFlag(HardwareResource::TypeNetworkManager) && devicePlugin->pluginId() == pluginId) {
|
|
||||||
// devicePlugin->networkManagerReplyReady(reply);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void DeviceManager::upnpDiscoveryFinished(const QList<UpnpDeviceDescriptor> &deviceDescriptorList, const PluginId &pluginId)
|
|
||||||
//{
|
|
||||||
// foreach (DevicePlugin *devicePlugin, m_devicePlugins) {
|
|
||||||
// if (devicePlugin->requiredHardware().testFlag(HardwareResource::TypeUpnpDisovery) && devicePlugin->pluginId() == pluginId) {
|
|
||||||
// devicePlugin->upnpDiscoveryFinished(deviceDescriptorList);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void DeviceManager::upnpNotifyReceived(const QByteArray ¬ifyData)
|
|
||||||
//{
|
|
||||||
// foreach (DevicePlugin *devicePlugin, m_devicePlugins) {
|
|
||||||
// if (devicePlugin->requiredHardware().testFlag(HardwareResource::TypeUpnpDisovery)) {
|
|
||||||
// devicePlugin->upnpNotifyReceived(notifyData);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void DeviceManager::bluetoothDiscoveryFinished(const PluginId &pluginId, const QList<QBluetoothDeviceInfo> &deviceInfos)
|
|
||||||
//{
|
|
||||||
// foreach (DevicePlugin *devicePlugin, m_devicePlugins) {
|
|
||||||
// if (devicePlugin->requiredHardware().testFlag(HardwareResource::TypeBluetoothLE) && devicePlugin->pluginId() == pluginId) {
|
|
||||||
// devicePlugin->bluetoothDiscoveryFinished(deviceInfos);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
void DeviceManager::timerEvent()
|
|
||||||
{
|
|
||||||
foreach (DevicePlugin *plugin, m_pluginTimerUsers) {
|
|
||||||
if (plugin->requiredHardware().testFlag(HardwareResource::TypeTimer)) {
|
|
||||||
plugin->guhTimer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceManager::verifyPluginMetadata(const QJsonObject &data)
|
bool DeviceManager::verifyPluginMetadata(const QJsonObject &data)
|
||||||
{
|
{
|
||||||
QStringList requiredFields;
|
QStringList requiredFields;
|
||||||
|
|||||||
@ -89,7 +89,7 @@ public:
|
|||||||
};
|
};
|
||||||
Q_ENUM(DeviceSetupStatus)
|
Q_ENUM(DeviceSetupStatus)
|
||||||
|
|
||||||
explicit DeviceManager(const QLocale &locale, QObject *parent = 0);
|
explicit DeviceManager(const QLocale &locale, QObject *parent = nullptr);
|
||||||
~DeviceManager();
|
~DeviceManager();
|
||||||
|
|
||||||
static QStringList pluginSearchDirs();
|
static QStringList pluginSearchDirs();
|
||||||
@ -167,14 +167,6 @@ private slots:
|
|||||||
// Only connect this to Devices. It will query the sender()
|
// Only connect this to Devices. It will query the sender()
|
||||||
void slotDeviceStateValueChanged(const QUuid &stateTypeId, const QVariant &value);
|
void slotDeviceStateValueChanged(const QUuid &stateTypeId, const QVariant &value);
|
||||||
|
|
||||||
// void radio433SignalReceived(QList<int> rawData);
|
|
||||||
// void replyReady(const PluginId &pluginId, QNetworkReply *reply);
|
|
||||||
// void upnpDiscoveryFinished(const QList<UpnpDeviceDescriptor> &deviceDescriptorList, const PluginId &pluginId);
|
|
||||||
// void upnpNotifyReceived(const QByteArray ¬ifyData);
|
|
||||||
// void bluetoothDiscoveryFinished(const PluginId &pluginId, const QList<QBluetoothDeviceInfo> &deviceInfos);
|
|
||||||
|
|
||||||
void timerEvent();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool verifyPluginMetadata(const QJsonObject &data);
|
bool verifyPluginMetadata(const QJsonObject &data);
|
||||||
DeviceError addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId());
|
DeviceError addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QString &name, const ParamList ¶ms, const DeviceId id = DeviceId::createDeviceId());
|
||||||
|
|||||||
@ -43,7 +43,7 @@ public:
|
|||||||
SettingsRoleDeviceStates
|
SettingsRoleDeviceStates
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit GuhSettings(const SettingsRole &role = SettingsRoleNone, QObject *parent = 0);
|
explicit GuhSettings(const SettingsRole &role = SettingsRoleNone, QObject *parent = nullptr);
|
||||||
~GuhSettings();
|
~GuhSettings();
|
||||||
|
|
||||||
SettingsRole settingsRole() const;
|
SettingsRole settingsRole() const;
|
||||||
|
|||||||
@ -54,7 +54,7 @@ public:
|
|||||||
EdgeNone
|
EdgeNone
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit Gpio(const int &gpio, QObject *parent = 0);
|
explicit Gpio(const int &gpio, QObject *parent = nullptr);
|
||||||
~Gpio();
|
~Gpio();
|
||||||
|
|
||||||
QString gpioDirectory() const;
|
QString gpioDirectory() const;
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class LIBGUH_EXPORT GpioMonitor : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit GpioMonitor(int gpio, QObject *parent = 0);
|
explicit GpioMonitor(int gpio, QObject *parent = nullptr);
|
||||||
|
|
||||||
bool enable(bool activeLow = false, Gpio::Edge edgeInterrupt = Gpio::EdgeBoth);
|
bool enable(bool activeLow = false, Gpio::Edge edgeInterrupt = Gpio::EdgeBoth);
|
||||||
void disable();
|
void disable();
|
||||||
|
|||||||
@ -67,7 +67,7 @@ public:
|
|||||||
PolarityInvalid
|
PolarityInvalid
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit Pwm(int chipNumber, QObject *parent = 0);
|
explicit Pwm(int chipNumber, QObject *parent = nullptr);
|
||||||
~Pwm();
|
~Pwm();
|
||||||
|
|
||||||
static bool isAvailable();
|
static bool isAvailable();
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class LIBGUH_EXPORT Radio433 : public HardwareResource
|
|||||||
friend class HardwareManager;
|
friend class HardwareManager;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Radio433(QObject *parent = 0);
|
explicit Radio433(QObject *parent = nullptr);
|
||||||
Radio433BrennenstuhlGateway *m_brennenstuhlTransmitter;
|
Radio433BrennenstuhlGateway *m_brennenstuhlTransmitter;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class LIBGUH_EXPORT Radio433BrennenstuhlGateway : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit Radio433BrennenstuhlGateway(QObject *parent = 0);
|
explicit Radio433BrennenstuhlGateway(QObject *parent = nullptr);
|
||||||
|
|
||||||
bool sendData(int delay, QList<int> rawData, int repetitions);
|
bool sendData(int delay, QList<int> rawData, int repetitions);
|
||||||
bool enable();
|
bool enable();
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class LIBGUH_EXPORT Radio433Trasmitter : public QThread
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit Radio433Trasmitter(QObject *parent = 0, int gpio = 22);
|
explicit Radio433Trasmitter(QObject *parent = nullptr, int gpio = 22);
|
||||||
~Radio433Trasmitter();
|
~Radio433Trasmitter();
|
||||||
|
|
||||||
bool startTransmitter();
|
bool startTransmitter();
|
||||||
|
|||||||
@ -1,3 +1,25 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2017 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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 *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#include "hardwaremanager.h"
|
#include "hardwaremanager.h"
|
||||||
|
|
||||||
#include "plugintimer.h"
|
#include "plugintimer.h"
|
||||||
|
|||||||
@ -1,3 +1,25 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2017 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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 *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#ifndef HARDWAREMANAGER_H
|
#ifndef HARDWAREMANAGER_H
|
||||||
#define HARDWAREMANAGER_H
|
#define HARDWAREMANAGER_H
|
||||||
|
|
||||||
|
|||||||
@ -50,10 +50,10 @@ public:
|
|||||||
bool available() const;
|
bool available() const;
|
||||||
bool enabled() const;
|
bool enabled() const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HardwareResource::Type m_hardwareReourceType;
|
HardwareResource::Type m_hardwareReourceType;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
|
// Note: default enabled, but not available. Each hardwareresource has explicitly chek if available
|
||||||
bool m_available = false;
|
bool m_available = false;
|
||||||
bool m_enabled = true;
|
bool m_enabled = true;
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ public:
|
|||||||
QtAvahiClientStateConnecting
|
QtAvahiClientStateConnecting
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit QtAvahiClient(QObject *parent = 0);
|
explicit QtAvahiClient(QObject *parent = nullptr);
|
||||||
~QtAvahiClient();
|
~QtAvahiClient();
|
||||||
|
|
||||||
QtAvahiClientState state() const;
|
QtAvahiClientState state() const;
|
||||||
|
|||||||
@ -45,7 +45,7 @@ public:
|
|||||||
QtAvahiServiceStateFailure = 4
|
QtAvahiServiceStateFailure = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit QtAvahiService(QObject *parent = 0);
|
explicit QtAvahiService(QObject *parent = nullptr);
|
||||||
~QtAvahiService();
|
~QtAvahiService();
|
||||||
|
|
||||||
quint16 port() const;
|
quint16 port() const;
|
||||||
|
|||||||
@ -54,7 +54,7 @@ public slots:
|
|||||||
bool disable();
|
bool disable();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit QtAvahiServiceBrowser(QObject *parent = 0);
|
explicit QtAvahiServiceBrowser(QObject *parent = nullptr);
|
||||||
~QtAvahiServiceBrowser();
|
~QtAvahiServiceBrowser();
|
||||||
|
|
||||||
QtAvahiServiceBrowserPrivate *d_ptr;
|
QtAvahiServiceBrowserPrivate *d_ptr;
|
||||||
|
|||||||
@ -58,7 +58,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// Note: only the HardwareManager is allowed to create this resource
|
// Note: only the HardwareManager is allowed to create this resource
|
||||||
NetworkAccessManager(QNetworkAccessManager *networkManager, QObject *parent = 0);
|
NetworkAccessManager(QNetworkAccessManager *networkManager, QObject *parent = nullptr);
|
||||||
QNetworkAccessManager *m_manager;
|
QNetworkAccessManager *m_manager;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|||||||
@ -39,7 +39,7 @@ class LIBGUH_EXPORT OAuth2 : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit OAuth2(QString clientId, QString clientSecret, QObject *parent = 0);
|
explicit OAuth2(QString clientId, QString clientSecret, QObject *parent = nullptr);
|
||||||
|
|
||||||
QUrl url() const;
|
QUrl url() const;
|
||||||
void setUrl(const QUrl &url);
|
void setUrl(const QUrl &url);
|
||||||
|
|||||||
@ -32,7 +32,7 @@ class LIBGUH_EXPORT UpnpDevice : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit UpnpDevice(QObject *parent = 0, UpnpDeviceDescriptor upnpDeviceDescriptor = UpnpDeviceDescriptor());
|
explicit UpnpDevice(QObject *parent = nullptr, UpnpDeviceDescriptor upnpDeviceDescriptor = UpnpDeviceDescriptor());
|
||||||
|
|
||||||
QUrl location();
|
QUrl location();
|
||||||
void setLocation(const QUrl &location);
|
void setLocation(const QUrl &location);
|
||||||
|
|||||||
@ -52,6 +52,7 @@
|
|||||||
#include "loggingcategories.h"
|
#include "loggingcategories.h"
|
||||||
#include "guhsettings.h"
|
#include "guhsettings.h"
|
||||||
|
|
||||||
|
#include <QMetaObject>
|
||||||
#include <QNetworkInterface>
|
#include <QNetworkInterface>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
#include <QXmlStreamWriter>
|
#include <QXmlStreamWriter>
|
||||||
@ -81,7 +82,7 @@ UpnpDiscovery::~UpnpDiscovery()
|
|||||||
|
|
||||||
/*! Returns false, if the \l{UpnpDiscovery} resource is not available. Returns true, if a device with
|
/*! Returns false, if the \l{UpnpDiscovery} resource is not available. Returns true, if a device with
|
||||||
* the given \a searchTarget, \a userAgent and \a pluginId can be discovered.*/
|
* the given \a searchTarget, \a userAgent and \a pluginId can be discovered.*/
|
||||||
bool UpnpDiscovery::discoverDevices(const QString &searchTarget, const QString &userAgent, const PluginId &pluginId)
|
bool UpnpDiscovery::discoverDevices(QPointer<QObject> caller, const QString &callbackMethod, const QString &searchTarget, const QString &userAgent)
|
||||||
{
|
{
|
||||||
if (!available()) {
|
if (!available()) {
|
||||||
qCWarning(dcHardware()) << name() << "not available.";
|
qCWarning(dcHardware()) << name() << "not available.";
|
||||||
@ -103,10 +104,10 @@ bool UpnpDiscovery::discoverDevices(const QString &searchTarget, const QString &
|
|||||||
|
|
||||||
qCDebug(dcHardware) << name() << "discover" << searchTarget << userAgent;
|
qCDebug(dcHardware) << name() << "discover" << searchTarget << userAgent;
|
||||||
|
|
||||||
// create a new request
|
|
||||||
UpnpDiscoveryRequest *request = new UpnpDiscoveryRequest(this, pluginId, searchTarget, userAgent);
|
|
||||||
connect(request, &UpnpDiscoveryRequest::discoveryTimeout, this, &UpnpDiscovery::discoverTimeout);
|
|
||||||
|
|
||||||
|
// Create a new request
|
||||||
|
UpnpDiscoveryRequest *request = new UpnpDiscoveryRequest(this, caller, callbackMethod, searchTarget, userAgent);
|
||||||
|
connect(request, &UpnpDiscoveryRequest::discoveryTimeout, this, &UpnpDiscovery::discoverTimeout);
|
||||||
request->discover();
|
request->discover();
|
||||||
m_discoverRequests.append(request);
|
m_discoverRequests.append(request);
|
||||||
return true;
|
return true;
|
||||||
@ -419,7 +420,14 @@ void UpnpDiscovery::sendAliveMessage()
|
|||||||
void UpnpDiscovery::discoverTimeout()
|
void UpnpDiscovery::discoverTimeout()
|
||||||
{
|
{
|
||||||
UpnpDiscoveryRequest *discoveryRequest = static_cast<UpnpDiscoveryRequest*>(sender());
|
UpnpDiscoveryRequest *discoveryRequest = static_cast<UpnpDiscoveryRequest*>(sender());
|
||||||
emit discoveryFinished(discoveryRequest->deviceList(), discoveryRequest->pluginId());
|
|
||||||
|
if (discoveryRequest->caller().isNull()) {
|
||||||
|
qCWarning(dcHardware()) << name() << "The reciver of the discovery request does not exist any more.";
|
||||||
|
} else {
|
||||||
|
// Invoke the method containing the discovered devicelist
|
||||||
|
// FIXME: check the callback method paramters during compililation
|
||||||
|
QMetaObject::invokeMethod(discoveryRequest->caller().data(), discoveryRequest->callbackMethod().toLatin1().data(), Q_ARG(QList<UpnpDeviceDescriptor>, discoveryRequest->deviceList()));
|
||||||
|
}
|
||||||
|
|
||||||
m_discoverRequests.removeOne(discoveryRequest);
|
m_discoverRequests.removeOne(discoveryRequest);
|
||||||
delete discoveryRequest;
|
delete discoveryRequest;
|
||||||
@ -443,6 +451,7 @@ bool UpnpDiscovery::enable()
|
|||||||
|
|
||||||
if(!m_socket->bind(QHostAddress::AnyIPv4, m_port, QUdpSocket::ShareAddress)){
|
if(!m_socket->bind(QHostAddress::AnyIPv4, m_port, QUdpSocket::ShareAddress)){
|
||||||
qCWarning(dcHardware()) << name() << "could not bind to port" << m_port;
|
qCWarning(dcHardware()) << name() << "could not bind to port" << m_port;
|
||||||
|
setAvailable(false);
|
||||||
delete m_socket;
|
delete m_socket;
|
||||||
m_socket = nullptr;
|
m_socket = nullptr;
|
||||||
return false;
|
return false;
|
||||||
@ -450,6 +459,7 @@ bool UpnpDiscovery::enable()
|
|||||||
|
|
||||||
if(!m_socket->joinMulticastGroup(m_host)){
|
if(!m_socket->joinMulticastGroup(m_host)){
|
||||||
qCWarning(dcHardware()) << name() << "could not join multicast group" << m_host;
|
qCWarning(dcHardware()) << name() << "could not join multicast group" << m_host;
|
||||||
|
setAvailable(false);
|
||||||
delete m_socket;
|
delete m_socket;
|
||||||
m_socket = nullptr;
|
m_socket = nullptr;
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -49,11 +49,11 @@ class LIBGUH_EXPORT UpnpDiscovery : public HardwareResource
|
|||||||
friend class HardwareManager;
|
friend class HardwareManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool discoverDevices(const QString &searchTarget = "ssdp:all", const QString &userAgent = "", const PluginId &pluginId = PluginId());
|
bool discoverDevices(QPointer<QObject> caller = QPointer<QObject>(), const QString &callbackMethod = QString(), const QString &searchTarget = "ssdp:all", const QString &userAgent = QString());
|
||||||
void sendToMulticast(const QByteArray &data);
|
void sendToMulticast(const QByteArray &data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit UpnpDiscovery(QNetworkAccessManager *networkAccessManager, QObject *parent = 0);
|
explicit UpnpDiscovery(QNetworkAccessManager *networkAccessManager, QObject *parent = nullptr);
|
||||||
~UpnpDiscovery();
|
~UpnpDiscovery();
|
||||||
|
|
||||||
QUdpSocket *m_socket = nullptr;
|
QUdpSocket *m_socket = nullptr;
|
||||||
@ -71,7 +71,6 @@ private:
|
|||||||
void respondToSearchRequest(QHostAddress host, int port);
|
void respondToSearchRequest(QHostAddress host, int port);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void discoveryFinished(const QList<UpnpDeviceDescriptor> &deviceDescriptorList, const PluginId & pluginId);
|
|
||||||
void upnpNotify(const QByteArray ¬ifyMessage);
|
void upnpNotify(const QByteArray ¬ifyMessage);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|||||||
@ -23,10 +23,11 @@
|
|||||||
#include "upnpdiscoveryrequest.h"
|
#include "upnpdiscoveryrequest.h"
|
||||||
#include "loggingcategories.h"
|
#include "loggingcategories.h"
|
||||||
|
|
||||||
UpnpDiscoveryRequest::UpnpDiscoveryRequest(UpnpDiscovery *upnpDiscovery, PluginId pluginId, QString searchTarget, QString userAgent):
|
UpnpDiscoveryRequest::UpnpDiscoveryRequest(UpnpDiscovery *upnpDiscovery, QPointer<QObject> caller, const QString &callbackMethod, QString searchTarget, QString userAgent):
|
||||||
QObject(upnpDiscovery),
|
QObject(upnpDiscovery),
|
||||||
m_upnpDiscovery(upnpDiscovery),
|
m_upnpDiscovery(upnpDiscovery),
|
||||||
m_pluginId(pluginId),
|
m_caller(caller),
|
||||||
|
m_callbackMethod(callbackMethod),
|
||||||
m_searchTarget(searchTarget),
|
m_searchTarget(searchTarget),
|
||||||
m_userAgent(userAgent)
|
m_userAgent(userAgent)
|
||||||
{
|
{
|
||||||
@ -45,6 +46,9 @@ void UpnpDiscoveryRequest::discover()
|
|||||||
"USR-AGENT: " + m_userAgent.toUtf8() + "\r\n\r\n");
|
"USR-AGENT: " + m_userAgent.toUtf8() + "\r\n\r\n");
|
||||||
|
|
||||||
m_upnpDiscovery->sendToMulticast(ssdpSearchMessage);
|
m_upnpDiscovery->sendToMulticast(ssdpSearchMessage);
|
||||||
|
|
||||||
|
// TODO: call in 500ms steps
|
||||||
|
|
||||||
qCDebug(dcHardware) << "--> UPnP discovery called.";
|
qCDebug(dcHardware) << "--> UPnP discovery called.";
|
||||||
|
|
||||||
m_timer->start(5000);
|
m_timer->start(5000);
|
||||||
@ -52,7 +56,6 @@ void UpnpDiscoveryRequest::discover()
|
|||||||
|
|
||||||
void UpnpDiscoveryRequest::addDeviceDescriptor(const UpnpDeviceDescriptor &deviceDescriptor)
|
void UpnpDiscoveryRequest::addDeviceDescriptor(const UpnpDeviceDescriptor &deviceDescriptor)
|
||||||
{
|
{
|
||||||
|
|
||||||
// check if we allready have the device in the list
|
// check if we allready have the device in the list
|
||||||
bool isAlreadyInList = false;
|
bool isAlreadyInList = false;
|
||||||
foreach (UpnpDeviceDescriptor upnpDeviceDescriptor, m_deviceList) {
|
foreach (UpnpDeviceDescriptor upnpDeviceDescriptor, m_deviceList) {
|
||||||
@ -80,9 +83,14 @@ QList<UpnpDeviceDescriptor> UpnpDiscoveryRequest::deviceList() const
|
|||||||
return m_deviceList;
|
return m_deviceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginId UpnpDiscoveryRequest::pluginId() const
|
QPointer<QObject> UpnpDiscoveryRequest::caller() const
|
||||||
{
|
{
|
||||||
return m_pluginId;
|
return m_caller;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString UpnpDiscoveryRequest::callbackMethod() const
|
||||||
|
{
|
||||||
|
return m_callbackMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString UpnpDiscoveryRequest::searchTarget() const
|
QString UpnpDiscoveryRequest::searchTarget() const
|
||||||
|
|||||||
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QMetaObject>
|
||||||
|
|
||||||
#include "upnpdiscovery.h"
|
#include "upnpdiscovery.h"
|
||||||
#include "upnpdevicedescriptor.h"
|
#include "upnpdevicedescriptor.h"
|
||||||
@ -37,21 +38,23 @@ class LIBGUH_EXPORT UpnpDiscoveryRequest : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit UpnpDiscoveryRequest(UpnpDiscovery *upnpDiscovery, PluginId pluginId, QString searchTarget, QString userAgent);
|
explicit UpnpDiscoveryRequest(UpnpDiscovery *upnpDiscovery, QPointer<QObject> caller, const QString &callbackMethod, QString searchTarget, QString userAgent);
|
||||||
|
|
||||||
void discover();
|
void discover();
|
||||||
void addDeviceDescriptor(const UpnpDeviceDescriptor &deviceDescriptor);
|
void addDeviceDescriptor(const UpnpDeviceDescriptor &deviceDescriptor);
|
||||||
QNetworkRequest createNetworkRequest(UpnpDeviceDescriptor deviveDescriptor);
|
QNetworkRequest createNetworkRequest(UpnpDeviceDescriptor deviveDescriptor);
|
||||||
QList<UpnpDeviceDescriptor> deviceList() const;
|
QList<UpnpDeviceDescriptor> deviceList() const;
|
||||||
|
|
||||||
PluginId pluginId() const;
|
QPointer<QObject> caller() const;
|
||||||
|
QString callbackMethod() const;
|
||||||
QString searchTarget() const;
|
QString searchTarget() const;
|
||||||
QString userAgent() const;
|
QString userAgent() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UpnpDiscovery *m_upnpDiscovery;
|
UpnpDiscovery *m_upnpDiscovery;
|
||||||
QTimer *m_timer;
|
QTimer *m_timer;
|
||||||
PluginId m_pluginId;
|
QPointer<QObject> m_caller;
|
||||||
|
QString m_callbackMethod;
|
||||||
QString m_searchTarget;
|
QString m_searchTarget;
|
||||||
QString m_userAgent;
|
QString m_userAgent;
|
||||||
|
|
||||||
@ -60,8 +63,6 @@ private:
|
|||||||
signals:
|
signals:
|
||||||
void discoveryTimeout();
|
void discoveryTimeout();
|
||||||
|
|
||||||
public slots:
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // UPNPDISCOVERYREQUEST_H
|
#endif // UPNPDISCOVERYREQUEST_H
|
||||||
|
|||||||
@ -75,8 +75,8 @@ signals:
|
|||||||
void stateValueChanged(const QUuid &stateTypeId, const QVariant &value);
|
void stateValueChanged(const QUuid &stateTypeId, const QVariant &value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Device(const PluginId &pluginId, const DeviceId &id, const DeviceClassId &deviceClassId, QObject *parent = 0);
|
Device(const PluginId &pluginId, const DeviceId &id, const DeviceClassId &deviceClassId, QObject *parent = nullptr);
|
||||||
Device(const PluginId &pluginId, const DeviceClassId &deviceClassId, QObject *parent = 0);
|
Device(const PluginId &pluginId, const DeviceClassId &deviceClassId, QObject *parent = nullptr);
|
||||||
|
|
||||||
void setupCompleted();
|
void setupCompleted();
|
||||||
void setSetupComplete(const bool &complete);
|
void setSetupComplete(const bool &complete);
|
||||||
|
|||||||
@ -531,23 +531,6 @@ Device *DevicePlugin::findDeviceByParams(const ParamList ¶ms) const
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
Transmits data contained in \a rawData on the \l{Radio433} devices, depending on the hardware requested by this plugin.
|
|
||||||
Returns true if, the \a rawData with a certain \a delay (pulse length) can be sent \a repetitions times.
|
|
||||||
|
|
||||||
\sa Radio433, requiredHardware()
|
|
||||||
*/
|
|
||||||
bool DevicePlugin::transmitData(int delay, QList<int> rawData, int repetitions)
|
|
||||||
{
|
|
||||||
switch (requiredHardware()) {
|
|
||||||
case HardwareResource::TypeRadio433:
|
|
||||||
return deviceManager()->m_hardwareManager->radio433()->sendData(delay, rawData, repetitions);
|
|
||||||
default:
|
|
||||||
qCWarning(dcDeviceManager) << "Unknown harware type. Cannot send.";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DevicePlugin::setMetaData(const QJsonObject &metaData)
|
void DevicePlugin::setMetaData(const QJsonObject &metaData)
|
||||||
{
|
{
|
||||||
m_metaData = metaData;
|
m_metaData = metaData;
|
||||||
@ -962,38 +945,6 @@ void DevicePlugin::loadMetaData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
Starts a SSDP search for a certain \a searchTarget (ST). Certain UPnP devices need a special ST (i.e. "udap:rootservice"
|
|
||||||
for LG Smart Tv's), otherwise they will not respond on the SSDP search. Each HTTP request to this device needs sometimes
|
|
||||||
also a special \a userAgent, which will be written into the HTTP header.
|
|
||||||
|
|
||||||
\sa DevicePlugin::requiredHardware(), DevicePlugin::upnpDiscoveryFinished()
|
|
||||||
*/
|
|
||||||
void DevicePlugin::upnpDiscover(QString searchTarget, QString userAgent)
|
|
||||||
{
|
|
||||||
if(requiredHardware().testFlag(HardwareResource::TypeUpnpDisovery)){
|
|
||||||
deviceManager()->m_hardwareManager->upnpDiscovery()->discoverDevices(searchTarget, userAgent, pluginId());
|
|
||||||
} else {
|
|
||||||
qCWarning(dcDeviceManager) << "UPnP discovery resource not set for plugin" << pluginName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*! Returns the pointer to the central \l{QtAvahiService}{service} browser. */
|
|
||||||
QtAvahiServiceBrowser *DevicePlugin::avahiServiceBrowser() const
|
|
||||||
{
|
|
||||||
return deviceManager()->m_hardwareManager->avahiBrowser();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DevicePlugin::discoverBluetooth()
|
|
||||||
{
|
|
||||||
if(requiredHardware().testFlag(HardwareResource::TypeBluetoothLE)){
|
|
||||||
return deviceManager()->m_hardwareManager->bluetoothScanner()->discover(pluginId());
|
|
||||||
} else {
|
|
||||||
qCWarning(dcDeviceManager) << "Bluetooth LE resource not set for plugin" << pluginName();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList DevicePlugin::verifyFields(const QStringList &fields, const QJsonObject &value) const
|
QStringList DevicePlugin::verifyFields(const QStringList &fields, const QJsonObject &value) const
|
||||||
{
|
{
|
||||||
QStringList ret;
|
QStringList ret;
|
||||||
|
|||||||
@ -49,8 +49,11 @@ class Device;
|
|||||||
class LIBGUH_EXPORT DevicePlugin: public QObject
|
class LIBGUH_EXPORT DevicePlugin: public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
friend class DeviceManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DevicePlugin(QObject *parent = 0);
|
DevicePlugin(QObject *parent = nullptr);
|
||||||
virtual ~DevicePlugin();
|
virtual ~DevicePlugin();
|
||||||
|
|
||||||
virtual void init() {}
|
virtual void init() {}
|
||||||
@ -77,17 +80,6 @@ public:
|
|||||||
|
|
||||||
virtual DeviceManager::DeviceError executeAction(Device *device, const Action &action);
|
virtual DeviceManager::DeviceError executeAction(Device *device, const Action &action);
|
||||||
|
|
||||||
// Hardware input
|
|
||||||
virtual void radioData(const QList<int> &rawData) {Q_UNUSED(rawData)}
|
|
||||||
virtual void guhTimer() {}
|
|
||||||
virtual void upnpDiscoveryFinished(const QList<UpnpDeviceDescriptor> &upnpDeviceDescriptorList) { Q_UNUSED(upnpDeviceDescriptorList) }
|
|
||||||
virtual void upnpNotifyReceived(const QByteArray ¬ifyData) {Q_UNUSED(notifyData)}
|
|
||||||
|
|
||||||
virtual void networkManagerReplyReady(QNetworkReply *reply) {Q_UNUSED(reply)}
|
|
||||||
|
|
||||||
virtual void bluetoothDiscoveryFinished(const QList<QBluetoothDeviceInfo> &deviceInfos) { Q_UNUSED(deviceInfos) }
|
|
||||||
|
|
||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
QList<ParamType> configurationDescription() const;
|
QList<ParamType> configurationDescription() const;
|
||||||
DeviceManager::DeviceError setConfiguration(const ParamList &configuration);
|
DeviceManager::DeviceError setConfiguration(const ParamList &configuration);
|
||||||
@ -111,15 +103,6 @@ protected:
|
|||||||
HardwareManager *hardwareManager() const;
|
HardwareManager *hardwareManager() const;
|
||||||
Device* findDeviceByParams(const ParamList ¶ms) const;
|
Device* findDeviceByParams(const ParamList ¶ms) const;
|
||||||
|
|
||||||
// Radio 433
|
|
||||||
bool transmitData(int delay, QList<int> rawData);
|
|
||||||
|
|
||||||
// Avahi browse services
|
|
||||||
QtAvahiServiceBrowser *avahiServiceBrowser() const;
|
|
||||||
|
|
||||||
// Bluetooth LE discovery
|
|
||||||
bool discoverBluetooth();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setMetaData(const QJsonObject &metaData);
|
void setMetaData(const QJsonObject &metaData);
|
||||||
void loadMetaData();
|
void loadMetaData();
|
||||||
@ -140,8 +123,8 @@ private:
|
|||||||
static QVariantMap loadInterface(const QString &name);
|
static QVariantMap loadInterface(const QString &name);
|
||||||
static QStringList generateInterfaceParentList(const QString &interface);
|
static QStringList generateInterfaceParentList(const QString &interface);
|
||||||
|
|
||||||
QTranslator *m_translator;
|
QTranslator *m_translator = nullptr;
|
||||||
DeviceManager *m_deviceManager;
|
DeviceManager *m_deviceManager = nullptr;
|
||||||
|
|
||||||
QList<ParamType> m_configurationDescription;
|
QList<ParamType> m_configurationDescription;
|
||||||
ParamList m_config;
|
ParamList m_config;
|
||||||
@ -150,7 +133,6 @@ private:
|
|||||||
|
|
||||||
mutable QList<DeviceClass> m_supportedDevices;
|
mutable QList<DeviceClass> m_supportedDevices;
|
||||||
|
|
||||||
friend class DeviceManager;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_INTERFACE(DevicePlugin, "guru.guh.DevicePlugin")
|
Q_DECLARE_INTERFACE(DevicePlugin, "guru.guh.DevicePlugin")
|
||||||
|
|||||||
@ -1,3 +1,25 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2017 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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 *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#include "plugintimer.h"
|
#include "plugintimer.h"
|
||||||
#include "loggingcategories.h"
|
#include "loggingcategories.h"
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,25 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* *
|
||||||
|
* Copyright (C) 2017 Simon Stürz <simon.stuerz@guh.io> *
|
||||||
|
* *
|
||||||
|
* This file is part of guh. *
|
||||||
|
* *
|
||||||
|
* This library is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public *
|
||||||
|
* License as published by the Free Software Foundation; either *
|
||||||
|
* version 2.1 of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This library 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 *
|
||||||
|
* Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this library; If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
* *
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#ifndef PLUGINTIMER_H
|
#ifndef PLUGINTIMER_H
|
||||||
#define PLUGINTIMER_H
|
#define PLUGINTIMER_H
|
||||||
|
|
||||||
@ -17,6 +39,7 @@ private:
|
|||||||
int m_intervall = 10000;
|
int m_intervall = 10000;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
// TODO: emit different resolutions
|
||||||
void timerEvent();
|
void timerEvent();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|||||||
@ -148,7 +148,6 @@ public:
|
|||||||
StateOperatorOr
|
StateOperatorOr
|
||||||
};
|
};
|
||||||
|
|
||||||
Types(QObject *parent = 0);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(Types::InputType)
|
Q_DECLARE_METATYPE(Types::InputType)
|
||||||
|
|||||||
Reference in New Issue
Block a user