Web API: report Rx channel info summary

This commit is contained in:
f4exb 2017-11-19 18:18:17 +01:00
parent 5ba857f278
commit dc50ba1249
35 changed files with 144 additions and 40 deletions

View File

@ -37,6 +37,7 @@ const int AMDemod::m_udpBlockSize = 512;
AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_squelchOpen(false), m_squelchOpen(false),
m_magsqSum(0.0f), m_magsqSum(0.0f),
m_magsqPeak(0.0f), m_magsqPeak(0.0f),
@ -177,6 +178,7 @@ bool AMDemod::handleMessage(const Message& cmd)
AMDemodSettings settings = cfg.getSettings(); AMDemodSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotification
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -92,7 +92,7 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; } virtual void getTitle(QString& title) { title = m_settings.m_title; }
@ -121,6 +121,7 @@ private:
ThreadedBasebandSampleSink* m_threadedChannelizer; ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
int m_absoluteFrequencyOffset;
AMDemodSettings m_settings; AMDemodSettings m_settings;
NCO m_nco; NCO m_nco;

View File

@ -40,6 +40,7 @@ const int BFMDemod::m_udpBlockSize = 512;
BFMDemod::BFMDemod(DeviceSourceAPI *deviceAPI) : BFMDemod::BFMDemod(DeviceSourceAPI *deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_audioFifo(250000), m_audioFifo(250000),
m_settingsMutex(QMutex::Recursive), m_settingsMutex(QMutex::Recursive),
m_pilotPLL(19000/384000, 50/384000, 0.01), m_pilotPLL(19000/384000, 50/384000, 0.01),
@ -347,6 +348,7 @@ bool BFMDemod::handleMessage(const Message& cmd)
BFMDemodSettings settings = cfg.getSettings(); BFMDemodSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotification
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -122,7 +122,7 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; } virtual void getTitle(QString& title) { title = m_settings.m_title; }
@ -163,6 +163,7 @@ private:
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
BFMDemodSettings m_settings; BFMDemodSettings m_settings;
int m_absoluteFrequencyOffset;
NCO m_nco; NCO m_nco;
Interpolator m_interpolator; //!< Interpolator between fixed demod bandwidth and audio bandwidth (rational) Interpolator m_interpolator; //!< Interpolator between fixed demod bandwidth and audio bandwidth (rational)

View File

@ -40,6 +40,7 @@ const int DSDDemod::m_udpBlockSize = 512;
DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) : DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_interpolatorDistance(0.0f), m_interpolatorDistance(0.0f),
m_interpolatorDistanceRemain(0.0f), m_interpolatorDistanceRemain(0.0f),
m_sampleCount(0), m_sampleCount(0),
@ -349,6 +350,7 @@ bool DSDDemod::handleMessage(const Message& cmd)
DSDDemodSettings settings = cfg.getSettings(); DSDDemodSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotification
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -101,7 +101,7 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_settings.m_inputFrequencyOffset; } virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); } virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; } virtual void getTitle(QString& title) { title = m_settings.m_title; }
@ -151,12 +151,13 @@ private:
RSRunning RSRunning
}; };
DSDDemodSettings m_settings;
DeviceSourceAPI *m_deviceAPI; DeviceSourceAPI *m_deviceAPI;
ThreadedBasebandSampleSink* m_threadedChannelizer; ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
DSDDemodSettings m_settings;
int m_absoluteFrequencyOffset;
NCO m_nco; NCO m_nco;
Interpolator m_interpolator; Interpolator m_interpolator;
Real m_interpolatorDistance; Real m_interpolatorDistance;

View File

@ -66,6 +66,7 @@ LoRaDemod::LoRaDemod(DeviceSourceAPI* deviceAPI) :
m_channelizer = new DownChannelizer(this); m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer); m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer);
m_deviceAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_deviceAPI->addChannelAPI(this);
} }
LoRaDemod::~LoRaDemod() LoRaDemod::~LoRaDemod()
@ -81,6 +82,7 @@ LoRaDemod::~LoRaDemod()
if (finetune) if (finetune)
delete [] finetune; delete [] finetune;
m_deviceAPI->removeChannelAPI(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer); m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer; delete m_threadedChannelizer;
delete m_channelizer; delete m_channelizer;

View File

