added optional repetition value for rf433 transmitting

This commit is contained in:
Simon Stürz 2015-02-11 16:03:46 +01:00 committed by Michael Zanetti
parent a4b51ccdcc
commit 25fd83e648
9 changed files with 31 additions and 29 deletions

View File

@ -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<int> 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<int> 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;
}

View File

@ -48,7 +48,7 @@ private slots:
void brennenstuhlAvailableChanged(const bool &available);
public slots:
bool sendData(int delay, QList<int> rawData);
bool sendData(int delay, QList<int> rawData, int repetitions);
};

View File

@ -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<int> rawData)
bool Radio433BrennenstuhlGateway::sendData(int delay, QList<int> rawData, int repetitions)
{
QByteArray data;
QByteArray message;
@ -64,7 +64,7 @@ bool Radio433BrennenstuhlGateway::sendData(int delay, QList<int> 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;

View File

@ -30,7 +30,7 @@ class Radio433BrennenstuhlGateway : public QObject
public:
explicit Radio433BrennenstuhlGateway(QObject *parent = 0);
bool sendData(int delay, QList<int> rawData);
bool sendData(int delay, QList<int> rawData, int repetitions);
bool enable();
bool disable();
bool available();

View File

@ -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<int> rawData)
void Radio433Trasmitter::sendData(int delay, QList<int> rawData, int repetitions)
{
QList<int> 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();

View File

@ -38,7 +38,7 @@ public:
bool startTransmitter();
bool available();
void sendData(int delay, QList<int> rawData);
void sendData(int delay, QList<int> rawData, int repetitions);
protected:
void run();

View File

@ -493,11 +493,11 @@ Device *DevicePlugin::findDeviceByParams(const ParamList &params) const
\sa Radio433, requiredHardware()
*/
bool DevicePlugin::transmitData(int delay, QList<int> rawData)
bool DevicePlugin::transmitData(int delay, QList<int> 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;

View File

@ -89,7 +89,7 @@ protected:
QList<Device*> myDevices() const;
Device* findDeviceByParams(const ParamList &params) const;
bool transmitData(int delay, QList<int> rawData);
bool transmitData(int delay, QList<int> rawData, int repetitions = 10);
private:
void initPlugin(const QJsonObject &metaData, DeviceManager *deviceManager);

View File

@ -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;
}
}