diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index 07e331305..bdb4423a9 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 Edouard Griffiths, F4EXB. // +// Copyright (C) 2015-2018 Edouard Griffiths, F4EXB. // // // // This program is free software; you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // @@ -18,6 +18,10 @@ #include #include +#include +#include +#include +#include #include #include @@ -85,10 +89,15 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : m_pllFilt.create(101, m_audioSampleRate, 200.0); m_pll.computeCoefficients(0.05, 0.707, 1000); m_syncAMBuffIndex = 0; + + m_networkManager = new QNetworkAccessManager(); + connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*))); } AMDemod::~AMDemod() { + disconnect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*))); + delete m_networkManager; DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSink(m_threadedChannelizer); @@ -506,13 +515,13 @@ void AMDemod::applySettings(const AMDemodSettings& settings, bool force) } if ((m_settings.m_useReverseAPI != settings.m_useReverseAPI)) - { + { // Full synchronization (PUT) when switching on the reverse API if (settings.m_useReverseAPI) { webapiReverseSendSettings(reverseAPIKeys, settings, true); } } else if (m_settings.m_useReverseAPI) - { + { // For subsequent updates rely on the force variable to select PUT or PATCH webapiReverseSendSettings(reverseAPIKeys, settings, force); } @@ -683,11 +692,12 @@ void AMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, con swgChannelSettings->setAmDemodSettings(new SWGSDRangel::SWGAMDemodSettings()); SWGSDRangel::SWGAMDemodSettings *swgAMDemodSettings = swgChannelSettings->getAmDemodSettings(); + // transfer data that has been modified. When force is on transfer all data + if (channelSettingsKeys.contains("audioMute") || force) { swgAMDemodSettings->setAudioMute(settings.m_audioMute ? 1 : 0); } if (channelSettingsKeys.contains("inputFrequencyOffset") || force) { - qDebug() << "AMDemod::webapiReverseSendSettings: inputFrequencyOffset"; swgAMDemodSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset); } if (channelSettingsKeys.contains("rfBandwidth") || force) { @@ -718,8 +728,35 @@ void AMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, con swgAMDemodSettings->setSyncAmOperation((int) settings.m_syncAMOperation); } - qDebug("AMDemod::webapiReverseSendSettings: \n%s", swgChannelSettings->asJson().toStdString().c_str()); + QString channelSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/channel/%4/settings") + .arg(settings.m_reverseAPIAddress) + .arg(settings.m_reverseAPIPort) + .arg(settings.m_reverseAPIDeviceIndex) + .arg(settings.m_reverseAPIChannelIndex); + m_networkRequest.setUrl(QUrl(channelSettingsURL)); + + QBuffer *buffer=new QBuffer(); + buffer->open((QBuffer::ReadWrite)); + buffer->write(swgChannelSettings->asJson().toUtf8()); + buffer->seek(0); + + if (force) { + m_networkManager->sendCustomRequest(m_networkRequest, "PUT", buffer); + } else { + m_networkManager->sendCustomRequest(m_networkRequest, "PATCH", buffer); + } delete swgChannelSettings; } +void AMDemod::networkManagerFinished(QNetworkReply *reply) +{ + if (reply->error()) + { + qDebug() << "AMDemod::networkManagerFinished: error: " << reply->errorString(); + return; + } + + QString answer = reply->readAll(); + qDebug("AMDemod::networkManagerFinished: reply:\n%s", answer.toStdString().c_str()); +} diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index f75466a44..d32536b13 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 Edouard Griffiths, F4EXB. // +// Copyright (C) 2015-2018 Edouard Griffiths, F4EXB. // // // // This program is free software; you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // @@ -17,9 +17,11 @@ #ifndef INCLUDE_AMDEMOD_H #define INCLUDE_AMDEMOD_H -#include #include +#include +#include + #include "dsp/basebandsamplesink.h" #include "channel/channelsinkapi.h" #include "dsp/nco.h" @@ -35,6 +37,8 @@ #include "amdemodsettings.h" +class QNetworkAccessManager; +class QNetworkReply; class DeviceSourceAPI; class DownChannelizer; class ThreadedBasebandSampleSink; @@ -204,6 +208,9 @@ private: static const int m_udpBlockSize; + QNetworkAccessManager *m_networkManager; + QNetworkRequest m_networkRequest; + QMutex m_settingsMutex; void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false); @@ -214,6 +221,10 @@ private: void webapiReverseSendSettings(QList& channelSettingsKeys, const AMDemodSettings& settings, bool force); void processOneSample(Complex &ci); + +private slots: + void networkManagerFinished(QNetworkReply *reply); + }; #endif // INCLUDE_AMDEMOD_H