diff --git a/fcdlib/fcdtraits.cpp b/fcdlib/fcdtraits.cpp index 5e023a27c..c3d6c045d 100644 --- a/fcdlib/fcdtraits.cpp +++ b/fcdlib/fcdtraits.cpp @@ -35,8 +35,8 @@ const char *fcd_traits::displayedName = "FunCube Dongle Pro+"; const char *fcd_traits::pluginDisplayedName = "FunCube Pro Input"; const char *fcd_traits::pluginDisplayedName = "FunCube Pro+ Input"; -const char *fcd_traits::pluginVersion = "4.5.2"; -const char *fcd_traits::pluginVersion = "4.5.2"; +const char *fcd_traits::pluginVersion = "4.11.6"; +const char *fcd_traits::pluginVersion = "4.11.6"; const int64_t fcd_traits::loLowLimitFreq = 64000000L; const int64_t fcd_traits::loLowLimitFreq = 150000L; diff --git a/plugins/samplemimo/testmi/CMakeLists.txt b/plugins/samplemimo/testmi/CMakeLists.txt index 53c94644b..2da1dfa95 100644 --- a/plugins/samplemimo/testmi/CMakeLists.txt +++ b/plugins/samplemimo/testmi/CMakeLists.txt @@ -4,14 +4,16 @@ set(testmi_SOURCES testmi.cpp testmiplugin.cpp testmithread.cpp - testmisettings.cpp + testmisettings.cpp + testmiwebapiadapter.cpp ) set(testmi_HEADERS testmi.h testmiplugin.h testmithread.h - testmisettings.h + testmisettings.h + testmiwebapiadapter.h ) include_directories( diff --git a/plugins/samplemimo/testmi/testmi.cpp b/plugins/samplemimo/testmi/testmi.cpp index 89a5aa0ff..82cdebaf5 100644 --- a/plugins/samplemimo/testmi/testmi.cpp +++ b/plugins/samplemimo/testmi/testmi.cpp @@ -570,7 +570,26 @@ int TestMI::webapiSettingsPutPatch( { (void) errorMessage; TestMISettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureTestSource *msg = MsgConfigureTestSource::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureTestSource *msgToGUI = MsgConfigureTestSource::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void webapiUpdateDeviceSettings( + TestMISettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("streams")) { QList *streamsSettings = response.getTestMiSettings()->getStreams(); @@ -580,60 +599,60 @@ int TestMI::webapiSettingsPutPatch( { int istream = (*it)->getStreamIndex(); - if (deviceSettingsKeys.contains(tr("streams[%1].centerFrequency").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].centerFrequency").arg(istream))) { settings.m_streams[istream].m_centerFrequency = (*it)->getCenterFrequency(); } - if (deviceSettingsKeys.contains(tr("streams[%1].frequencyShift").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].frequencyShift").arg(istream))) { settings.m_streams[istream].m_frequencyShift = (*it)->getFrequencyShift(); } - if (deviceSettingsKeys.contains(tr("streams[%1].sampleRate").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].sampleRate").arg(istream))) { settings.m_streams[istream].m_sampleRate = (*it)->getSampleRate(); } - if (deviceSettingsKeys.contains(tr("streams[%1].log2Decim").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].log2Decim").arg(istream))) { settings.m_streams[istream].m_log2Decim = (*it)->getLog2Decim(); } - if (deviceSettingsKeys.contains(tr("streams[%1].fcPos").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].fcPos").arg(istream))) { int fcPos = (*it)->getFcPos(); fcPos = fcPos < 0 ? 0 : fcPos > 2 ? 2 : fcPos; settings.m_streams[istream].m_fcPos = (TestMIStreamSettings::fcPos_t) fcPos; } - if (deviceSettingsKeys.contains(tr("streams[%1].sampleSizeIndex").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].sampleSizeIndex").arg(istream))) { int sampleSizeIndex = (*it)->getSampleSizeIndex(); sampleSizeIndex = sampleSizeIndex < 0 ? 0 : sampleSizeIndex > 1 ? 2 : sampleSizeIndex; settings.m_streams[istream].m_sampleSizeIndex = sampleSizeIndex; } - if (deviceSettingsKeys.contains(tr("streams[%1].amplitudeBits").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].amplitudeBits").arg(istream))) { settings.m_streams[istream].m_amplitudeBits = (*it)->getAmplitudeBits(); } - if (deviceSettingsKeys.contains(tr("streams[%1].autoCorrOptions").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].autoCorrOptions").arg(istream))) { int autoCorrOptions = (*it)->getAutoCorrOptions(); autoCorrOptions = autoCorrOptions < 0 ? 0 : autoCorrOptions >= TestMIStreamSettings::AutoCorrLast ? TestMIStreamSettings::AutoCorrLast-1 : autoCorrOptions; settings.m_streams[istream].m_sampleSizeIndex = (TestMIStreamSettings::AutoCorrOptions) autoCorrOptions; } - if (deviceSettingsKeys.contains(tr("streams[%1].modulation").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].modulation").arg(istream))) { int modulation = (*it)->getModulation(); modulation = modulation < 0 ? 0 : modulation >= TestMIStreamSettings::ModulationLast ? TestMIStreamSettings::ModulationLast-1 : modulation; settings.m_streams[istream].m_modulation = (TestMIStreamSettings::Modulation) modulation; } - if (deviceSettingsKeys.contains(tr("streams[%1].modulationTone").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].modulationTone").arg(istream))) { settings.m_streams[istream].m_modulationTone = (*it)->getModulationTone(); } - if (deviceSettingsKeys.contains(tr("streams[%1].amModulation").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].amModulation").arg(istream))) { settings.m_streams[istream].m_amModulation = (*it)->getAmModulation(); }; - if (deviceSettingsKeys.contains(tr("streams[%1].fmDeviation").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].fmDeviation").arg(istream))) { settings.m_streams[istream].m_fmDeviation = (*it)->getFmDeviation(); }; - if (deviceSettingsKeys.contains(tr("streams[%1].dcFactor").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].dcFactor").arg(istream))) { settings.m_streams[istream].m_dcFactor = (*it)->getDcFactor(); }; - if (deviceSettingsKeys.contains(tr("streams[%1].iFactor").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].iFactor").arg(istream))) { settings.m_streams[istream].m_iFactor = (*it)->getIFactor(); }; - if (deviceSettingsKeys.contains(tr("streams[%1].qFactor").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].qFactor").arg(istream))) { settings.m_streams[istream].m_qFactor = (*it)->getQFactor(); }; - if (deviceSettingsKeys.contains(tr("streams[%1].phaseImbalance").arg(istream))) { + if (deviceSettingsKeys.contains(QString("streams[%1].phaseImbalance").arg(istream))) { settings.m_streams[istream].m_phaseImbalance = (*it)->getPhaseImbalance(); }; } @@ -655,18 +674,6 @@ int TestMI::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getTestMiSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureTestSource *msg = MsgConfigureTestSource::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureTestSource *msgToGUI = MsgConfigureTestSource::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void TestMI::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const TestMISettings& settings) diff --git a/plugins/samplemimo/testmi/testmi.h b/plugins/samplemimo/testmi/testmi.h index 33e3eed35..0172ff65a 100644 --- a/plugins/samplemimo/testmi/testmi.h +++ b/plugins/samplemimo/testmi/testmi.h @@ -144,6 +144,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const TestMISettings& settings); + + static void webapiUpdateDeviceSettings( + TestMISettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + bool isRecording(unsigned int istream) const; private: @@ -165,7 +174,6 @@ private: QNetworkRequest m_networkRequest; bool applySettings(const TestMISettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const TestMISettings& settings); void webapiReverseSendSettings(const DeviceSettingsKeys& deviceSettingsKeys, const TestMISettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplemimo/testmi/testmiplugin.cpp b/plugins/samplemimo/testmi/testmiplugin.cpp index 346d21f7b..efd8c561d 100644 --- a/plugins/samplemimo/testmi/testmiplugin.cpp +++ b/plugins/samplemimo/testmi/testmiplugin.cpp @@ -26,10 +26,11 @@ #include "testmigui.h" #endif #include "testmiplugin.h" +#include "testmiwebapiadapter.h" const PluginDescriptor TestMIPlugin::m_pluginDescriptor = { QString("Test Multiple Input"), - QString("4.8.1"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -112,3 +113,7 @@ DeviceSampleMIMO *TestMIPlugin::createSampleMIMOPluginInstance(const QString& mi } } +DeviceWebAPIAdapter *TestMIPlugin::createDeviceWebAPIAdapter() const +{ + return new TestMIWebAPIAdapter(); +} diff --git a/plugins/samplemimo/testmi/testmiplugin.h b/plugins/samplemimo/testmi/testmiplugin.h index d002f39f2..6a32508c0 100644 --- a/plugins/samplemimo/testmi/testmiplugin.h +++ b/plugins/samplemimo/testmi/testmiplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleMIMO* createSampleMIMOPluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplemimo/testmi/testmiwebapiadapter.cpp b/plugins/samplemimo/testmi/testmiwebapiadapter.cpp new file mode 100644 index 000000000..b3c0ba7cf --- /dev/null +++ b/plugins/samplemimo/testmi/testmiwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "testmi.h" +#include "testmiwebapiadapter.h" + +TestMIWebAPIAdapter::TestMIWebAPIAdapter() +{} + +TestMIWebAPIAdapter::~TestMIWebAPIAdapter() +{} + +int TestMIWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + TestMI::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int TestMIWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + TestMI::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplemimo/testmi/testmiwebapiadapter.h b/plugins/samplemimo/testmi/testmiwebapiadapter.h new file mode 100644 index 000000000..d31a7b63b --- /dev/null +++ b/plugins/samplemimo/testmi/testmiwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "testmisettings.h" + +class TestMIWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + TestMIWebAPIAdapter(); + virtual ~TestMIWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + TestMISettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/bladerf1output/CMakeLists.txt b/plugins/samplesink/bladerf1output/CMakeLists.txt index 651970748..8278bf814 100644 --- a/plugins/samplesink/bladerf1output/CMakeLists.txt +++ b/plugins/samplesink/bladerf1output/CMakeLists.txt @@ -3,14 +3,16 @@ project(bladerf1output) set(bladerf1output_SOURCES bladerf1output.cpp bladerf1outputplugin.cpp - bladerf1outputsettings.cpp + bladerf1outputsettings.cpp + bladerf1outputwebapiadapter.cpp bladerf1outputthread.cpp ) set(bladerf1output_HEADERS bladerf1output.h bladerf1soutputplugin.h - bladerf1outputsettings.h + bladerf1outputsettings.h + bladerf1outputwebapiadapter.h bladerf1outputthread.h ) diff --git a/plugins/samplesink/bladerf1output/bladerf1output.cpp b/plugins/samplesink/bladerf1output/bladerf1output.cpp index 535df2dae..e63e74a6c 100644 --- a/plugins/samplesink/bladerf1output/bladerf1output.cpp +++ b/plugins/samplesink/bladerf1output/bladerf1output.cpp @@ -590,7 +590,26 @@ int Bladerf1Output::webapiSettingsPutPatch( { (void) errorMessage; BladeRF1OutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureBladerf1 *msg = MsgConfigureBladerf1::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureBladerf1 *msgToGUI = MsgConfigureBladerf1::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void webapiUpdateDeviceSettings( + BladeRF1OutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getBladeRf1OutputSettings()->getCenterFrequency(); } @@ -630,18 +649,6 @@ int Bladerf1Output::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getBladeRf1OutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureBladerf1 *msg = MsgConfigureBladerf1::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureBladerf1 *msgToGUI = MsgConfigureBladerf1::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int Bladerf1Output::webapiRunGet( diff --git a/plugins/samplesink/bladerf1output/bladerf1output.h b/plugins/samplesink/bladerf1output/bladerf1output.h index 66182104b..cf4d7c8fc 100644 --- a/plugins/samplesink/bladerf1output/bladerf1output.h +++ b/plugins/samplesink/bladerf1output/bladerf1output.h @@ -133,6 +133,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const BladeRF1OutputSettings& settings); + + static void webapiUpdateDeviceSettings( + BladeRF1OutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -148,7 +157,6 @@ private: bool openDevice(); void closeDevice(); bool applySettings(const BladeRF1OutputSettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const BladeRF1OutputSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const BladeRF1OutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/bladerf1output/bladerf1outputplugin.cpp b/plugins/samplesink/bladerf1output/bladerf1outputplugin.cpp index 3d645840b..ecd1b7737 100644 --- a/plugins/samplesink/bladerf1output/bladerf1outputplugin.cpp +++ b/plugins/samplesink/bladerf1output/bladerf1outputplugin.cpp @@ -21,6 +21,7 @@ #include "util/simpleserializer.h" #include "bladerf1outputplugin.h" +#include "bladerf1outputwebapiadapter.h" #ifdef SERVER_MODE #include "bladerf1output.h" @@ -30,7 +31,7 @@ const PluginDescriptor Bladerf1OutputPlugin::m_pluginDescriptor = { QString("BladeRF1 Output"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -150,3 +151,8 @@ DeviceSampleSink* Bladerf1OutputPlugin::createSampleSinkPluginInstance(const QSt return 0; } } + +DeviceWebAPIAdapter *Bladerf1OutputPlugin::createDeviceWebAPIAdapter() const +{ + return new BladeRF1OutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/bladerf1output/bladerf1outputplugin.h b/plugins/samplesink/bladerf1output/bladerf1outputplugin.h index bd7b50e27..ddc4a04df 100644 --- a/plugins/samplesink/bladerf1output/bladerf1outputplugin.h +++ b/plugins/samplesink/bladerf1output/bladerf1outputplugin.h @@ -44,6 +44,7 @@ public: DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/bladerf1output/bladerf1outputwebapiadapter.cpp b/plugins/samplesink/bladerf1output/bladerf1outputwebapiadapter.cpp new file mode 100644 index 000000000..f2999ce30 --- /dev/null +++ b/plugins/samplesink/bladerf1output/bladerf1outputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "bladerf1output.h" +#include "bladerf1outputwebapiadapter.h" + +BladeRF1OutputWebAPIAdapter::BladeRF1OutputWebAPIAdapter() +{} + +BladeRF1OutputWebAPIAdapter::~BladeRF1OutputWebAPIAdapter() +{} + +int BladeRF1OutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + Bladerf1Output::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int BladeRF1OutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + Bladerf1Output::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/bladerf1output/bladerf1outputwebapiadapter.h b/plugins/samplesink/bladerf1output/bladerf1outputwebapiadapter.h new file mode 100644 index 000000000..d51f493cb --- /dev/null +++ b/plugins/samplesink/bladerf1output/bladerf1outputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "bladerf1outputsettings.h" + +class BladeRF1OutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + BladeRF1OutputWebAPIAdapter(); + virtual ~BladeRF1OutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + BladeRF1OutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/bladerf2output/CMakeLists.txt b/plugins/samplesink/bladerf2output/CMakeLists.txt index 79a5cd98a..776e53eed 100644 --- a/plugins/samplesink/bladerf2output/CMakeLists.txt +++ b/plugins/samplesink/bladerf2output/CMakeLists.txt @@ -3,14 +3,16 @@ project(bladerf2output) set(bladerf2output_SOURCES bladerf2output.cpp bladerf2outputplugin.cpp - bladerf2outputsettings.cpp + bladerf2outputsettings.cpp + bladerf2outputwebapiadapter.cpp bladerf2outputthread.cpp ) set(bladerf2output_HEADERS bladerf2output.h bladerf2outputplugin.h - bladerf2outputsettings.h + bladerf2outputsettings.h + bladerf2outputwebapiadapter.h bladerf2outputthread.h ) diff --git a/plugins/samplesink/bladerf2output/bladerf2output.cpp b/plugins/samplesink/bladerf2output/bladerf2output.cpp index d0305f02f..86ad0135d 100644 --- a/plugins/samplesink/bladerf2output/bladerf2output.cpp +++ b/plugins/samplesink/bladerf2output/bladerf2output.cpp @@ -966,7 +966,26 @@ int BladeRF2Output::webapiSettingsPutPatch( { (void) errorMessage; BladeRF2OutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureBladeRF2 *msg = MsgConfigureBladeRF2::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureBladeRF2 *msgToGUI = MsgConfigureBladeRF2::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void webapiUpdateDeviceSettings( + BladeRF2OutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getBladeRf2OutputSettings()->getCenterFrequency(); } @@ -1006,18 +1025,6 @@ int BladeRF2Output::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getBladeRf2OutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureBladeRF2 *msg = MsgConfigureBladeRF2::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureBladeRF2 *msgToGUI = MsgConfigureBladeRF2::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int BladeRF2Output::webapiReportGet(SWGSDRangel::SWGDeviceReport& response, QString& errorMessage) diff --git a/plugins/samplesink/bladerf2output/bladerf2output.h b/plugins/samplesink/bladerf2output/bladerf2output.h index 87c6101a5..c8d87b607 100644 --- a/plugins/samplesink/bladerf2output/bladerf2output.h +++ b/plugins/samplesink/bladerf2output/bladerf2output.h @@ -153,6 +153,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const BladeRF2OutputSettings& settings); + + static void webapiUpdateDeviceSettings( + BladeRF2OutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -172,7 +181,6 @@ private: bool applySettings(const BladeRF2OutputSettings& settings, bool force); int getNbChannels(); bool setDeviceCenterFrequency(struct bladerf *dev, int requestedChannel, quint64 freq_hz, int loPpmTenths); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const BladeRF2OutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const BladeRF2OutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/bladerf2output/bladerf2outputplugin.cpp b/plugins/samplesink/bladerf2output/bladerf2outputplugin.cpp index 5633838d0..3ba22ed37 100644 --- a/plugins/samplesink/bladerf2output/bladerf2outputplugin.cpp +++ b/plugins/samplesink/bladerf2output/bladerf2outputplugin.cpp @@ -21,6 +21,7 @@ #include "util/simpleserializer.h" #include "bladerf2outputplugin.h" +#include "bladerf2outputwebapiadapter.h" #ifdef SERVER_MODE #include "bladerf2output.h" @@ -30,7 +31,7 @@ const PluginDescriptor BladeRF2OutputPlugin::m_pluginDescriptor = { QString("BladeRF2 Output"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -155,6 +156,7 @@ DeviceSampleSink* BladeRF2OutputPlugin::createSampleSinkPluginInstance(const QSt } } - - - +DeviceWebAPIAdapter *BladeRF2OutputPlugin::createDeviceWebAPIAdapter() const +{ + return new BladeRF2OutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/bladerf2output/bladerf2outputplugin.h b/plugins/samplesink/bladerf2output/bladerf2outputplugin.h index 18e9343ec..a19a7fc44 100644 --- a/plugins/samplesink/bladerf2output/bladerf2outputplugin.h +++ b/plugins/samplesink/bladerf2output/bladerf2outputplugin.h @@ -44,6 +44,7 @@ public: DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/bladerf2output/bladerf2outputwebapiadapter.cpp b/plugins/samplesink/bladerf2output/bladerf2outputwebapiadapter.cpp new file mode 100644 index 000000000..67b15d95c --- /dev/null +++ b/plugins/samplesink/bladerf2output/bladerf2outputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "bladerf2output.h" +#include "bladerf2outputwebapiadapter.h" + +BladeRF2OutputWebAPIAdapter::BladeRF2OutputWebAPIAdapter() +{} + +BladeRF2OutputWebAPIAdapter::~BladeRF2OutputWebAPIAdapter() +{} + +int BladeRF2OutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + BladeRF2Output::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int BladeRF2OutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + BladeRF2Output::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/bladerf2output/bladerf2outputwebapiadapter.h b/plugins/samplesink/bladerf2output/bladerf2outputwebapiadapter.h new file mode 100644 index 000000000..d94bb89e4 --- /dev/null +++ b/plugins/samplesink/bladerf2output/bladerf2outputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "bladerf2outputsettings.h" + +class BladeRF2OutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + BladeRF2OutputWebAPIAdapter(); + virtual ~BladeRF2OutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + BladeRF2OutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/hackrfoutput/CMakeLists.txt b/plugins/samplesink/hackrfoutput/CMakeLists.txt index 16103abee..a4225da1a 100644 --- a/plugins/samplesink/hackrfoutput/CMakeLists.txt +++ b/plugins/samplesink/hackrfoutput/CMakeLists.txt @@ -4,6 +4,7 @@ set(hackrfoutput_SOURCES hackrfoutput.cpp hackrfoutputplugin.cpp hackrfoutputsettings.cpp + hackrfoutputwebapiadapter.cpp hackrfoutputthread.cpp ) @@ -11,6 +12,7 @@ set(hackrfoutput_HEADERS hackrfoutput.h hackrfoutputplugin.h hackrfoutputsettings.h + hackrfoutputwebapiadapter.h hackrfoutputthread.h ) diff --git a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp index 93c2d5f26..70794d079 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp @@ -561,7 +561,26 @@ int HackRFOutput::webapiSettingsPutPatch( { (void) errorMessage; HackRFOutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureHackRF *msg = MsgConfigureHackRF::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureHackRF *msgToGUI = MsgConfigureHackRF::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void HackRFOutput::webapiUpdateDeviceSettings( + HackRFOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getHackRfOutputSettings()->getCenterFrequency(); } @@ -604,18 +623,6 @@ int HackRFOutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getHackRfOutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureHackRF *msg = MsgConfigureHackRF::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureHackRF *msgToGUI = MsgConfigureHackRF::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void HackRFOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const HackRFOutputSettings& settings) diff --git a/plugins/samplesink/hackrfoutput/hackrfoutput.h b/plugins/samplesink/hackrfoutput/hackrfoutput.h index bf835f5ce..48e751ab8 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutput.h +++ b/plugins/samplesink/hackrfoutput/hackrfoutput.h @@ -134,6 +134,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const HackRFOutputSettings& settings); + + static void webapiUpdateDeviceSettings( + HackRFOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -151,7 +160,6 @@ private: bool applySettings(const HackRFOutputSettings& settings, bool force); // hackrf_device *open_hackrf_from_sequence(int sequence); void setDeviceCenterFrequency(quint64 freq_hz, qint32 LOppmTenths); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const HackRFOutputSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const HackRFOutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp index 34ce12354..8bad14cb5 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputplugin.cpp @@ -27,10 +27,11 @@ #include "hackrfoutputgui.h" #endif #include "hackrfoutputplugin.h" +#include "hackrfoutputwebapiadapter.h" const PluginDescriptor HackRFOutputPlugin::m_pluginDescriptor = { QString("HackRF Output"), - QString("4.5.5"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -57,13 +58,6 @@ void HackRFOutputPlugin::initPlugin(PluginAPI* pluginAPI) PluginInterface::SamplingDevices HackRFOutputPlugin::enumSampleSinks() { -// hackrf_error rc = (hackrf_error) hackrf_init(); -// -// if (rc != HACKRF_SUCCESS) -// { -// qCritical("HackRFOutputPlugin::enumSampleSinks: failed to initiate HackRF library: %s", hackrf_error_name(rc)); -// } - SamplingDevices result; hackrf_device_list_t *hackrf_devices = hackrf_device_list(); hackrf_device *hackrf_ptr; @@ -115,9 +109,6 @@ PluginInterface::SamplingDevices HackRFOutputPlugin::enumSampleSinks() } hackrf_device_list_free(hackrf_devices); -// rc = (hackrf_error) hackrf_exit(); -// qDebug("HackRFOutputPlugin::enumSampleSinks: hackrf_exit: %s", hackrf_error_name(rc)); - return result; } @@ -165,4 +156,7 @@ DeviceSampleSink* HackRFOutputPlugin::createSampleSinkPluginInstance(const QStri } - +DeviceWebAPIAdapter *HackRFOutputPlugin::createDeviceWebAPIAdapter() const +{ + return new HackRFOutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputplugin.h b/plugins/samplesink/hackrfoutput/hackrfoutputplugin.h index 2aa40cf4a..3c92b5dfe 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputplugin.h +++ b/plugins/samplesink/hackrfoutput/hackrfoutputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputwebapiadapter.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputwebapiadapter.cpp new file mode 100644 index 000000000..76f9476c7 --- /dev/null +++ b/plugins/samplesink/hackrfoutput/hackrfoutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "hackrfoutput.h" +#include "hackrfoutputwebapiadapter.h" + +HackRFOutputWebAPIAdapter::HackRFOutputWebAPIAdapter() +{} + +HackRFOutputWebAPIAdapter::~HackRFOutputWebAPIAdapter() +{} + +int HackRFOutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + HackRFOutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int HackRFOutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + HackRFOutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputwebapiadapter.h b/plugins/samplesink/hackrfoutput/hackrfoutputwebapiadapter.h new file mode 100644 index 000000000..eb688413b --- /dev/null +++ b/plugins/samplesink/hackrfoutput/hackrfoutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "hackrfoutputsettings.h" + +class HackRFOutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + HackRFOutputWebAPIAdapter(); + virtual ~HackRFOutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + HackRFOutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/limesdroutput/CMakeLists.txt b/plugins/samplesink/limesdroutput/CMakeLists.txt index 883ce7810..1088d8570 100644 --- a/plugins/samplesink/limesdroutput/CMakeLists.txt +++ b/plugins/samplesink/limesdroutput/CMakeLists.txt @@ -3,14 +3,16 @@ project(limesdroutput) set(limesdroutput_SOURCES limesdroutput.cpp limesdroutputplugin.cpp - limesdroutputsettings.cpp + limesdroutputsettings.cpp + limesdroutputwebapiadapter.cpp limesdroutputthread.cpp ) set(limesdroutput_HEADERS limesdroutput.h limesdroutputplugin.h - limesdroutputsettings.h + limesdroutputsettings.h + limesdroutputwebapiadapter.h limesdroutputthread.h ) diff --git a/plugins/samplesink/limesdroutput/limesdroutput.cpp b/plugins/samplesink/limesdroutput/limesdroutput.cpp index 3cb3dd756..06471918f 100644 --- a/plugins/samplesink/limesdroutput/limesdroutput.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutput.cpp @@ -1254,7 +1254,26 @@ int LimeSDROutput::webapiSettingsPutPatch( { (void) errorMessage; LimeSDROutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureLimeSDR *msg = MsgConfigureLimeSDR::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureLimeSDR *msgToGUI = MsgConfigureLimeSDR::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void LimeSDROutput::webapiUpdateDeviceSettings( + LimeSDROutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("antennaPath")) { settings.m_antennaPath = (LimeSDROutputSettings::PathRFE) response.getLimeSdrOutputSettings()->getAntennaPath(); } @@ -1318,18 +1337,6 @@ int LimeSDROutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getLimeSdrOutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureLimeSDR *msg = MsgConfigureLimeSDR::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureLimeSDR *msgToGUI = MsgConfigureLimeSDR::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int LimeSDROutput::webapiReportGet( diff --git a/plugins/samplesink/limesdroutput/limesdroutput.h b/plugins/samplesink/limesdroutput/limesdroutput.h index 114cd3049..07808c4cd 100644 --- a/plugins/samplesink/limesdroutput/limesdroutput.h +++ b/plugins/samplesink/limesdroutput/limesdroutput.h @@ -227,6 +227,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const LimeSDROutputSettings& settings); + + static void webapiUpdateDeviceSettings( + LimeSDROutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + std::size_t getChannelIndex(); void getLORange(float& minF, float& maxF) const; void getSRRange(float& minF, float& maxF) const; @@ -256,7 +265,6 @@ private: void suspendTxBuddies(); void resumeTxBuddies(); bool applySettings(const LimeSDROutputSettings& settings, bool force = false, bool forceNCOFrequency = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDROutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const LimeSDROutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp b/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp index 51573fddf..31e29de50 100644 --- a/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutputplugin.cpp @@ -31,10 +31,11 @@ #include "limesdroutputgui.h" #endif #include "limesdroutputplugin.h" +#include "limesdroutputwebapiadapter.h" const PluginDescriptor LimeSDROutputPlugin::m_pluginDescriptor = { QString("LimeSDR Output"), - QString("4.5.5"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -172,3 +173,7 @@ DeviceSampleSink* LimeSDROutputPlugin::createSampleSinkPluginInstance(const QStr } } +DeviceWebAPIAdapter *LimeSDROutputPlugin::createDeviceWebAPIAdapter() const +{ + return new LimeSDROutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/limesdroutput/limesdroutputplugin.h b/plugins/samplesink/limesdroutput/limesdroutputplugin.h index ad856e151..32c75527f 100644 --- a/plugins/samplesink/limesdroutput/limesdroutputplugin.h +++ b/plugins/samplesink/limesdroutput/limesdroutputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/limesdroutput/limesdroutputwebapiadapter.cpp b/plugins/samplesink/limesdroutput/limesdroutputwebapiadapter.cpp new file mode 100644 index 000000000..88abfe511 --- /dev/null +++ b/plugins/samplesink/limesdroutput/limesdroutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "limesdroutput.h" +#include "limesdroutputwebapiadapter.h" + +LimeSDROutputWebAPIAdapter::LimeSDROutputWebAPIAdapter() +{} + +LimeSDROutputWebAPIAdapter::~LimeSDROutputWebAPIAdapter() +{} + +int LimeSDROutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + LimeSDROutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int LimeSDROutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + LimeSDROutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/limesdroutput/limesdroutputwebapiadapter.h b/plugins/samplesink/limesdroutput/limesdroutputwebapiadapter.h new file mode 100644 index 000000000..e800ad1f5 --- /dev/null +++ b/plugins/samplesink/limesdroutput/limesdroutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "limesdroutputsettings.h" + +class LimeSDROutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + LimeSDROutputWebAPIAdapter(); + virtual ~LimeSDROutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + LimeSDROutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/localoutput/CMakeLists.txt b/plugins/samplesink/localoutput/CMakeLists.txt index c77d5cc62..c59a3fcb4 100644 --- a/plugins/samplesink/localoutput/CMakeLists.txt +++ b/plugins/samplesink/localoutput/CMakeLists.txt @@ -3,13 +3,15 @@ project(localoutput) set(localoutput_SOURCES localoutput.cpp localoutputplugin.cpp - localoutputsettings.cpp + localoutputsettings.cpp + localoutputwebapiadapter.cpp ) set(localoutput_HEADERS localoutput.h localoutputplugin.h - localoutputsettings.h + localoutputsettings.h + localoutputwebapiadapter.h ) include_directories( diff --git a/plugins/samplesink/localoutput/localoutput.cpp b/plugins/samplesink/localoutput/localoutput.cpp index 686c84ecb..47bc2c249 100644 --- a/plugins/samplesink/localoutput/localoutput.cpp +++ b/plugins/samplesink/localoutput/localoutput.cpp @@ -267,19 +267,7 @@ int LocalOutput::webapiSettingsPutPatch( { (void) errorMessage; LocalOutputSettings settings = m_settings; - - if (deviceSettingsKeys.contains("useReverseAPI")) { - settings.m_useReverseAPI = response.getLocalOutputSettings()->getUseReverseApi() != 0; - } - if (deviceSettingsKeys.contains("reverseAPIAddress")) { - settings.m_reverseAPIAddress = *response.getLocalOutputSettings()->getReverseApiAddress(); - } - if (deviceSettingsKeys.contains("reverseAPIPort")) { - settings.m_reverseAPIPort = response.getLocalOutputSettings()->getReverseApiPort(); - } - if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { - settings.m_reverseAPIDeviceIndex = response.getLocalOutputSettings()->getReverseApiDeviceIndex(); - } + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); MsgConfigureLocalOutput *msg = MsgConfigureLocalOutput::create(settings, force); m_inputMessageQueue.push(msg); @@ -294,6 +282,25 @@ int LocalOutput::webapiSettingsPutPatch( return 200; } +void LocalOutput::webapiUpdateDeviceSettings( + LocalOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ + if (deviceSettingsKeys.contains("useReverseAPI")) { + settings.m_useReverseAPI = response.getLocalOutputSettings()->getUseReverseApi() != 0; + } + if (deviceSettingsKeys.contains("reverseAPIAddress")) { + settings.m_reverseAPIAddress = *response.getLocalOutputSettings()->getReverseApiAddress(); + } + if (deviceSettingsKeys.contains("reverseAPIPort")) { + settings.m_reverseAPIPort = response.getLocalOutputSettings()->getReverseApiPort(); + } + if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { + settings.m_reverseAPIDeviceIndex = response.getLocalOutputSettings()->getReverseApiDeviceIndex(); + } +} + void LocalOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LocalOutputSettings& settings) { response.getLocalOutputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); diff --git a/plugins/samplesink/localoutput/localoutput.h b/plugins/samplesink/localoutput/localoutput.h index 77b18d55c..a96d79d57 100644 --- a/plugins/samplesink/localoutput/localoutput.h +++ b/plugins/samplesink/localoutput/localoutput.h @@ -147,6 +147,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const LocalOutputSettings& settings); + + static void webapiUpdateDeviceSettings( + LocalOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -160,7 +169,6 @@ private: QNetworkRequest m_networkRequest; void applySettings(const LocalOutputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LocalOutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const LocalOutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/localoutput/localoutputplugin.cpp b/plugins/samplesink/localoutput/localoutputplugin.cpp index 3ec933403..8ef43eff5 100644 --- a/plugins/samplesink/localoutput/localoutputplugin.cpp +++ b/plugins/samplesink/localoutput/localoutputplugin.cpp @@ -26,10 +26,11 @@ #include "localoutputgui.h" #endif #include "localoutputplugin.h" +#include "localoutputwebapiadapter.h" const PluginDescriptor LocalOutputPlugin::m_pluginDescriptor = { QString("Local device output"), - QString("4.8.0"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -114,3 +115,8 @@ DeviceSampleSink *LocalOutputPlugin::createSampleSinkPluginInstance(const QStrin return 0; } } + +DeviceWebAPIAdapter *LocalOutputPlugin::createDeviceWebAPIAdapter() const +{ + return new LocalOutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/localoutput/localoutputplugin.h b/plugins/samplesink/localoutput/localoutputplugin.h index 977c5876f..7ee73eeb3 100644 --- a/plugins/samplesink/localoutput/localoutputplugin.h +++ b/plugins/samplesink/localoutput/localoutputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/localoutput/localoutputwebapiadapter.cpp b/plugins/samplesink/localoutput/localoutputwebapiadapter.cpp new file mode 100644 index 000000000..74f058028 --- /dev/null +++ b/plugins/samplesink/localoutput/localoutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "localoutput.h" +#include "localoutputwebapiadapter.h" + +LocalOutputWebAPIAdapter::LocalOutputWebAPIAdapter() +{} + +LocalOutputWebAPIAdapter::~LocalOutputWebAPIAdapter() +{} + +int LocalOutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + LocalOutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int LocalOutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + LocalOutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/localoutput/localoutputwebapiadapter.h b/plugins/samplesink/localoutput/localoutputwebapiadapter.h new file mode 100644 index 000000000..f92b9a229 --- /dev/null +++ b/plugins/samplesink/localoutput/localoutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "localoutputsettings.h" + +class LocalOutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + LocalOutputWebAPIAdapter(); + virtual ~LocalOutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + LocalOutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/plutosdroutput/CMakeLists.txt b/plugins/samplesink/plutosdroutput/CMakeLists.txt index 86bf894f4..8dd07379b 100644 --- a/plugins/samplesink/plutosdroutput/CMakeLists.txt +++ b/plugins/samplesink/plutosdroutput/CMakeLists.txt @@ -4,6 +4,7 @@ set(plutosdroutput_SOURCES plutosdroutput.cpp plutosdroutputplugin.cpp plutosdroutputsettings.cpp + plutosdroutputwebapiadapter.cpp plutosdroutputthread.cpp ) @@ -11,6 +12,7 @@ set(plutosdroutput_HEADERS plutosdroutput.h plutosdroutputplugin.h plutosdroutputsettings.h + plutosdroutputwebapiadapter.h plutosdroutputthread.h ) diff --git a/plugins/samplesink/plutosdroutput/plutosdroutput.cpp b/plugins/samplesink/plutosdroutput/plutosdroutput.cpp index 897c08b5f..7c161cee9 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutput.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutput.cpp @@ -670,7 +670,26 @@ int PlutoSDROutput::webapiSettingsPutPatch( { (void) errorMessage; PlutoSDROutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigurePlutoSDR *msg = MsgConfigurePlutoSDR::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigurePlutoSDR *msgToGUI = MsgConfigurePlutoSDR::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void PlutoSDROutput::webapiUpdateDeviceSettings( + PlutoSDROutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getPlutoSdrOutputSettings()->getCenterFrequency(); } @@ -724,18 +743,6 @@ int PlutoSDROutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getPlutoSdrOutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigurePlutoSDR *msg = MsgConfigurePlutoSDR::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigurePlutoSDR *msgToGUI = MsgConfigurePlutoSDR::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int PlutoSDROutput::webapiReportGet( diff --git a/plugins/samplesink/plutosdroutput/plutosdroutput.h b/plugins/samplesink/plutosdroutput/plutosdroutput.h index 8d885a787..441b731bc 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutput.h +++ b/plugins/samplesink/plutosdroutput/plutosdroutput.h @@ -121,6 +121,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const PlutoSDROutputSettings& settings); + + static void webapiUpdateDeviceSettings( + PlutoSDROutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + uint32_t getDACSampleRate() const { return m_deviceSampleRates.m_addaConnvRate; } uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } void getRSSI(std::string& rssiStr); @@ -147,7 +156,6 @@ public: void suspendBuddies(); void resumeBuddies(); bool applySettings(const PlutoSDROutputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const PlutoSDROutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const PlutoSDROutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp b/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp index 0974dff2f..1cc5c0345 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutputplugin.cpp @@ -26,10 +26,11 @@ #include "plutosdroutputgui.h" #endif #include "plutosdroutputplugin.h" +#include "plutosdroutputwebapiadapter.h" const PluginDescriptor PlutoSDROutputPlugin::m_pluginDescriptor = { QString("PlutoSDR Output"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -129,3 +130,7 @@ DeviceSampleSink *PlutoSDROutputPlugin::createSampleSinkPluginInstance(const QSt } } +DeviceWebAPIAdapter *PlutoSDROutputPlugin::createDeviceWebAPIAdapter() const +{ + return new PlutoSDROutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputplugin.h b/plugins/samplesink/plutosdroutput/plutosdroutputplugin.h index f4c46a907..3a60b4a58 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputplugin.h +++ b/plugins/samplesink/plutosdroutput/plutosdroutputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputwebapiadapter.cpp b/plugins/samplesink/plutosdroutput/plutosdroutputwebapiadapter.cpp new file mode 100644 index 000000000..29f02eea5 --- /dev/null +++ b/plugins/samplesink/plutosdroutput/plutosdroutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "plutosdroutput.h" +#include "plutosdroutputwebapiadapter.h" + +PlutoSDROutputWebAPIAdapter::PlutoSDROutputWebAPIAdapter() +{} + +PlutoSDROutputWebAPIAdapter::~PlutoSDROutputWebAPIAdapter() +{} + +int PlutoSDROutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + PlutoSDROutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int PlutoSDROutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + PlutoSDROutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputwebapiadapter.h b/plugins/samplesink/plutosdroutput/plutosdroutputwebapiadapter.h new file mode 100644 index 000000000..7df62e682 --- /dev/null +++ b/plugins/samplesink/plutosdroutput/plutosdroutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "plutosdroutputsettings.h" + +class PlutoSDROutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + PlutoSDROutputWebAPIAdapter(); + virtual ~PlutoSDROutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + PlutoSDROutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/remoteoutput/CMakeLists.txt b/plugins/samplesink/remoteoutput/CMakeLists.txt index f4f0d3b86..ac420d660 100644 --- a/plugins/samplesink/remoteoutput/CMakeLists.txt +++ b/plugins/samplesink/remoteoutput/CMakeLists.txt @@ -12,19 +12,21 @@ endif() set(remoteoutput_SOURCES remoteoutput.cpp remoteoutputplugin.cpp - remoteoutputsettings.cpp + remoteoutputsettings.cpp + remoteoutputwebapiadapter.cpp remoteoutputthread.cpp - udpsinkfec.cpp - udpsinkfecworker.cpp + udpsinkfec.cpp + udpsinkfecworker.cpp ) set(remoteoutput_HEADERS remoteoutput.h remoteoutputplugin.h - remoteoutputsettings.h + remoteoutputsettings.h + remoteoutputwebapiadapter.h remoteoutputthread.h - udpsinkfec.h - udpsinkfecworker.h + udpsinkfec.h + udpsinkfecworker.h ) include_directories( diff --git a/plugins/samplesink/remoteoutput/remoteoutput.cpp b/plugins/samplesink/remoteoutput/remoteoutput.cpp index 6217e286a..16e30f46b 100644 --- a/plugins/samplesink/remoteoutput/remoteoutput.cpp +++ b/plugins/samplesink/remoteoutput/remoteoutput.cpp @@ -385,7 +385,26 @@ int RemoteOutput::webapiSettingsPutPatch( { (void) errorMessage; RemoteOutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureRemoteOutput *msg = MsgConfigureRemoteOutput::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureRemoteOutput *msgToGUI = MsgConfigureRemoteOutput::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void RemoteOutput::webapiUpdateDeviceSettings( + RemoteOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("sampleRate")) { settings.m_sampleRate = response.getRemoteOutputSettings()->getSampleRate(); } @@ -425,18 +444,6 @@ int RemoteOutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getRemoteOutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureRemoteOutput *msg = MsgConfigureRemoteOutput::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureRemoteOutput *msgToGUI = MsgConfigureRemoteOutput::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int RemoteOutput::webapiReportGet( @@ -452,7 +459,7 @@ int RemoteOutput::webapiReportGet( void RemoteOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RemoteOutputSettings& settings) { - response.getRemoteOutputSettings()->setCenterFrequency(m_centerFrequency); + response.getRemoteOutputSettings()->setCenterFrequency(settings.m_centerFrequency); response.getRemoteOutputSettings()->setSampleRate(settings.m_sampleRate); response.getRemoteOutputSettings()->setTxDelay(settings.m_txDelay); response.getRemoteOutputSettings()->setNbFecBlocks(settings.m_nbFECBlocks); @@ -538,7 +545,8 @@ void RemoteOutput::analyzeApiReply(const QJsonObject& jsonObject, const QString& if (jsonObject.contains("RemoteSourceReport")) { QJsonObject report = jsonObject["RemoteSourceReport"].toObject(); - m_centerFrequency = report["deviceCenterFreq"].toInt() * 1000; + m_settings.m_centerFrequency = report["deviceCenterFreq"].toInt(); + m_centerFrequency = m_settings.m_centerFrequency * 1000; if (!m_remoteOutputThread) { return; diff --git a/plugins/samplesink/remoteoutput/remoteoutput.h b/plugins/samplesink/remoteoutput/remoteoutput.h index bcdd0a2f3..b46d0838a 100644 --- a/plugins/samplesink/remoteoutput/remoteoutput.h +++ b/plugins/samplesink/remoteoutput/remoteoutput.h @@ -166,6 +166,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const RemoteOutputSettings& settings); + + static void webapiUpdateDeviceSettings( + RemoteOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -192,7 +201,6 @@ private: static const uint32_t NbSamplesForRateCorrection; void applySettings(const RemoteOutputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RemoteOutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void analyzeApiReply(const QJsonObject& jsonObject, const QString& answer); diff --git a/plugins/samplesink/remoteoutput/remoteoutputplugin.cpp b/plugins/samplesink/remoteoutput/remoteoutputplugin.cpp index 891015f71..17c09c47d 100644 --- a/plugins/samplesink/remoteoutput/remoteoutputplugin.cpp +++ b/plugins/samplesink/remoteoutput/remoteoutputplugin.cpp @@ -26,10 +26,11 @@ #include "remoteoutputgui.h" #endif #include "remoteoutputplugin.h" +#include "remoteoutputwebapiadapter.h" const PluginDescriptor RemoteOutputPlugin::m_pluginDescriptor = { QString("Remote device output"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -115,3 +116,8 @@ DeviceSampleSink* RemoteOutputPlugin::createSampleSinkPluginInstance(const QStri } } + +DeviceWebAPIAdapter *RemoteOutputPlugin::createDeviceWebAPIAdapter() const +{ + return new RemoteOutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/remoteoutput/remoteoutputplugin.h b/plugins/samplesink/remoteoutput/remoteoutputplugin.h index 840dd0f8a..f204112b0 100644 --- a/plugins/samplesink/remoteoutput/remoteoutputplugin.h +++ b/plugins/samplesink/remoteoutput/remoteoutputplugin.h @@ -43,6 +43,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/remoteoutput/remoteoutputwebapiadapter.cpp b/plugins/samplesink/remoteoutput/remoteoutputwebapiadapter.cpp new file mode 100644 index 000000000..928088332 --- /dev/null +++ b/plugins/samplesink/remoteoutput/remoteoutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "remoteoutput.h" +#include "remoteoutputwebapiadapter.h" + +RemoteOutputWebAPIAdapter::RemoteOutputWebAPIAdapter() +{} + +RemoteOutputWebAPIAdapter::~RemoteOutputWebAPIAdapter() +{} + +int RemoteOutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + RemoteOutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int RemoteOutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + RemoteOutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/remoteoutput/remoteoutputwebapiadapter.h b/plugins/samplesink/remoteoutput/remoteoutputwebapiadapter.h new file mode 100644 index 000000000..899d75d4f --- /dev/null +++ b/plugins/samplesink/remoteoutput/remoteoutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "remoteoutputsettings.h" + +class RemoteOutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + RemoteOutputWebAPIAdapter(); + virtual ~RemoteOutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + RemoteOutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/soapysdroutput/CMakeLists.txt b/plugins/samplesink/soapysdroutput/CMakeLists.txt index fa32975be..a1193065d 100644 --- a/plugins/samplesink/soapysdroutput/CMakeLists.txt +++ b/plugins/samplesink/soapysdroutput/CMakeLists.txt @@ -3,14 +3,16 @@ project(soapysdroutput) set(soapysdroutput_SOURCES soapysdroutput.cpp soapysdroutputplugin.cpp - soapysdroutputsettings.cpp + soapysdroutputsettings.cpp + soapysdroutputwebapiadapter.cpp soapysdroutputthread.cpp ) set(soapysdroutput_HEADERS soapysdroutput.h soapysdroutputplugin.h - soapysdroutputsettings.h + soapysdroutputsettings.h + soapysdroutputwebapiadapter.h soapysdroutputthread.h ) diff --git a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp index abd92f1ab..0a3c3b1da 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp +++ b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp @@ -1355,7 +1355,26 @@ int SoapySDROutput::webapiSettingsPutPatch( { (void) errorMessage; SoapySDROutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureSoapySDROutput *msg = MsgConfigureSoapySDROutput::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureSoapySDROutput *msgToGUI = MsgConfigureSoapySDROutput::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void SoapySDROutput::webapiUpdateDeviceSettings( + SoapySDROutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getSoapySdrOutputSettings()->getCenterFrequency(); } @@ -1477,18 +1496,6 @@ int SoapySDROutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getSoapySdrOutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureSoapySDROutput *msg = MsgConfigureSoapySDROutput::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureSoapySDROutput *msgToGUI = MsgConfigureSoapySDROutput::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int SoapySDROutput::webapiReportGet(SWGSDRangel::SWGDeviceReport& response, QString& errorMessage) diff --git a/plugins/samplesink/soapysdroutput/soapysdroutput.h b/plugins/samplesink/soapysdroutput/soapysdroutput.h index 1e9f78f98..23a0f973c 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutput.h +++ b/plugins/samplesink/soapysdroutput/soapysdroutput.h @@ -181,6 +181,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const SoapySDROutputSettings& settings); + + static void webapiUpdateDeviceSettings( + SoapySDROutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -200,10 +209,9 @@ private: bool setDeviceCenterFrequency(SoapySDR::Device *dev, int requestedChannel, quint64 freq_hz, int loPpmTenths); void updateGains(SoapySDR::Device *dev, int requestedChannel, SoapySDROutputSettings& settings); void updateTunableElements(SoapySDR::Device *dev, int requestedChannel, SoapySDROutputSettings& settings); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SoapySDROutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); - QVariant webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue); - void webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue); + static QVariant webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue); + static void webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue); void webapiFormatArgInfo(const SoapySDR::ArgInfo& arg, SWGSDRangel::SWGArgInfo *argInfo); void webapiReverseSendSettings(QList& deviceSettingsKeys, const SoapySDROutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/soapysdroutput/soapysdroutputplugin.cpp b/plugins/samplesink/soapysdroutput/soapysdroutputplugin.cpp index 62b8d163b..a8646ed0b 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutputplugin.cpp +++ b/plugins/samplesink/soapysdroutput/soapysdroutputplugin.cpp @@ -22,6 +22,7 @@ #include "soapysdr/devicesoapysdr.h" #include "soapysdroutputplugin.h" +#include "soapysdroutputwebapiadapter.h" #ifdef SERVER_MODE #include "soapysdroutput.h" @@ -31,7 +32,7 @@ const PluginDescriptor SoapySDROutputPlugin::m_pluginDescriptor = { QString("SoapySDR Output"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -132,7 +133,7 @@ DeviceSampleSink* SoapySDROutputPlugin::createSampleSinkPluginInstance(const QSt } } - - - - +DeviceWebAPIAdapter *SoapySDROutputPlugin::createDeviceWebAPIAdapter() const +{ + return new SoapySDROutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/soapysdroutput/soapysdroutputplugin.h b/plugins/samplesink/soapysdroutput/soapysdroutputplugin.h index e8189bab3..819b4007b 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutputplugin.h +++ b/plugins/samplesink/soapysdroutput/soapysdroutputplugin.h @@ -44,6 +44,7 @@ public: DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/soapysdroutput/soapysdroutputwebapiadapter.cpp b/plugins/samplesink/soapysdroutput/soapysdroutputwebapiadapter.cpp new file mode 100644 index 000000000..a72aaf822 --- /dev/null +++ b/plugins/samplesink/soapysdroutput/soapysdroutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "soapysdroutput.h" +#include "soapysdroutputwebapiadapter.h" + +SoapySDROutputWebAPIAdapter::SoapySDROutputWebAPIAdapter() +{} + +SoapySDROutputWebAPIAdapter::~SoapySDROutputWebAPIAdapter() +{} + +int SoapySDROutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + SoapySDROutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int SoapySDROutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + SoapySDROutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/soapysdroutput/soapysdroutputwebapiadapter.h b/plugins/samplesink/soapysdroutput/soapysdroutputwebapiadapter.h new file mode 100644 index 000000000..6bf974395 --- /dev/null +++ b/plugins/samplesink/soapysdroutput/soapysdroutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "soapysdroutputsettings.h" + +class SoapySDROutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + SoapySDROutputWebAPIAdapter(); + virtual ~SoapySDROutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + SoapySDROutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesink/xtrxoutput/xtrxoutput.cpp b/plugins/samplesink/xtrxoutput/xtrxoutput.cpp index b6700c266..61d4ad6c9 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutput.cpp +++ b/plugins/samplesink/xtrxoutput/xtrxoutput.cpp @@ -1185,7 +1185,26 @@ int XTRXOutput::webapiSettingsPutPatch( { (void) errorMessage; XTRXOutputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureXTRX *msg = MsgConfigureXTRX::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureXTRX *msgToGUI = MsgConfigureXTRX::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void webapiUpdateDeviceSettings( + XTRXOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getXtrxOutputSettings()->getCenterFrequency(); } @@ -1234,18 +1253,6 @@ int XTRXOutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getXtrxOutputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureXTRX *msg = MsgConfigureXTRX::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureXTRX *msgToGUI = MsgConfigureXTRX::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void XTRXOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const XTRXOutputSettings& settings) diff --git a/plugins/samplesink/xtrxoutput/xtrxoutput.h b/plugins/samplesink/xtrxoutput/xtrxoutput.h index d83a33977..7598fa969 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutput.h +++ b/plugins/samplesink/xtrxoutput/xtrxoutput.h @@ -218,6 +218,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const XTRXOutputSettings& settings); + + static void webapiUpdateDeviceSettings( + XTRXOutputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + std::size_t getChannelIndex(); void getLORange(float& minF, float& maxF, float& stepF) const; void getSRRange(float& minF, float& maxF, float& stepF) const; @@ -242,7 +251,6 @@ private: void suspendRxThread(); void resumeRxThread(); bool applySettings(const XTRXOutputSettings& settings, bool force = false, bool forceNCOFrequency = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const XTRXOutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const XTRXOutputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputplugin.cpp b/plugins/samplesink/xtrxoutput/xtrxoutputplugin.cpp index 78eaa594d..0ac9d6db9 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputplugin.cpp +++ b/plugins/samplesink/xtrxoutput/xtrxoutputplugin.cpp @@ -30,11 +30,12 @@ #else #include "xtrxoutputgui.h" #endif -#include "../xtrxoutput/xtrxoutputplugin.h" +#include "xtrxoutputplugin.h" +#include "xtrxoutputwebapiadapter.h" const PluginDescriptor XTRXOutputPlugin::m_pluginDescriptor = { QString("XTRX Output"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -128,3 +129,7 @@ DeviceSampleSink* XTRXOutputPlugin::createSampleSinkPluginInstance(const QString } } +DeviceWebAPIAdapter *XTRXOutputPlugin::createDeviceWebAPIAdapter() const +{ + return new XTRXOutputWebAPIAdapter(); +} diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputplugin.h b/plugins/samplesink/xtrxoutput/xtrxoutputplugin.h index 2d464768d..423c0341b 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputplugin.h +++ b/plugins/samplesink/xtrxoutput/xtrxoutputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputwebapiadapter.cpp b/plugins/samplesink/xtrxoutput/xtrxoutputwebapiadapter.cpp new file mode 100644 index 000000000..6a41473e1 --- /dev/null +++ b/plugins/samplesink/xtrxoutput/xtrxoutputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "xtrxoutput.h" +#include "xtrxoutputwebapiadapter.h" + +XTRXOutputWebAPIAdapter::XTRXOutputWebAPIAdapter() +{} + +XTRXOutputWebAPIAdapter::~XTRXOutputWebAPIAdapter() +{} + +int XTRXOutputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + XTRXOutput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int XTRXOutputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + XTRXOutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputwebapiadapter.h b/plugins/samplesink/xtrxoutput/xtrxoutputwebapiadapter.h new file mode 100644 index 000000000..48d41a9e9 --- /dev/null +++ b/plugins/samplesink/xtrxoutput/xtrxoutputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "xtrxoutputsettings.h" + +class XTRXOutputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + XTRXOutputWebAPIAdapter(); + virtual ~XTRXOutputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + XTRXOutputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/airspy/airspyinput.cpp b/plugins/samplesource/airspy/airspyinput.cpp index a4083dcd3..a8e482db1 100644 --- a/plugins/samplesource/airspy/airspyinput.cpp +++ b/plugins/samplesource/airspy/airspyinput.cpp @@ -671,7 +671,7 @@ int AirspyInput::webapiSettingsPutPatch( return 200; } -void webapiUpdateDeviceSettings( +void AirspyInput::webapiUpdateDeviceSettings( AirspySettings& settings, const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response) diff --git a/plugins/samplesource/airspyhf/CMakeLists.txt b/plugins/samplesource/airspyhf/CMakeLists.txt index f7a74e623..0523774d3 100644 --- a/plugins/samplesource/airspyhf/CMakeLists.txt +++ b/plugins/samplesource/airspyhf/CMakeLists.txt @@ -4,6 +4,7 @@ set(airspyhf_SOURCES airspyhfinput.cpp airspyhfplugin.cpp airspyhfsettings.cpp + airspyhfwebapiadapter.cpp airspyhfthread.cpp ) @@ -11,6 +12,7 @@ set(airspyhf_HEADERS airspyhfinput.h airspyhfplugin.h airspyhfsettings.h + airspyhfwebapiadapter.h airspyhfthread.h ) diff --git a/plugins/samplesource/airspyhf/airspyhfinput.cpp b/plugins/samplesource/airspyhf/airspyhfinput.cpp index a1a8fed48..6f6992e99 100644 --- a/plugins/samplesource/airspyhf/airspyhfinput.cpp +++ b/plugins/samplesource/airspyhf/airspyhfinput.cpp @@ -661,7 +661,26 @@ int AirspyHFInput::webapiSettingsPutPatch( { (void) errorMessage; AirspyHFSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureAirspyHF *msg = MsgConfigureAirspyHF::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureAirspyHF *msgToGUI = MsgConfigureAirspyHF::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void AirspyHFInput::webapiUpdateDeviceSettings( + AirspyHFSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getAirspyHfSettings()->getCenterFrequency(); } @@ -719,18 +738,6 @@ int AirspyHFInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("iqCorrection")) { settings.m_iqCorrection = response.getAirspyHfSettings()->getIqCorrection() != 0; } - - MsgConfigureAirspyHF *msg = MsgConfigureAirspyHF::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureAirspyHF *msgToGUI = MsgConfigureAirspyHF::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void AirspyHFInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const AirspyHFSettings& settings) diff --git a/plugins/samplesource/airspyhf/airspyhfinput.h b/plugins/samplesource/airspyhf/airspyhfinput.h index e55d7d08c..311223bd0 100644 --- a/plugins/samplesource/airspyhf/airspyhfinput.h +++ b/plugins/samplesource/airspyhf/airspyhfinput.h @@ -141,6 +141,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const AirspyHFSettings& settings); + + static void webapiUpdateDeviceSettings( + AirspyHFSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + static const qint64 loLowLimitFreqHF; static const qint64 loHighLimitFreqHF; static const qint64 loLowLimitFreqVHF; @@ -164,7 +173,6 @@ private: bool applySettings(const AirspyHFSettings& settings, bool force); airspyhf_device_t *open_airspyhf_from_serial(const QString& serialStr); void setDeviceCenterFrequency(quint64 freq, const AirspyHFSettings& settings); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const AirspyHFSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const AirspyHFSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/airspyhf/airspyhfplugin.cpp b/plugins/samplesource/airspyhf/airspyhfplugin.cpp index f4d4fb670..61476bde3 100644 --- a/plugins/samplesource/airspyhf/airspyhfplugin.cpp +++ b/plugins/samplesource/airspyhf/airspyhfplugin.cpp @@ -21,6 +21,7 @@ #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "airspyhfplugin.h" +#include "airspyhfwebapiadapter.h" #ifdef SERVER_MODE #include "airspyhfinput.h" #else @@ -30,7 +31,7 @@ const PluginDescriptor AirspyHFPlugin::m_pluginDescriptor = { QString("AirspyHF Input"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -140,3 +141,8 @@ DeviceSampleSource *AirspyHFPlugin::createSampleSourcePluginInstance(const QStri return 0; } } + +DeviceWebAPIAdapter *AirspyHFPlugin::createDeviceWebAPIAdapter() const +{ + return new AirspyHFWebAPIAdapter(); +} \ No newline at end of file diff --git a/plugins/samplesource/airspyhf/airspyhfplugin.h b/plugins/samplesource/airspyhf/airspyhfplugin.h index 9081bcc00..75ae2873a 100644 --- a/plugins/samplesource/airspyhf/airspyhfplugin.h +++ b/plugins/samplesource/airspyhf/airspyhfplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/airspyhf/airspyhfwebapiadapter.cpp b/plugins/samplesource/airspyhf/airspyhfwebapiadapter.cpp new file mode 100644 index 000000000..f1dad90fd --- /dev/null +++ b/plugins/samplesource/airspyhf/airspyhfwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "airspyhfinput.h" +#include "airspyhfwebapiadapter.h" + +AirspyHFWebAPIAdapter::AirspyHFWebAPIAdapter() +{} + +AirspyHFWebAPIAdapter::~AirspyHFWebAPIAdapter() +{} + +int AirspyHFWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + AirspyHFInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int AirspyHFWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + AirspyHFInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/airspyhf/airspyhfwebapiadapter.h b/plugins/samplesource/airspyhf/airspyhfwebapiadapter.h new file mode 100644 index 000000000..6f551313f --- /dev/null +++ b/plugins/samplesource/airspyhf/airspyhfwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "airspyhfsettings.h" + +class AirspyHFWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + AirspyHFWebAPIAdapter(); + virtual ~AirspyHFWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + AirspyHFSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/bladerf1input/CMakeLists.txt b/plugins/samplesource/bladerf1input/CMakeLists.txt index 445a9e7ba..2c076cadd 100644 --- a/plugins/samplesource/bladerf1input/CMakeLists.txt +++ b/plugins/samplesource/bladerf1input/CMakeLists.txt @@ -3,14 +3,16 @@ project(bladerf1input) set(bladerf1input_SOURCES bladerf1input.cpp bladerf1inputplugin.cpp - bladerf1inputsettings.cpp + bladerf1inputsettings.cpp + bladerf1inputwebapiadapter.cpp bladerf1inputthread.cpp ) set(bladerf1input_HEADERS bladerf1input.h bladerf1inputplugin.h - bladerf1inputsettings.h + bladerf1inputsettings.h + bladerf1inputwebapiadapter.h bladerf1inputthread.h ) diff --git a/plugins/samplesource/bladerf1input/bladerf1input.cpp b/plugins/samplesource/bladerf1input/bladerf1input.cpp index 23123949c..49ddbb375 100644 --- a/plugins/samplesource/bladerf1input/bladerf1input.cpp +++ b/plugins/samplesource/bladerf1input/bladerf1input.cpp @@ -667,7 +667,26 @@ int Bladerf1Input::webapiSettingsPutPatch( { (void) errorMessage; BladeRF1InputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureBladerf1 *msg = MsgConfigureBladerf1::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureBladerf1 *msgToGUI = MsgConfigureBladerf1::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void Bladerf1Input::webapiUpdateDeviceSettings( + BladeRF1InputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getBladeRf1InputSettings()->getCenterFrequency(); } @@ -722,18 +741,6 @@ int Bladerf1Input::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getBladeRf1InputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureBladerf1 *msg = MsgConfigureBladerf1::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureBladerf1 *msgToGUI = MsgConfigureBladerf1::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int Bladerf1Input::webapiRunGet( diff --git a/plugins/samplesource/bladerf1input/bladerf1input.h b/plugins/samplesource/bladerf1input/bladerf1input.h index 965b2f046..e6fb717e6 100644 --- a/plugins/samplesource/bladerf1input/bladerf1input.h +++ b/plugins/samplesource/bladerf1input/bladerf1input.h @@ -138,6 +138,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const BladeRF1InputSettings& settings); + + static void webapiUpdateDeviceSettings( + BladeRF1InputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -155,7 +164,6 @@ private: void closeDevice(); bool applySettings(const BladeRF1InputSettings& settings, bool force); bladerf_lna_gain getLnaGain(int lnaGain); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const BladeRF1InputSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const BladeRF1InputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/bladerf1input/bladerf1inputplugin.cpp b/plugins/samplesource/bladerf1input/bladerf1inputplugin.cpp index 772ffdbd8..fa9b0f1e0 100644 --- a/plugins/samplesource/bladerf1input/bladerf1inputplugin.cpp +++ b/plugins/samplesource/bladerf1input/bladerf1inputplugin.cpp @@ -21,6 +21,7 @@ #include #include "plugin/pluginapi.h" #include "util/simpleserializer.h" +#include "bladerf1inputwebapiadapter.h" #ifdef SERVER_MODE #include "bladerf1input.h" @@ -150,3 +151,7 @@ DeviceSampleSource *Blderf1InputPlugin::createSampleSourcePluginInstance(const Q } } +DeviceWebAPIAdapter *Blderf1InputPlugin::createDeviceWebAPIAdapter() const +{ + return new BladeRF1InputWebAPIAdapter(); +} diff --git a/plugins/samplesource/bladerf1input/bladerf1inputplugin.h b/plugins/samplesource/bladerf1input/bladerf1inputplugin.h index a9d5d381d..61809a3d9 100644 --- a/plugins/samplesource/bladerf1input/bladerf1inputplugin.h +++ b/plugins/samplesource/bladerf1input/bladerf1inputplugin.h @@ -44,6 +44,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/bladerf1input/bladerf1inputwebapiadapter.cpp b/plugins/samplesource/bladerf1input/bladerf1inputwebapiadapter.cpp new file mode 100644 index 000000000..8db19171c --- /dev/null +++ b/plugins/samplesource/bladerf1input/bladerf1inputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "bladerf1input.h" +#include "bladerf1inputwebapiadapter.h" + +BladeRF1InputWebAPIAdapter::BladeRF1InputWebAPIAdapter() +{} + +BladeRF1InputWebAPIAdapter::~BladeRF1InputWebAPIAdapter() +{} + +int BladeRF1InputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + Bladerf1Input::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int BladeRF1InputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + Bladerf1Input::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/bladerf1input/bladerf1inputwebapiadapter.h b/plugins/samplesource/bladerf1input/bladerf1inputwebapiadapter.h new file mode 100644 index 000000000..30ba2c865 --- /dev/null +++ b/plugins/samplesource/bladerf1input/bladerf1inputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "bladerf1inputsettings.h" + +class BladeRF1InputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + BladeRF1InputWebAPIAdapter(); + virtual ~BladeRF1InputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + BladeRF1InputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/bladerf2input/CMakeLists.txt b/plugins/samplesource/bladerf2input/CMakeLists.txt index 05ee4738e..72331744a 100644 --- a/plugins/samplesource/bladerf2input/CMakeLists.txt +++ b/plugins/samplesource/bladerf2input/CMakeLists.txt @@ -3,14 +3,16 @@ project(bladerf2input) set(bladerf2input_SOURCES bladerf2input.cpp bladerf2inputplugin.cpp - bladerf2inputsettings.cpp + bladerf2inputsettings.cpp + bladerf2inputwebapiadapter.cpp bladerf2inputthread.cpp ) set(bladerf2input_HEADERS bladerf2input.h bladerf2inputplugin.h - bladerf2inputsettings.h + bladerf2inputsettings.h + bladerf2inputwebapiadapter.h bladerf2inputthread.h ) diff --git a/plugins/samplesource/bladerf2input/bladerf2input.cpp b/plugins/samplesource/bladerf2input/bladerf2input.cpp index 949b1f21f..45bebf88d 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2input.cpp @@ -1056,7 +1056,26 @@ int BladeRF2Input::webapiSettingsPutPatch( { (void) errorMessage; BladeRF2InputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureBladeRF2 *msg = MsgConfigureBladeRF2::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureBladeRF2 *msgToGUI = MsgConfigureBladeRF2::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void BladeRF2Input::webapiUpdateDeviceSettings( + BladeRF2InputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getBladeRf2InputSettings()->getCenterFrequency(); } @@ -1111,18 +1130,6 @@ int BladeRF2Input::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getBladeRf2InputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureBladeRF2 *msg = MsgConfigureBladeRF2::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureBladeRF2 *msgToGUI = MsgConfigureBladeRF2::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int BladeRF2Input::webapiReportGet(SWGSDRangel::SWGDeviceReport& response, QString& errorMessage) diff --git a/plugins/samplesource/bladerf2input/bladerf2input.h b/plugins/samplesource/bladerf2input/bladerf2input.h index 288eaaa9d..5d3b48bb4 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.h +++ b/plugins/samplesource/bladerf2input/bladerf2input.h @@ -182,6 +182,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const BladeRF2InputSettings& settings); + + static void webapiUpdateDeviceSettings( + BladeRF2InputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -201,7 +210,6 @@ private: void moveThreadToBuddy(); bool applySettings(const BladeRF2InputSettings& settings, bool force = false); bool setDeviceCenterFrequency(struct bladerf *dev, int requestedChannel, quint64 freq_hz, int loPpmTenths); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const BladeRF2InputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const BladeRF2InputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/bladerf2input/bladerf2inputplugin.cpp b/plugins/samplesource/bladerf2input/bladerf2inputplugin.cpp index 69f651cac..587cc4678 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputplugin.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2inputplugin.cpp @@ -21,6 +21,7 @@ #include #include "plugin/pluginapi.h" #include "util/simpleserializer.h" +#include "bladerf2inputwebapiadapter.h" #ifdef SERVER_MODE #include "bladerf2input.h" @@ -30,7 +31,7 @@ const PluginDescriptor Blderf2InputPlugin::m_pluginDescriptor = { QString("BladeRF2 Input"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -120,7 +121,7 @@ PluginInstanceGUI* Blderf2InputPlugin::createSampleSourcePluginInstanceGUI( { (void) sourceId; (void) widget; - (void) deviceUISet; + (void) deviceUISet; return 0; } #else @@ -155,6 +156,7 @@ DeviceSampleSource *Blderf2InputPlugin::createSampleSourcePluginInstance(const Q } } - - - +DeviceWebAPIAdapter *Blderf2InputPlugin::createDeviceWebAPIAdapter() const +{ + return new BladeRF2InputWebAPIAdapter(); +} diff --git a/plugins/samplesource/bladerf2input/bladerf2inputplugin.h b/plugins/samplesource/bladerf2input/bladerf2inputplugin.h index c605da99b..b16b53058 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputplugin.h +++ b/plugins/samplesource/bladerf2input/bladerf2inputplugin.h @@ -44,6 +44,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/bladerf2input/bladerf2inputwebapiadapter.cpp b/plugins/samplesource/bladerf2input/bladerf2inputwebapiadapter.cpp new file mode 100644 index 000000000..368ef681d --- /dev/null +++ b/plugins/samplesource/bladerf2input/bladerf2inputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "bladerf2input.h" +#include "bladerf2inputwebapiadapter.h" + +BladeRF2InputWebAPIAdapter::BladeRF2InputWebAPIAdapter() +{} + +BladeRF2InputWebAPIAdapter::~BladeRF2InputWebAPIAdapter() +{} + +int BladeRF2InputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + BladeRF2Input::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int BladeRF2InputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + BladeRF2Input::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/bladerf2input/bladerf2inputwebapiadapter.h b/plugins/samplesource/bladerf2input/bladerf2inputwebapiadapter.h new file mode 100644 index 000000000..edaddccd3 --- /dev/null +++ b/plugins/samplesource/bladerf2input/bladerf2inputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "bladerf2inputsettings.h" + +class BladeRF2InputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + BladeRF2InputWebAPIAdapter(); + virtual ~BladeRF2InputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + BladeRF2InputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/fcdpro/CMakeLists.txt b/plugins/samplesource/fcdpro/CMakeLists.txt index f2f38b2f1..84908a943 100644 --- a/plugins/samplesource/fcdpro/CMakeLists.txt +++ b/plugins/samplesource/fcdpro/CMakeLists.txt @@ -3,14 +3,16 @@ project(fcdpro) set(fcdpro_SOURCES fcdproinput.cpp fcdproplugin.cpp - fcdprosettings.cpp + fcdprosettings.cpp + fcdprowebapiadapter.cpp fcdprothread.cpp ) set(fcdpro_HEADERS fcdproinput.h fcdproplugin.h - fcdprosettings.h + fcdprosettings.h + fcdprowebapiadapter.h fcdprothread.h ) diff --git a/plugins/samplesource/fcdpro/fcdproinput.cpp b/plugins/samplesource/fcdpro/fcdproinput.cpp index 0568d4ecf..eb8805c35 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.cpp +++ b/plugins/samplesource/fcdpro/fcdproinput.cpp @@ -873,7 +873,26 @@ int FCDProInput::webapiSettingsPutPatch( { (void) errorMessage; FCDProSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureFCDPro *msg = MsgConfigureFCDPro::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureFCDPro *msgToGUI = MsgConfigureFCDPro::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void FCDProInput::webapiUpdateDeviceSettings( + FCDProSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getFcdProSettings()->getCenterFrequency(); } @@ -961,18 +980,6 @@ int FCDProInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getFcdProSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureFCDPro *msg = MsgConfigureFCDPro::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureFCDPro *msgToGUI = MsgConfigureFCDPro::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void FCDProInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FCDProSettings& settings) diff --git a/plugins/samplesource/fcdpro/fcdproinput.h b/plugins/samplesource/fcdpro/fcdproinput.h index 39d3702d9..25e471668 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.h +++ b/plugins/samplesource/fcdpro/fcdproinput.h @@ -145,6 +145,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const FCDProSettings& settings); + + static void webapiUpdateDeviceSettings( + FCDProSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + void set_center_freq(double freq); void set_bias_t(bool on); void set_lnaGain(int index); @@ -184,7 +193,6 @@ private: void closeFCDAudio(); void applySettings(const FCDProSettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FCDProSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const FCDProSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/fcdpro/fcdproplugin.cpp b/plugins/samplesource/fcdpro/fcdproplugin.cpp index f4336ba24..b5170b99f 100644 --- a/plugins/samplesource/fcdpro/fcdproplugin.cpp +++ b/plugins/samplesource/fcdpro/fcdproplugin.cpp @@ -19,6 +19,7 @@ #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "fcdproplugin.h" +#include "fcdprowebapiadapter.h" #ifdef SERVER_MODE #include "fcdproinput.h" @@ -122,3 +123,8 @@ DeviceSampleSource *FCDProPlugin::createSampleSourcePluginInstance(const QString return 0; } } + +DeviceWebAPIAdapter *FCDProPlugin::createDeviceWebAPIAdapter() const +{ + return new FCDProWebAPIAdapter(); +} diff --git a/plugins/samplesource/fcdpro/fcdproplugin.h b/plugins/samplesource/fcdpro/fcdproplugin.h index 726c0c9fb..de495de7e 100644 --- a/plugins/samplesource/fcdpro/fcdproplugin.h +++ b/plugins/samplesource/fcdpro/fcdproplugin.h @@ -25,6 +25,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/fcdpro/fcdprowebapiadapter.cpp b/plugins/samplesource/fcdpro/fcdprowebapiadapter.cpp new file mode 100644 index 000000000..c8bff69af --- /dev/null +++ b/plugins/samplesource/fcdpro/fcdprowebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "fcdproinput.h" +#include "fcdprowebapiadapter.h" + +FCDProWebAPIAdapter::FCDProWebAPIAdapter() +{} + +FCDProWebAPIAdapter::~FCDProWebAPIAdapter() +{} + +int FCDProWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + FCDProInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int FCDProWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + FCDProInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/fcdpro/fcdprowebapiadapter.h b/plugins/samplesource/fcdpro/fcdprowebapiadapter.h new file mode 100644 index 000000000..38eda50a2 --- /dev/null +++ b/plugins/samplesource/fcdpro/fcdprowebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "fcdprosettings.h" + +class FCDProWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + FCDProWebAPIAdapter(); + virtual ~FCDProWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + FCDProSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/fcdproplus/CMakeLists.txt b/plugins/samplesource/fcdproplus/CMakeLists.txt index db8f20dec..169e293ef 100644 --- a/plugins/samplesource/fcdproplus/CMakeLists.txt +++ b/plugins/samplesource/fcdproplus/CMakeLists.txt @@ -3,14 +3,16 @@ project(fcdproplus) set(fcdproplus_SOURCES fcdproplusinput.cpp fcdproplusplugin.cpp - fcdproplussettings.cpp + fcdproplussettings.cpp + fcdpropluswebapiadapter.cpp fcdproplusthread.cpp ) set(fcdproplus_HEADERS fcdproplusinput.h fcdproplusplugin.h - fcdproplussettings.h + fcdproplussettings.h + fcdpropluswebapiadapter.h fcdproplusthread.h ) diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp index e9ca69619..7cbbfc22f 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp @@ -600,7 +600,26 @@ int FCDProPlusInput::webapiSettingsPutPatch( { (void) errorMessage; FCDProPlusSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureFCDProPlus *msg = MsgConfigureFCDProPlus::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureFCDProPlus *msgToGUI = MsgConfigureFCDProPlus::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void FCDProPlusInput::webapiUpdateDeviceSettings( + FCDProPlusSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getFcdProPlusSettings()->getCenterFrequency(); } @@ -661,18 +680,6 @@ int FCDProPlusInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getFcdProPlusSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureFCDProPlus *msg = MsgConfigureFCDProPlus::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureFCDProPlus *msgToGUI = MsgConfigureFCDProPlus::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void FCDProPlusInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FCDProPlusSettings& settings) diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.h b/plugins/samplesource/fcdproplus/fcdproplusinput.h index 2835adfb9..0cbfc4704 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.h +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.h @@ -145,6 +145,15 @@ public: SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const FCDProPlusSettings& settings); + + static void webapiUpdateDeviceSettings( + FCDProPlusSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + void set_center_freq(double freq); void set_bias_t(bool on); void set_lna_gain(bool on); @@ -172,7 +181,6 @@ private: bool openFCDAudio(const char *filename); void closeFCDAudio(); void applySettings(const FCDProPlusSettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FCDProPlusSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const FCDProPlusSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp b/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp index 40f6552a8..9efd59975 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp @@ -19,6 +19,7 @@ #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "fcdproplusplugin.h" +#include "fcdpropluswebapiadapter.h" #ifdef SERVER_MODE #include "fcdproplusinput.h" @@ -124,3 +125,8 @@ DeviceSampleSource *FCDProPlusPlugin::createSampleSourcePluginInstance(const QSt return 0; } } + +DeviceWebAPIAdapter *FCDProPlusPlugin::createDeviceWebAPIAdapter() const +{ + return new FCDProPlusWebAPIAdapter(); +} diff --git a/plugins/samplesource/fcdproplus/fcdproplusplugin.h b/plugins/samplesource/fcdproplus/fcdproplusplugin.h index c20032a37..580252e91 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusplugin.h +++ b/plugins/samplesource/fcdproplus/fcdproplusplugin.h @@ -25,6 +25,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/fcdproplus/fcdpropluswebapiadapter.cpp b/plugins/samplesource/fcdproplus/fcdpropluswebapiadapter.cpp new file mode 100644 index 000000000..7e47a0484 --- /dev/null +++ b/plugins/samplesource/fcdproplus/fcdpropluswebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "fcdproplusinput.h" +#include "fcdpropluswebapiadapter.h" + +FCDProPlusWebAPIAdapter::FCDProPlusWebAPIAdapter() +{} + +FCDProPlusWebAPIAdapter::~FCDProPlusWebAPIAdapter() +{} + +int FCDProPlusWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + FCDProPlusInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int FCDProPlusWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + FCDProPlusInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/fcdproplus/fcdpropluswebapiadapter.h b/plugins/samplesource/fcdproplus/fcdpropluswebapiadapter.h new file mode 100644 index 000000000..b2bd35d98 --- /dev/null +++ b/plugins/samplesource/fcdproplus/fcdpropluswebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "fcdproplussettings.h" + +class FCDProPlusWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + FCDProPlusWebAPIAdapter(); + virtual ~FCDProPlusWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + FCDProPlusSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/fileinput/CMakeLists.txt b/plugins/samplesource/fileinput/CMakeLists.txt index f733d2842..4d0436e5b 100644 --- a/plugins/samplesource/fileinput/CMakeLists.txt +++ b/plugins/samplesource/fileinput/CMakeLists.txt @@ -4,14 +4,16 @@ set(fileinput_SOURCES fileinput.cpp fileinputplugin.cpp fileinputthread.cpp - fileinputsettings.cpp + fileinputsettings.cpp + fileinputwebapiadapter.cpp ) set(fileinput_HEADERS fileinput.h fileinputplugin.h fileinputthread.h - fileinputsettings.h + fileinputsettings.h + fileinputwebapiadapter.h ) include_directories( diff --git a/plugins/samplesource/fileinput/fileinput.cpp b/plugins/samplesource/fileinput/fileinput.cpp index 297c0b802..264e666bd 100644 --- a/plugins/samplesource/fileinput/fileinput.cpp +++ b/plugins/samplesource/fileinput/fileinput.cpp @@ -465,7 +465,26 @@ int FileInput::webapiSettingsPutPatch( { (void) errorMessage; FileInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureFileInput *msg = MsgConfigureFileInput::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureFileInput *msgToGUI = MsgConfigureFileInput::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void FileInput::webapiUpdateDeviceSettings( + FileInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("fileName")) { settings.m_fileName = *response.getFileInputSettings()->getFileName(); } @@ -487,18 +506,6 @@ int FileInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getFileInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureFileInput *msg = MsgConfigureFileInput::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureFileInput *msgToGUI = MsgConfigureFileInput::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int FileInput::webapiRunGet( diff --git a/plugins/samplesource/fileinput/fileinput.h b/plugins/samplesource/fileinput/fileinput.h index f0664d340..4f9802166 100644 --- a/plugins/samplesource/fileinput/fileinput.h +++ b/plugins/samplesource/fileinput/fileinput.h @@ -319,6 +319,15 @@ public: SWGSDRangel::SWGDeviceReport& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const FileInputSettings& settings); + + static void webapiUpdateDeviceSettings( + FileInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -339,7 +348,6 @@ public: void openFileStream(); void seekFileStream(int seekMillis); bool applySettings(const FileInputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FileInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const FileInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/fileinput/fileinputplugin.cpp b/plugins/samplesource/fileinput/fileinputplugin.cpp index 58d798343..c2848affc 100644 --- a/plugins/samplesource/fileinput/fileinputplugin.cpp +++ b/plugins/samplesource/fileinput/fileinputplugin.cpp @@ -26,10 +26,11 @@ #include "fileinputgui.h" #endif #include "fileinputplugin.h" +#include "fileinputwebapiadapter.h" const PluginDescriptor FileInputPlugin::m_pluginDescriptor = { QString("File device input"), - QString("4.11.0"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -115,3 +116,7 @@ DeviceSampleSource *FileInputPlugin::createSampleSourcePluginInstance(const QStr } } +DeviceWebAPIAdapter *FileInputPlugin::createDeviceWebAPIAdapter() const +{ + return new FileInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/fileinput/fileinputplugin.h b/plugins/samplesource/fileinput/fileinputplugin.h index ef7a8dbb9..47ea96e65 100644 --- a/plugins/samplesource/fileinput/fileinputplugin.h +++ b/plugins/samplesource/fileinput/fileinputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/fileinput/fileinputwebapiadapter.cpp b/plugins/samplesource/fileinput/fileinputwebapiadapter.cpp new file mode 100644 index 000000000..54cb57959 --- /dev/null +++ b/plugins/samplesource/fileinput/fileinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "fileinput.h" +#include "fileinputwebapiadapter.h" + +FileInputWebAPIAdapter::FileInputWebAPIAdapter() +{} + +FileInputWebAPIAdapter::~FileInputWebAPIAdapter() +{} + +int FileInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + FileInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int FileInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + FileInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/fileinput/fileinputwebapiadapter.h b/plugins/samplesource/fileinput/fileinputwebapiadapter.h new file mode 100644 index 000000000..4970e2d90 --- /dev/null +++ b/plugins/samplesource/fileinput/fileinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "fileinputsettings.h" + +class FileInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + FileInputWebAPIAdapter(); + virtual ~FileInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + FileInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/hackrfinput/CMakeLists.txt b/plugins/samplesource/hackrfinput/CMakeLists.txt index 8d4639165..6150edbde 100644 --- a/plugins/samplesource/hackrfinput/CMakeLists.txt +++ b/plugins/samplesource/hackrfinput/CMakeLists.txt @@ -4,6 +4,7 @@ set(hackrfinput_SOURCES hackrfinput.cpp hackrfinputplugin.cpp hackrfinputsettings.cpp + hackrfinputwebapiadapter.cpp hackrfinputthread.cpp ) @@ -11,6 +12,7 @@ set(hackrfinput_HEADERS hackrfinput.h hackrfinputplugin.h hackrfinputsettings.h + hackrfinputwebapiadapter.h hackrfinputthread.h ) diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index 096dc9c70..6faba23c5 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -602,7 +602,26 @@ int HackRFInput::webapiSettingsPutPatch( { (void) errorMessage; HackRFInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureHackRF *msg = MsgConfigureHackRF::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureHackRF *msgToGUI = MsgConfigureHackRF::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void HackRFInput::webapiUpdateDeviceSettings( + HackRFInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getHackRfInputSettings()->getCenterFrequency(); } @@ -657,18 +676,6 @@ int HackRFInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getHackRfInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureHackRF *msg = MsgConfigureHackRF::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureHackRF *msgToGUI = MsgConfigureHackRF::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void HackRFInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const HackRFInputSettings& settings) diff --git a/plugins/samplesource/hackrfinput/hackrfinput.h b/plugins/samplesource/hackrfinput/hackrfinput.h index e25f51615..96fc5c83e 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.h +++ b/plugins/samplesource/hackrfinput/hackrfinput.h @@ -155,6 +155,14 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const HackRFInputSettings& settings); + + static void webapiUpdateDeviceSettings( + HackRFInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); private: DeviceAPI *m_deviceAPI; @@ -173,7 +181,6 @@ private: void closeDevice(); bool applySettings(const HackRFInputSettings& settings, bool force); void setDeviceCenterFrequency(quint64 freq, qint32 LOppmTenths); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const HackRFInputSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const HackRFInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp index 003f1308f..164bce832 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp @@ -28,10 +28,11 @@ #include "hackrfinputgui.h" #endif #include "hackrfinputplugin.h" +#include "hackrfinputwebapiadapter.h" const PluginDescriptor HackRFInputPlugin::m_pluginDescriptor = { QString("HackRF Input"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -165,3 +166,8 @@ DeviceSampleSource *HackRFInputPlugin::createSampleSourcePluginInstance(const QS return 0; } } + +DeviceWebAPIAdapter *HackRFInputPlugin::createDeviceWebAPIAdapter() const +{ + return new HackRFInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/hackrfinput/hackrfinputplugin.h b/plugins/samplesource/hackrfinput/hackrfinputplugin.h index 407a39399..b91713ddd 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputplugin.h +++ b/plugins/samplesource/hackrfinput/hackrfinputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/hackrfinput/hackrfinputwebapiadapter.cpp b/plugins/samplesource/hackrfinput/hackrfinputwebapiadapter.cpp new file mode 100644 index 000000000..448ee811a --- /dev/null +++ b/plugins/samplesource/hackrfinput/hackrfinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "hackrfinput.h" +#include "hackrfinputwebapiadapter.h" + +HackRFInputWebAPIAdapter::HackRFInputWebAPIAdapter() +{} + +HackRFInputWebAPIAdapter::~HackRFInputWebAPIAdapter() +{} + +int HackRFInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + HackRFInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int HackRFInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + HackRFInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/hackrfinput/hackrfinputwebapiadapter.h b/plugins/samplesource/hackrfinput/hackrfinputwebapiadapter.h new file mode 100644 index 000000000..78593d966 --- /dev/null +++ b/plugins/samplesource/hackrfinput/hackrfinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "hackrfinputsettings.h" + +class HackRFInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + HackRFInputWebAPIAdapter(); + virtual ~HackRFInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + HackRFInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/kiwisdr/CMakeLists.txt b/plugins/samplesource/kiwisdr/CMakeLists.txt index b5d08adfe..8ffdb9fa9 100644 --- a/plugins/samplesource/kiwisdr/CMakeLists.txt +++ b/plugins/samplesource/kiwisdr/CMakeLists.txt @@ -4,14 +4,16 @@ set(kiwisdr_SOURCES kiwisdrinput.cpp kiwisdrplugin.cpp kiwisdrworker.cpp - kiwisdrsettings.cpp + kiwisdrsettings.cpp + kiwisdrwebapiadapter.cpp ) set(kiwisdr_HEADERS kiwisdrinput.h kiwisdrplugin.h kiwisdrworker.h - kiwisdrsettings.h + kiwisdrsettings.h + kiwisdrwebapiadapter.h ) include_directories( diff --git a/plugins/samplesource/kiwisdr/kiwisdrinput.cpp b/plugins/samplesource/kiwisdr/kiwisdrinput.cpp index f61565d4e..065ba0217 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrinput.cpp +++ b/plugins/samplesource/kiwisdr/kiwisdrinput.cpp @@ -381,7 +381,26 @@ int KiwiSDRInput::webapiSettingsPutPatch( { (void) errorMessage; KiwiSDRSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureKiwiSDR *msg = MsgConfigureKiwiSDR::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureKiwiSDR *msgToGUI = MsgConfigureKiwiSDR::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void KiwiSDRInput::webapiUpdateDeviceSettings( + KiwiSDRSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("gain")) { settings.m_gain = response.getKiwiSdrSettings()->getGain(); } @@ -412,18 +431,6 @@ int KiwiSDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getKiwiSdrSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureKiwiSDR *msg = MsgConfigureKiwiSDR::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureKiwiSDR *msgToGUI = MsgConfigureKiwiSDR::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int KiwiSDRInput::webapiReportGet( diff --git a/plugins/samplesource/kiwisdr/kiwisdrinput.h b/plugins/samplesource/kiwisdr/kiwisdrinput.h index 6a339a689..fb23b03ca 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrinput.h +++ b/plugins/samplesource/kiwisdr/kiwisdrinput.h @@ -160,6 +160,15 @@ public: SWGSDRangel::SWGDeviceReport& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const KiwiSDRSettings& settings); + + static void webapiUpdateDeviceSettings( + KiwiSDRSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; FileRecord *m_fileSink; //!< File sink to record device I/Q output @@ -175,7 +184,6 @@ private: int getStatus() const; bool applySettings(const KiwiSDRSettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const KiwiSDRSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const KiwiSDRSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/kiwisdr/kiwisdrplugin.cpp b/plugins/samplesource/kiwisdr/kiwisdrplugin.cpp index 95acc16ed..34a623108 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrplugin.cpp +++ b/plugins/samplesource/kiwisdr/kiwisdrplugin.cpp @@ -27,10 +27,11 @@ #include "kiwisdrgui.h" #endif #include "kiwisdrplugin.h" +#include "kiwisdrwebapiadapter.h" const PluginDescriptor KiwiSDRPlugin::m_pluginDescriptor = { QString("KiwiSDR input"), - QString("4.10.0"), + QString("4.11.6"), QString("(c) Vort (c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -113,3 +114,7 @@ DeviceSampleSource *KiwiSDRPlugin::createSampleSourcePluginInstance(const QStrin } } +DeviceWebAPIAdapter *KiwiSDRPlugin::createDeviceWebAPIAdapter() const +{ + return new KiwiSDRWebAPIAdapter(); +} diff --git a/plugins/samplesource/kiwisdr/kiwisdrplugin.h b/plugins/samplesource/kiwisdr/kiwisdrplugin.h index e11434341..c27cde86e 100644 --- a/plugins/samplesource/kiwisdr/kiwisdrplugin.h +++ b/plugins/samplesource/kiwisdr/kiwisdrplugin.h @@ -43,6 +43,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/kiwisdr/kiwisdrwebapiadapter.cpp b/plugins/samplesource/kiwisdr/kiwisdrwebapiadapter.cpp new file mode 100644 index 000000000..c9d8bed89 --- /dev/null +++ b/plugins/samplesource/kiwisdr/kiwisdrwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "kiwisdrinput.h" +#include "kiwisdrwebapiadapter.h" + +KiwiSDRWebAPIAdapter::KiwiSDRWebAPIAdapter() +{} + +KiwiSDRWebAPIAdapter::~KiwiSDRWebAPIAdapter() +{} + +int KiwiSDRWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + KiwiSDRInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int KiwiSDRWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + KiwiSDRInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/kiwisdr/kiwisdrwebapiadapter.h b/plugins/samplesource/kiwisdr/kiwisdrwebapiadapter.h new file mode 100644 index 000000000..fa363a21f --- /dev/null +++ b/plugins/samplesource/kiwisdr/kiwisdrwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "kiwisdrsettings.h" + +class KiwiSDRWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + KiwiSDRWebAPIAdapter(); + virtual ~KiwiSDRWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + KiwiSDRSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/limesdrinput/CMakeLists.txt b/plugins/samplesource/limesdrinput/CMakeLists.txt index c4ab26649..120a0b78c 100644 --- a/plugins/samplesource/limesdrinput/CMakeLists.txt +++ b/plugins/samplesource/limesdrinput/CMakeLists.txt @@ -3,14 +3,16 @@ project(limesdrinput) set(limesdrinput_SOURCES limesdrinput.cpp limesdrinputplugin.cpp - limesdrinputsettings.cpp + limesdrinputsettings.cpp + limesdrinputwebapiadapter.cpp limesdrinputthread.cpp ) set(limesdrinput_HEADERS limesdrinput.h limesdrinputplugin.h - limesdrinputsettings.h + limesdrinputsettings.h + limesdrinputwebapiadapter.h limesdrinputthread.h ) diff --git a/plugins/samplesource/limesdrinput/limesdrinput.cpp b/plugins/samplesource/limesdrinput/limesdrinput.cpp index ed347ad21..f0b42a86b 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinput.cpp @@ -1442,7 +1442,26 @@ int LimeSDRInput::webapiSettingsPutPatch( { (void) errorMessage; LimeSDRInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureLimeSDR *msg = MsgConfigureLimeSDR::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureLimeSDR *msgToGUI = MsgConfigureLimeSDR::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void LimeSDRInput::webapiUpdateDeviceSettings( + LimeSDRInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("antennaPath")) { settings.m_antennaPath = (LimeSDRInputSettings::PathRFE) response.getLimeSdrInputSettings()->getAntennaPath(); } @@ -1527,18 +1546,6 @@ int LimeSDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getLimeSdrInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureLimeSDR *msg = MsgConfigureLimeSDR::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureLimeSDR *msgToGUI = MsgConfigureLimeSDR::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void LimeSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDRInputSettings& settings) diff --git a/plugins/samplesource/limesdrinput/limesdrinput.h b/plugins/samplesource/limesdrinput/limesdrinput.h index 0d47003c9..e8bd27a75 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.h +++ b/plugins/samplesource/limesdrinput/limesdrinput.h @@ -247,6 +247,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const LimeSDRInputSettings& settings); + + static void webapiUpdateDeviceSettings( + LimeSDRInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + std::size_t getChannelIndex(); void getLORange(float& minF, float& maxF) const; void getSRRange(float& minF, float& maxF) const; @@ -277,7 +286,6 @@ private: void suspendTxBuddies(); void resumeTxBuddies(); bool applySettings(const LimeSDRInputSettings& settings, bool force = false, bool forceNCOFrequency = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDRInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const LimeSDRInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp b/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp index e3f393ca9..23bd81247 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputplugin.cpp @@ -30,10 +30,11 @@ #include "limesdrinputgui.h" #endif #include "limesdrinputplugin.h" +#include "limesdrinputwebapiadapter.h" const PluginDescriptor LimeSDRInputPlugin::m_pluginDescriptor = { QString("LimeSDR Input"), - QString("4.5.5"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -171,3 +172,7 @@ DeviceSampleSource *LimeSDRInputPlugin::createSampleSourcePluginInstance(const Q } } +DeviceWebAPIAdapter *LimeSDRInputPlugin::createDeviceWebAPIAdapter() const +{ + return new LimeSDRInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/limesdrinput/limesdrinputplugin.h b/plugins/samplesource/limesdrinput/limesdrinputplugin.h index a04e9da40..71d8de574 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputplugin.h +++ b/plugins/samplesource/limesdrinput/limesdrinputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/limesdrinput/limesdrinputwebapiadapter.cpp b/plugins/samplesource/limesdrinput/limesdrinputwebapiadapter.cpp new file mode 100644 index 000000000..1568c36f1 --- /dev/null +++ b/plugins/samplesource/limesdrinput/limesdrinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "limesdrinput.h" +#include "limesdrinputwebapiadapter.h" + +LimeSDRInputWebAPIAdapter::LimeSDRInputWebAPIAdapter() +{} + +LimeSDRInputWebAPIAdapter::~LimeSDRInputWebAPIAdapter() +{} + +int LimeSDRInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + LimeSDRInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int LimeSDRInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + LimeSDRInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/limesdrinput/limesdrinputwebapiadapter.h b/plugins/samplesource/limesdrinput/limesdrinputwebapiadapter.h new file mode 100644 index 000000000..c459b96e9 --- /dev/null +++ b/plugins/samplesource/limesdrinput/limesdrinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "limesdrinputsettings.h" + +class LimeSDRInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + LimeSDRInputWebAPIAdapter(); + virtual ~LimeSDRInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + LimeSDRInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/localinput/CMakeLists.txt b/plugins/samplesource/localinput/CMakeLists.txt index a21d65550..65b151344 100644 --- a/plugins/samplesource/localinput/CMakeLists.txt +++ b/plugins/samplesource/localinput/CMakeLists.txt @@ -3,12 +3,14 @@ project(localinput) set(localinput_SOURCES localinput.cpp localinputsettings.cpp + localinputwebapiadapter.cpp localinputplugin.cpp ) set(localinput_HEADERS localinput.h localinputsettings.h + localinputwebapiadapter.h localinputplugin.h ) diff --git a/plugins/samplesource/localinput/localinput.cpp b/plugins/samplesource/localinput/localinput.cpp index 8e46d14e0..3b87f5fe6 100644 --- a/plugins/samplesource/localinput/localinput.cpp +++ b/plugins/samplesource/localinput/localinput.cpp @@ -319,7 +319,26 @@ int LocalInput::webapiSettingsPutPatch( { (void) errorMessage; LocalInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureLocalInput *msg = MsgConfigureLocalInput::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureLocalInput *msgToGUI = MsgConfigureLocalInput::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void LocalInput::webapiUpdateDeviceSettings( + LocalInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("dcBlock")) { settings.m_dcBlock = response.getLocalInputSettings()->getDcBlock() != 0; } @@ -341,18 +360,6 @@ int LocalInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getLocalInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureLocalInput *msg = MsgConfigureLocalInput::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureLocalInput *msgToGUI = MsgConfigureLocalInput::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void LocalInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LocalInputSettings& settings) diff --git a/plugins/samplesource/localinput/localinput.h b/plugins/samplesource/localinput/localinput.h index 4f6a36e59..920542d64 100644 --- a/plugins/samplesource/localinput/localinput.h +++ b/plugins/samplesource/localinput/localinput.h @@ -165,6 +165,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const LocalInputSettings& settings); + + static void webapiUpdateDeviceSettings( + LocalInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -178,7 +187,6 @@ private: QNetworkRequest m_networkRequest; void applySettings(const LocalInputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LocalInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const LocalInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/localinput/localinputplugin.cpp b/plugins/samplesource/localinput/localinputplugin.cpp index 473358f82..7a505461a 100644 --- a/plugins/samplesource/localinput/localinputplugin.cpp +++ b/plugins/samplesource/localinput/localinputplugin.cpp @@ -26,10 +26,11 @@ #include "localinputgui.h" #endif #include "localinputplugin.h" +#include "localinputwebapiadapter.h" const PluginDescriptor LocalInputPlugin::m_pluginDescriptor = { QString("Local device input"), - QString("4.6.0"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -114,3 +115,8 @@ DeviceSampleSource *LocalInputPlugin::createSampleSourcePluginInstance(const QSt return 0; } } + +DeviceWebAPIAdapter *LocalInputPlugin::createDeviceWebAPIAdapter() const +{ + return new LocalInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/localinput/localinputplugin.h b/plugins/samplesource/localinput/localinputplugin.h index 94ec3a2ac..ab29f1f1e 100644 --- a/plugins/samplesource/localinput/localinputplugin.h +++ b/plugins/samplesource/localinput/localinputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/localinput/localinputwebapiadapter.cpp b/plugins/samplesource/localinput/localinputwebapiadapter.cpp new file mode 100644 index 000000000..f59d338e2 --- /dev/null +++ b/plugins/samplesource/localinput/localinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "localinput.h" +#include "localinputwebapiadapter.h" + +LocalInputWebAPIAdapter::LocalInputWebAPIAdapter() +{} + +LocalInputWebAPIAdapter::~LocalInputWebAPIAdapter() +{} + +int LocalInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + LocalInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int LocalInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + LocalInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/localinput/localinputwebapiadapter.h b/plugins/samplesource/localinput/localinputwebapiadapter.h new file mode 100644 index 000000000..6d14eb18e --- /dev/null +++ b/plugins/samplesource/localinput/localinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "localinputsettings.h" + +class LocalInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + LocalInputWebAPIAdapter(); + virtual ~LocalInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + LocalInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/perseus/CMakeLists.txt b/plugins/samplesource/perseus/CMakeLists.txt index 931d1cdfa..66fe7e527 100644 --- a/plugins/samplesource/perseus/CMakeLists.txt +++ b/plugins/samplesource/perseus/CMakeLists.txt @@ -4,6 +4,7 @@ set(perseus_SOURCES perseusinput.cpp perseusplugin.cpp perseussettings.cpp + perseuswebapiadapter.cpp perseusthread.cpp ) @@ -11,6 +12,7 @@ set(perseus_HEADERS perseusinput.h perseusplugin.h perseussettings.h + perseuswebapiadapter.h perseusthread.h ) diff --git a/plugins/samplesource/perseus/perseusinput.cpp b/plugins/samplesource/perseus/perseusinput.cpp index 5f65c6ccb..cfe4bd91f 100644 --- a/plugins/samplesource/perseus/perseusinput.cpp +++ b/plugins/samplesource/perseus/perseusinput.cpp @@ -496,7 +496,26 @@ int PerseusInput::webapiSettingsPutPatch( { (void) errorMessage; PerseusSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigurePerseus *msg = MsgConfigurePerseus::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigurePerseus *msgToGUI = MsgConfigurePerseus::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void PerseusInput::webapiUpdateDeviceSettings( + PerseusSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getPerseusSettings()->getCenterFrequency(); } @@ -544,18 +563,6 @@ int PerseusInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getPerseusSettings()->getReverseApiDeviceIndex(); } - - MsgConfigurePerseus *msg = MsgConfigurePerseus::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigurePerseus *msgToGUI = MsgConfigurePerseus::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int PerseusInput::webapiReportGet( diff --git a/plugins/samplesource/perseus/perseusinput.h b/plugins/samplesource/perseus/perseusinput.h index 7b0cad9d6..bcea4875f 100644 --- a/plugins/samplesource/perseus/perseusinput.h +++ b/plugins/samplesource/perseus/perseusinput.h @@ -140,6 +140,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const PerseusSettings& settings); + + static void webapiUpdateDeviceSettings( + PerseusSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + const std::vector& getSampleRates() const { return m_sampleRates; } private: @@ -158,7 +167,6 @@ private: void closeDevice(); void setDeviceCenterFrequency(quint64 freq, const PerseusSettings& settings); bool applySettings(const PerseusSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const PerseusSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const PerseusSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/perseus/perseusplugin.cpp b/plugins/samplesource/perseus/perseusplugin.cpp index 548f9e29b..b76c4e7d7 100644 --- a/plugins/samplesource/perseus/perseusplugin.cpp +++ b/plugins/samplesource/perseus/perseusplugin.cpp @@ -22,6 +22,7 @@ #include "util/simpleserializer.h" #include "perseus/deviceperseus.h" #include "perseusplugin.h" +#include "perseuswebapiadapter.h" #ifdef SERVER_MODE #include "perseusinput.h" @@ -31,7 +32,7 @@ const PluginDescriptor PerseusPlugin::m_pluginDescriptor = { QString("Perseus Input"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -130,3 +131,8 @@ DeviceSampleSource *PerseusPlugin::createSampleSourcePluginInstance(const QStrin return 0; } } + +DeviceWebAPIAdapter *PerseusPlugin::createDeviceWebAPIAdapter() const +{ + return new PerseusWebAPIAdapter(); +} diff --git a/plugins/samplesource/perseus/perseusplugin.h b/plugins/samplesource/perseus/perseusplugin.h index f66ffe418..1ad2ecfa9 100644 --- a/plugins/samplesource/perseus/perseusplugin.h +++ b/plugins/samplesource/perseus/perseusplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/perseus/perseuswebapiadapter.cpp b/plugins/samplesource/perseus/perseuswebapiadapter.cpp new file mode 100644 index 000000000..902e2751e --- /dev/null +++ b/plugins/samplesource/perseus/perseuswebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "perseusinput.h" +#include "perseuswebapiadapter.h" + +PerseusWebAPIAdapter::PerseusWebAPIAdapter() +{} + +PerseusWebAPIAdapter::~PerseusWebAPIAdapter() +{} + +int PerseusWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + PerseusInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int PerseusWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + PerseusInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/perseus/perseuswebapiadapter.h b/plugins/samplesource/perseus/perseuswebapiadapter.h new file mode 100644 index 000000000..d1d2cdea8 --- /dev/null +++ b/plugins/samplesource/perseus/perseuswebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "perseussettings.h" + +class PerseusWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + PerseusWebAPIAdapter(); + virtual ~PerseusWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + PerseusSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/plutosdrinput/CMakeLists.txt b/plugins/samplesource/plutosdrinput/CMakeLists.txt index 4fd30fa26..04353377d 100644 --- a/plugins/samplesource/plutosdrinput/CMakeLists.txt +++ b/plugins/samplesource/plutosdrinput/CMakeLists.txt @@ -4,6 +4,7 @@ set(plutosdrinput_SOURCES plutosdrinput.cpp plutosdrinputplugin.cpp plutosdrinputsettings.cpp + plutosdrinputwebapiadapter.cpp plutosdrinputthread.cpp ) @@ -11,6 +12,7 @@ set(plutosdrinput_HEADERS plutosdrinput.h plutosdrinputplugin.h plutosdrinputsettings.h + plutosdrinputwebapiadapter.h plutosdrinputthread.h ) diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index 5e45fda51..c78f5861a 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -795,7 +795,26 @@ int PlutoSDRInput::webapiSettingsPutPatch( { (void) errorMessage; PlutoSDRInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigurePlutoSDR *msg = MsgConfigurePlutoSDR::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigurePlutoSDR *msgToGUI = MsgConfigurePlutoSDR::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void webapiUpdateDeviceSettings( + PlutoSDRInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getPlutoSdrInputSettings()->getCenterFrequency(); } @@ -877,18 +896,6 @@ int PlutoSDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getPlutoSdrInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigurePlutoSDR *msg = MsgConfigurePlutoSDR::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigurePlutoSDR *msgToGUI = MsgConfigurePlutoSDR::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int PlutoSDRInput::webapiReportGet( @@ -920,7 +927,7 @@ void PlutoSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& r response.getPlutoSdrInputSettings()->setLog2Decim(settings.m_log2Decim); response.getPlutoSdrInputSettings()->setLpfBw(settings.m_lpfBW); response.getPlutoSdrInputSettings()->setGain(settings.m_gain); - response.getPlutoSdrInputSettings()->setAntennaPath((int) m_settings.m_antennaPath); + response.getPlutoSdrInputSettings()->setAntennaPath((int) settings.m_antennaPath); response.getPlutoSdrInputSettings()->setGainMode((int) settings.m_gainMode); response.getPlutoSdrInputSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); response.getPlutoSdrInputSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.h b/plugins/samplesource/plutosdrinput/plutosdrinput.h index 73c19c4fd..aff770984 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.h @@ -142,6 +142,15 @@ public: SWGSDRangel::SWGDeviceReport& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const PlutoSDRInputSettings& settings); + + static void webapiUpdateDeviceSettings( + PlutoSDRInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + uint32_t getADCSampleRate() const { return m_deviceSampleRates.m_addaConnvRate; } uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } void getRSSI(std::string& rssiStr); @@ -170,7 +179,6 @@ public: void suspendBuddies(); void resumeBuddies(); bool applySettings(const PlutoSDRInputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const PlutoSDRInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const PlutoSDRInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp index c3eb17a78..93cca92b4 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp @@ -26,6 +26,7 @@ #include "plutosdrinputgui.h" #endif #include "plutosdrinputplugin.h" +#include "plutosdrinputwebapiadapter.h" class DeviceAPI; @@ -131,3 +132,7 @@ DeviceSampleSource *PlutoSDRInputPlugin::createSampleSourcePluginInstance(const } } +DeviceWebAPIAdapter *PlutoSDRInputPlugin::createDeviceWebAPIAdapter() const +{ + return new PlutoSDRInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.h b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.h index fe5184cdd..216aec18b 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputwebapiadapter.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputwebapiadapter.cpp new file mode 100644 index 000000000..65022c965 --- /dev/null +++ b/plugins/samplesource/plutosdrinput/plutosdrinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "plutosdrinput.h" +#include "plutosdrinputwebapiadapter.h" + +PlutoSDRInputWebAPIAdapter::PlutoSDRInputWebAPIAdapter() +{} + +PlutoSDRInputWebAPIAdapter::~PlutoSDRInputWebAPIAdapter() +{} + +int PlutoSDRInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + PlutoSDRInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int PlutoSDRInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + PlutoSDRInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputwebapiadapter.h b/plugins/samplesource/plutosdrinput/plutosdrinputwebapiadapter.h new file mode 100644 index 000000000..c19ee1e47 --- /dev/null +++ b/plugins/samplesource/plutosdrinput/plutosdrinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "plutosdrinputsettings.h" + +class PlutoSDRInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + PlutoSDRInputWebAPIAdapter(); + virtual ~PlutoSDRInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + PlutoSDRInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/remoteinput/CMakeLists.txt b/plugins/samplesource/remoteinput/CMakeLists.txt index 0c5926ae5..1ac39da99 100644 --- a/plugins/samplesource/remoteinput/CMakeLists.txt +++ b/plugins/samplesource/remoteinput/CMakeLists.txt @@ -14,6 +14,7 @@ set(remoteinput_SOURCES remoteinputudphandler.cpp remoteinput.cpp remoteinputsettings.cpp + remoteinputwebapiadapter.cpp remoteinputplugin.cpp ) @@ -22,6 +23,7 @@ set(remoteinput_HEADERS remoteinputudphandler.h remoteinput.h remoteinputsettings.h + remoteinputwebapiadapter.h remoteinputplugin.h ) diff --git a/plugins/samplesource/remoteinput/remoteinput.cpp b/plugins/samplesource/remoteinput/remoteinput.cpp index fe4d86ea6..7ef740442 100644 --- a/plugins/samplesource/remoteinput/remoteinput.cpp +++ b/plugins/samplesource/remoteinput/remoteinput.cpp @@ -333,7 +333,26 @@ int RemoteInput::webapiSettingsPutPatch( { (void) errorMessage; RemoteInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureRemoteInput *msg = MsgConfigureRemoteInput::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureRemoteInput *msgToGUI = MsgConfigureRemoteInput::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void webapiUpdateDeviceSettings( + RemoteInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("apiAddress")) { settings.m_apiAddress = *response.getRemoteInputSettings()->getApiAddress(); } @@ -367,18 +386,6 @@ int RemoteInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getRemoteInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureRemoteInput *msg = MsgConfigureRemoteInput::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureRemoteInput *msgToGUI = MsgConfigureRemoteInput::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void RemoteInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RemoteInputSettings& settings) diff --git a/plugins/samplesource/remoteinput/remoteinput.h b/plugins/samplesource/remoteinput/remoteinput.h index 29c35a806..0768462db 100644 --- a/plugins/samplesource/remoteinput/remoteinput.h +++ b/plugins/samplesource/remoteinput/remoteinput.h @@ -313,6 +313,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const RemoteInputSettings& settings); + + static void webapiUpdateDeviceSettings( + RemoteInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -326,7 +335,6 @@ private: QNetworkRequest m_networkRequest; void applySettings(const RemoteInputSettings& settings, bool force = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RemoteInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const RemoteInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/remoteinput/remoteinputplugin.cpp b/plugins/samplesource/remoteinput/remoteinputplugin.cpp index 33aa23cd9..2ef5f284f 100644 --- a/plugins/samplesource/remoteinput/remoteinputplugin.cpp +++ b/plugins/samplesource/remoteinput/remoteinputplugin.cpp @@ -26,10 +26,11 @@ #include "remoteinputgui.h" #endif #include "remoteinputplugin.h" +#include "remoteinputwebapiadapter.h" const PluginDescriptor RemoteInputPlugin::m_pluginDescriptor = { QString("Remote device input"), - QString("4.5.6"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -114,3 +115,8 @@ DeviceSampleSource *RemoteInputPlugin::createSampleSourcePluginInstance(const QS return 0; } } + +DeviceWebAPIAdapter *RemoteInputPlugin::createDeviceWebAPIAdapter() const +{ + return new RemoteInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/remoteinput/remoteinputplugin.h b/plugins/samplesource/remoteinput/remoteinputplugin.h index f41a2014b..618accef9 100644 --- a/plugins/samplesource/remoteinput/remoteinputplugin.h +++ b/plugins/samplesource/remoteinput/remoteinputplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/remoteinput/remoteinputwebapiadapter.cpp b/plugins/samplesource/remoteinput/remoteinputwebapiadapter.cpp new file mode 100644 index 000000000..93bc953f4 --- /dev/null +++ b/plugins/samplesource/remoteinput/remoteinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "remoteinput.h" +#include "remoteinputwebapiadapter.h" + +RemoteInputWebAPIAdapter::RemoteInputWebAPIAdapter() +{} + +RemoteInputWebAPIAdapter::~RemoteInputWebAPIAdapter() +{} + +int RemoteInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + RemoteInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int RemoteInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + RemoteInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/remoteinput/remoteinputwebapiadapter.h b/plugins/samplesource/remoteinput/remoteinputwebapiadapter.h new file mode 100644 index 000000000..ab8058a58 --- /dev/null +++ b/plugins/samplesource/remoteinput/remoteinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "remoteinputsettings.h" + +class RemoteInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + RemoteInputWebAPIAdapter(); + virtual ~RemoteInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + RemoteInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/rtlsdr/CMakeLists.txt b/plugins/samplesource/rtlsdr/CMakeLists.txt index a15ea6f60..23f4bf803 100644 --- a/plugins/samplesource/rtlsdr/CMakeLists.txt +++ b/plugins/samplesource/rtlsdr/CMakeLists.txt @@ -4,6 +4,7 @@ set(rtlsdr_SOURCES rtlsdrinput.cpp rtlsdrplugin.cpp rtlsdrsettings.cpp + rtlsdrwebapiadapter.cpp rtlsdrthread.cpp ) @@ -11,6 +12,7 @@ set(rtlsdr_HEADERS rtlsdrinput.h rtlsdrplugin.h rtlsdrsettings.h + rtlsdrwebapiadapter.h rtlsdrthread.h ) include_directories( diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index b0457e2fc..99504a36d 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -598,7 +598,26 @@ int RTLSDRInput::webapiSettingsPutPatch( { (void) errorMessage; RTLSDRSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureRTLSDR *msg = MsgConfigureRTLSDR::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureRTLSDR *msgToGUI = MsgConfigureRTLSDR::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void RTLSDRInput::webapiUpdateDeviceSettings( + RTLSDRSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("agc")) { settings.m_agc = response.getRtlSdrSettings()->getAgc() != 0; } @@ -659,18 +678,6 @@ int RTLSDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getRtlSdrSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureRTLSDR *msg = MsgConfigureRTLSDR::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureRTLSDR *msgToGUI = MsgConfigureRTLSDR::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void RTLSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RTLSDRSettings& settings) diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h index ba3c780a6..ca051125f 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.h +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h @@ -140,6 +140,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const RTLSDRSettings& settings); + + static void webapiUpdateDeviceSettings( + RTLSDRSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + const std::vector& getGains() const { return m_gains; } void set_ds_mode(int on); @@ -168,7 +177,6 @@ private: bool openDevice(); void closeDevice(); bool applySettings(const RTLSDRSettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RTLSDRSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const RTLSDRSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp index ced17f152..eec4b1ee3 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp @@ -10,10 +10,11 @@ #include "rtlsdrgui.h" #endif #include "rtlsdrplugin.h" +#include "rtlsdrwebapiadapter.h" const PluginDescriptor RTLSDRPlugin::m_pluginDescriptor = { QString("RTL-SDR Input"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -108,3 +109,7 @@ DeviceSampleSource *RTLSDRPlugin::createSampleSourcePluginInstance(const QString } } +DeviceWebAPIAdapter *RTLSDRPlugin::createDeviceWebAPIAdapter() const +{ + return new RTLSDRWebAPIAdapter(); +} diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.h b/plugins/samplesource/rtlsdr/rtlsdrplugin.h index a121bf498..aee6cdd38 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrplugin.h +++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.h @@ -25,6 +25,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/rtlsdr/rtlsdrwebapiadapter.cpp b/plugins/samplesource/rtlsdr/rtlsdrwebapiadapter.cpp new file mode 100644 index 000000000..7b0324bb1 --- /dev/null +++ b/plugins/samplesource/rtlsdr/rtlsdrwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "rtlsdrinput.h" +#include "rtlsdrwebapiadapter.h" + +RTLSDRWebAPIAdapter::RTLSDRWebAPIAdapter() +{} + +RTLSDRWebAPIAdapter::~RTLSDRWebAPIAdapter() +{} + +int RTLSDRWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + RTLSDRInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int RTLSDRWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + RTLSDRInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/rtlsdr/rtlsdrwebapiadapter.h b/plugins/samplesource/rtlsdr/rtlsdrwebapiadapter.h new file mode 100644 index 000000000..2aeded1f9 --- /dev/null +++ b/plugins/samplesource/rtlsdr/rtlsdrwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "rtlsdrsettings.h" + +class RTLSDRWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + RTLSDRWebAPIAdapter(); + virtual ~RTLSDRWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + RTLSDRSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/sdrplay/CMakeLists.txt b/plugins/samplesource/sdrplay/CMakeLists.txt index f68827f82..de8f9f920 100644 --- a/plugins/samplesource/sdrplay/CMakeLists.txt +++ b/plugins/samplesource/sdrplay/CMakeLists.txt @@ -4,6 +4,7 @@ set(sdrplay_SOURCES sdrplayinput.cpp sdrplayplugin.cpp sdrplaysettings.cpp + sdrplaywebapiadapter.cpp sdrplaythread.cpp ) @@ -11,6 +12,7 @@ set(sdrplay_HEADERS sdrplayinput.h sdrplayplugin.h sdrplaysettings.h + sdrplaywebapiadapter.h sdrplaythread.h ) diff --git a/plugins/samplesource/sdrplay/sdrplayinput.cpp b/plugins/samplesource/sdrplay/sdrplayinput.cpp index f467b962e..6f17bf56a 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.cpp +++ b/plugins/samplesource/sdrplay/sdrplayinput.cpp @@ -685,7 +685,26 @@ int SDRPlayInput::webapiSettingsPutPatch( { (void) errorMessage; SDRPlaySettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureSDRPlay *msg = MsgConfigureSDRPlay::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureSDRPlay *msgToGUI = MsgConfigureSDRPlay::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void SDRPlayInput::webapiUpdateDeviceSettings( + SDRPlaySettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getSdrPlaySettings()->getCenterFrequency(); } @@ -749,18 +768,6 @@ int SDRPlayInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getSdrPlaySettings()->getReverseApiDeviceIndex(); } - - MsgConfigureSDRPlay *msg = MsgConfigureSDRPlay::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureSDRPlay *msgToGUI = MsgConfigureSDRPlay::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void SDRPlayInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRPlaySettings& settings) diff --git a/plugins/samplesource/sdrplay/sdrplayinput.h b/plugins/samplesource/sdrplay/sdrplayinput.h index 2ac578dae..aee08b4d4 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.h +++ b/plugins/samplesource/sdrplay/sdrplayinput.h @@ -178,6 +178,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const SDRPlaySettings& settings); + + static void webapiUpdateDeviceSettings( + SDRPlaySettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + SDRPlayVariant getVariant() const { return m_variant; } private: @@ -198,7 +207,6 @@ private: void closeDevice(); bool applySettings(const SDRPlaySettings& settings, bool forwardChange, bool force); bool setDeviceCenterFrequency(quint64 freq); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SDRPlaySettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const SDRPlaySettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/sdrplay/sdrplayplugin.cpp b/plugins/samplesource/sdrplay/sdrplayplugin.cpp index 3eb38599f..e2dd2bc7e 100644 --- a/plugins/samplesource/sdrplay/sdrplayplugin.cpp +++ b/plugins/samplesource/sdrplay/sdrplayplugin.cpp @@ -26,10 +26,11 @@ #include "sdrplaygui.h" #endif #include "sdrplayplugin.h" +#include "sdrplaywebapiadapter.h" const PluginDescriptor SDRPlayPlugin::m_pluginDescriptor = { QString("SDRPlay RSP1 Input"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -134,3 +135,7 @@ DeviceSampleSource *SDRPlayPlugin::createSampleSourcePluginInstance(const QStrin } } +DeviceWebAPIAdapter *SDRPlayPlugin::createDeviceWebAPIAdapter() const +{ + return new SDRPlayWebAPIAdapter(); +} diff --git a/plugins/samplesource/sdrplay/sdrplayplugin.h b/plugins/samplesource/sdrplay/sdrplayplugin.h index 2dc617aad..67155614b 100644 --- a/plugins/samplesource/sdrplay/sdrplayplugin.h +++ b/plugins/samplesource/sdrplay/sdrplayplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/sdrplay/sdrplaywebapiadapter.cpp b/plugins/samplesource/sdrplay/sdrplaywebapiadapter.cpp new file mode 100644 index 000000000..39776b2a4 --- /dev/null +++ b/plugins/samplesource/sdrplay/sdrplaywebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "sdrplayinput.h" +#include "sdrplaywebapiadapter.h" + +SDRPlayWebAPIAdapter::SDRPlayWebAPIAdapter() +{} + +SDRPlayWebAPIAdapter::~SDRPlayWebAPIAdapter() +{} + +int SDRPlayWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + SDRPlayInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int SDRPlayWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + SDRPlayInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/sdrplay/sdrplaywebapiadapter.h b/plugins/samplesource/sdrplay/sdrplaywebapiadapter.h new file mode 100644 index 000000000..1dbd185fc --- /dev/null +++ b/plugins/samplesource/sdrplay/sdrplaywebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "sdrplaysettings.h" + +class SDRPlayWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + SDRPlayWebAPIAdapter(); + virtual ~SDRPlayWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + SDRPlaySettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/soapysdrinput/CMakeLists.txt b/plugins/samplesource/soapysdrinput/CMakeLists.txt index 68063f71c..76c74b8dc 100644 --- a/plugins/samplesource/soapysdrinput/CMakeLists.txt +++ b/plugins/samplesource/soapysdrinput/CMakeLists.txt @@ -3,14 +3,16 @@ project(soapysdrinput) set(soapysdrinput_SOURCES soapysdrinput.cpp soapysdrinputplugin.cpp - soapysdrinputsettings.cpp + soapysdrinputsettings.cpp + soapysdrinputwebapiadapter.cpp soapysdrinputthread.cpp ) set(soapysdrinput_HEADERS soapysdrinput.h soapysdrinputplugin.h - soapysdrinputsettings.h + soapysdrinputsettings.h + soapysdrinputwebapiadapter.h soapysdrinputthread.h ) diff --git a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp index 38d48cda8..fae674352 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp +++ b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp @@ -1420,7 +1420,26 @@ int SoapySDRInput::webapiSettingsPutPatch( { (void) errorMessage; SoapySDRInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureSoapySDRInput *msg = MsgConfigureSoapySDRInput::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureSoapySDRInput *msgToGUI = MsgConfigureSoapySDRInput::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void SoapySDRInput::webapiUpdateDeviceSettings( + SoapySDRInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getSoapySdrInputSettings()->getCenterFrequency(); } @@ -1554,18 +1573,6 @@ int SoapySDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getSoapySdrInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureSoapySDRInput *msg = MsgConfigureSoapySDRInput::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureSoapySDRInput *msgToGUI = MsgConfigureSoapySDRInput::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } int SoapySDRInput::webapiReportGet(SWGSDRangel::SWGDeviceReport& response, QString& errorMessage) diff --git a/plugins/samplesource/soapysdrinput/soapysdrinput.h b/plugins/samplesource/soapysdrinput/soapysdrinput.h index 488f1e886..456d3acb5 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinput.h +++ b/plugins/samplesource/soapysdrinput/soapysdrinput.h @@ -203,6 +203,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const SoapySDRInputSettings& settings); + + static void webapiUpdateDeviceSettings( + SoapySDRInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; QMutex m_mutex; @@ -223,10 +232,9 @@ private: bool setDeviceCenterFrequency(SoapySDR::Device *dev, int requestedChannel, quint64 freq_hz, int loPpmTenths); void updateGains(SoapySDR::Device *dev, int requestedChannel, SoapySDRInputSettings& settings); void updateTunableElements(SoapySDR::Device *dev, int requestedChannel, SoapySDRInputSettings& settings); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SoapySDRInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); - QVariant webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue); - void webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue); + static QVariant webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue); + static void webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue); void webapiFormatArgInfo(const SoapySDR::ArgInfo& arg, SWGSDRangel::SWGArgInfo *argInfo); void webapiReverseSendSettings(QList& deviceSettingsKeys, const SoapySDRInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputplugin.cpp b/plugins/samplesource/soapysdrinput/soapysdrinputplugin.cpp index f9c7c1519..c5f7c008a 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinputplugin.cpp +++ b/plugins/samplesource/soapysdrinput/soapysdrinputplugin.cpp @@ -21,6 +21,7 @@ #include "soapysdr/devicesoapysdr.h" #include "soapysdrinputplugin.h" +#include "soapysdrinputwebapiadapter.h" #ifdef SERVER_MODE #include "soapysdrinput.h" @@ -30,7 +31,7 @@ const PluginDescriptor SoapySDRInputPlugin::m_pluginDescriptor = { QString("SoapySDR Input"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -131,7 +132,7 @@ DeviceSampleSource *SoapySDRInputPlugin::createSampleSourcePluginInstance(const } } - - - - +DeviceWebAPIAdapter *SoapySDRInputPlugin::createDeviceWebAPIAdapter() const +{ + return new SoapySDRInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputplugin.h b/plugins/samplesource/soapysdrinput/soapysdrinputplugin.h index cebcbda0f..5fc1b95b9 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinputplugin.h +++ b/plugins/samplesource/soapysdrinput/soapysdrinputplugin.h @@ -44,6 +44,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputwebapiadapter.cpp b/plugins/samplesource/soapysdrinput/soapysdrinputwebapiadapter.cpp new file mode 100644 index 000000000..4a05678cc --- /dev/null +++ b/plugins/samplesource/soapysdrinput/soapysdrinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "soapysdrinput.h" +#include "soapysdrinputwebapiadapter.h" + +SoapySDRInputWebAPIAdapter::SoapySDRInputWebAPIAdapter() +{} + +SoapySDRInputWebAPIAdapter::~SoapySDRInputWebAPIAdapter() +{} + +int SoapySDRInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + SoapySDRInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int SoapySDRInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + SoapySDRInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputwebapiadapter.h b/plugins/samplesource/soapysdrinput/soapysdrinputwebapiadapter.h new file mode 100644 index 000000000..883951937 --- /dev/null +++ b/plugins/samplesource/soapysdrinput/soapysdrinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "soapysdrinputsettings.h" + +class SoapySDRInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + SoapySDRInputWebAPIAdapter(); + virtual ~SoapySDRInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + SoapySDRInputSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/testsource/CMakeLists.txt b/plugins/samplesource/testsource/CMakeLists.txt index 0aaa86f2c..24437a148 100644 --- a/plugins/samplesource/testsource/CMakeLists.txt +++ b/plugins/samplesource/testsource/CMakeLists.txt @@ -4,14 +4,16 @@ set(testsource_SOURCES testsourceinput.cpp testsourceplugin.cpp testsourcethread.cpp - testsourcesettings.cpp + testsourcesettings.cpp + testsourcewebapiadapter.cpp ) set(testsource_HEADERS testsourceinput.h testsourceplugin.h testsourcethread.h - testsourcesettings.h + testsourcesettings.h + testsourcewebapiadapter.h ) include_directories( diff --git a/plugins/samplesource/testsource/testsourceinput.cpp b/plugins/samplesource/testsource/testsourceinput.cpp index 6a8679006..d8c296b42 100644 --- a/plugins/samplesource/testsource/testsourceinput.cpp +++ b/plugins/samplesource/testsource/testsourceinput.cpp @@ -497,7 +497,26 @@ int TestSourceInput::webapiSettingsPutPatch( { (void) errorMessage; TestSourceSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureTestSource *msg = MsgConfigureTestSource::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureTestSource *msgToGUI = MsgConfigureTestSource::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void TestSourceInput::webapiUpdateDeviceSettings( + TestSourceSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getTestSourceSettings()->getCenterFrequency(); } @@ -569,18 +588,6 @@ int TestSourceInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getTestSourceSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureTestSource *msg = MsgConfigureTestSource::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureTestSource *msgToGUI = MsgConfigureTestSource::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void TestSourceInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const TestSourceSettings& settings) diff --git a/plugins/samplesource/testsource/testsourceinput.h b/plugins/samplesource/testsource/testsourceinput.h index 54ecd3bb4..10942241b 100644 --- a/plugins/samplesource/testsource/testsourceinput.h +++ b/plugins/samplesource/testsource/testsourceinput.h @@ -135,6 +135,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const TestSourceSettings& settings); + + static void webapiUpdateDeviceSettings( + TestSourceSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + private: DeviceAPI *m_deviceAPI; FileRecord *m_fileSink; //!< File sink to record device I/Q output @@ -148,7 +157,6 @@ private: QNetworkRequest m_networkRequest; bool applySettings(const TestSourceSettings& settings, bool force); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const TestSourceSettings& settings); void webapiReverseSendSettings(QList& deviceSettingsKeys, const TestSourceSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/testsource/testsourceplugin.cpp b/plugins/samplesource/testsource/testsourceplugin.cpp index 72a797cdb..571c46c72 100644 --- a/plugins/samplesource/testsource/testsourceplugin.cpp +++ b/plugins/samplesource/testsource/testsourceplugin.cpp @@ -26,10 +26,11 @@ #include "testsourcegui.h" #endif #include "testsourceplugin.h" +#include "testsourcewebapiadapter.h" const PluginDescriptor TestSourcePlugin::m_pluginDescriptor = { QString("Test Source input"), - QString("4.5.2"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -112,3 +113,7 @@ DeviceSampleSource *TestSourcePlugin::createSampleSourcePluginInstance(const QSt } } +DeviceWebAPIAdapter *TestSourcePlugin::createDeviceWebAPIAdapter() const +{ + return new TestSourceWebAPIAdapter(); +} diff --git a/plugins/samplesource/testsource/testsourceplugin.h b/plugins/samplesource/testsource/testsourceplugin.h index 6309d3fe9..f1276b67f 100644 --- a/plugins/samplesource/testsource/testsourceplugin.h +++ b/plugins/samplesource/testsource/testsourceplugin.h @@ -42,6 +42,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/testsource/testsourcewebapiadapter.cpp b/plugins/samplesource/testsource/testsourcewebapiadapter.cpp new file mode 100644 index 000000000..5a51bdbb5 --- /dev/null +++ b/plugins/samplesource/testsource/testsourcewebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "testsourceinput.h" +#include "testsourcewebapiadapter.h" + +TestSourceWebAPIAdapter::TestSourceWebAPIAdapter() +{} + +TestSourceWebAPIAdapter::~TestSourceWebAPIAdapter() +{} + +int TestSourceWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + TestSourceInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int TestSourceWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + TestSourceInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/testsource/testsourcewebapiadapter.h b/plugins/samplesource/testsource/testsourcewebapiadapter.h new file mode 100644 index 000000000..aabdf197c --- /dev/null +++ b/plugins/samplesource/testsource/testsourcewebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "testsourcesettings.h" + +class TestSourceWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + TestSourceWebAPIAdapter(); + virtual ~TestSourceWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + TestSourceSettings m_settings; +}; \ No newline at end of file diff --git a/plugins/samplesource/xtrxinput/CMakeLists.txt b/plugins/samplesource/xtrxinput/CMakeLists.txt index 6fd7a8efe..c92233d16 100644 --- a/plugins/samplesource/xtrxinput/CMakeLists.txt +++ b/plugins/samplesource/xtrxinput/CMakeLists.txt @@ -3,14 +3,16 @@ project(xtrxinput) set(xtrxinput_SOURCES xtrxinput.cpp xtrxinputplugin.cpp - xtrxinputsettings.cpp + xtrxinputsettings.cpp + xtrxinputwebapiadapter.cpp xtrxinputthread.cpp ) set(xtrxinput_HEADERS xtrxinput.h xtrxinputplugin.h - xtrxinputsettings.h + xtrxinputsettings.h + xtrxinputwebapiadapter.h xtrxinputthread.h ) diff --git a/plugins/samplesource/xtrxinput/xtrxinput.cpp b/plugins/samplesource/xtrxinput/xtrxinput.cpp index f83db19b5..dbd3e22ac 100644 --- a/plugins/samplesource/xtrxinput/xtrxinput.cpp +++ b/plugins/samplesource/xtrxinput/xtrxinput.cpp @@ -1342,7 +1342,26 @@ int XTRXInput::webapiSettingsPutPatch( { (void) errorMessage; XTRXInputSettings settings = m_settings; + webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); + MsgConfigureXTRX *msg = MsgConfigureXTRX::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureXTRX *msgToGUI = MsgConfigureXTRX::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatDeviceSettings(response, settings); + return 200; +} + +void XTRXInput::webapiUpdateDeviceSettings( + XTRXInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response) +{ if (deviceSettingsKeys.contains("centerFrequency")) { settings.m_centerFrequency = response.getXtrxInputSettings()->getCenterFrequency(); } @@ -1412,18 +1431,6 @@ int XTRXInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) { settings.m_reverseAPIDeviceIndex = response.getXtrxInputSettings()->getReverseApiDeviceIndex(); } - - MsgConfigureXTRX *msg = MsgConfigureXTRX::create(settings, force); - m_inputMessageQueue.push(msg); - - if (m_guiMessageQueue) // forward to GUI if any - { - MsgConfigureXTRX *msgToGUI = MsgConfigureXTRX::create(settings, force); - m_guiMessageQueue->push(msgToGUI); - } - - webapiFormatDeviceSettings(response, settings); - return 200; } void XTRXInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const XTRXInputSettings& settings) diff --git a/plugins/samplesource/xtrxinput/xtrxinput.h b/plugins/samplesource/xtrxinput/xtrxinput.h index a32e72418..60aff4dd9 100644 --- a/plugins/samplesource/xtrxinput/xtrxinput.h +++ b/plugins/samplesource/xtrxinput/xtrxinput.h @@ -238,6 +238,15 @@ public: SWGSDRangel::SWGDeviceState& response, QString& errorMessage); + static void webapiFormatDeviceSettings( + SWGSDRangel::SWGDeviceSettings& response, + const XTRXInputSettings& settings); + + static void webapiUpdateDeviceSettings( + XTRXInputSettings& settings, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response); + std::size_t getChannelIndex(); void getLORange(float& minF, float& maxF, float& stepF) const; void getSRRange(float& minF, float& maxF, float& stepF) const; @@ -269,7 +278,6 @@ private: void suspendTxThread(); void resumeTxThread(); bool applySettings(const XTRXInputSettings& settings, bool force = false, bool forceNCOFrequency = false); - void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const XTRXInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); void webapiReverseSendSettings(QList& deviceSettingsKeys, const XTRXInputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); diff --git a/plugins/samplesource/xtrxinput/xtrxinputplugin.cpp b/plugins/samplesource/xtrxinput/xtrxinputplugin.cpp index bd0d44e15..4ef269bf9 100644 --- a/plugins/samplesource/xtrxinput/xtrxinputplugin.cpp +++ b/plugins/samplesource/xtrxinput/xtrxinputplugin.cpp @@ -17,6 +17,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include "xtrxinputplugin.h" +#include "xtrxinputwebapiadapter.h" #include @@ -35,7 +36,7 @@ const PluginDescriptor XTRXInputPlugin::m_pluginDescriptor = { QString("XTRX Input"), - QString("4.5.4"), + QString("4.11.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, @@ -128,3 +129,8 @@ DeviceSampleSource *XTRXInputPlugin::createSampleSourcePluginInstance(const QStr return 0; } } + +DeviceWebAPIAdapter *XTRXInputPlugin::createDeviceWebAPIAdapter() const +{ + return new XTRXInputWebAPIAdapter(); +} diff --git a/plugins/samplesource/xtrxinput/xtrxinputplugin.h b/plugins/samplesource/xtrxinput/xtrxinputplugin.h index 25cb5c6a9..344275498 100644 --- a/plugins/samplesource/xtrxinput/xtrxinputplugin.h +++ b/plugins/samplesource/xtrxinput/xtrxinputplugin.h @@ -43,6 +43,7 @@ public: QWidget **widget, DeviceUISet *deviceUISet); virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI); + virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const; static const QString m_hardwareID; static const QString m_deviceTypeID; diff --git a/plugins/samplesource/xtrxinput/xtrxinputwebapiadapter.cpp b/plugins/samplesource/xtrxinput/xtrxinputwebapiadapter.cpp new file mode 100644 index 000000000..5baf36ce3 --- /dev/null +++ b/plugins/samplesource/xtrxinput/xtrxinputwebapiadapter.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "SWGDeviceSettings.h" +#include "xtrxinput.h" +#include "xtrxinputwebapiadapter.h" + +XTRXInputWebAPIAdapter::XTRXInputWebAPIAdapter() +{} + +XTRXInputWebAPIAdapter::~XTRXInputWebAPIAdapter() +{} + +int XTRXInputWebAPIAdapter::webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage) +{ + (void) errorMessage; + response.setAirspyHfSettings(new SWGSDRangel::SWGAirspyHFSettings()); + response.getAirspyHfSettings()->init(); + XTRXInput::webapiFormatDeviceSettings(response, m_settings); + return 200; +} + +int XTRXInputWebAPIAdapter::webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage) +{ + (void) errorMessage; + XTRXInput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response); + return 200; +} diff --git a/plugins/samplesource/xtrxinput/xtrxinputwebapiadapter.h b/plugins/samplesource/xtrxinput/xtrxinputwebapiadapter.h new file mode 100644 index 000000000..f06c06ab7 --- /dev/null +++ b/plugins/samplesource/xtrxinput/xtrxinputwebapiadapter.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 Edouard Griffiths, F4EXB // +// // +// Implementation of static web API adapters used for preset serialization and // +// deserialization // +// // +// 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "device/devicewebapiadapter.h" +#include "xtrxinputsettings.h" + +class XTRXInputWebAPIAdapter : public DeviceWebAPIAdapter +{ +public: + XTRXInputWebAPIAdapter(); + virtual ~XTRXInputWebAPIAdapter(); + virtual QByteArray serialize() { return m_settings.serialize(); } + virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); } + + virtual int webapiSettingsGet( + SWGSDRangel::SWGDeviceSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& deviceSettingsKeys, + SWGSDRangel::SWGDeviceSettings& response, // query + response + QString& errorMessage); + +private: + XTRXInputSettings m_settings; +}; \ No newline at end of file diff --git a/sdrbase/CMakeLists.txt b/sdrbase/CMakeLists.txt index 6bc041d6a..a34d6085f 100644 --- a/sdrbase/CMakeLists.txt +++ b/sdrbase/CMakeLists.txt @@ -110,6 +110,7 @@ set(sdrbase_SOURCES device/deviceapi.cpp device/deviceenumerator.cpp device/deviceuserargs.cpp + device/deviceutils.cpp settings/preferences.cpp settings/preset.cpp @@ -242,6 +243,7 @@ set(sdrbase_HEADERS device/deviceapi.h device/deviceenumerator.h device/deviceuserargs.h + device/deviceutils.h plugin/plugininstancegui.h plugin/plugininterface.h diff --git a/sdrbase/channel/channelutils.cpp b/sdrbase/channel/channelutils.cpp index b10c0a5a5..c2ae6b311 100644 --- a/sdrbase/channel/channelutils.cpp +++ b/sdrbase/channel/channelutils.cpp @@ -17,7 +17,7 @@ #include "channelutils.h" -bool ChannelUtils::compareRxChannelURIs(const QString& registerdChannelURI, const QString& xChannelURI) +bool ChannelUtils::compareChannelURIs(const QString& registerdChannelURI, const QString& xChannelURI) { return registerdChannelURI == getRegisteredChannelURI(xChannelURI); } diff --git a/sdrbase/channel/channelutils.h b/sdrbase/channel/channelutils.h index 9711fbcb8..4749b00d7 100644 --- a/sdrbase/channel/channelutils.h +++ b/sdrbase/channel/channelutils.h @@ -23,7 +23,7 @@ class ChannelUtils { public: - static bool compareRxChannelURIs(const QString& registerdChannelURI, const QString& xChannelURI); + static bool compareChannelURIs(const QString& registerdChannelURI, const QString& xChannelURI); static QString getRegisteredChannelURI(const QString& xChannelURI); }; diff --git a/sdrbase/device/deviceutils.cpp b/sdrbase/device/deviceutils.cpp new file mode 100644 index 000000000..62d5e58d2 --- /dev/null +++ b/sdrbase/device/deviceutils.cpp @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "deviceutils.h" + +bool DeviceUtils::compareDeviceURIs(const QString& registerdDeviceURI, const QString& xDeviceURI) +{ + return registerdDeviceURI == getRegisteredDeviceURI(xDeviceURI); +} + +QString DeviceUtils::getRegisteredDeviceURI(const QString& xDeviceURI) +{ + if (xDeviceURI == "sdrangel.samplesource.bladerf") { + return "sdrangel.samplesource.bladerf1input"; + } else { + return xDeviceURI; + } +} \ No newline at end of file diff --git a/sdrbase/device/deviceutils.h b/sdrbase/device/deviceutils.h new file mode 100644 index 000000000..e5ef8a767 --- /dev/null +++ b/sdrbase/device/deviceutils.h @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2019 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 // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef SDRBASE_DEVICE_DEVICEUTILS_H_ +#define SDRBASE_DEVICE_DEVICEUTILS_H_ + +#include + +class DeviceUtils +{ +public: + static bool compareDeviceURIs(const QString& registerdDeviceURI, const QString& xDeviceURI); + static QString getRegisteredDeviceURI(const QString& xDeviceURI); +}; + +#endif // SDRBASE_DEVICE_DEVICEUTILS_H_ \ No newline at end of file diff --git a/sdrbase/webapi/webapiadapterbase.cpp b/sdrbase/webapi/webapiadapterbase.cpp index f718128e4..20077a36b 100644 --- a/sdrbase/webapi/webapiadapterbase.cpp +++ b/sdrbase/webapi/webapiadapterbase.cpp @@ -21,6 +21,7 @@ #include "channel/channelapi.h" #include "channel/channelutils.h" #include "device/devicewebapiadapter.h" +#include "device/deviceutils.h" #include "webapiadapterbase.h" WebAPIAdapterBase::WebAPIAdapterBase() @@ -96,11 +97,6 @@ void WebAPIAdapterBase::webapiFormatPreset( swgdeviceConfigs->back()->setDeviceSequence(deviceConfig.m_deviceSequence); const QByteArray& deviceSettings = deviceConfig.m_config; SWGSDRangel::SWGDeviceSettings *swgDeviceSettings = swgdeviceConfigs->back()->getConfig(); - // qDebug("WebAPIAdapterBase::webapiFormatPreset: preset: %s:%s(%lld) device: %s", - // qPrintable(preset.getGroup()), - // qPrintable(preset.getDescription()), - // preset.getCenterFrequency(), - // qPrintable(deviceConfig.m_deviceId)); swgDeviceSettings->init(); DeviceWebAPIAdapter *deviceWebAPIAdapter = m_webAPIDeviceAdapters.getDeviceWebAPIAdapter(deviceConfig.m_deviceId, m_pluginManager); @@ -167,21 +163,22 @@ void WebAPIAdapterBase::WebAPIChannelAdapters::flush() DeviceWebAPIAdapter *WebAPIAdapterBase::WebAPIDeviceAdapters::getDeviceWebAPIAdapter(const QString& deviceId, const PluginManager *pluginManager) { - QMap::iterator it = m_webAPIDeviceAdapters.find(deviceId); + QString registeredDeviceId = DeviceUtils::getRegisteredDeviceURI(deviceId); + QMap::iterator it = m_webAPIDeviceAdapters.find(registeredDeviceId); if (it == m_webAPIDeviceAdapters.end()) { - const PluginInterface *pluginInterface = pluginManager->getDevicePluginInterface(deviceId); + const PluginInterface *pluginInterface = pluginManager->getDevicePluginInterface(registeredDeviceId); if (pluginInterface) { DeviceWebAPIAdapter *deviceWebAPIAdapter = pluginInterface->createDeviceWebAPIAdapter(); - m_webAPIDeviceAdapters.insert(deviceId, deviceWebAPIAdapter); + m_webAPIDeviceAdapters.insert(registeredDeviceId, deviceWebAPIAdapter); return deviceWebAPIAdapter; } else { - m_webAPIDeviceAdapters.insert(deviceId, nullptr); + m_webAPIDeviceAdapters.insert(registeredDeviceId, nullptr); return nullptr; } } diff --git a/sdrgui/device/deviceuiset.cpp b/sdrgui/device/deviceuiset.cpp index 2ab0a34e6..3bed0760b 100644 --- a/sdrgui/device/deviceuiset.cpp +++ b/sdrgui/device/deviceuiset.cpp @@ -195,7 +195,7 @@ void DeviceUISet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginA for(int i = 0; i < channelRegistrations->count(); i++) { //if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI) - if (ChannelUtils::compareRxChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI)) + if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI)) { qDebug("DeviceUISet::loadRxChannelSettings: creating new channel [%s] from config [%s]", qPrintable((*channelRegistrations)[i].m_channelIdURI), diff --git a/sdrsrv/device/deviceset.cpp b/sdrsrv/device/deviceset.cpp index 39ea9ef2c..5ead690e8 100644 --- a/sdrsrv/device/deviceset.cpp +++ b/sdrsrv/device/deviceset.cpp @@ -185,7 +185,7 @@ void DeviceSet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI qDebug("DeviceSet::loadChannelSettings: channels compare [%s] vs [%s]", qPrintable(openChannels[i].m_channelName), qPrintable(channelConfig.m_channelIdURI)); //if(openChannels[i].m_channelName == channelConfig.m_channelIdURI) - if (ChannelUtils::compareRxChannelURIs(openChannels[i].m_channelName, channelConfig.m_channelIdURI)) + if (ChannelUtils::compareChannelURIs(openChannels[i].m_channelName, channelConfig.m_channelIdURI)) { qDebug("DeviceSet::loadChannelSettings: channel [%s] found", qPrintable(openChannels[i].m_channelName)); reg = openChannels.takeAt(i); @@ -201,7 +201,7 @@ void DeviceSet::loadRxChannelSettings(const Preset *preset, PluginAPI *pluginAPI for (int i = 0; i < channelRegistrations->count(); i++) { //if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI) - if (ChannelUtils::compareRxChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI)) + if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI)) { qDebug("DeviceSet::loadChannelSettings: creating new channel [%s] from config [%s]", qPrintable((*channelRegistrations)[i].m_channelIdURI),