diff --git a/plugins/channeltx/daemonsrc/daemonsrc.cpp b/plugins/channeltx/daemonsrc/daemonsrc.cpp index 52fefbf09..e6f711ca1 100644 --- a/plugins/channeltx/daemonsrc/daemonsrc.cpp +++ b/plugins/channeltx/daemonsrc/daemonsrc.cpp @@ -299,10 +299,6 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu { printMeta("DaemonSrc::handleDataBlock", metaData); - if (m_currentMeta.m_centerFrequency != metaData->m_centerFrequency) { - m_deviceAPI->getSampleSink()->setCenterFrequency(metaData->m_centerFrequency*1000); // frequency is in kHz - } - if (m_currentMeta.m_sampleRate != metaData->m_sampleRate) { m_channelizer->configure(m_channelizer->getInputMessageQueue(), metaData->m_sampleRate, 0); diff --git a/plugins/channeltx/daemonsrc/daemonsrcgui.cpp b/plugins/channeltx/daemonsrc/daemonsrcgui.cpp index 2b95ada47..003262f6a 100644 --- a/plugins/channeltx/daemonsrc/daemonsrcgui.cpp +++ b/plugins/channeltx/daemonsrc/daemonsrcgui.cpp @@ -96,7 +96,6 @@ bool DaemonSrcGUI::handleMessage(const Message& message) else if (DaemonSrc::MsgReportStreamData::match(message)) { const DaemonSrc::MsgReportStreamData& report = (DaemonSrc::MsgReportStreamData&) message; - ui->centerFrequency->setText(QString("%1").arg(report.get_centerFreq())); ui->sampleRate->setText(QString("%1").arg(report.get_sampleRate())); QString nominalNbBlocksText = QString("%1/%2") .arg(report.get_nbOriginalBlocks() + report.get_nbFECBlocks()) diff --git a/plugins/channeltx/daemonsrc/daemonsrcgui.ui b/plugins/channeltx/daemonsrc/daemonsrcgui.ui index 611064c00..3b4ee8bdd 100644 --- a/plugins/channeltx/daemonsrc/daemonsrcgui.ui +++ b/plugins/channeltx/daemonsrc/daemonsrcgui.ui @@ -158,52 +158,6 @@ - - - - Freq - - - - - - - - 60 - 0 - - - - Stream center frequency setting - - - 00000000 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - kHz - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -237,6 +191,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp index a11fcb007..80cb47f24 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp @@ -46,6 +46,7 @@ SDRdaemonSinkGui::SDRdaemonSinkGui(DeviceUISet *deviceUISet, QWidget* parent) : m_deviceUISet(deviceUISet), m_settings(), m_deviceSampleSink(0), + m_deviceCenterFrequency(0), m_samplesCount(0), m_tickCount(0), m_nbSinceLastFlowCheck(0), @@ -86,6 +87,8 @@ SDRdaemonSinkGui::SDRdaemonSinkGui(DeviceUISet *deviceUISet, QWidget* parent) : m_networkManager = new QNetworkAccessManager(); connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*))); + m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); + m_time.start(); displayEventCounts(); displayEventTimer(); @@ -130,18 +133,6 @@ void SDRdaemonSinkGui::resetToDefaults() sendSettings(); } -qint64 SDRdaemonSinkGui::getCenterFrequency() const -{ - return m_settings.m_centerFrequency; -} - -void SDRdaemonSinkGui::setCenterFrequency(qint64 centerFrequency) -{ - m_settings.m_centerFrequency = centerFrequency; - displaySettings(); - sendSettings(); -} - QByteArray SDRdaemonSinkGui::serialize() const { return m_settings.serialize(); @@ -201,9 +192,8 @@ void SDRdaemonSinkGui::handleInputMessages() { DSPSignalNotification* notif = (DSPSignalNotification*) message; m_sampleRate = notif->getSampleRate(); - m_deviceCenterFrequency = notif->getCenterFrequency(); qDebug("SDRdaemonSinkGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); - updateSampleRateAndFrequency(); + updateSampleRate(); delete message; } @@ -216,10 +206,9 @@ void SDRdaemonSinkGui::handleInputMessages() } } -void SDRdaemonSinkGui::updateSampleRateAndFrequency() +void SDRdaemonSinkGui::updateSampleRate() { m_deviceUISet->getSpectrum()->setSampleRate(m_sampleRate); - m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); ui->deviceRateText->setText(tr("%1k").arg((float)(m_sampleRate) / 1000)); } @@ -232,7 +221,7 @@ void SDRdaemonSinkGui::updateTxDelayTooltip() void SDRdaemonSinkGui::displaySettings() { blockApplySettings(true); - ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); + ui->centerFrequency->setValue(m_deviceCenterFrequency / 1000); ui->sampleRate->setValue(m_settings.m_sampleRate); ui->txDelay->setValue(m_settings.m_txDelay*100); ui->txDelayText->setText(tr("%1").arg(m_settings.m_txDelay*100)); @@ -296,12 +285,6 @@ void SDRdaemonSinkGui::updateStatus() } } -void SDRdaemonSinkGui::on_centerFrequency_changed(quint64 value) -{ - m_settings.m_centerFrequency = value * 1000; - sendSettings(); -} - void SDRdaemonSinkGui::on_sampleRate_changed(quint64 value) { m_settings.m_sampleRate = value; @@ -558,6 +541,11 @@ void SDRdaemonSinkGui::analyzeApiReply(const QJsonObject& jsonObject) if (jsonObject.contains("DaemonSourceReport")) { QJsonObject report = jsonObject["DaemonSourceReport"].toObject(); + m_deviceCenterFrequency = report["deviceCenterFreq"].toInt() * 1000; + m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); + ui->centerFrequency->setValue(m_deviceCenterFrequency/1000); + int remoteRate = report["deviceSampleRate"].toInt(); + ui->remoteRateText->setText(tr("%1k").arg((float)(remoteRate) / 1000)); int queueSize = report["queueSize"].toInt(); queueSize = queueSize == 0 ? 10 : queueSize; int queueLength = report["queueLength"].toInt(); diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h index 683a13774..186a012f6 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h @@ -80,8 +80,8 @@ public: QString getName() const; void resetToDefaults(); - virtual qint64 getCenterFrequency() const; - virtual void setCenterFrequency(qint64 centerFrequency); + virtual qint64 getCenterFrequency() const { return m_deviceCenterFrequency; } + virtual void setCenterFrequency(qint64 centerFrequency __attribute__((unused))) {} QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } @@ -128,7 +128,7 @@ private: void displayTime(); void sendControl(bool force = false); void sendSettings(); - void updateSampleRateAndFrequency(); + void updateSampleRate(); void updateTxDelayTooltip(); void displayEventCounts(); void displayEventStatus(int recoverableCount, int unrecoverableCount); diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui index 9e8e6680a..760a65de5 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui @@ -2,6 +2,9 @@ SDRdaemonSinkGui + + true + 0 @@ -114,7 +117,7 @@ - true + false @@ -146,24 +149,42 @@ - - - kHz - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - + + + + + + + kHz + + + + + + + + + + + + 50 + 0 + + + + Remote baseband sample rate + + + 00000k + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp index 026e1c112..064dfcfe5 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp @@ -47,6 +47,7 @@ const uint32_t SDRdaemonSinkOutput::NbSamplesForRateCorrection = 5000000; SDRdaemonSinkOutput::SDRdaemonSinkOutput(DeviceSinkAPI *deviceAPI) : m_deviceAPI(deviceAPI), m_settings(), + m_centerFrequency(0), m_sdrDaemonSinkThread(0), m_deviceDescription("SDRdaemonSink"), m_startingTimeStamp(0), @@ -85,7 +86,6 @@ bool SDRdaemonSinkOutput::start() m_sdrDaemonSinkThread = new SDRdaemonSinkThread(&m_sampleSourceFifo); m_sdrDaemonSinkThread->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort); - m_sdrDaemonSinkThread->setCenterFrequency(m_settings.m_centerFrequency); m_sdrDaemonSinkThread->setSamplerate(m_settings.m_sampleRate); m_sdrDaemonSinkThread->setNbBlocksFEC(m_settings.m_nbFECBlocks); m_sdrDaemonSinkThread->connectTimer(m_masterTimer); @@ -161,22 +161,7 @@ int SDRdaemonSinkOutput::getSampleRate() const quint64 SDRdaemonSinkOutput::getCenterFrequency() const { - return m_settings.m_centerFrequency; -} - -void SDRdaemonSinkOutput::setCenterFrequency(qint64 centerFrequency) -{ - SDRdaemonSinkSettings settings = m_settings; - settings.m_centerFrequency = centerFrequency; - - MsgConfigureSDRdaemonSink* message = MsgConfigureSDRdaemonSink::create(settings, false); - m_inputMessageQueue.push(message); - - if (m_guiMessageQueue) - { - MsgConfigureSDRdaemonSink* messageToGUI = MsgConfigureSDRdaemonSink::create(settings, false); - m_guiMessageQueue->push(messageToGUI); - } + return m_centerFrequency; } std::time_t SDRdaemonSinkOutput::getStartingTimeStamp() const @@ -262,15 +247,6 @@ void SDRdaemonSinkOutput::applySettings(const SDRdaemonSinkSettings& settings, b } } - if (force || (m_settings.m_centerFrequency != settings.m_centerFrequency)) - { - if (m_sdrDaemonSinkThread != 0) { - m_sdrDaemonSinkThread->setCenterFrequency(settings.m_centerFrequency); - } - - forwardChange = true; - } - if (force || (m_settings.m_sampleRate != settings.m_sampleRate)) { if (m_sdrDaemonSinkThread != 0) { @@ -316,7 +292,6 @@ void SDRdaemonSinkOutput::applySettings(const SDRdaemonSinkSettings& settings, b mutexLocker.unlock(); qDebug() << "SDRdaemonSinkOutput::applySettings:" - << " m_centerFrequency: " << settings.m_centerFrequency << " m_sampleRate: " << settings.m_sampleRate << " m_txDelay: " << settings.m_txDelay << " m_nbFECBlocks: " << settings.m_nbFECBlocks @@ -327,7 +302,7 @@ void SDRdaemonSinkOutput::applySettings(const SDRdaemonSinkSettings& settings, b if (forwardChange) { - DSPSignalNotification *notif = new DSPSignalNotification(settings.m_sampleRate, settings.m_centerFrequency); + DSPSignalNotification *notif = new DSPSignalNotification(settings.m_sampleRate, m_centerFrequency); m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); } @@ -378,9 +353,6 @@ int SDRdaemonSinkOutput::webapiSettingsPutPatch( { SDRdaemonSinkSettings settings = m_settings; - if (deviceSettingsKeys.contains("centerFrequency")) { - settings.m_centerFrequency = response.getSdrDaemonSinkSettings()->getCenterFrequency(); - } if (deviceSettingsKeys.contains("sampleRate")) { settings.m_sampleRate = response.getSdrDaemonSinkSettings()->getSampleRate(); } @@ -434,7 +406,7 @@ int SDRdaemonSinkOutput::webapiReportGet( void SDRdaemonSinkOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRdaemonSinkSettings& settings) { - response.getSdrDaemonSinkSettings()->setCenterFrequency(settings.m_centerFrequency); + response.getSdrDaemonSinkSettings()->setCenterFrequency(m_centerFrequency); response.getSdrDaemonSinkSettings()->setSampleRate(settings.m_sampleRate); response.getSdrDaemonSinkSettings()->setTxDelay(settings.m_txDelay); response.getSdrDaemonSinkSettings()->setNbFecBlocks(settings.m_nbFECBlocks); @@ -514,6 +486,7 @@ void SDRdaemonSinkOutput::analyzeApiReply(const QJsonObject& jsonObject) if (jsonObject.contains("DaemonSourceReport")) { QJsonObject report = jsonObject["DaemonSourceReport"].toObject(); + m_centerFrequency = report["deviceCenterFreq"].toInt() * 1000; int queueSize = report["queueSize"].toInt(); queueSize = queueSize == 0 ? 10 : queueSize; int queueLength = report["queueLength"].toInt(); diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.h index 30fc4ee2e..9e0d9fc66 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.h @@ -136,7 +136,7 @@ public: virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; - virtual void setCenterFrequency(qint64 centerFrequency); + virtual void setCenterFrequency(qint64 centerFrequency __attribute__((unused))) {} std::time_t getStartingTimeStamp() const; virtual bool handleMessage(const Message& message); @@ -168,6 +168,7 @@ private: DeviceSinkAPI *m_deviceAPI; QMutex m_mutex; SDRdaemonSinkSettings m_settings; + uint64_t m_centerFrequency; SDRdaemonSinkThread* m_sdrDaemonSinkThread; QString m_deviceDescription; std::time_t m_startingTimeStamp; diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h index f84b5f8a8..39e40bb0c 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h @@ -48,7 +48,6 @@ public: void startWork(); void stopWork(); - void setCenterFrequency(uint64_t centerFrequency) { m_udpSinkFEC.setCenterFrequency(centerFrequency); } void setSamplerate(int samplerate); void setNbBlocksFEC(uint32_t nbBlocksFEC) { m_udpSinkFEC.setNbBlocksFEC(nbBlocksFEC); }; void setTxDelay(uint32_t txDelay) { m_udpSinkFEC.setTxDelay(txDelay); }; diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp b/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp index e1bad17d5..d00213e87 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp @@ -28,7 +28,6 @@ MESSAGE_CLASS_DEFINITION(UDPSinkFECWorker::MsgConfigureRemoteAddress, Message) UDPSinkFEC::UDPSinkFEC() : - m_centerFrequency(100000), m_sampleRate(48000), m_sampleBytes(1), m_sampleBits(8), @@ -103,7 +102,7 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk gettimeofday(&tv, 0); // create meta data TODO: semaphore - metaData.m_centerFrequency = m_centerFrequency; + metaData.m_centerFrequency = 0; // frequency not set by stream metaData.m_sampleRate = m_sampleRate; metaData.m_sampleBytes = m_sampleBytes; metaData.m_sampleBits = m_sampleBits; diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfec.h b/plugins/samplesink/sdrdaemonsink/udpsinkfec.h index 0b00d6a52..337a19ea5 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfec.h +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfec.h @@ -109,9 +109,6 @@ public: return ret; } - /** Set center frequency given in Hz */ - void setCenterFrequency(uint64_t centerFrequency) { m_centerFrequency = centerFrequency / 1000; } - /** Set sample rate given in Hz */ void setSampleRate(uint32_t sampleRate) { m_sampleRate = sampleRate; } @@ -131,7 +128,6 @@ public: private: std::string m_error; - uint32_t m_centerFrequency; //!< center frequency in kHz uint32_t m_sampleRate; //!< sample rate in Hz uint8_t m_sampleBytes; //!< number of bytes per sample uint8_t m_sampleBits; //!< number of effective bits per sample