@ -21,7 +21,8 @@
#include <QMutex> #include <QMutex>
#include <vector> #include <vector>
#include <dsp/basebandsamplesink.h> #include "dsp/basebandsamplesink.h"
#include "channel/channelsinkapi.h"
#include "dsp/nco.h" #include "dsp/nco.h"
#include "dsp/interpolator.h" #include "dsp/interpolator.h"
#include "util/message.h" #include "util/message.h"
@ -39,7 +40,7 @@ class DeviceSourceAPI;
class ThreadedBasebandSampleSink; class ThreadedBasebandSampleSink;
class DownChannelizer; class DownChannelizer;
class LoRaDemod : public BasebandSampleSink { class LoRaDemod : public BasebandSampleSink, public ChannelSinkAPI {
public: public:
class MsgConfigureLoRaDemod : public Message { class MsgConfigureLoRaDemod : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -96,6 +97,10 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return 0; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
static const QString m_channelID; static const QString m_channelID;
private: private:

View File

@ -22,6 +22,7 @@ void LoRaDemodSettings::resetToDefaults()
m_bandwidthIndex = 0; m_bandwidthIndex = 0;
m_spread = 0; m_spread = 0;
m_rgbColor = QColor(255, 0, 255).rgb(); m_rgbColor = QColor(255, 0, 255).rgb();
m_title = "LoRa Demodulator";
} }
QByteArray LoRaDemodSettings::serialize() const QByteArray LoRaDemodSettings::serialize() const
@ -39,6 +40,8 @@ QByteArray LoRaDemodSettings::serialize() const
s.writeBlob(5, m_channelMarker->serialize()); s.writeBlob(5, m_channelMarker->serialize());
} }
s.writeString(6, m_title);
return s.final(); return s.final();
} }
@ -70,6 +73,8 @@ bool LoRaDemodSettings::deserialize(const QByteArray& data)
m_channelMarker->deserialize(bytetmp); m_channelMarker->deserialize(bytetmp);
} }
d.readString(6, &m_title, "LoRa Demodulator");
return true; return true;
} }
else else

View File

@ -3,6 +3,8 @@
#define PLUGINS_CHANNELRX_DEMODLORA_LORADEMODSETTINGS_H_ #define PLUGINS_CHANNELRX_DEMODLORA_LORADEMODSETTINGS_H_
#include <QByteArray> #include <QByteArray>
#include <QString>
#include <stdint.h> #include <stdint.h>
class Serializable; class Serializable;
@ -13,6 +15,7 @@ struct LoRaDemodSettings
int m_bandwidthIndex; int m_bandwidthIndex;
int m_spread; int m_spread;
uint32_t m_rgbColor; uint32_t m_rgbColor;
QString m_title;
Serializable *m_channelMarker; Serializable *m_channelMarker;
Serializable *m_spectrumGUI; Serializable *m_spectrumGUI;

View File

