From f15e495c39d625e738fad9e3fe335a599d39c61c Mon Sep 17 00:00:00 2001 From: Simon Stuerz Date: Fri, 16 Aug 2013 03:54:58 +0200 Subject: [PATCH] lib added devicemanager, working on raspberry pi --- hive/client/client.pro | 2 +- hive/libhive/devicemanager.cpp | 53 ++++++++++++++++++++++ hive/libhive/devicemanager.h | 25 ++++++++++ hive/libhive/libhive.includes | 1 + hive/libhive/libhive.pro | 23 ++++++---- hive/libhive/server.cpp | 22 +++++++++ hive/libhive/server.h | 2 + hive/server/hive/hive.pro | 3 +- hive/server/hive/hivecore.cpp | 2 +- hive/server/hive/hivecore.h | 4 +- hive/server/hive_pi/hive_pi.pro | 18 +++++--- hive/server/hive_pi/hivecore.cpp | 29 ++++++++++++ hive/server/hive_pi/hivecore.h | 1 + hive/server/hive_pi/main.cpp | 3 ++ hive/server/hive_pi/radio/radioreciver.cpp | 15 ++++++ hive/server/hive_pi/radio/radioreciver.h | 21 +++++++++ hive/server/server.pro | 4 +- 17 files changed, 204 insertions(+), 24 deletions(-) create mode 100644 hive/libhive/devicemanager.cpp create mode 100644 hive/libhive/devicemanager.h create mode 100644 hive/libhive/libhive.includes create mode 100644 hive/server/hive_pi/radio/radioreciver.cpp create mode 100644 hive/server/hive_pi/radio/radioreciver.h diff --git a/hive/client/client.pro b/hive/client/client.pro index c8b2e553..79d986b8 100644 --- a/hive/client/client.pro +++ b/hive/client/client.pro @@ -1,3 +1,3 @@ TEMPLATE = subdirs -SUBDIRS += hive hive_pi +SUBDIRS += hive_client diff --git a/hive/libhive/devicemanager.cpp b/hive/libhive/devicemanager.cpp new file mode 100644 index 00000000..ef56c697 --- /dev/null +++ b/hive/libhive/devicemanager.cpp @@ -0,0 +1,53 @@ +#include "devicemanager.h" +#include + +DeviceManager::DeviceManager(QObject *parent) : + QObject(parent) +{ +} + +void DeviceManager::saveDeviceValue(QString deviceType, QString deviceName, QString key, QVariant value) +{ + QSettings settings("hive"); + settings.beginGroup(deviceType); + settings.beginGroup(deviceName); + settings.setValue(key,value); + qDebug() << "safed device value:" << deviceType << "->" << deviceName << "->" << key << ":" << value << "."; +} + +void DeviceManager::deleteDeviceValue(QString deviceType, QString deviceName, QString key) +{ + QSettings settings("hive"); + settings.beginGroup(deviceType); + settings.beginGroup(deviceName); + settings.remove(key); + qDebug() << "delete key of" << deviceName << key; + + +} + +void DeviceManager::deleteDevice(QString deviceType, QString deviceName) +{ + QSettings settings("hive"); + settings.beginGroup(deviceType); + settings.remove(deviceName); + qDebug() << "delete device" << deviceName; +} + +QStringList DeviceManager::getDevices(QString deviceType) +{ + QSettings settings("hive"); + settings.beginGroup(deviceType); + QStringList devices = settings.childGroups(); + return devices; + +} + +QStringList DeviceManager::getDeviceKeys(QString deviceType, QString deviceName) +{ + QSettings settings("hive"); + settings.beginGroup(deviceType); + settings.beginGroup(deviceName); + QStringList keys = settings.childKeys(); + return keys; +} diff --git a/hive/libhive/devicemanager.h b/hive/libhive/devicemanager.h new file mode 100644 index 00000000..e20cebed --- /dev/null +++ b/hive/libhive/devicemanager.h @@ -0,0 +1,25 @@ +#ifndef DEVICEMANAGER_H +#define DEVICEMANAGER_H + +#include +#include +#include + +class DeviceManager : public QObject +{ + Q_OBJECT +public: + explicit DeviceManager(QObject *parent = 0); + +signals: + +public slots: + void saveDeviceValue(QString deviceType, QString deviceName, QString key, QVariant value); + void deleteDeviceValue(QString deviceType, QString deviceName, QString key); + void deleteDevice(QString deviceType, QString deviceName); + QStringList getDevices(QString deviceType); + QStringList getDeviceKeys(QString deviceType, QString deviceName); + +}; + +#endif // DEVICEMANAGER_H diff --git a/hive/libhive/libhive.includes b/hive/libhive/libhive.includes new file mode 100644 index 00000000..cda4041e --- /dev/null +++ b/hive/libhive/libhive.includes @@ -0,0 +1 @@ +/home/timon/development/hive/hive/libhive \ No newline at end of file diff --git a/hive/libhive/libhive.pro b/hive/libhive/libhive.pro index 511fd959..d281c021 100644 --- a/hive/libhive/libhive.pro +++ b/hive/libhive/libhive.pro @@ -8,21 +8,24 @@ QT += core network TARGET = libhive TEMPLATE = lib +CONFIG += static DEFINES += LIBHIVE_LIBRARY SOURCES += libhive.cpp \ - server.cpp + server.cpp \ + devicemanager.cpp HEADERS += libhive.h\ libhive_global.h \ - server.h + server.h \ + devicemanager.h -unix:!symbian { - maemo5 { - target.path = /opt/usr/lib - } else { - target.path = /usr/lib - } - INSTALLS += target -} +#unix:!symbian { +# maemo5 { +# target.path = /opt/usr/lib +# } else { +# target.path = /usr/lib +# } +# INSTALLS += target +#} diff --git a/hive/libhive/server.cpp b/hive/libhive/server.cpp index 4e817e54..97c8101d 100644 --- a/hive/libhive/server.cpp +++ b/hive/libhive/server.cpp @@ -14,6 +14,10 @@ Server::Server(QObject *parent) : } qDebug() << "----------------------------"; +} + +bool Server::startServer() +{ // Listen on all Networkinterfaces foreach(const QHostAddress &address, QNetworkInterface::allAddresses()){ QTcpServer *server = new QTcpServer(this); @@ -26,6 +30,24 @@ Server::Server(QObject *parent) : delete server; } } + if(m_serverList.empty()){ + return false; + } + return true; +} + +bool Server::stopServer() +{ + // Listen on all Networkinterfaces + foreach(QTcpServer *server, m_serverList){ + qDebug() << "close server " << server->serverAddress().toString(); + server->close(); + delete server; + } + if(!m_serverList.empty()){ + return false; + } + return true; } void Server::incomingConnection() diff --git a/hive/libhive/server.h b/hive/libhive/server.h index d7d8f205..9867f603 100644 --- a/hive/libhive/server.h +++ b/hive/libhive/server.h @@ -20,6 +20,8 @@ private: signals: public slots: + bool startServer(); + bool stopServer(); private slots: void incomingConnection(); diff --git a/hive/server/hive/hive.pro b/hive/server/hive/hive.pro index 676fbedf..6a77ddf7 100644 --- a/hive/server/hive/hive.pro +++ b/hive/server/hive/hive.pro @@ -4,8 +4,7 @@ # #------------------------------------------------- -QT += core network - +QT += core QT -= gui TARGET = hive diff --git a/hive/server/hive/hivecore.cpp b/hive/server/hive/hivecore.cpp index 0502e50c..63527662 100644 --- a/hive/server/hive/hivecore.cpp +++ b/hive/server/hive/hivecore.cpp @@ -4,5 +4,5 @@ HiveCore::HiveCore(QObject *parent) : QObject(parent) { - m_server = new Server(this); +// m_server = new Server(this); } diff --git a/hive/server/hive/hivecore.h b/hive/server/hive/hivecore.h index 8d7760c9..890705e5 100644 --- a/hive/server/hive/hivecore.h +++ b/hive/server/hive/hivecore.h @@ -2,7 +2,7 @@ #define HIVECORE_H #include -#include "server.h" +//#include "server.h" class HiveCore : public QObject { @@ -11,7 +11,7 @@ public: explicit HiveCore(QObject *parent = 0); private: - Server *m_server; +// Server *m_server; signals: diff --git a/hive/server/hive_pi/hive_pi.pro b/hive/server/hive_pi/hive_pi.pro index ac51bf9d..6acb8163 100644 --- a/hive/server/hive_pi/hive_pi.pro +++ b/hive/server/hive_pi/hive_pi.pro @@ -15,17 +15,21 @@ CONFIG -= app_bundle target.path = /root/bin INSTALLS += target - TEMPLATE = app +LIBS += -L$$OUT_PWD/../../libhive/ -llibhive +LIBS += -L/home/timon/opt/rasp-pi-rootfs/usr/local/lib -lwiringPi +INCLUDEPATH += /home/timon/opt/rasp-pi-rootfs/usr/local/include +INCLUDEPATH += $$PWD/../../libhive + +DEPENDPATH += $$PWD/../../libhive + SOURCES += main.cpp \ - hivecore.cpp + hivecore.cpp \ + radio/radioreciver.cpp HEADERS += \ - hivecore.h + hivecore.h \ + radio/radioreciver.h -LIBS += -L$$OUT_PWD/../../libhive/ -llibhive - -INCLUDEPATH += $$PWD/../../libhive -DEPENDPATH += $$PWD/../../libhive diff --git a/hive/server/hive_pi/hivecore.cpp b/hive/server/hive_pi/hivecore.cpp index b2f460db..187c94a2 100644 --- a/hive/server/hive_pi/hivecore.cpp +++ b/hive/server/hive_pi/hivecore.cpp @@ -4,4 +4,33 @@ HiveCore::HiveCore(QObject *parent) : QObject(parent) { m_server = new Server(this); + m_server->startServer(); + + DeviceManager deviceManager; + deviceManager.saveDeviceValue("sensor","light","A-ON",1361); + deviceManager.saveDeviceValue("sensor","light","A-OFF",1364); + deviceManager.saveDeviceValue("sensor","light","B-ON",4433); + deviceManager.saveDeviceValue("sensor","light","B-OFF",4436); + deviceManager.saveDeviceValue("sensor","light","C-ON",5393); + deviceManager.saveDeviceValue("sensor","light","C-OFF",5204); + deviceManager.saveDeviceValue("sensor","light","D-ON",5393); + deviceManager.saveDeviceValue("sensor","light","D-OFF",5396); + deviceManager.saveDeviceValue("sensor","weatherStation","temperature",20); + deviceManager.saveDeviceValue("sensor","weatherStation","humidity",20); + + + deviceManager.saveDeviceValue("actor","window","open",true); + deviceManager.saveDeviceValue("actor","door","open",false); + + qDebug() << "get sensors" << deviceManager.getDevices("sensor"); + qDebug() << "get actors" << deviceManager.getDevices("actor"); + qDebug() << "get light keys" << deviceManager.getDeviceKeys("sensor","light"); + qDebug() << "get weatherStation keys" << deviceManager.getDeviceKeys("sensor","weatherStation"); + + deviceManager.deleteDeviceValue("sensor","light","C-OFF"); + qDebug() << "get light keys" << deviceManager.getDeviceKeys("sensor","light"); + deviceManager.deleteDevice("sensor","weatherStation"); + qDebug() << "get sensors" << deviceManager.getDevices("sensor"); + + } diff --git a/hive/server/hive_pi/hivecore.h b/hive/server/hive_pi/hivecore.h index 8d7760c9..c723516d 100644 --- a/hive/server/hive_pi/hivecore.h +++ b/hive/server/hive_pi/hivecore.h @@ -3,6 +3,7 @@ #include #include "server.h" +#include "devicemanager.h" class HiveCore : public QObject { diff --git a/hive/server/hive_pi/main.cpp b/hive/server/hive_pi/main.cpp index 3731aeb7..10e0f91b 100644 --- a/hive/server/hive_pi/main.cpp +++ b/hive/server/hive_pi/main.cpp @@ -1,8 +1,11 @@ #include +#include int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); + HiveCore core; + return a.exec(); } diff --git a/hive/server/hive_pi/radio/radioreciver.cpp b/hive/server/hive_pi/radio/radioreciver.cpp new file mode 100644 index 00000000..7c9238ab --- /dev/null +++ b/hive/server/hive_pi/radio/radioreciver.cpp @@ -0,0 +1,15 @@ +#include "radioreciver.h" +#include "wiringPi.h" +#include + +RadioReciver::RadioReciver(QObject *parent) : + QObject(parent) +{ + pinMode(2,INPUT); + wiringPiISR(2, INT_EDGE_BOTH, &handleInterrupt); +} + +void RadioReciver::handleInterrupt() +{ + qDebug() << "interrupt"; +} diff --git a/hive/server/hive_pi/radio/radioreciver.h b/hive/server/hive_pi/radio/radioreciver.h new file mode 100644 index 00000000..f9292d37 --- /dev/null +++ b/hive/server/hive_pi/radio/radioreciver.h @@ -0,0 +1,21 @@ +#ifndef RADIORECIVER_H +#define RADIORECIVER_H + +#include + +class RadioReciver : public QObject +{ + Q_OBJECT +public: + explicit RadioReciver(QObject *parent = 0); + +private: + static void handleInterrupt(); + +signals: + +public slots: + +}; + +#endif // RADIORECIVER_H diff --git a/hive/server/server.pro b/hive/server/server.pro index c8b2e553..8868280b 100644 --- a/hive/server/server.pro +++ b/hive/server/server.pro @@ -1,3 +1,5 @@ TEMPLATE = subdirs -SUBDIRS += hive hive_pi +CONFIG = ordered + +SUBDIRS += hive_pi