From 8399baeb4e2cd9f1364eaeddf69325ab9c79a427 Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 28 Dec 2017 03:21:48 +0100 Subject: [PATCH] Source plugins: put a serializer and deserializer in the core plugin for server. NFM demod: fixed deserializer --- plugins/channelrx/demodnfm/nfmdemod.cpp | 23 +++++---- plugins/samplesource/airspy/airspygui.cpp | 11 +++- plugins/samplesource/airspy/airspyinput.cpp | 50 +++++++++++++++++-- plugins/samplesource/airspy/airspyinput.h | 15 ++++-- .../bladerfinput/bladerfinput.cpp | 42 ++++++++++++++++ .../samplesource/bladerfinput/bladerfinput.h | 12 +++-- .../bladerfinput/bladerfinputgui.cpp | 11 +++- plugins/samplesource/fcdpro/fcdprogui.cpp | 11 +++- plugins/samplesource/fcdpro/fcdproinput.cpp | 42 ++++++++++++++++ plugins/samplesource/fcdpro/fcdproinput.h | 11 ++-- .../samplesource/fcdproplus/fcdproplusgui.cpp | 11 +++- .../fcdproplus/fcdproplusinput.cpp | 42 ++++++++++++++++ .../samplesource/fcdproplus/fcdproplusinput.h | 11 ++-- .../samplesource/filesource/filesourcegui.cpp | 11 +++- .../filesource/filesourceinput.cpp | 42 ++++++++++++++++ .../samplesource/filesource/filesourceinput.h | 7 ++- .../samplesource/hackrfinput/hackrfinput.cpp | 42 ++++++++++++++++ .../samplesource/hackrfinput/hackrfinput.h | 9 +++- .../hackrfinput/hackrfinputgui.cpp | 11 +++- .../limesdrinput/limesdrinput.cpp | 42 ++++++++++++++++ .../samplesource/limesdrinput/limesdrinput.h | 5 ++ .../limesdrinput/limesdrinputgui.cpp | 12 ++++- .../plutosdrinput/plutosdrinput.cpp | 41 +++++++++++++++ .../plutosdrinput/plutosdrinput.h | 5 ++ .../plutosdrinput/plutosdrinputgui.cpp | 11 +++- plugins/samplesource/rtlsdr/rtlsdrgui.cpp | 2 +- plugins/samplesource/rtlsdr/rtlsdrinput.cpp | 42 ++++++++++++++++ plugins/samplesource/rtlsdr/rtlsdrinput.h | 9 +++- .../sdrdaemonsource/sdrdaemonsourcegui.cpp | 11 +++- .../sdrdaemonsource/sdrdaemonsourceinput.cpp | 36 +++++++++++++ .../sdrdaemonsource/sdrdaemonsourceinput.h | 7 ++- plugins/samplesource/sdrplay/sdrplaygui.cpp | 11 +++- plugins/samplesource/sdrplay/sdrplayinput.cpp | 50 +++++++++++++++++-- plugins/samplesource/sdrplay/sdrplayinput.h | 15 ++++-- sdrbase/device/devicesourceapi.cpp | 33 +++++++----- sdrbase/dsp/devicesamplesource.h | 5 ++ 36 files changed, 682 insertions(+), 69 deletions(-) diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index 71712c40d..fc376f765 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -468,19 +468,22 @@ QByteArray NFMDemod::serialize() const bool NFMDemod::deserialize(const QByteArray& data) { - if (m_settings.deserialize(data)) - { - MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(m_settings, true); - m_inputMessageQueue.push(msg); - return true; - } - else + bool success = true; + + if (!m_settings.deserialize(data)) { m_settings.resetToDefaults(); - MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(m_settings, true); - m_inputMessageQueue.push(msg); - return false; + success = false; } + + NFMDemod::MsgConfigureChannelizer* channelConfigMsg = NFMDemod::MsgConfigureChannelizer::create( + 48000, m_settings.m_inputFrequencyOffset); + m_inputMessageQueue.push(channelConfigMsg); + + MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(m_settings, true); + m_inputMessageQueue.push(msg); + + return success; } int NFMDemod::webapiSettingsGet( diff --git a/plugins/samplesource/airspy/airspygui.cpp b/plugins/samplesource/airspy/airspygui.cpp index 882e0426f..1bda2b1c8 100644 --- a/plugins/samplesource/airspy/airspygui.cpp +++ b/plugins/samplesource/airspy/airspygui.cpp @@ -119,7 +119,16 @@ bool AirspyGui::deserialize(const QByteArray& data) bool AirspyGui::handleMessage(const Message& message) { - if (AirspyInput::MsgStartStop::match(message)) + if (AirspyInput::MsgConfigureAirspy::match(message)) + { + const AirspyInput::MsgConfigureAirspy& cfg = (AirspyInput::MsgConfigureAirspy&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (AirspyInput::MsgStartStop::match(message)) { AirspyInput::MsgStartStop& notif = (AirspyInput::MsgStartStop&) message; blockApplySettings(true); diff --git a/plugins/samplesource/airspy/airspyinput.cpp b/plugins/samplesource/airspy/airspyinput.cpp index 1ccb89964..ea1a92971 100644 --- a/plugins/samplesource/airspy/airspyinput.cpp +++ b/plugins/samplesource/airspy/airspyinput.cpp @@ -213,6 +213,33 @@ void AirspyInput::stop() m_running = false; } +QByteArray AirspyInput::serialize() const +{ + return m_settings.serialize(); +} + +bool AirspyInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureAirspy* message = MsgConfigureAirspy::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureAirspy* messageToGUI = MsgConfigureAirspy::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& AirspyInput::getDeviceDescription() const { return m_deviceDescription; @@ -229,6 +256,21 @@ quint64 AirspyInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void AirspyInput::setCenterFrequency(qint64 centerFrequency) +{ + AirspySettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureAirspy* message = MsgConfigureAirspy::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureAirspy* messageToGUI = MsgConfigureAirspy::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool AirspyInput::handleMessage(const Message& message) { if (MsgConfigureAirspy::match(message)) @@ -285,7 +327,7 @@ bool AirspyInput::handleMessage(const Message& message) } } -void AirspyInput::setCenterFrequency(quint64 freq_hz) +void AirspyInput::setDeviceCenterFrequency(quint64 freq_hz) { qint64 df = ((qint64)freq_hz * m_settings.m_LOppmTenths) / 10000000LL; freq_hz += df; @@ -294,11 +336,11 @@ void AirspyInput::setCenterFrequency(quint64 freq_hz) if (rc != AIRSPY_SUCCESS) { - qWarning("AirspyInput::setCenterFrequency: could not frequency to %llu Hz", freq_hz); + qWarning("AirspyInput::setDeviceCenterFrequency: could not frequency to %llu Hz", freq_hz); } else { - qWarning("AirspyInput::setCenterFrequency: frequency set to %llu Hz", freq_hz); + qWarning("AirspyInput::setDeviceCenterFrequency: frequency set to %llu Hz", freq_hz); } } @@ -401,7 +443,7 @@ bool AirspyInput::applySettings(const AirspySettings& settings, bool force) if (m_dev != 0) { - setCenterFrequency(deviceCenterFrequency); + setDeviceCenterFrequency(deviceCenterFrequency); qDebug() << "AirspyInput::applySettings: center freq: " << m_settings.m_centerFrequency << " Hz" << " device center freq: " << deviceCenterFrequency << " Hz" diff --git a/plugins/samplesource/airspy/airspyinput.h b/plugins/samplesource/airspy/airspyinput.h index 505420d3a..d120c155d 100644 --- a/plugins/samplesource/airspy/airspyinput.h +++ b/plugins/samplesource/airspy/airspyinput.h @@ -17,11 +17,12 @@ #ifndef INCLUDE_AIRSPYINPUT_H #define INCLUDE_AIRSPYINPUT_H -#include - -#include "airspysettings.h" -#include #include +#include + +#include +#include +#include "airspysettings.h" class DeviceSourceAPI; class AirspyThread; @@ -98,10 +99,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); const std::vector& getSampleRates() const { return m_sampleRates; } virtual bool handleMessage(const Message& message); @@ -123,7 +128,7 @@ private: void closeDevice(); bool applySettings(const AirspySettings& settings, bool force); struct airspy_device *open_airspy_from_sequence(int sequence); - void setCenterFrequency(quint64 freq); + void setDeviceCenterFrequency(quint64 freq); DeviceSourceAPI *m_deviceAPI; QMutex m_mutex; diff --git a/plugins/samplesource/bladerfinput/bladerfinput.cpp b/plugins/samplesource/bladerfinput/bladerfinput.cpp index 0e1cb3d3d..82c94c8a5 100644 --- a/plugins/samplesource/bladerfinput/bladerfinput.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinput.cpp @@ -207,6 +207,33 @@ void BladerfInput::stop() m_running = false; } +QByteArray BladerfInput::serialize() const +{ + return m_settings.serialize(); +} + +bool BladerfInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureBladerf* message = MsgConfigureBladerf::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureBladerf* messageToGUI = MsgConfigureBladerf::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& BladerfInput::getDeviceDescription() const { return m_deviceDescription; @@ -223,6 +250,21 @@ quint64 BladerfInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void BladerfInput::setCenterFrequency(qint64 centerFrequency) +{ + BladeRFInputSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureBladerf* message = MsgConfigureBladerf::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureBladerf* messageToGUI = MsgConfigureBladerf::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool BladerfInput::handleMessage(const Message& message) { if (MsgConfigureBladerf::match(message)) diff --git a/plugins/samplesource/bladerfinput/bladerfinput.h b/plugins/samplesource/bladerfinput/bladerfinput.h index f5e42fc66..1498623eb 100644 --- a/plugins/samplesource/bladerfinput/bladerfinput.h +++ b/plugins/samplesource/bladerfinput/bladerfinput.h @@ -17,13 +17,13 @@ #ifndef INCLUDE_BLADERFINPUT_H #define INCLUDE_BLADERFINPUT_H +#include +#include + +#include #include #include "bladerf/devicebladerf.h" #include "bladerf/devicebladerfparam.h" - -#include -#include - #include "bladerfinputsettings.h" class DeviceSourceAPI; @@ -101,10 +101,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/bladerfinput/bladerfinputgui.cpp b/plugins/samplesource/bladerfinput/bladerfinputgui.cpp index 1f2cc5fe5..1ee1a2d54 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputgui.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputgui.cpp @@ -126,7 +126,16 @@ bool BladerfInputGui::deserialize(const QByteArray& data) bool BladerfInputGui::handleMessage(const Message& message) { - if (BladerfInput::MsgStartStop::match(message)) + if (BladerfInput::MsgConfigureBladerf::match(message)) + { + const BladerfInput::MsgConfigureBladerf& cfg = (BladerfInput::MsgConfigureBladerf&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (BladerfInput::MsgStartStop::match(message)) { BladerfInput::MsgStartStop& notif = (BladerfInput::MsgStartStop&) message; blockApplySettings(true); diff --git a/plugins/samplesource/fcdpro/fcdprogui.cpp b/plugins/samplesource/fcdpro/fcdprogui.cpp index b2d85563d..16692ce68 100644 --- a/plugins/samplesource/fcdpro/fcdprogui.cpp +++ b/plugins/samplesource/fcdpro/fcdprogui.cpp @@ -210,7 +210,16 @@ bool FCDProGui::deserialize(const QByteArray& data) bool FCDProGui::handleMessage(const Message& message __attribute__((unused))) { - if (FCDProInput::MsgStartStop::match(message)) + if (FCDProInput::MsgConfigureFCD::match(message)) + { + const FCDProInput::MsgConfigureFCD& cfg = (FCDProInput::MsgConfigureFCD&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (FCDProInput::MsgStartStop::match(message)) { FCDProInput::MsgStartStop& notif = (FCDProInput::MsgStartStop&) message; blockApplySettings(true); diff --git a/plugins/samplesource/fcdpro/fcdproinput.cpp b/plugins/samplesource/fcdpro/fcdproinput.cpp index 4178782e1..e331a3dc6 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.cpp +++ b/plugins/samplesource/fcdpro/fcdproinput.cpp @@ -163,6 +163,33 @@ void FCDProInput::stop() m_running = false; } +QByteArray FCDProInput::serialize() const +{ + return m_settings.serialize(); +} + +bool FCDProInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureFCD* message = MsgConfigureFCD::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureFCD* messageToGUI = MsgConfigureFCD::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& FCDProInput::getDeviceDescription() const { return m_deviceDescription; @@ -178,6 +205,21 @@ quint64 FCDProInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void FCDProInput::setCenterFrequency(qint64 centerFrequency) +{ + FCDProSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureFCD* message = MsgConfigureFCD::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureFCD* messageToGUI = MsgConfigureFCD::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool FCDProInput::handleMessage(const Message& message) { if(MsgConfigureFCD::match(message)) diff --git a/plugins/samplesource/fcdpro/fcdproinput.h b/plugins/samplesource/fcdpro/fcdproinput.h index 5571f691c..f7ed3792b 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.h +++ b/plugins/samplesource/fcdpro/fcdproinput.h @@ -18,12 +18,13 @@ #ifndef INCLUDE_FCDPROINPUT_H #define INCLUDE_FCDPROINPUT_H -#include +#include +#include +#include +#include #include "fcdprosettings.h" #include "fcdhid.h" -#include -#include struct fcd_buffer { void *start; @@ -105,10 +106,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp index 6b2394498..77bd5aa17 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp @@ -128,7 +128,16 @@ bool FCDProPlusGui::deserialize(const QByteArray& data) bool FCDProPlusGui::handleMessage(const Message& message __attribute__((unused))) { - if (FCDProPlusInput::MsgStartStop::match(message)) + if (FCDProPlusInput::MsgConfigureFCD::match(message)) + { + const FCDProPlusInput::MsgConfigureFCD& cfg = (FCDProPlusInput::MsgConfigureFCD&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (FCDProPlusInput::MsgStartStop::match(message)) { FCDProPlusInput::MsgStartStop& notif = (FCDProPlusInput::MsgStartStop&) message; blockApplySettings(true); diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp index 7673ba2b1..c00e09314 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp @@ -157,6 +157,33 @@ void FCDProPlusInput::stop() m_running = false; } +QByteArray FCDProPlusInput::serialize() const +{ + return m_settings.serialize(); +} + +bool FCDProPlusInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureFCD* message = MsgConfigureFCD::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureFCD* messageToGUI = MsgConfigureFCD::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& FCDProPlusInput::getDeviceDescription() const { return m_deviceDescription; @@ -172,6 +199,21 @@ quint64 FCDProPlusInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void FCDProPlusInput::setCenterFrequency(qint64 centerFrequency) +{ + FCDProPlusSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureFCD* message = MsgConfigureFCD::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureFCD* messageToGUI = MsgConfigureFCD::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool FCDProPlusInput::handleMessage(const Message& message) { if(MsgConfigureFCD::match(message)) diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.h b/plugins/samplesource/fcdproplus/fcdproplusinput.h index 47974d9eb..f73884d5e 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.h +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.h @@ -17,12 +17,13 @@ #ifndef INCLUDE_FCDINPUT_H #define INCLUDE_FCDINPUT_H -#include +#include +#include +#include +#include #include "fcdproplussettings.h" #include "fcdhid.h" -#include -#include struct fcd_buffer { void *start; @@ -104,10 +105,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/filesource/filesourcegui.cpp b/plugins/samplesource/filesource/filesourcegui.cpp index 4d0c392c1..e53436bff 100644 --- a/plugins/samplesource/filesource/filesourcegui.cpp +++ b/plugins/samplesource/filesource/filesourcegui.cpp @@ -156,7 +156,16 @@ void FileSourceGui::handleInputMessages() bool FileSourceGui::handleMessage(const Message& message) { - if (FileSourceInput::MsgReportFileSourceAcquisition::match(message)) + if (FileSourceInput::MsgConfigureFileSource::match(message)) + { + const FileSourceInput::MsgConfigureFileSource& cfg = (FileSourceInput::MsgConfigureFileSource&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (FileSourceInput::MsgReportFileSourceAcquisition::match(message)) { m_acquisition = ((FileSourceInput::MsgReportFileSourceAcquisition&)message).getAcquisition(); updateWithAcquisition(); diff --git a/plugins/samplesource/filesource/filesourceinput.cpp b/plugins/samplesource/filesource/filesourceinput.cpp index 68f8f8b61..a587479e8 100644 --- a/plugins/samplesource/filesource/filesourceinput.cpp +++ b/plugins/samplesource/filesource/filesourceinput.cpp @@ -189,6 +189,33 @@ void FileSourceInput::stop() } } +QByteArray FileSourceInput::serialize() const +{ + return m_settings.serialize(); +} + +bool FileSourceInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureFileSource* message = MsgConfigureFileSource::create(m_settings); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureFileSource* messageToGUI = MsgConfigureFileSource::create(m_settings); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& FileSourceInput::getDeviceDescription() const { return m_deviceDescription; @@ -204,6 +231,21 @@ quint64 FileSourceInput::getCenterFrequency() const return m_centerFrequency; } +void FileSourceInput::setCenterFrequency(qint64 centerFrequency) +{ + FileSourceSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureFileSource* message = MsgConfigureFileSource::create(m_settings); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureFileSource* messageToGUI = MsgConfigureFileSource::create(m_settings); + m_guiMessageQueue->push(messageToGUI); + } +} + std::time_t FileSourceInput::getStartingTimeStamp() const { return m_startingTimeStamp; diff --git a/plugins/samplesource/filesource/filesourceinput.h b/plugins/samplesource/filesource/filesourceinput.h index 5eae0c85f..e3e157468 100644 --- a/plugins/samplesource/filesource/filesourceinput.h +++ b/plugins/samplesource/filesource/filesourceinput.h @@ -17,13 +17,14 @@ #ifndef INCLUDE_FILESOURCEINPUT_H #define INCLUDE_FILESOURCEINPUT_H -#include #include +#include #include #include #include #include +#include #include "filesourcesettings.h" class FileSourceThread; @@ -230,10 +231,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); std::time_t getStartingTimeStamp() const; virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index f28b9459f..e91f45461 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -188,6 +188,33 @@ void HackRFInput::stop() m_running = false; } +QByteArray HackRFInput::serialize() const +{ + return m_settings.serialize(); +} + +bool HackRFInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureHackRF* message = MsgConfigureHackRF::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureHackRF* messageToGUI = MsgConfigureHackRF::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& HackRFInput::getDeviceDescription() const { return m_deviceDescription; @@ -203,6 +230,21 @@ quint64 HackRFInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void HackRFInput::setCenterFrequency(qint64 centerFrequency) +{ + HackRFInputSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureHackRF* message = MsgConfigureHackRF::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureHackRF* messageToGUI = MsgConfigureHackRF::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool HackRFInput::handleMessage(const Message& message) { if (MsgConfigureHackRF::match(message)) diff --git a/plugins/samplesource/hackrfinput/hackrfinput.h b/plugins/samplesource/hackrfinput/hackrfinput.h index 95023d4a8..48dc7572e 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.h +++ b/plugins/samplesource/hackrfinput/hackrfinput.h @@ -17,10 +17,11 @@ #ifndef INCLUDE_HACKRFINPUT_H #define INCLUDE_HACKRFINPUT_H -#include -#include "libhackrf/hackrf.h" #include +#include +#include "libhackrf/hackrf.h" +#include #include "hackrf/devicehackrf.h" #include "hackrf/devicehackrfparam.h" #include "hackrfinputsettings.h" @@ -118,10 +119,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp index 1f227cefd..f45962dd6 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp @@ -125,7 +125,16 @@ bool HackRFInputGui::deserialize(const QByteArray& data) bool HackRFInputGui::handleMessage(const Message& message) { - if (HackRFInput::MsgReportHackRF::match(message)) + if (HackRFInput::MsgConfigureHackRF::match(message)) + { + const HackRFInput::MsgConfigureHackRF& cfg = (HackRFInput::MsgConfigureHackRF&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (HackRFInput::MsgReportHackRF::match(message)) { displaySettings(); return true; diff --git a/plugins/samplesource/limesdrinput/limesdrinput.cpp b/plugins/samplesource/limesdrinput/limesdrinput.cpp index 35986729d..7d6e978c2 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinput.cpp @@ -425,6 +425,33 @@ void LimeSDRInput::stop() releaseChannel(); } +QByteArray LimeSDRInput::serialize() const +{ + return m_settings.serialize(); +} + +bool LimeSDRInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureLimeSDR* message = MsgConfigureLimeSDR::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureLimeSDR* messageToGUI = MsgConfigureLimeSDR::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& LimeSDRInput::getDeviceDescription() const { return m_deviceDescription; @@ -441,6 +468,21 @@ quint64 LimeSDRInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void LimeSDRInput::setCenterFrequency(qint64 centerFrequency) +{ + LimeSDRInputSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureLimeSDR* message = MsgConfigureLimeSDR::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureLimeSDR* messageToGUI = MsgConfigureLimeSDR::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + std::size_t LimeSDRInput::getChannelIndex() { return m_deviceShared.m_channel; diff --git a/plugins/samplesource/limesdrinput/limesdrinput.h b/plugins/samplesource/limesdrinput/limesdrinput.h index 903048ac8..7edd0203a 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.h +++ b/plugins/samplesource/limesdrinput/limesdrinput.h @@ -18,6 +18,7 @@ #define PLUGINS_SAMPLESOURCE_LIMESDRINPUT_LIMESDRINPUT_H_ #include +#include #include #include "dsp/devicesamplesource.h" @@ -212,10 +213,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp index eea841714..b440ab69b 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp @@ -140,8 +140,16 @@ bool LimeSDRInputGUI::deserialize(const QByteArray& data) bool LimeSDRInputGUI::handleMessage(const Message& message) { - - if (DeviceLimeSDRShared::MsgReportBuddyChange::match(message)) + if (LimeSDRInput::MsgConfigureLimeSDR::match(message)) + { + const LimeSDRInput::MsgConfigureLimeSDR& cfg = (LimeSDRInput::MsgConfigureLimeSDR&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (DeviceLimeSDRShared::MsgReportBuddyChange::match(message)) { DeviceLimeSDRShared::MsgReportBuddyChange& report = (DeviceLimeSDRShared::MsgReportBuddyChange&) message; m_settings.m_devSampleRate = report.getDevSampleRate(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index c6e3aea66..a2b7a4b92 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -118,6 +118,33 @@ void PlutoSDRInput::stop() m_running = false; } +QByteArray PlutoSDRInput::serialize() const +{ + return m_settings.serialize(); +} + +bool PlutoSDRInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigurePlutoSDR* message = MsgConfigurePlutoSDR::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigurePlutoSDR* messageToGUI = MsgConfigurePlutoSDR::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& PlutoSDRInput::getDeviceDescription() const { return m_deviceDescription; @@ -132,6 +159,20 @@ quint64 PlutoSDRInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void PlutoSDRInput::setCenterFrequency(qint64 centerFrequency) +{ + PlutoSDRInputSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigurePlutoSDR* message = MsgConfigurePlutoSDR::create(m_settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigurePlutoSDR* messageToGUI = MsgConfigurePlutoSDR::create(m_settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} bool PlutoSDRInput::handleMessage(const Message& message) { diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.h b/plugins/samplesource/plutosdrinput/plutosdrinput.h index dc57ca898..daefbdda7 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.h @@ -18,6 +18,7 @@ #define PLUGINS_SAMPLESOURCE_PLUTOSDRINPUT_PLUTOSDRINPUT_H_ #include +#include #include "iio.h" #include @@ -100,10 +101,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp index 8919a423f..302f2a882 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp @@ -131,7 +131,16 @@ bool PlutoSDRInputGui::deserialize(const QByteArray& data) bool PlutoSDRInputGui::handleMessage(const Message& message __attribute__((unused))) { - if (PlutoSDRInput::MsgStartStop::match(message)) + if (PlutoSDRInput::MsgConfigurePlutoSDR::match(message)) + { + const PlutoSDRInput::MsgConfigurePlutoSDR& cfg = (PlutoSDRInput::MsgConfigurePlutoSDR&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (PlutoSDRInput::MsgStartStop::match(message)) { PlutoSDRInput::MsgStartStop& notif = (PlutoSDRInput::MsgStartStop&) message; blockApplySettings(true); diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 8553eee5e..863760caa 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -146,7 +146,7 @@ bool RTLSDRGui::handleMessage(const Message& message) blockApplySettings(false); return true; } - if (RTLSDRInput::MsgStartStop::match(message)) + else if (RTLSDRInput::MsgStartStop::match(message)) { RTLSDRInput::MsgStartStop& notif = (RTLSDRInput::MsgStartStop&) message; blockApplySettings(true); diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index d08544994..c50774ef7 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -234,6 +234,33 @@ void RTLSDRInput::stop() m_running = false; } +QByteArray RTLSDRInput::serialize() const +{ + return m_settings.serialize(); +} + +bool RTLSDRInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureRTLSDR* message = MsgConfigureRTLSDR::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureRTLSDR* messageToGUI = MsgConfigureRTLSDR::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& RTLSDRInput::getDeviceDescription() const { return m_deviceDescription; @@ -250,6 +277,21 @@ quint64 RTLSDRInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void RTLSDRInput::setCenterFrequency(qint64 centerFrequency) +{ + RTLSDRSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureRTLSDR* message = MsgConfigureRTLSDR::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureRTLSDR* messageToGUI = MsgConfigureRTLSDR::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool RTLSDRInput::handleMessage(const Message& message) { if (MsgConfigureRTLSDR::match(message)) diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h index e7d6144f5..2ec558f5f 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.h +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h @@ -18,11 +18,12 @@ #ifndef INCLUDE_RTLSDRINPUT_H #define INCLUDE_RTLSDRINPUT_H -#include +#include +#include +#include #include "rtlsdrsettings.h" #include -#include class DeviceSourceAPI; class RTLSDRThread; @@ -99,10 +100,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp index 6fa564245..9c07e33b8 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.cpp @@ -176,7 +176,16 @@ void SDRdaemonSourceGui::setCenterFrequency(qint64 centerFrequency) bool SDRdaemonSourceGui::handleMessage(const Message& message) { - if (SDRdaemonSourceInput::MsgReportSDRdaemonAcquisition::match(message)) + if (SDRdaemonSourceInput::MsgConfigureSDRdaemonSource::match(message)) + { + const SDRdaemonSourceInput::MsgConfigureSDRdaemonSource& cfg = (SDRdaemonSourceInput::MsgConfigureSDRdaemonSource&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (SDRdaemonSourceInput::MsgReportSDRdaemonAcquisition::match(message)) { m_acquisition = ((SDRdaemonSourceInput::MsgReportSDRdaemonAcquisition&)message).getAcquisition(); updateWithAcquisition(); diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp index 956f44c47..5013a3f38 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.cpp @@ -102,6 +102,33 @@ void SDRdaemonSourceInput::stop() m_SDRdaemonUDPHandler->stop(); } +QByteArray SDRdaemonSourceInput::serialize() const +{ + return m_settings.serialize(); +} + +bool SDRdaemonSourceInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureSDRdaemonSource* message = MsgConfigureSDRdaemonSource::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureSDRdaemonSource* messageToGUI = MsgConfigureSDRdaemonSource::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + void SDRdaemonSourceInput::setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; @@ -131,6 +158,15 @@ quint64 SDRdaemonSourceInput::getCenterFrequency() const } } +void SDRdaemonSourceInput::setCenterFrequency(qint64 centerFrequency) +{ + SDRdaemonSourceSettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureSDRdaemonSource* message = MsgConfigureSDRdaemonSource::create(m_settings, false); + m_inputMessageQueue.push(message); +} + std::time_t SDRdaemonSourceInput::getStartingTimeStamp() const { return m_startingTimeStamp; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h index f2478f407..8e640428c 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceinput.h @@ -17,13 +17,14 @@ #ifndef INCLUDE_SDRDAEMONSOURCEINPUT_H #define INCLUDE_SDRDAEMONSOURCEINPUT_H -#include #include +#include #include #include #include #include +#include #include "sdrdaemonsourcesettings.h" class DeviceSourceAPI; @@ -265,10 +266,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue); virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); std::time_t getStartingTimeStamp() const; bool isStreaming() const; diff --git a/plugins/samplesource/sdrplay/sdrplaygui.cpp b/plugins/samplesource/sdrplay/sdrplaygui.cpp index b8ecf7180..21c0392c2 100644 --- a/plugins/samplesource/sdrplay/sdrplaygui.cpp +++ b/plugins/samplesource/sdrplay/sdrplaygui.cpp @@ -137,7 +137,16 @@ bool SDRPlayGui::deserialize(const QByteArray& data) bool SDRPlayGui::handleMessage(const Message& message) { - if (SDRPlayInput::MsgReportSDRPlayGains::match(message)) + if (SDRPlayInput::MsgConfigureSDRPlay::match(message)) + { + const SDRPlayInput::MsgConfigureSDRPlay& cfg = (SDRPlayInput::MsgConfigureSDRPlay&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else if (SDRPlayInput::MsgReportSDRPlayGains::match(message)) { qDebug() << "SDRPlayGui::handleMessage: MsgReportSDRPlayGains"; diff --git a/plugins/samplesource/sdrplay/sdrplayinput.cpp b/plugins/samplesource/sdrplay/sdrplayinput.cpp index be92a2cf5..2ee858de0 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.cpp +++ b/plugins/samplesource/sdrplay/sdrplayinput.cpp @@ -217,6 +217,33 @@ void SDRPlayInput::stop() m_running = false; } +QByteArray SDRPlayInput::serialize() const +{ + return m_settings.serialize(); +} + +bool SDRPlayInput::deserialize(const QByteArray& data) +{ + bool success = true; + + if (!m_settings.deserialize(data)) + { + m_settings.resetToDefaults(); + success = false; + } + + MsgConfigureSDRPlay* message = MsgConfigureSDRPlay::create(m_settings, true); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureSDRPlay* messageToGUI = MsgConfigureSDRPlay::create(m_settings, true); + m_guiMessageQueue->push(messageToGUI); + } + + return success; +} + const QString& SDRPlayInput::getDeviceDescription() const { return m_deviceDescription; @@ -233,6 +260,21 @@ quint64 SDRPlayInput::getCenterFrequency() const return m_settings.m_centerFrequency; } +void SDRPlayInput::setCenterFrequency(qint64 centerFrequency) +{ + SDRPlaySettings settings = m_settings; + settings.m_centerFrequency = centerFrequency; + + MsgConfigureSDRPlay* message = MsgConfigureSDRPlay::create(settings, false); + m_inputMessageQueue.push(message); + + if (m_guiMessageQueue) + { + MsgConfigureSDRPlay* messageToGUI = MsgConfigureSDRPlay::create(settings, false); + m_guiMessageQueue->push(messageToGUI); + } +} + bool SDRPlayInput::handleMessage(const Message& message) { if (MsgConfigureSDRPlay::match(message)) @@ -517,7 +559,7 @@ bool SDRPlayInput::applySettings(const SDRPlaySettings& settings, bool forwardCh if(m_dev != 0) { - if (setCenterFrequency(deviceCenterFrequency)) + if (setDeviceCenterFrequency(deviceCenterFrequency)) { qDebug() << "SDRPlayInput::applySettings: center freq: " << m_settings.m_centerFrequency << " Hz" << " device center freq: " << deviceCenterFrequency << " Hz" @@ -588,7 +630,7 @@ bool SDRPlayInput::applySettings(const SDRPlaySettings& settings, bool forwardCh return true; } -bool SDRPlayInput::setCenterFrequency(quint64 freq_hz) +bool SDRPlayInput::setDeviceCenterFrequency(quint64 freq_hz) { qint64 df = ((qint64)freq_hz * m_settings.m_LOppmTenths) / 10000000LL; freq_hz += df; @@ -597,12 +639,12 @@ bool SDRPlayInput::setCenterFrequency(quint64 freq_hz) if (r != 0) { - qWarning("SDRPlayInput::setCenterFrequency: could not frequency to %llu Hz", freq_hz); + qWarning("SDRPlayInput::setDeviceCenterFrequency: could not frequency to %llu Hz", freq_hz); return false; } else { - qWarning("SDRPlayInput::setCenterFrequency: frequency set to %llu Hz", freq_hz); + qWarning("SDRPlayInput::setDeviceCenterFrequency: frequency set to %llu Hz", freq_hz); return true; } } diff --git a/plugins/samplesource/sdrplay/sdrplayinput.h b/plugins/samplesource/sdrplay/sdrplayinput.h index 996bba94a..3ee347188 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.h +++ b/plugins/samplesource/sdrplay/sdrplayinput.h @@ -17,13 +17,14 @@ #ifndef PLUGINS_SAMPLESOURCE_SDRPLAY_SDRPLAYINPUT_H_ #define PLUGINS_SAMPLESOURCE_SDRPLAY_SDRPLAYINPUT_H_ -#include - -#include "sdrplaysettings.h" -#include #include +#include #include +#include +#include +#include "sdrplaysettings.h" + class DeviceSourceAPI; class SDRPlayThread; class FileRecord; @@ -136,10 +137,14 @@ public: virtual bool start(); virtual void stop(); + virtual QByteArray serialize() const; + virtual bool deserialize(const QByteArray& data); + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } virtual const QString& getDeviceDescription() const; virtual int getSampleRate() const; virtual quint64 getCenterFrequency() const; + virtual void setCenterFrequency(qint64 centerFrequency); virtual bool handleMessage(const Message& message); @@ -158,7 +163,7 @@ private: bool openDevice(); void closeDevice(); bool applySettings(const SDRPlaySettings& settings, bool forwardChange, bool force); - bool setCenterFrequency(quint64 freq); + bool setDeviceCenterFrequency(quint64 freq); DeviceSourceAPI *m_deviceAPI; QMutex m_mutex; diff --git a/sdrbase/device/devicesourceapi.cpp b/sdrbase/device/devicesourceapi.cpp index c40ba2f66..5737dbc5e 100644 --- a/sdrbase/device/devicesourceapi.cpp +++ b/sdrbase/device/devicesourceapi.cpp @@ -243,23 +243,28 @@ void DeviceSourceAPI::loadSourceSettings(const Preset* preset) { qDebug("DeviceSourceAPI::loadSourceSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); - if(m_sampleSourcePluginInstanceUI != 0) - { - const QByteArray* sourceConfig = preset->findBestDeviceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence); + const QByteArray* sourceConfig = preset->findBestDeviceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence); + qint64 centerFrequency = preset->getCenterFrequency(); + qDebug("DeviceSourceAPI::loadSettings: center frequency: %llu Hz", centerFrequency); - if (sourceConfig != 0) + if (sourceConfig != 0) + { + qDebug("DeviceSourceAPI::loadSettings: deserializing source %s[%d]: %s", qPrintable(m_sampleSourceId), m_sampleSourceSequence, qPrintable(m_sampleSourceSerial)); + + if (m_sampleSourcePluginInstanceUI != 0) { - qDebug("DeviceSourceAPI::loadSettings: deserializing source %s[%d]: %s", qPrintable(m_sampleSourceId), m_sampleSourceSequence, qPrintable(m_sampleSourceSerial)); m_sampleSourcePluginInstanceUI->deserialize(*sourceConfig); + m_sampleSourcePluginInstanceUI->setCenterFrequency(centerFrequency); } else { - qDebug("DeviceSourceAPI::loadSettings: source %s[%d]: %s not found", qPrintable(m_sampleSourceId), m_sampleSourceSequence, qPrintable(m_sampleSourceSerial)); + m_deviceSourceEngine->getSource()->deserialize(*sourceConfig); + m_deviceSourceEngine->getSource()->setCenterFrequency(centerFrequency); } - - qint64 centerFrequency = preset->getCenterFrequency(); - qDebug("DeviceSourceAPI::loadSettings: center frequency: %llu Hz", centerFrequency); - m_sampleSourcePluginInstanceUI->setCenterFrequency(centerFrequency); + } + else + { + qDebug("DeviceSourceAPI::loadSettings: source %s[%d]: %s not found", qPrintable(m_sampleSourceId), m_sampleSourceSequence, qPrintable(m_sampleSourceSerial)); } } else @@ -272,15 +277,17 @@ void DeviceSourceAPI::saveSourceSettings(Preset* preset) { if (preset->isSourcePreset()) { - if(m_sampleSourcePluginInstanceUI != NULL) + qDebug("DeviceSourceAPI::saveSourceSettings: %s saved", qPrintable(m_sampleSourcePluginInstanceUI->getName())); + + if (m_sampleSourcePluginInstanceUI != 0) { - qDebug("DeviceSourceAPI::saveSourceSettings: %s saved", qPrintable(m_sampleSourcePluginInstanceUI->getName())); preset->addOrUpdateDeviceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_sampleSourcePluginInstanceUI->serialize()); preset->setCenterFrequency(m_sampleSourcePluginInstanceUI->getCenterFrequency()); } else { - qDebug("DeviceSourceAPI::saveSourceSettings: no source"); + preset->addOrUpdateDeviceConfig(m_sampleSourceId, m_sampleSourceSerial, m_sampleSourceSequence, m_deviceSourceEngine->getSource()->serialize()); + preset->setCenterFrequency(m_deviceSourceEngine->getSource()->getCenterFrequency()); } } else diff --git a/sdrbase/dsp/devicesamplesource.h b/sdrbase/dsp/devicesamplesource.h index 8e32a5fc9..dbc570b20 100644 --- a/sdrbase/dsp/devicesamplesource.h +++ b/sdrbase/dsp/devicesamplesource.h @@ -19,6 +19,7 @@ #define INCLUDE_SAMPLESOURCE_H #include +#include #include "samplesinkfifo.h" #include "util/message.h" @@ -42,9 +43,13 @@ public: virtual bool start() = 0; virtual void stop() = 0; + virtual QByteArray serialize() const = 0; + virtual bool deserialize(const QByteArray& data) = 0; + virtual const QString& getDeviceDescription() const = 0; virtual int getSampleRate() const = 0; //!< Sample rate exposed by the source virtual quint64 getCenterFrequency() const = 0; //!< Center frequency exposed by the source + virtual void setCenterFrequency(qint64 centerFrequency) = 0; virtual bool handleMessage(const Message& message) = 0;