@ -42,6 +42,7 @@ const int NFMDemod::m_udpBlockSize = 512;
NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) : NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) :
m_deviceAPI(devieAPI), m_deviceAPI(devieAPI),
m_absoluteFrequencyOffset(0),
m_ctcssIndex(0), m_ctcssIndex(0),
m_sampleCount(0), m_sampleCount(0),
m_squelchCount(0), m_squelchCount(0),
@ -77,6 +78,7 @@ NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) :
m_channelizer = new DownChannelizer(this); m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_deviceAPI->addChannelAPI(this);
applySettings(m_settings, true); applySettings(m_settings, true);
} }
@ -85,6 +87,7 @@ NFMDemod::~NFMDemod()
{ {
DSPEngine::instance()->removeAudioSink(&m_audioFifo); DSPEngine::instance()->removeAudioSink(&m_audioFifo);
delete m_udpBufferAudio; delete m_udpBufferAudio;
m_deviceAPI->removeChannelAPI(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer); m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer; delete m_threadedChannelizer;
delete m_channelizer; delete m_channelizer;
@ -345,6 +348,7 @@ bool NFMDemod::handleMessage(const Message& cmd)
NFMDemodSettings settings = cfg.getSettings(); NFMDemodSettings settings = cfg.getSettings();
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -18,10 +18,12 @@
#ifndef INCLUDE_NFMDEMOD_H #ifndef INCLUDE_NFMDEMOD_H
#define INCLUDE_NFMDEMOD_H #define INCLUDE_NFMDEMOD_H
#include <dsp/basebandsamplesink.h>
#include <dsp/phasediscri.h>
#include <QMutex> #include <QMutex>
#include <vector> #include <vector>
#include "dsp/basebandsamplesink.h"
#include "channel/channelsinkapi.h"
#include "dsp/phasediscri.h"
#include "dsp/nco.h" #include "dsp/nco.h"
#include "dsp/interpolator.h" #include "dsp/interpolator.h"
#include "dsp/lowpass.h" #include "dsp/lowpass.h"
@ -39,7 +41,7 @@ class DeviceSourceAPI;
class ThreadedBasebandSampleSink; class ThreadedBasebandSampleSink;
class DownChannelizer; class DownChannelizer;
class NFMDemod : public BasebandSampleSink { class NFMDemod : public BasebandSampleSink, public ChannelSinkAPI {
public: public:
class MsgConfigureNFMDemod : public Message { class MsgConfigureNFMDemod : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -115,6 +117,10 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
const Real *getCtcssToneSet(int& nbTones) const { const Real *getCtcssToneSet(int& nbTones) const {
nbTones = m_ctcssDetector.getNTones(); nbTones = m_ctcssDetector.getNTones();
return m_ctcssDetector.getToneSet(); return m_ctcssDetector.getToneSet();
@ -151,6 +157,7 @@ private:
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
NFMDemodSettings m_settings; NFMDemodSettings m_settings;
int m_absoluteFrequencyOffset;
NCO m_nco; NCO m_nco;
Interpolator m_interpolator; Interpolator m_interpolator;

View File

@ -224,8 +224,9 @@ void NFMDemodGUI::onMenuDialogCalled(const QPoint &p)
m_settings.m_udpAddress = m_channelMarker.getUDPAddress(), m_settings.m_udpAddress = m_channelMarker.getUDPAddress(),
m_settings.m_udpPort = m_channelMarker.getUDPSendPort(), m_settings.m_udpPort = m_channelMarker.getUDPSendPort(),
m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb();
m_settings.m_title = m_channelMarker.getTitle();
setWindowTitle(m_channelMarker.getTitle()); setWindowTitle(m_settings.m_title);
setTitleColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor);
displayUDPAddress(); displayUDPAddress();
@ -336,6 +337,7 @@ void NFMDemodGUI::displaySettings()
m_channelMarker.blockSignals(true); m_channelMarker.blockSignals(true);
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); m_channelMarker.setBandwidth(m_settings.m_rfBandwidth);
m_channelMarker.setTitle(m_settings.m_title);
m_channelMarker.blockSignals(false); m_channelMarker.blockSignals(false);
m_channelMarker.setColor(m_settings.m_rgbColor); m_channelMarker.setColor(m_settings.m_rgbColor);

View File

@ -55,6 +55,7 @@ void NFMDemodSettings::resetToDefaults()
m_udpAddress = "127.0.0.1"; m_udpAddress = "127.0.0.1";
m_udpPort = 9999; m_udpPort = 9999;
m_rgbColor = QColor(255, 0, 0).rgb(); m_rgbColor = QColor(255, 0, 0).rgb();
m_title = "NFM Demodulator";
} }
QByteArray NFMDemodSettings::serialize() const QByteArray NFMDemodSettings::serialize() const
@ -75,6 +76,9 @@ QByteArray NFMDemodSettings::serialize() const
if (m_channelMarker) { if (m_channelMarker) {
s.writeBlob(13, m_channelMarker->serialize()); s.writeBlob(13, m_channelMarker->serialize());
} }
s.writeString(14, m_title);
return s.final(); return s.final();
} }
@ -116,6 +120,7 @@ bool NFMDemodSettings::deserialize(const QByteArray& data)
d.readBool(10, &m_audioMute, false); d.readBool(10, &m_audioMute, false);
d.readS32(11, &m_squelchGate, 5); d.readS32(11, &m_squelchGate, 5);
d.readBool(12, &m_deltaSquelch, false); d.readBool(12, &m_deltaSquelch, false);
d.readString(14, &m_title, "NFM Demodulator");
return true; return true;
} }

View File

@ -44,6 +44,7 @@ struct NFMDemodSettings
QString m_udpAddress; QString m_udpAddress;
uint16_t m_udpPort; uint16_t m_udpPort;
quint32 m_rgbColor; quint32 m_rgbColor;
QString m_title;
Serializable *m_channelMarker; Serializable *m_channelMarker;

View File

