From 9dd707896dd34a5a02e3bca1faf0e4272f9306b3 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 20 Dec 2017 23:57:06 +0100 Subject: [PATCH] Use a name field in channels to be used in headless version to replace the GUI object name that was used as the name field --- plugins/channelrx/chanalyzer/chanalyzer.cpp | 7 +- plugins/channelrx/chanalyzer/chanalyzer.h | 2 - .../channelrx/chanalyzerng/chanalyzerng.cpp | 7 +- plugins/channelrx/chanalyzerng/chanalyzerng.h | 2 - plugins/channelrx/demodam/amdemod.cpp | 21 +++--- plugins/channelrx/demodam/amdemod.h | 2 - plugins/channelrx/demodatv/atvdemod.cpp | 57 +++++++++-------- plugins/channelrx/demodatv/atvdemod.h | 2 - plugins/channelrx/demodbfm/bfmdemod.cpp | 15 +++-- plugins/channelrx/demodbfm/bfmdemod.h | 2 - plugins/channelrx/demoddsd/dsddemod.cpp | 35 +++++----- plugins/channelrx/demoddsd/dsddemod.h | 2 - plugins/channelrx/demodlora/lorademod.cpp | 7 +- plugins/channelrx/demodlora/lorademod.h | 2 - plugins/channelrx/demodnfm/nfmdemod.cpp | 39 +++++------ plugins/channelrx/demodnfm/nfmdemod.h | 2 - plugins/channelrx/demodssb/ssbdemod.cpp | 31 ++++----- plugins/channelrx/demodssb/ssbdemod.h | 2 - plugins/channelrx/demodwfm/wfmdemod.cpp | 24 +++---- plugins/channelrx/demodwfm/wfmdemod.h | 2 - plugins/channelrx/tcpsrc/tcpsrc.cpp | 7 +- plugins/channelrx/tcpsrc/tcpsrc.h | 2 - plugins/channelrx/udpsrc/udpsrc.cpp | 31 ++++----- plugins/channelrx/udpsrc/udpsrc.h | 2 - plugins/channeltx/modam/ammod.cpp | 1 + plugins/channeltx/modatv/atvmod.cpp | 1 + plugins/channeltx/modnfm/nfmmod.cpp | 1 + plugins/channeltx/modssb/ssbmod.cpp | 1 + plugins/channeltx/modwfm/wfmmod.cpp | 1 + plugins/channeltx/udpsink/udpsink.cpp | 1 + sdrbase/channel/channelsinkapi.cpp | 7 +- sdrbase/channel/channelsinkapi.h | 11 +++- sdrbase/channel/channelsourceapi.cpp | 7 +- sdrbase/channel/channelsourceapi.h | 7 +- sdrsrv/maincore.cpp | 9 +++ sdrsrv/maincore.h | 26 ++++++++ sdrsrv/webapi/webapiadaptersrv.cpp | 56 ++++++++++++++++ sdrsrv/webapi/webapiadaptersrv.h | 5 ++ .../sdrangel/examples/devicesets_config.py | 64 ++++++++++++++----- 39 files changed, 318 insertions(+), 185 deletions(-) diff --git a/plugins/channelrx/chanalyzer/chanalyzer.cpp b/plugins/channelrx/chanalyzer/chanalyzer.cpp index 6e73f632f..b26308f38 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzer.cpp @@ -33,9 +33,10 @@ const QString ChannelAnalyzer::m_channelIdURI = "org.f4exb.sdrangelove.channel.c const QString ChannelAnalyzer::m_channelId = "ChannelAnalyzer"; ChannelAnalyzer::ChannelAnalyzer(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_sampleSink(0), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_sampleSink(0), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/chanalyzer/chanalyzer.h b/plugins/channelrx/chanalyzer/chanalyzer.h index 8ce8693eb..0fca2eb3e 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.h +++ b/plugins/channelrx/chanalyzer/chanalyzer.h @@ -129,8 +129,6 @@ public: virtual int getDeltaFrequency() const { return m_frequency; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = objectName(); } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_frequency; } virtual QByteArray serialize() const { return QByteArray(); } diff --git a/plugins/channelrx/chanalyzerng/chanalyzerng.cpp b/plugins/channelrx/chanalyzerng/chanalyzerng.cpp index 997485dfd..8f28f92bb 100644 --- a/plugins/channelrx/chanalyzerng/chanalyzerng.cpp +++ b/plugins/channelrx/chanalyzerng/chanalyzerng.cpp @@ -33,9 +33,10 @@ const QString ChannelAnalyzerNG::m_channelIdURI = "sdrangel.channel.chanalyzerng const QString ChannelAnalyzerNG::m_channelId = "ChannelAnalyzerNG"; ChannelAnalyzerNG::ChannelAnalyzerNG(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_sampleSink(0), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_sampleSink(0), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/chanalyzerng/chanalyzerng.h b/plugins/channelrx/chanalyzerng/chanalyzerng.h index 95d79a35d..6312db19d 100644 --- a/plugins/channelrx/chanalyzerng/chanalyzerng.h +++ b/plugins/channelrx/chanalyzerng/chanalyzerng.h @@ -148,8 +148,6 @@ public: virtual int getDeltaFrequency() const { return m_running.m_frequency; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = objectName(); } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_running.m_frequency; } virtual QByteArray serialize() const { return QByteArray(); } diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index e22b6bf9a..82acaf6cf 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -37,16 +37,17 @@ const QString AMDemod::m_channelId = "AMDemod"; const int AMDemod::m_udpBlockSize = 512; AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_absoluteFrequencyOffset(0), - m_squelchOpen(false), - m_magsqSum(0.0f), - m_magsqPeak(0.0f), - m_magsqCount(0), - m_movingAverage(40, 0), - m_volumeAGC(1200, 1.0), - m_audioFifo(48000), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_absoluteFrequencyOffset(0), + m_squelchOpen(false), + m_magsqSum(0.0f), + m_magsqPeak(0.0f), + m_magsqCount(0), + m_movingAverage(40, 0), + m_volumeAGC(1200, 1.0), + m_audioFifo(48000), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index 3f76af6cf..1b838a052 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -96,8 +96,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index 6e1425211..1635e6c7d 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -40,34 +40,35 @@ const QString ATVDemod::m_channelId = "ATVDemod"; const int ATVDemod::m_ssbFftLen = 1024; ATVDemod::ATVDemod(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_scopeSink(0), - m_registeredATVScreen(0), - m_intNumberSamplePerTop(0), - m_intImageIndex(0), - m_intSynchroPoints(0), - m_blnSynchroDetected(false), - m_blnVerticalSynchroDetected(false), - m_fltAmpLineAverage(0.0f), - m_fltEffMin(2000000000.0f), - m_fltEffMax(-2000000000.0f), - m_fltAmpMin(-2000000000.0f), - m_fltAmpMax(2000000000.0f), - m_fltAmpDelta(1.0), - m_intColIndex(0), - m_intSampleIndex(0), - m_intRowIndex(0), - m_intLineIndex(0), - m_objAvgColIndex(3), - m_objMagSqAverage(40, 0), - m_bfoPLL(200/1000000, 100/1000000, 0.01), - m_bfoFilter(200.0, 1000000.0, 0.9), - m_interpolatorDistance(1.0f), - m_interpolatorDistanceRemain(0.0f), - m_DSBFilter(0), - m_DSBFilterBuffer(0), - m_DSBFilterBufferIndex(0), - m_objSettingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_scopeSink(0), + m_registeredATVScreen(0), + m_intNumberSamplePerTop(0), + m_intImageIndex(0), + m_intSynchroPoints(0), + m_blnSynchroDetected(false), + m_blnVerticalSynchroDetected(false), + m_fltAmpLineAverage(0.0f), + m_fltEffMin(2000000000.0f), + m_fltEffMax(-2000000000.0f), + m_fltAmpMin(-2000000000.0f), + m_fltAmpMax(2000000000.0f), + m_fltAmpDelta(1.0), + m_intColIndex(0), + m_intSampleIndex(0), + m_intRowIndex(0), + m_intLineIndex(0), + m_objAvgColIndex(3), + m_objMagSqAverage(40, 0), + m_bfoPLL(200/1000000, 100/1000000, 0.01), + m_bfoFilter(200.0, 1000000.0, 0.9), + m_interpolatorDistance(1.0f), + m_interpolatorDistanceRemain(0.0f), + m_DSBFilter(0), + m_DSBFilterBuffer(0), + m_DSBFilterBufferIndex(0), + m_objSettingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index ff21821d9..158b9c591 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -227,8 +227,6 @@ public: virtual int getDeltaFrequency() const { return m_rfRunning.m_intFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = objectName(); } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_rfRunning.m_intFrequencyOffset; } virtual QByteArray serialize() const { return QByteArray(); } diff --git a/plugins/channelrx/demodbfm/bfmdemod.cpp b/plugins/channelrx/demodbfm/bfmdemod.cpp index b109cd0e4..a3a95cdb1 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.cpp +++ b/plugins/channelrx/demodbfm/bfmdemod.cpp @@ -40,13 +40,14 @@ const Real BFMDemod::default_deemphasis = 50.0; // 50 us const int BFMDemod::m_udpBlockSize = 512; BFMDemod::BFMDemod(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_absoluteFrequencyOffset(0), - m_audioFifo(250000), - m_settingsMutex(QMutex::Recursive), - m_pilotPLL(19000/384000, 50/384000, 0.01), - m_deemphasisFilterX(default_deemphasis * 48000 * 1.0e-6), - m_deemphasisFilterY(default_deemphasis * 48000 * 1.0e-6), + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_absoluteFrequencyOffset(0), + m_audioFifo(250000), + m_settingsMutex(QMutex::Recursive), + m_pilotPLL(19000/384000, 50/384000, 0.01), + m_deemphasisFilterX(default_deemphasis * 48000 * 1.0e-6), + m_deemphasisFilterY(default_deemphasis * 48000 * 1.0e-6), m_fmExcursion(default_excursion) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodbfm/bfmdemod.h b/plugins/channelrx/demodbfm/bfmdemod.h index 333c453ae..456b22d8e 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.h +++ b/plugins/channelrx/demodbfm/bfmdemod.h @@ -126,8 +126,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index 35fc55087..9f03195a4 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -40,23 +40,24 @@ const QString DSDDemod::m_channelId = "DSDDemod"; const int DSDDemod::m_udpBlockSize = 512; DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_absoluteFrequencyOffset(0), - m_interpolatorDistance(0.0f), - m_interpolatorDistanceRemain(0.0f), - m_sampleCount(0), - m_squelchCount(0), - m_squelchGate(0), - m_squelchLevel(1e-4), - m_squelchOpen(false), - m_movingAverage(40, 0), - m_fmExcursion(24), - m_audioFifo1(48000), - m_audioFifo2(48000), - m_scope(0), - m_scopeEnabled(true), - m_dsdDecoder(), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_absoluteFrequencyOffset(0), + m_interpolatorDistance(0.0f), + m_interpolatorDistanceRemain(0.0f), + m_sampleCount(0), + m_squelchCount(0), + m_squelchGate(0), + m_squelchLevel(1e-4), + m_squelchOpen(false), + m_movingAverage(40, 0), + m_fmExcursion(24), + m_audioFifo1(48000), + m_audioFifo2(48000), + m_scope(0), + m_scopeEnabled(true), + m_dsdDecoder(), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index 486e4e31b..6f1a7f200 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -105,8 +105,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/demodlora/lorademod.cpp b/plugins/channelrx/demodlora/lorademod.cpp index 5a6c27f0f..fe2b96d0f 100644 --- a/plugins/channelrx/demodlora/lorademod.cpp +++ b/plugins/channelrx/demodlora/lorademod.cpp @@ -35,9 +35,10 @@ const QString LoRaDemod::m_channelIdURI = "de.maintech.sdrangelove.channel.lora" const QString LoRaDemod::m_channelId = "LoRaDemod"; LoRaDemod::LoRaDemod(DeviceSourceAPI* deviceAPI) : - m_deviceAPI(deviceAPI), - m_sampleSink(0), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_sampleSink(0), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodlora/lorademod.h b/plugins/channelrx/demodlora/lorademod.h index 6d677e60e..8f64acf83 100644 --- a/plugins/channelrx/demodlora/lorademod.h +++ b/plugins/channelrx/demodlora/lorademod.h @@ -101,8 +101,6 @@ public: virtual int getDeltaFrequency() const { return 0; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return 0; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index bc423b920..a53b5673e 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -45,25 +45,26 @@ static const double afSqTones[2] = {1000.0, 6000.0}; // {1200.0, 8000.0}; const int NFMDemod::m_udpBlockSize = 512; NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) : - m_deviceAPI(devieAPI), - m_absoluteFrequencyOffset(0), - m_ctcssIndex(0), - m_sampleCount(0), - m_squelchCount(0), - m_squelchGate(2), - m_audioMute(false), - m_squelchLevel(-990), - m_squelchOpen(false), - m_afSquelchOpen(false), - m_magsq(0.0f), - m_magsqSum(0.0f), - m_magsqPeak(0.0f), - m_magsqCount(0), - m_movingAverage(40, 0), - m_afSquelch(2, afSqTones), - m_fmExcursion(2400), - m_audioFifo(48000), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(devieAPI), + m_absoluteFrequencyOffset(0), + m_ctcssIndex(0), + m_sampleCount(0), + m_squelchCount(0), + m_squelchGate(2), + m_audioMute(false), + m_squelchLevel(-990), + m_squelchOpen(false), + m_afSquelchOpen(false), + m_magsq(0.0f), + m_magsqSum(0.0f), + m_magsqPeak(0.0f), + m_magsqCount(0), + m_movingAverage(40, 0), + m_afSquelch(2, afSqTones), + m_fmExcursion(2400), + m_audioFifo(48000), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index c44da5850..03b382027 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -121,8 +121,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index c4c789471..8b496fa46 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -39,21 +39,22 @@ const QString SSBDemod::m_channelId = "SSBDemod"; const int SSBDemod::m_udpBlockSize = 512; SSBDemod::SSBDemod(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_audioBinaual(false), - m_audioFlipChannels(false), - m_dsb(false), - m_audioMute(false), - m_agc(12000, agcTarget, 1e-2), - m_agcActive(false), - m_agcClamping(false), - m_agcNbSamples(12000), - m_agcPowerThreshold(1e-2), - m_agcThresholdGate(0), - m_audioActive(false), - m_sampleSink(0), - m_audioFifo(24000), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_audioBinaual(false), + m_audioFlipChannels(false), + m_dsb(false), + m_audioMute(false), + m_agc(12000, agcTarget, 1e-2), + m_agcActive(false), + m_agcClamping(false), + m_agcNbSamples(12000), + m_agcPowerThreshold(1e-2), + m_agcThresholdGate(0), + m_audioActive(false), + m_sampleSink(0), + m_audioFifo(24000), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 5eb8b3592..08d855ca9 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -115,8 +115,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp index 19c074e7f..b9e32e341 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.cpp +++ b/plugins/channelrx/demodwfm/wfmdemod.cpp @@ -38,18 +38,18 @@ const QString WFMDemod::m_channelId = "WFMDemod"; const int WFMDemod::m_udpBlockSize = 512; WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) : - m_deviceAPI(deviceAPI), - m_absoluteFrequencyOffset(0), - m_squelchOpen(false), - m_magsq(0.0f), - m_magsqSum(0.0f), - m_magsqPeak(0.0f), - m_magsqCount(0), - m_movingAverage(40, 0), - m_sampleSink(0), - m_audioFifo(250000), - m_settingsMutex(QMutex::Recursive) - + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_absoluteFrequencyOffset(0), + m_squelchOpen(false), + m_magsq(0.0f), + m_magsqSum(0.0f), + m_magsqPeak(0.0f), + m_magsqCount(0), + m_movingAverage(40, 0), + m_sampleSink(0), + m_audioFifo(250000), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index ed47fae83..098114b5e 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -101,8 +101,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/tcpsrc/tcpsrc.cpp b/plugins/channelrx/tcpsrc/tcpsrc.cpp index 214159a3f..a92a043cc 100644 --- a/plugins/channelrx/tcpsrc/tcpsrc.cpp +++ b/plugins/channelrx/tcpsrc/tcpsrc.cpp @@ -34,9 +34,10 @@ const QString TCPSrc::m_channelIdURI = "sdrangel.channel.tcpsrc"; const QString TCPSrc::m_channelId = "TCPSrc"; TCPSrc::TCPSrc(DeviceSourceAPI* deviceAPI) : - m_deviceAPI(deviceAPI), - m_absoluteFrequencyOffset(0), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_absoluteFrequencyOffset(0), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/tcpsrc/tcpsrc.h b/plugins/channelrx/tcpsrc/tcpsrc.h index 32c20986a..351cc4ab9 100644 --- a/plugins/channelrx/tcpsrc/tcpsrc.h +++ b/plugins/channelrx/tcpsrc/tcpsrc.h @@ -118,8 +118,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channelrx/udpsrc/udpsrc.cpp b/plugins/channelrx/udpsrc/udpsrc.cpp index 13230d3e6..3e309646f 100644 --- a/plugins/channelrx/udpsrc/udpsrc.cpp +++ b/plugins/channelrx/udpsrc/udpsrc.cpp @@ -37,21 +37,22 @@ const QString UDPSrc::m_channelIdURI = "sdrangel.channel.udpsrc"; const QString UDPSrc::m_channelId = "UDPSrc"; UDPSrc::UDPSrc(DeviceSourceAPI *deviceAPI) : - m_deviceAPI(deviceAPI), - m_absoluteFrequencyOffset(0), - m_outMovingAverage(480, 1e-10), - m_inMovingAverage(480, 1e-10), - m_amMovingAverage(1200, 1e-10), - m_audioFifo(24000), - m_spectrum(0), - m_squelch(1e-6), - m_squelchOpen(false), - m_squelchOpenCount(0), - m_squelchCloseCount(0), - m_squelchGate(4800), - m_squelchRelease(4800), - m_agc(9600, m_agcTarget, 1e-6), - m_settingsMutex(QMutex::Recursive) + ChannelSinkAPI(m_channelIdURI), + m_deviceAPI(deviceAPI), + m_absoluteFrequencyOffset(0), + m_outMovingAverage(480, 1e-10), + m_inMovingAverage(480, 1e-10), + m_amMovingAverage(1200, 1e-10), + m_audioFifo(24000), + m_spectrum(0), + m_squelch(1e-6), + m_squelchOpen(false), + m_squelchOpenCount(0), + m_squelchCloseCount(0), + m_squelchGate(4800), + m_squelchRelease(4800), + m_agc(9600, m_agcTarget, 1e-6), + m_settingsMutex(QMutex::Recursive) { setObjectName(m_channelId); diff --git a/plugins/channelrx/udpsrc/udpsrc.h b/plugins/channelrx/udpsrc/udpsrc.h index 7fc9e7240..917c4d4e0 100644 --- a/plugins/channelrx/udpsrc/udpsrc.h +++ b/plugins/channelrx/udpsrc/udpsrc.h @@ -110,8 +110,6 @@ public: virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; } virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getTitle(QString& title) { title = m_settings.m_title; } - virtual void setName(const QString& name) { setObjectName(name); } - virtual QString getName() const { return objectName(); } virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual QByteArray serialize() const; diff --git a/plugins/channeltx/modam/ammod.cpp b/plugins/channeltx/modam/ammod.cpp index 5abf5c577..c76388fc8 100644 --- a/plugins/channeltx/modam/ammod.cpp +++ b/plugins/channeltx/modam/ammod.cpp @@ -41,6 +41,7 @@ const QString AMMod::m_channelId ="AMMod"; const int AMMod::m_levelNbSamples = 480; // every 10ms AMMod::AMMod(DeviceSinkAPI *deviceAPI) : + ChannelSourceAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_absoluteFrequencyOffset(0), m_movingAverage(40, 0), diff --git a/plugins/channeltx/modatv/atvmod.cpp b/plugins/channeltx/modatv/atvmod.cpp index 3c5fa3972..3f5d067a4 100644 --- a/plugins/channeltx/modatv/atvmod.cpp +++ b/plugins/channeltx/modatv/atvmod.cpp @@ -50,6 +50,7 @@ const int ATVMod::m_cameraFPSTestNbFrames = 100; const int ATVMod::m_ssbFftLen = 1024; ATVMod::ATVMod(DeviceSinkAPI *deviceAPI) : + ChannelSourceAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_absoluteFrequencyOffset(0), m_modPhasor(0.0f), diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 64ed1ec8f..8b56d167d 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -47,6 +47,7 @@ const QString NFMMod::m_channelId = "NFMMod"; const int NFMMod::m_levelNbSamples = 480; // every 10ms NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) : + ChannelSourceAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_absoluteFrequencyOffset(0), m_modPhasor(0.0f), diff --git a/plugins/channeltx/modssb/ssbmod.cpp b/plugins/channeltx/modssb/ssbmod.cpp index 5f6b3f74e..9a186a824 100644 --- a/plugins/channeltx/modssb/ssbmod.cpp +++ b/plugins/channeltx/modssb/ssbmod.cpp @@ -43,6 +43,7 @@ const int SSBMod::m_levelNbSamples = 480; // every 10ms const int SSBMod::m_ssbFftLen = 1024; SSBMod::SSBMod(DeviceSinkAPI *deviceAPI) : + ChannelSourceAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_absoluteFrequencyOffset(0), m_SSBFilter(0), diff --git a/plugins/channeltx/modwfm/wfmmod.cpp b/plugins/channeltx/modwfm/wfmmod.cpp index 0356fb64b..0e2dad4ca 100644 --- a/plugins/channeltx/modwfm/wfmmod.cpp +++ b/plugins/channeltx/modwfm/wfmmod.cpp @@ -45,6 +45,7 @@ const int WFMMod::m_levelNbSamples = 480; // every 10ms const int WFMMod::m_rfFilterFFTLength = 1024; WFMMod::WFMMod(DeviceSinkAPI *deviceAPI) : + ChannelSourceAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_modPhasor(0.0f), m_movingAverage(40, 0), diff --git a/plugins/channeltx/udpsink/udpsink.cpp b/plugins/channeltx/udpsink/udpsink.cpp index 9195994fa..7630cf85d 100644 --- a/plugins/channeltx/udpsink/udpsink.cpp +++ b/plugins/channeltx/udpsink/udpsink.cpp @@ -33,6 +33,7 @@ const QString UDPSink::m_channelIdURI = "sdrangel.channeltx.udpsink"; const QString UDPSink::m_channelId = "UDPSink"; UDPSink::UDPSink(DeviceSinkAPI *deviceAPI) : + ChannelSourceAPI(m_channelIdURI), m_deviceAPI(deviceAPI), m_squelch(1e-6), m_spectrum(0), diff --git a/sdrbase/channel/channelsinkapi.cpp b/sdrbase/channel/channelsinkapi.cpp index 3a00b8001..8d8aa62a9 100644 --- a/sdrbase/channel/channelsinkapi.cpp +++ b/sdrbase/channel/channelsinkapi.cpp @@ -19,8 +19,9 @@ #include "util/uid.h" #include "channelsinkapi.h" -ChannelSinkAPI::ChannelSinkAPI() : - m_indexInDeviceSet(-1), - m_uid(UidCalculator::getNewObjectId()) +ChannelSinkAPI::ChannelSinkAPI(const QString& name) : + m_name(name), + m_indexInDeviceSet(-1), + m_uid(UidCalculator::getNewObjectId()) { } diff --git a/sdrbase/channel/channelsinkapi.h b/sdrbase/channel/channelsinkapi.h index 731619c9d..8e9c7e1fa 100644 --- a/sdrbase/channel/channelsinkapi.h +++ b/sdrbase/channel/channelsinkapi.h @@ -32,15 +32,15 @@ namespace SWGSDRangel class SDRANGEL_API ChannelSinkAPI { public: - ChannelSinkAPI(); + ChannelSinkAPI(const QString& name); virtual ~ChannelSinkAPI() {} virtual void destroy() = 0; virtual int getDeltaFrequency() const = 0; virtual void getIdentifier(QString& id) = 0; virtual void getTitle(QString& title) = 0; - virtual void setName(const QString& name) = 0; - virtual QString getName() const = 0; + virtual void setName(const QString& name) { m_name = name; } + virtual const QString& getName() const { return m_name; } virtual qint64 getCenterFrequency() const = 0; virtual QByteArray serialize() const = 0; @@ -62,6 +62,11 @@ public: uint64_t getUID() const { return m_uid; } private: + /** Unique identifier in a device set used for sorting. Used when there is no GUI. + * In GUI version it is supported by GUI object name accessed through PluginInstanceGUI. + */ + QString m_name; + int m_indexInDeviceSet; uint64_t m_uid; }; diff --git a/sdrbase/channel/channelsourceapi.cpp b/sdrbase/channel/channelsourceapi.cpp index 5cf607aaa..baad5d16a 100644 --- a/sdrbase/channel/channelsourceapi.cpp +++ b/sdrbase/channel/channelsourceapi.cpp @@ -19,8 +19,9 @@ #include "util/uid.h" #include "channelsourceapi.h" -ChannelSourceAPI::ChannelSourceAPI() : - m_indexInDeviceSet(-1), - m_uid(UidCalculator::getNewObjectId()) +ChannelSourceAPI::ChannelSourceAPI(const QString& name) : + m_name(name), + m_indexInDeviceSet(-1), + m_uid(UidCalculator::getNewObjectId()) { } diff --git a/sdrbase/channel/channelsourceapi.h b/sdrbase/channel/channelsourceapi.h index 8741a72f1..54956d022 100644 --- a/sdrbase/channel/channelsourceapi.h +++ b/sdrbase/channel/channelsourceapi.h @@ -31,7 +31,7 @@ namespace SWGSDRangel class SDRANGEL_API ChannelSourceAPI { public: - ChannelSourceAPI(); + ChannelSourceAPI(const QString& name); virtual ~ChannelSourceAPI() {} virtual void destroy() = 0; @@ -61,6 +61,11 @@ public: uint64_t getUID() const { return m_uid; } private: + /** Unique identifier in a device set used for sorting. Used when there is no GUI. + * In GUI version it is supported by GUI object name accessed through PluginInstanceGUI. + */ + QString m_name; + int m_indexInDeviceSet; uint64_t m_uid; }; diff --git a/sdrsrv/maincore.cpp b/sdrsrv/maincore.cpp index 102782177..03b7700f9 100644 --- a/sdrsrv/maincore.cpp +++ b/sdrsrv/maincore.cpp @@ -36,6 +36,7 @@ MESSAGE_CLASS_DEFINITION(MainCore::MsgDeleteInstance, Message) MESSAGE_CLASS_DEFINITION(MainCore::MsgLoadPreset, Message) +MESSAGE_CLASS_DEFINITION(MainCore::MsgSavePreset, Message) MESSAGE_CLASS_DEFINITION(MainCore::MsgAddDeviceSet, Message) MESSAGE_CLASS_DEFINITION(MainCore::MsgRemoveLastDeviceSet, Message) @@ -103,6 +104,14 @@ bool MainCore::handleMessage(const Message& cmd) loadPresetSettings(notif.getPreset(), notif.getDeviceSetIndex()); return true; } + else if (MsgSavePreset::match(cmd)) + { + MsgSavePreset& notif = (MsgSavePreset&) cmd; + savePresetSettings(notif.getPreset(), notif.getDeviceSetIndex()); + m_settings.sortPresets(); + m_settings.save(); + return true; + } else if (MsgAddDeviceSet::match(cmd)) { MsgAddDeviceSet& notif = (MsgAddDeviceSet&) cmd; diff --git a/sdrsrv/maincore.h b/sdrsrv/maincore.h index 35311bd11..abe92dda7 100644 --- a/sdrsrv/maincore.h +++ b/sdrsrv/maincore.h @@ -93,6 +93,32 @@ private: { } }; + class MsgSavePreset : public Message { + MESSAGE_CLASS_DECLARATION + + public: + Preset *getPreset() const { return m_preset; } + int getDeviceSetIndex() const { return m_deviceSetIndex; } + bool isNewPreset() const { return m_newPreset; } + + static MsgSavePreset* create(Preset *preset, int deviceSetIndex, bool newPreset) + { + return new MsgSavePreset(preset, deviceSetIndex, newPreset); + } + + private: + Preset *m_preset; + int m_deviceSetIndex; + bool m_newPreset; + + MsgSavePreset(Preset *preset, int deviceSetIndex, bool newPreset) : + Message(), + m_preset(preset), + m_deviceSetIndex(deviceSetIndex), + m_newPreset(newPreset) + { } + }; + class MsgDeleteInstance : public Message { MESSAGE_CLASS_DECLARATION diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp index f1bee0a10..1f198ecfa 100644 --- a/sdrsrv/webapi/webapiadaptersrv.cpp +++ b/sdrsrv/webapi/webapiadaptersrv.cpp @@ -539,6 +539,62 @@ int WebAPIAdapterSrv::instancePresetPatch( return 200; } +int WebAPIAdapterSrv::instancePresetPut( + SWGSDRangel::SWGPresetTransfer& query, + SWGSDRangel::SWGPresetIdentifier& response, + SWGSDRangel::SWGErrorResponse& error) +{ + int deviceSetIndex = query.getDeviceSetIndex(); + SWGSDRangel::SWGPresetIdentifier *presetIdentifier = query.getPreset(); + int nbDeviceSets = m_mainCore.m_deviceSets.size(); + + if (deviceSetIndex > nbDeviceSets) + { + *error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets); + return 404; + } + + const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(), + presetIdentifier->getCenterFrequency(), + *presetIdentifier->getName()); + + if (selectedPreset == 0) + { + *error.getMessage() = QString("There is no preset [%1, %2, %3]") + .arg(*presetIdentifier->getGroupName()) + .arg(presetIdentifier->getCenterFrequency()) + .arg(*presetIdentifier->getName()); + return 404; + } + else // update existing preset + { + DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex]; + + if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset()) + { + *error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch"); + return 404; + } + + if (deviceSet->m_deviceSinkEngine && selectedPreset->isSourcePreset()) + { + *error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch"); + return 404; + } + } + + MainCore::MsgSavePreset *msg = MainCore::MsgSavePreset::create(const_cast(selectedPreset), deviceSetIndex, false); + m_mainCore.m_inputMessageQueue.push(msg); + + response.init(); + response.setCenterFrequency(selectedPreset->getCenterFrequency()); + *response.getGroupName() = selectedPreset->getGroup(); + *response.getType() = selectedPreset->isSourcePreset() ? "R" : "T"; + *response.getName() = selectedPreset->getDescription(); + + return 200; +} + int WebAPIAdapterSrv::instanceDeviceSetsPost( bool tx, SWGSDRangel::SWGSuccessResponse& response, diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h index fb2603235..f06d13c81 100644 --- a/sdrsrv/webapi/webapiadaptersrv.h +++ b/sdrsrv/webapi/webapiadaptersrv.h @@ -98,6 +98,11 @@ public: SWGSDRangel::SWGPresetIdentifier& response, SWGSDRangel::SWGErrorResponse& error); + virtual int instancePresetPut( + SWGSDRangel::SWGPresetTransfer& query, + SWGSDRangel::SWGPresetIdentifier& response, + SWGSDRangel::SWGErrorResponse& error); + virtual int instanceDeviceSetsPost( bool tx, SWGSDRangel::SWGSuccessResponse& response, diff --git a/swagger/sdrangel/examples/devicesets_config.py b/swagger/sdrangel/examples/devicesets_config.py index 1b30e3340..43fc65212 100644 --- a/swagger/sdrangel/examples/devicesets_config.py +++ b/swagger/sdrangel/examples/devicesets_config.py @@ -1,6 +1,7 @@ #!/usr/bin/env python -import requests +import requests, traceback, sys +from optparse import OptionParser base_url = "http://127.0.0.1:8091/sdrangel" @@ -34,19 +35,50 @@ requests_methods = { "DELETE": requests.delete } -for command in commands: - url = base_url + command[0] - method = requests_methods.get(command[1], None) - if method is not None: - r = method(url=url, params=command[2], json=command[3]) - if r.status_code == 200: - print("Done: %s" % command[4]) - else: - print("Error %d:%s" % (r.status_code, command[4])) - print(r.text) - exit(1) - else: - print("requests method error") - exit(1) +# ====================================================================== +def getInputOptions(): + + parser = OptionParser(usage="usage: %%prog [-t]\n") + parser.add_option("-a", "--address", dest="address", help="address and port", metavar="ADDRESS", type="string") + + (options, args) = parser.parse_args() + + if (options.address == None): + options.address = "127.0.0.1:8091" + + return options + +# ====================================================================== +def main(): + try: + options = getInputOptions() + + global base_url + base_url = "http://%s/sdrangel" % options.address + + for command in commands: + url = base_url + command[0] + method = requests_methods.get(command[1], None) + if method is not None: + r = method(url=url, params=command[2], json=command[3]) + if r.status_code == 200: + print("Done: %s" % command[4]) + else: + print("Error %d:%s" % (r.status_code, command[4])) + print(r.text) + exit(1) + else: + print("requests method error") + exit(1) + + print("All done!") + + except Exception, msg: + tb = traceback.format_exc() + print >> sys.stderr, tb + + +# ====================================================================== +if __name__ == "__main__": + main() -print("All done!")