From 25fd83e648ddca0ab689ca7bd6d13a5853f3b2e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 11 Feb 2015 16:03:46 +0100 Subject: [PATCH] added optional repetition value for rf433 transmitting --- libguh/hardware/radio433/radio433.cpp | 8 +++---- libguh/hardware/radio433/radio433.h | 2 +- .../radio433/radio433brennenstuhlgateway.cpp | 6 ++--- .../radio433/radio433brennenstuhlgateway.h | 2 +- .../hardware/radio433/radio433transmitter.cpp | 22 +++++++++---------- .../hardware/radio433/radio433transmitter.h | 2 +- libguh/plugin/deviceplugin.cpp | 4 ++-- libguh/plugin/deviceplugin.h | 2 +- .../leynew/devicepluginleynew.cpp | 12 +++++----- 9 files changed, 31 insertions(+), 29 deletions(-) diff --git a/libguh/hardware/radio433/radio433.cpp b/libguh/hardware/radio433/radio433.cpp index 6d5d3d32..9076b08d 100644 --- a/libguh/hardware/radio433/radio433.cpp +++ b/libguh/hardware/radio433/radio433.cpp @@ -117,18 +117,18 @@ void Radio433::brennenstuhlAvailableChanged(const bool &available) } } -/*! Returns true, if the \a rawData with a certain \a delay (pulse length) can be sent. */ -bool Radio433::sendData(int delay, QList rawData) +/*! Returns true, if the \a rawData with a certain \a delay (pulse length) could be sent \a repetitions times. */ +bool Radio433::sendData(int delay, QList rawData, int repetitions) { bool sendGpio = false; bool sendBrennenstuhl = false; if (m_brennenstuhlTransmitter->available()) { - sendBrennenstuhl = m_brennenstuhlTransmitter->sendData(delay, rawData); + sendBrennenstuhl = m_brennenstuhlTransmitter->sendData(delay, rawData, repetitions); } if (m_transmitter->available()) { - m_transmitter->sendData(delay, rawData); + m_transmitter->sendData(delay, rawData, repetitions); sendGpio = true; } diff --git a/libguh/hardware/radio433/radio433.h b/libguh/hardware/radio433/radio433.h index 9c254c34..252a04bc 100644 --- a/libguh/hardware/radio433/radio433.h +++ b/libguh/hardware/radio433/radio433.h @@ -48,7 +48,7 @@ private slots: void brennenstuhlAvailableChanged(const bool &available); public slots: - bool sendData(int delay, QList rawData); + bool sendData(int delay, QList rawData, int repetitions); }; diff --git a/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp b/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp index 3fb42344..a6dcd2f4 100644 --- a/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp +++ b/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp @@ -36,11 +36,11 @@ Radio433BrennenstuhlGateway::Radio433BrennenstuhlGateway(QObject *parent) : // Timer to detect discovery timeout m_timeout = new QTimer(this); m_timeout->setSingleShot(true); - m_timeout->setInterval(1000); + m_timeout->setInterval(1500); connect(m_timeout, &QTimer::timeout, this, &Radio433BrennenstuhlGateway::timeout); } -bool Radio433BrennenstuhlGateway::sendData(int delay, QList rawData) +bool Radio433BrennenstuhlGateway::sendData(int delay, QList rawData, int repetitions) { QByteArray data; QByteArray message; @@ -64,7 +64,7 @@ bool Radio433BrennenstuhlGateway::sendData(int delay, QList rawData) * ; | end of command */ - message.append("TXP:0,0,20,0," + QString::number(delay) + "," + QString::number(rawData.count()/2) + "," + data + ";"); + message.append("TXP:0,0," + QString::number(repetitions) + ",0," + QString::number(delay) + "," + QString::number(rawData.count()/2) + "," + data + ";"); if (m_gateway->writeDatagram(message, m_gatewayAddress, m_port) > 0) { m_available = true; diff --git a/libguh/hardware/radio433/radio433brennenstuhlgateway.h b/libguh/hardware/radio433/radio433brennenstuhlgateway.h index 34a7e5c3..0d691cb2 100644 --- a/libguh/hardware/radio433/radio433brennenstuhlgateway.h +++ b/libguh/hardware/radio433/radio433brennenstuhlgateway.h @@ -30,7 +30,7 @@ class Radio433BrennenstuhlGateway : public QObject public: explicit Radio433BrennenstuhlGateway(QObject *parent = 0); - bool sendData(int delay, QList rawData); + bool sendData(int delay, QList rawData, int repetitions); bool enable(); bool disable(); bool available(); diff --git a/libguh/hardware/radio433/radio433transmitter.cpp b/libguh/hardware/radio433/radio433transmitter.cpp index 8be86224..d0a124b0 100644 --- a/libguh/hardware/radio433/radio433transmitter.cpp +++ b/libguh/hardware/radio433/radio433transmitter.cpp @@ -53,15 +53,13 @@ void Radio433Trasmitter::run() m_gpio->setValue(LOW); int flag=1; - // send raw data 10 times - for(int i = 0; i < 10; i++){ - foreach (int delay, rawData) { - // 1 = High, 0 = Low - m_gpio->setValue(flag %2); - flag++; - usleep(delay); - } + foreach (int delay, rawData) { + // 1 = High, 0 = Low + m_gpio->setValue(flag %2); + flag++; + usleep(delay); } + m_gpio->setValue(LOW); } m_queueMutex.unlock(); @@ -86,11 +84,13 @@ bool Radio433Trasmitter::setUpGpio() return true; } -void Radio433Trasmitter::sendData(int delay, QList rawData) +void Radio433Trasmitter::sendData(int delay, QList rawData, int repetitions) { QList timings; - foreach (int data, rawData) { - timings.append(delay*data); + for (int i = 0; i < repetitions; i++) { + foreach (int data, rawData) { + timings.append(delay*data); + } } m_queueMutex.lock(); diff --git a/libguh/hardware/radio433/radio433transmitter.h b/libguh/hardware/radio433/radio433transmitter.h index 20ce318a..5b8408fb 100644 --- a/libguh/hardware/radio433/radio433transmitter.h +++ b/libguh/hardware/radio433/radio433transmitter.h @@ -38,7 +38,7 @@ public: bool startTransmitter(); bool available(); - void sendData(int delay, QList rawData); + void sendData(int delay, QList rawData, int repetitions); protected: void run(); diff --git a/libguh/plugin/deviceplugin.cpp b/libguh/plugin/deviceplugin.cpp index 5cd30da3..3c6d7240 100644 --- a/libguh/plugin/deviceplugin.cpp +++ b/libguh/plugin/deviceplugin.cpp @@ -493,11 +493,11 @@ Device *DevicePlugin::findDeviceByParams(const ParamList ¶ms) const \sa Radio433, requiredHardware() */ -bool DevicePlugin::transmitData(int delay, QList rawData) +bool DevicePlugin::transmitData(int delay, QList rawData, int repetitions) { switch (requiredHardware()) { case DeviceManager::HardwareResourceRadio433: - return deviceManager()->m_radio433->sendData(delay, rawData); + return deviceManager()->m_radio433->sendData(delay, rawData, repetitions); case DeviceManager::HardwareResourceRadio868: qDebug() << "Radio868 not connected yet"; return false; diff --git a/libguh/plugin/deviceplugin.h b/libguh/plugin/deviceplugin.h index 86495033..b05b5e3c 100644 --- a/libguh/plugin/deviceplugin.h +++ b/libguh/plugin/deviceplugin.h @@ -89,7 +89,7 @@ protected: QList myDevices() const; Device* findDeviceByParams(const ParamList ¶ms) const; - bool transmitData(int delay, QList rawData); + bool transmitData(int delay, QList rawData, int repetitions = 10); private: void initPlugin(const QJsonObject &metaData, DeviceManager *deviceManager); diff --git a/plugins/deviceplugins/leynew/devicepluginleynew.cpp b/plugins/deviceplugins/leynew/devicepluginleynew.cpp index dfa73997..9e583cab 100644 --- a/plugins/deviceplugins/leynew/devicepluginleynew.cpp +++ b/plugins/deviceplugins/leynew/devicepluginleynew.cpp @@ -78,7 +78,7 @@ DeviceManager::DeviceError DevicePluginLeynew::executeAction(Device *device, con QByteArray binCode; - // TODO: find out how ID will be calculated to bin code or make it discoverable + // TODO: find out how the ID will be calculated to bin code or make it discoverable // ======================================= // bincode depending on the ID if (device->paramValue("ID") == "0115"){ @@ -104,6 +104,8 @@ DeviceManager::DeviceError DevicePluginLeynew::executeAction(Device *device, con //create rawData timings list int delay = 200; + int repetitions = 20; + // sync signal (starting with ON) rawData.append(1); rawData.append(10); @@ -124,15 +126,15 @@ DeviceManager::DeviceError DevicePluginLeynew::executeAction(Device *device, con } qDebug() << binCode; - qDebug() << rawData; + qDebug() << delay << "*" << rawData; // ======================================= // send data to hardware resource - if(transmitData(delay, rawData)){ - qDebug() << "transmitted" << pluginName() << device->name() << action.param("name").name(); + if(transmitData(delay, rawData, repetitions)){ + qDebug() << "transmitted" << pluginName() << device->name() << action.id(); return DeviceManager::DeviceErrorNoError; }else{ - qDebug() << "could not transmitt" << pluginName() << device->name() << action.param("name").name(); + qDebug() << "could not transmitt" << pluginName() << device->name() << action.id(); return DeviceManager::DeviceErrorHardwareNotAvailable; } }