@ -60,8 +60,8 @@ SSBDemod::SSBDemod(DeviceSourceAPI *deviceAPI) :
m_volume = 2.0; m_volume = 2.0;
m_spanLog2 = 3; m_spanLog2 = 3;
m_sampleRate = 96000; m_sampleRate = 96000;
m_frequency = 0; m_absoluteFrequencyOffset = 0;
m_nco.setFreq(m_frequency, m_sampleRate); m_nco.setFreq(m_absoluteFrequencyOffset, m_sampleRate);
m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate(); m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate();
m_interpolator.create(16, m_sampleRate, 5000); m_interpolator.create(16, m_sampleRate, 5000);
@ -89,6 +89,7 @@ SSBDemod::SSBDemod(DeviceSourceAPI *deviceAPI) :
m_channelizer = new DownChannelizer(this); m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_deviceAPI->addChannelAPI(this);
applySettings(m_settings, true); applySettings(m_settings, true);
} }
@ -100,6 +101,7 @@ SSBDemod::~SSBDemod()
DSPEngine::instance()->removeAudioSink(&m_audioFifo); DSPEngine::instance()->removeAudioSink(&m_audioFifo);
m_deviceAPI->removeChannelAPI(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer); m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer; delete m_threadedChannelizer;
delete m_channelizer; delete m_channelizer;
@ -318,7 +320,8 @@ bool SSBDemod::handleMessage(const Message& cmd)
SSBDemodSettings settings = cfg.getSettings(); SSBDemodSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotificatione
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset; // save as absolut frequency shift in baseband
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -21,7 +21,8 @@
#include <QMutex> #include <QMutex>
#include <vector> #include <vector>
#include <dsp/basebandsamplesink.h> #include "dsp/basebandsamplesink.h"
#include "channel/channelsinkapi.h"
#include "dsp/ncof.h" #include "dsp/ncof.h"
#include "dsp/interpolator.h" #include "dsp/interpolator.h"
#include "dsp/fftfilt.h" #include "dsp/fftfilt.h"
@ -38,7 +39,7 @@ class DeviceSourceAPI;
class ThreadedBasebandSampleSink; class ThreadedBasebandSampleSink;
class DownChannelizer; class DownChannelizer;
class SSBDemod : public BasebandSampleSink { class SSBDemod : public BasebandSampleSink, public ChannelSinkAPI {
public: public:
class MsgConfigureSSBDemod : public Message { class MsgConfigureSSBDemod : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -110,7 +111,11 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
double getMagSq() const { return m_magsq; } virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
double getMagSq() const { return m_magsq; }
bool getAudioActive() const { return m_audioActive; } bool getAudioActive() const { return m_audioActive; }
void getMagSqLevels(double& avg, double& peak, int& nbSamples) void getMagSqLevels(double& avg, double& peak, int& nbSamples)
@ -232,7 +237,7 @@ private:
fftfilt::cmplx m_sum; fftfilt::cmplx m_sum;
int m_undersampleCount; int m_undersampleCount;
int m_sampleRate; int m_sampleRate;
int m_frequency; int m_absoluteFrequencyOffset;
bool m_audioBinaual; bool m_audioBinaual;
bool m_audioFlipChannels; bool m_audioFlipChannels;
bool m_usb; bool m_usb;

View File

@ -375,6 +375,7 @@ void SSBDemodGUI::displaySettings()
{ {
m_channelMarker.blockSignals(true); m_channelMarker.blockSignals(true);
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
m_channelMarker.setTitle(m_settings.m_title);
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth * 2); m_channelMarker.setBandwidth(m_settings.m_rfBandwidth * 2);
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff); m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);

View File

@ -47,6 +47,7 @@ void SSBDemodSettings::resetToDefaults()
m_inputFrequencyOffset = 0; m_inputFrequencyOffset = 0;
m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate(); m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate();
m_rgbColor = QColor(0, 255, 0).rgb(); m_rgbColor = QColor(0, 255, 0).rgb();
m_title = "SSB Demodulator";
} }
QByteArray SSBDemodSettings::serialize() const QByteArray SSBDemodSettings::serialize() const
@ -71,6 +72,8 @@ QByteArray SSBDemodSettings::serialize() const
s.writeS32(13, m_agcPowerThreshold); s.writeS32(13, m_agcPowerThreshold);
s.writeS32(14, m_agcThresholdGate); s.writeS32(14, m_agcThresholdGate);
s.writeBool(15, m_agcClamping); s.writeBool(15, m_agcClamping);
s.writeString(16, m_title);
return s.final(); return s.final();
} }
@ -113,6 +116,7 @@ bool SSBDemodSettings::deserialize(const QByteArray& data)
d.readS32(13, &m_agcPowerThreshold, -40); d.readS32(13, &m_agcPowerThreshold, -40);
d.readS32(14, &m_agcThresholdGate, 4); d.readS32(14, &m_agcThresholdGate, 4);
d.readBool(15, &m_agcClamping, false); d.readBool(15, &m_agcClamping, false);
d.readString(16, &m_title, "SSB Demodulator");
return true; return true;
} }

View File

@ -42,6 +42,7 @@ struct SSBDemodSettings
QString m_udpAddress; QString m_udpAddress;
quint16 m_udpPort; quint16 m_udpPort;
quint32 m_rgbColor; quint32 m_rgbColor;
QString m_title;
Serializable *m_channelMarker; Serializable *m_channelMarker;
Serializable *m_spectrumGUI; Serializable *m_spectrumGUI;

View File

@ -37,6 +37,7 @@ const QString WFMDemod::m_channelID = "de.maintech.sdrangelove.channel.wfm";
WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) : WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_squelchOpen(false), m_squelchOpen(false),
m_magsq(0.0f), m_magsq(0.0f),
m_magsqSum(0.0f), m_magsqSum(0.0f),
@ -63,6 +64,7 @@ WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
m_channelizer = new DownChannelizer(this); m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_deviceAPI->addChannelAPI(this);
applySettings(m_settings, true); applySettings(m_settings, true);
} }
@ -76,6 +78,7 @@ WFMDemod::~WFMDemod()
DSPEngine::instance()->removeAudioSink(&m_audioFifo); DSPEngine::instance()->removeAudioSink(&m_audioFifo);
m_deviceAPI->removeChannelAPI(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer); m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer; delete m_threadedChannelizer;
delete m_channelizer; delete m_channelizer;
@ -233,6 +236,7 @@ bool WFMDemod::handleMessage(const Message& cmd)
WFMDemodSettings settings = cfg.getSettings(); WFMDemodSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotification
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -18,9 +18,11 @@
#ifndef INCLUDE_WFMDEMOD_H #ifndef INCLUDE_WFMDEMOD_H
#define INCLUDE_WFMDEMOD_H #define INCLUDE_WFMDEMOD_H
#include <dsp/basebandsamplesink.h>
#include <QMutex> #include <QMutex>
#include <vector> #include <vector>
#include "dsp/basebandsamplesink.h"
#include "channel/channelsinkapi.h"
#include "dsp/nco.h" #include "dsp/nco.h"
#include "dsp/interpolator.h" #include "dsp/interpolator.h"
#include "dsp/lowpass.h" #include "dsp/lowpass.h"
@ -38,7 +40,7 @@ class ThreadedBasebandSampleSink;
class DownChannelizer; class DownChannelizer;
class DeviceSourceAPI; class DeviceSourceAPI;
class WFMDemod : public BasebandSampleSink { class WFMDemod : public BasebandSampleSink, public ChannelSinkAPI {
public: public:
class MsgConfigureWFMDemod : public Message { class MsgConfigureWFMDemod : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -95,6 +97,10 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
double getMagSq() const { return m_movingAverage.average(); } double getMagSq() const { return m_movingAverage.average(); }
bool getSquelchOpen() const { return m_squelchOpen; } bool getSquelchOpen() const { return m_squelchOpen; }
@ -120,7 +126,9 @@ private:
DeviceSourceAPI* m_deviceAPI; DeviceSourceAPI* m_deviceAPI;
ThreadedBasebandSampleSink* m_threadedChannelizer; ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
WFMDemodSettings m_settings; WFMDemodSettings m_settings;
int m_absoluteFrequencyOffset;
NCO m_nco; NCO m_nco;
Interpolator m_interpolator; //!< Interpolator between sample rate sent from DSP engine and requested RF bandwidth (rational) Interpolator m_interpolator; //!< Interpolator between sample rate sent from DSP engine and requested RF bandwidth (rational)

View File

@ -145,8 +145,9 @@ void WFMDemodGUI::onMenuDialogCalled(const QPoint &p)
m_settings.m_udpAddress = m_channelMarker.getUDPAddress(), m_settings.m_udpAddress = m_channelMarker.getUDPAddress(),
m_settings.m_udpPort = m_channelMarker.getUDPSendPort(), m_settings.m_udpPort = m_channelMarker.getUDPSendPort(),
m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb();
m_settings.m_title = m_channelMarker.getTitle();
setWindowTitle(m_channelMarker.getTitle()); setWindowTitle(m_settings.m_title);
setTitleColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor);
displayUDPAddress(); displayUDPAddress();
@ -240,6 +241,7 @@ void WFMDemodGUI::displaySettings()
m_channelMarker.blockSignals(true); m_channelMarker.blockSignals(true);
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); m_channelMarker.setBandwidth(m_settings.m_rfBandwidth);
m_channelMarker.setTitle(m_settings.m_title);
m_channelMarker.blockSignals(false); m_channelMarker.blockSignals(false);
m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only

View File

@ -48,6 +48,7 @@ void WFMDemodSettings::resetToDefaults()
m_udpAddress = "127.0.0.1"; m_udpAddress = "127.0.0.1";
m_udpPort = 9999; m_udpPort = 9999;
m_rgbColor = QColor(0, 0, 255).rgb(); m_rgbColor = QColor(0, 0, 255).rgb();
m_title = "WFM Demodulator";
} }
QByteArray WFMDemodSettings::serialize() const QByteArray WFMDemodSettings::serialize() const
@ -59,6 +60,7 @@ QByteArray WFMDemodSettings::serialize() const
s.writeS32(4, m_volume*10.0); s.writeS32(4, m_volume*10.0);
s.writeS32(5, m_squelch); s.writeS32(5, m_squelch);
s.writeU32(7, m_rgbColor); s.writeU32(7, m_rgbColor);
s.writeString(8, m_title);
if (m_channelMarker) { if (m_channelMarker) {
s.writeBlob(11, m_channelMarker->serialize()); s.writeBlob(11, m_channelMarker->serialize());
@ -94,6 +96,7 @@ bool WFMDemodSettings::deserialize(const QByteArray& data)
d.readS32(5, &tmp, -60); d.readS32(5, &tmp, -60);
m_squelch = tmp; m_squelch = tmp;
d.readU32(7, &m_rgbColor); d.readU32(7, &m_rgbColor);
d.readString(8, &m_title, "WFM Demodulator");
d.readBlob(11, &bytetmp); d.readBlob(11, &bytetmp);

View File

@ -34,6 +34,7 @@ struct WFMDemodSettings
QString m_udpAddress; QString m_udpAddress;
quint16 m_udpPort; quint16 m_udpPort;
quint32 m_rgbColor; quint32 m_rgbColor;
QString m_title;
Serializable *m_channelMarker; Serializable *m_channelMarker;

View File

@ -34,6 +34,7 @@ const QString TCPSrc::m_channelID = "sdrangel.channel.tcpsrc";
TCPSrc::TCPSrc(DeviceSourceAPI* deviceAPI) : TCPSrc::TCPSrc(DeviceSourceAPI* deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_settingsMutex(QMutex::Recursive) m_settingsMutex(QMutex::Recursive)
{ {
setObjectName("TCPSrc"); setObjectName("TCPSrc");
@ -64,12 +65,14 @@ TCPSrc::TCPSrc(DeviceSourceAPI* deviceAPI) :
m_channelizer = new DownChannelizer(this); m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_deviceAPI->addChannelAPI(this);
} }
TCPSrc::~TCPSrc() TCPSrc::~TCPSrc()
{ {
if (TCPFilter) delete TCPFilter; if (TCPFilter) delete TCPFilter;
m_deviceAPI->removeChannelAPI(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer); m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer; delete m_threadedChannelizer;
delete m_channelizer; delete m_channelizer;
@ -226,6 +229,7 @@ bool TCPSrc::handleMessage(const Message& cmd)
TCPSrcSettings settings = cfg.getSettings(); TCPSrcSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotification
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -4,7 +4,8 @@
#include <QMutex> #include <QMutex>
#include <QHostAddress> #include <QHostAddress>
#include <dsp/basebandsamplesink.h> #include "dsp/basebandsamplesink.h"
#include "channel/channelsinkapi.h"
#include "dsp/nco.h" #include "dsp/nco.h"
#include "dsp/fftfilt.h" #include "dsp/fftfilt.h"
#include "dsp/interpolator.h" #include "dsp/interpolator.h"
@ -21,7 +22,7 @@ class DeviceSourceAPI;
class ThreadedBasebandSampleSink; class ThreadedBasebandSampleSink;
class DownChannelizer; class DownChannelizer;
class TCPSrc : public BasebandSampleSink { class TCPSrc : public BasebandSampleSink, public ChannelSinkAPI {
Q_OBJECT Q_OBJECT
public: public:
@ -113,6 +114,10 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
static const QString m_channelID; static const QString m_channelID;
protected: protected:
@ -155,11 +160,13 @@ protected:
{ } { }
}; };
TCPSrcSettings m_settings; DeviceSourceAPI* m_deviceAPI;
DeviceSourceAPI* m_deviceAPI;
ThreadedBasebandSampleSink* m_threadedChannelizer; ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
TCPSrcSettings m_settings;
int m_absoluteFrequencyOffset;
int m_inputSampleRate; int m_inputSampleRate;
int m_sampleFormat; int m_sampleFormat;

View File

@ -53,16 +53,6 @@ void TCPSrcGUI::resetToDefaults()
QByteArray TCPSrcGUI::serialize() const QByteArray TCPSrcGUI::serialize() const
{ {
return m_settings.serialize(); return m_settings.serialize();
// SimpleSerializer s(1);
// s.writeS32(2, m_channelMarker.getCenterFrequency());
// s.writeS32(3, m_sampleFormat);
// s.writeReal(4, m_outputSampleRate);
// s.writeReal(5, m_rfBandwidth);
// s.writeS32(6, m_tcpPort);
// s.writeBlob(7, ui->spectrumGUI->serialize());
// s.writeS32(8, (qint32)m_boost);
// s.writeS32(9, m_channelMarker.getCenterFrequency());
// return s.final();
} }
bool TCPSrcGUI::deserialize(const QByteArray& data) bool TCPSrcGUI::deserialize(const QByteArray& data)
@ -309,6 +299,7 @@ void TCPSrcGUI::displaySettings()
m_channelMarker.blockSignals(true); m_channelMarker.blockSignals(true);
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); m_channelMarker.setBandwidth(m_settings.m_rfBandwidth);
m_channelMarker.setTitle(m_settings.m_title);
m_channelMarker.blockSignals(false); m_channelMarker.blockSignals(false);
m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only

View File

@ -50,6 +50,7 @@ void TCPSrcSettings::resetToDefaults()
m_udpPort = 9999; m_udpPort = 9999;
m_audioPort = 9998; m_audioPort = 9998;
m_rgbColor = QColor(225, 25, 99).rgb(); m_rgbColor = QColor(225, 25, 99).rgb();
m_title = "TCP Source";
} }
QByteArray TCPSrcSettings::serialize() const QByteArray TCPSrcSettings::serialize() const
@ -78,6 +79,8 @@ QByteArray TCPSrcSettings::serialize() const
s.writeS32(16, m_squelchdB); s.writeS32(16, m_squelchdB);
s.writeS32(17, m_squelchGate); s.writeS32(17, m_squelchGate);
s.writeBool(18, m_agc); s.writeBool(18, m_agc);
s.writeString(19, m_title);
return s.final(); return s.final();
} }
@ -134,6 +137,8 @@ bool TCPSrcSettings::deserialize(const QByteArray& data)
d.readS32(16, &m_squelchdB, -60); d.readS32(16, &m_squelchdB, -60);
d.readS32(17, &m_squelchGate, 5); d.readS32(17, &m_squelchGate, 5);
d.readBool(18, &m_agc, false); d.readBool(18, &m_agc, false);
d.readString(19, &m_title, "TCP Source");
return true; return true;
} }
else else

View File

@ -54,6 +54,8 @@ struct TCPSrcSettings
uint16_t m_udpPort; uint16_t m_udpPort;
uint16_t m_audioPort; uint16_t m_audioPort;
QString m_title;
Serializable *m_channelMarker; Serializable *m_channelMarker;
Serializable *m_spectrumGUI; Serializable *m_spectrumGUI;

View File

@ -37,6 +37,7 @@ const QString UDPSrc::m_channelID = "sdrangel.channel.udpsrc";
UDPSrc::UDPSrc(DeviceSourceAPI *deviceAPI) : UDPSrc::UDPSrc(DeviceSourceAPI *deviceAPI) :
m_deviceAPI(deviceAPI), m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_outMovingAverage(480, 1e-10), m_outMovingAverage(480, 1e-10),
m_inMovingAverage(480, 1e-10), m_inMovingAverage(480, 1e-10),
m_amMovingAverage(1200, 1e-10), m_amMovingAverage(1200, 1e-10),
@ -96,6 +97,7 @@ UDPSrc::UDPSrc(DeviceSourceAPI *deviceAPI) :
m_channelizer = new DownChannelizer(this); m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_deviceAPI->addChannelAPI(this);
applySettings(m_settings, true); applySettings(m_settings, true);
} }
@ -108,6 +110,7 @@ UDPSrc::~UDPSrc()
delete[] m_udpAudioBuf; delete[] m_udpAudioBuf;
if (UDPFilter) delete UDPFilter; if (UDPFilter) delete UDPFilter;
if (m_settings.m_audioActive) DSPEngine::instance()->removeAudioSink(&m_audioFifo); if (m_settings.m_audioActive) DSPEngine::instance()->removeAudioSink(&m_audioFifo);
m_deviceAPI->removeChannelAPI(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer); m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer; delete m_threadedChannelizer;
delete m_channelizer; delete m_channelizer;
@ -353,6 +356,7 @@ bool UDPSrc::handleMessage(const Message& cmd)
UDPSrcSettings settings = cfg.getSettings(); UDPSrcSettings settings = cfg.getSettings();
// These settings are set with DownChannelizer::MsgChannelizerNotification // These settings are set with DownChannelizer::MsgChannelizerNotification
m_absoluteFrequencyOffset = settings.m_inputFrequencyOffset;
settings.m_inputSampleRate = m_settings.m_inputSampleRate; settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;

View File

@ -18,9 +18,11 @@
#ifndef INCLUDE_UDPSRC_H #ifndef INCLUDE_UDPSRC_H
#define INCLUDE_UDPSRC_H #define INCLUDE_UDPSRC_H
#include <dsp/basebandsamplesink.h>
#include <QMutex> #include <QMutex>
#include <QHostAddress> #include <QHostAddress>
#include "dsp/basebandsamplesink.h"
#include "channel/channelsinkapi.h"
#include "dsp/nco.h" #include "dsp/nco.h"
#include "dsp/fftfilt.h" #include "dsp/fftfilt.h"
#include "dsp/interpolator.h" #include "dsp/interpolator.h"
@ -39,7 +41,7 @@ class DeviceSourceAPI;
class ThreadedBasebandSampleSink; class ThreadedBasebandSampleSink;
class DownChannelizer; class DownChannelizer;
class UDPSrc : public BasebandSampleSink { class UDPSrc : public BasebandSampleSink, public ChannelSinkAPI {
Q_OBJECT Q_OBJECT
public: public:
@ -104,6 +106,10 @@ public:
virtual void stop(); virtual void stop();
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
static const QString m_channelID; static const QString m_channelID;
static const int udpBlockSize = 512; // UDP block size in number of bytes static const int udpBlockSize = 512; // UDP block size in number of bytes
@ -131,12 +137,13 @@ protected:
{ } { }
}; };
UDPSrcSettings m_settings;
DeviceSourceAPI *m_deviceAPI; DeviceSourceAPI *m_deviceAPI;
ThreadedBasebandSampleSink* m_threadedChannelizer; ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer; DownChannelizer* m_channelizer;
UDPSrcSettings m_settings;
int m_absoluteFrequencyOffset;
QUdpSocket *m_audioSocket; QUdpSocket *m_audioSocket;
double m_magsq; double m_magsq;

View File

@ -215,6 +215,7 @@ void UDPSrcGUI::displaySettings()
m_channelMarker.blockSignals(true); m_channelMarker.blockSignals(true);
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); m_channelMarker.setBandwidth(m_settings.m_rfBandwidth);
m_channelMarker.setTitle(m_settings.m_title);
m_channelMarker.blockSignals(false); m_channelMarker.blockSignals(false);
m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only
@ -544,8 +545,9 @@ void UDPSrcGUI::onMenuDialogCalled(const QPoint &p)
m_settings.m_udpAddress = m_channelMarker.getUDPAddress(), m_settings.m_udpAddress = m_channelMarker.getUDPAddress(),
m_settings.m_udpPort = m_channelMarker.getUDPSendPort(), m_settings.m_udpPort = m_channelMarker.getUDPSendPort(),
m_settings.m_rgbColor = m_channelMarker.getColor().rgb(); m_settings.m_rgbColor = m_channelMarker.getColor().rgb();
m_settings.m_title = m_channelMarker.getTitle();
setWindowTitle(m_channelMarker.getTitle()); setWindowTitle(m_settings.m_title);
setTitleColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor);
displayUDPAddress(); displayUDPAddress();

View File

@ -49,6 +49,7 @@ void UDPSrcSettings::resetToDefaults()
m_udpPort = 9999; m_udpPort = 9999;
m_audioPort = 9998; m_audioPort = 9998;
m_rgbColor = QColor(225, 25, 99).rgb(); m_rgbColor = QColor(225, 25, 99).rgb();
m_title = "UDP Sample Source";
} }
QByteArray UDPSrcSettings::serialize() const QByteArray UDPSrcSettings::serialize() const
@ -76,6 +77,8 @@ QByteArray UDPSrcSettings::serialize() const
s.writeS32(16, m_squelchdB); s.writeS32(16, m_squelchdB);
s.writeS32(17, m_squelchGate); s.writeS32(17, m_squelchGate);
s.writeBool(18, m_agc); s.writeBool(18, m_agc);
s.writeString(19, m_title);
return s.final(); return s.final();
} }
@ -130,6 +133,8 @@ bool UDPSrcSettings::deserialize(const QByteArray& data)
d.readS32(16, &m_squelchdB, -60); d.readS32(16, &m_squelchdB, -60);
d.readS32(17, &m_squelchGate, 5); d.readS32(17, &m_squelchGate, 5);
d.readBool(18, &m_agc, false); d.readBool(18, &m_agc, false);
d.readString(19, &m_title, "UDP Sample Source");
return true; return true;
} }
else else

View File

@ -60,6 +60,8 @@ struct UDPSrcSettings
uint16_t m_udpPort; uint16_t m_udpPort;
uint16_t m_audioPort; uint16_t m_audioPort;
QString m_title;
Serializable *m_channelMarker; Serializable *m_channelMarker;
Serializable *m_spectrumGUI; Serializable *m_spectrumGUI;