1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-05-24 11:12:27 -04:00

UDP source: moved samples format enum to settings class

This commit is contained in:
f4exb 2017-10-05 08:17:49 +02:00
parent d0f07f0ccd
commit e3284760f8
4 changed files with 71 additions and 65 deletions

View File

@ -111,7 +111,7 @@ UDPSrc::~UDPSrc()
/** what needs the "apply" button validation */ /** what needs the "apply" button validation */
void UDPSrc::configure(MessageQueue* messageQueue, void UDPSrc::configure(MessageQueue* messageQueue,
SampleFormat sampleFormat, UDPSrcSettings::SampleFormat sampleFormat,
Real outputSampleRate, Real outputSampleRate,
Real rfBandwidth, Real rfBandwidth,
int fmDeviation, int fmDeviation,
@ -182,9 +182,9 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
double agcFactor = 1.0; double agcFactor = 1.0;
if ((m_running.m_agc) && if ((m_running.m_agc) &&
(m_running.m_sampleFormat != FormatNFM) && (m_running.m_sampleFormat != UDPSrcSettings::FormatNFM) &&
(m_running.m_sampleFormat != FormatNFMMono) && (m_running.m_sampleFormat != UDPSrcSettings::FormatNFMMono) &&
(m_running.m_sampleFormat != FormatS16LE)) (m_running.m_sampleFormat != UDPSrcSettings::FormatS16LE))
{ {
agcFactor = m_agc.feedAndGetValue(ci); agcFactor = m_agc.feedAndGetValue(ci);
inMagSq = m_agc.getMagSq(); inMagSq = m_agc.getMagSq();
@ -204,7 +204,7 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
calculateSquelch(m_inMagsq); calculateSquelch(m_inMagsq);
if (m_running.m_sampleFormat == FormatLSB) // binaural LSB if (m_running.m_sampleFormat == UDPSrcSettings::FormatLSB) // binaural LSB
{ {
ci *= agcFactor; ci *= agcFactor;
int n_out = UDPFilter->runSSB(ci, &sideband, false); int n_out = UDPFilter->runSSB(ci, &sideband, false);
@ -220,7 +220,7 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
} }
} }
} }
if (m_running.m_sampleFormat == FormatUSB) // binaural USB if (m_running.m_sampleFormat == UDPSrcSettings::FormatUSB) // binaural USB
{ {
ci *= agcFactor; ci *= agcFactor;
int n_out = UDPFilter->runSSB(ci, &sideband, true); int n_out = UDPFilter->runSSB(ci, &sideband, true);
@ -236,19 +236,19 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
} }
} }
} }
else if (m_running.m_sampleFormat == FormatNFM) else if (m_running.m_sampleFormat == UDPSrcSettings::FormatNFM)
{ {
double demod = m_squelchOpen ? 32768.0 * m_phaseDiscri.phaseDiscriminator(ci) * m_running.m_gain : 0; double demod = m_squelchOpen ? 32768.0 * m_phaseDiscri.phaseDiscriminator(ci) * m_running.m_gain : 0;
m_udpBuffer->write(Sample(demod, demod)); m_udpBuffer->write(Sample(demod, demod));
m_outMovingAverage.feed((demod * demod) / (1<<30)); m_outMovingAverage.feed((demod * demod) / (1<<30));
} }
else if (m_running.m_sampleFormat == FormatNFMMono) else if (m_running.m_sampleFormat == UDPSrcSettings::FormatNFMMono)
{ {
FixReal demod = m_squelchOpen ? (FixReal) (32768.0f * m_phaseDiscri.phaseDiscriminator(ci) * m_running.m_gain) : 0; FixReal demod = m_squelchOpen ? (FixReal) (32768.0f * m_phaseDiscri.phaseDiscriminator(ci) * m_running.m_gain) : 0;
m_udpBufferMono->write(demod); m_udpBufferMono->write(demod);
m_outMovingAverage.feed((demod * demod) / 1073741824.0); m_outMovingAverage.feed((demod * demod) / 1073741824.0);
} }
else if (m_running.m_sampleFormat == FormatLSBMono) // Monaural LSB else if (m_running.m_sampleFormat == UDPSrcSettings::FormatLSBMono) // Monaural LSB
{ {
ci *= agcFactor; ci *= agcFactor;
int n_out = UDPFilter->runSSB(ci, &sideband, false); int n_out = UDPFilter->runSSB(ci, &sideband, false);
@ -263,7 +263,7 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
} }
} }
} }
else if (m_running.m_sampleFormat == FormatUSBMono) // Monaural USB else if (m_running.m_sampleFormat == UDPSrcSettings::FormatUSBMono) // Monaural USB
{ {
ci *= agcFactor; ci *= agcFactor;
int n_out = UDPFilter->runSSB(ci, &sideband, true); int n_out = UDPFilter->runSSB(ci, &sideband, true);
@ -278,13 +278,13 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
} }
} }
} }
else if (m_running.m_sampleFormat == FormatAMMono) else if (m_running.m_sampleFormat == UDPSrcSettings::FormatAMMono)
{ {
FixReal demod = m_squelchOpen ? (FixReal) (sqrt(inMagSq) * agcFactor * m_running.m_gain) : 0; FixReal demod = m_squelchOpen ? (FixReal) (sqrt(inMagSq) * agcFactor * m_running.m_gain) : 0;
m_udpBufferMono->write(demod); m_udpBufferMono->write(demod);
m_outMovingAverage.feed((demod * demod) / 1073741824.0); m_outMovingAverage.feed((demod * demod) / 1073741824.0);
} }
else if (m_running.m_sampleFormat == FormatAMNoDCMono) else if (m_running.m_sampleFormat == UDPSrcSettings::FormatAMNoDCMono)
{ {
if (m_squelchOpen) if (m_squelchOpen)
{ {
@ -300,7 +300,7 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
m_outMovingAverage.feed(0); m_outMovingAverage.feed(0);
} }
} }
else if (m_running.m_sampleFormat == FormatAMBPFMono) else if (m_running.m_sampleFormat == UDPSrcSettings::FormatAMBPFMono)
{ {
if (m_squelchOpen) if (m_squelchOpen)
{ {
@ -471,10 +471,10 @@ void UDPSrc::apply(bool force)
m_interpolator.create(16, m_config.m_inputSampleRate, m_config.m_rfBandwidth / 2.0); m_interpolator.create(16, m_config.m_inputSampleRate, m_config.m_rfBandwidth / 2.0);
m_sampleDistanceRemain = m_config.m_inputSampleRate / m_config.m_outputSampleRate; m_sampleDistanceRemain = m_config.m_inputSampleRate / m_config.m_outputSampleRate;
if ((m_config.m_sampleFormat == FormatLSB) || if ((m_config.m_sampleFormat == UDPSrcSettings::FormatLSB) ||
(m_config.m_sampleFormat == FormatLSBMono) || (m_config.m_sampleFormat == UDPSrcSettings::FormatLSBMono) ||
(m_config.m_sampleFormat == FormatUSB) || (m_config.m_sampleFormat == UDPSrcSettings::FormatUSB) ||
(m_config.m_sampleFormat == FormatUSBMono)) (m_config.m_sampleFormat == UDPSrcSettings::FormatUSBMono))
{ {
m_squelchGate = m_config.m_outputSampleRate * 0.05; m_squelchGate = m_config.m_outputSampleRate * 0.05;
} }
@ -511,10 +511,10 @@ void UDPSrc::apply(bool force)
if ((m_config.m_squelchGate != m_running.m_squelchGate) || force) if ((m_config.m_squelchGate != m_running.m_squelchGate) || force)
{ {
if ((m_config.m_sampleFormat == FormatLSB) || if ((m_config.m_sampleFormat == UDPSrcSettings::FormatLSB) ||
(m_config.m_sampleFormat == FormatLSBMono) || (m_config.m_sampleFormat == UDPSrcSettings::FormatLSBMono) ||
(m_config.m_sampleFormat == FormatUSB) || (m_config.m_sampleFormat == UDPSrcSettings::FormatUSB) ||
(m_config.m_sampleFormat == FormatUSBMono)) (m_config.m_sampleFormat == UDPSrcSettings::FormatUSBMono))
{ {
m_squelchGate = m_config.m_outputSampleRate * 0.05; m_squelchGate = m_config.m_outputSampleRate * 0.05;
} }

View File

@ -32,6 +32,7 @@
#include "util/message.h" #include "util/message.h"
#include "audio/audiofifo.h" #include "audio/audiofifo.h"
#include "udpsrcsettings.h"
class QUdpSocket; class QUdpSocket;
class DeviceSourceAPI; class DeviceSourceAPI;
@ -65,26 +66,26 @@ public:
{ } { }
}; };
enum SampleFormat { // enum SampleFormat {
FormatS16LE, // FormatS16LE,
FormatNFM, // FormatNFM,
FormatNFMMono, // FormatNFMMono,
FormatLSB, // FormatLSB,
FormatUSB, // FormatUSB,
FormatLSBMono, // FormatLSBMono,
FormatUSBMono, // FormatUSBMono,
FormatAMMono, // FormatAMMono,
FormatAMNoDCMono, // FormatAMNoDCMono,
FormatAMBPFMono, // FormatAMBPFMono,
FormatNone // FormatNone
}; // };
UDPSrc(DeviceSourceAPI *deviceAPI); UDPSrc(DeviceSourceAPI *deviceAPI);
virtual ~UDPSrc(); virtual ~UDPSrc();
void setSpectrum(BasebandSampleSink* spectrum) { m_spectrum = spectrum; } void setSpectrum(BasebandSampleSink* spectrum) { m_spectrum = spectrum; }
void configure(MessageQueue* messageQueue, void configure(MessageQueue* messageQueue,
SampleFormat sampleFormat, UDPSrcSettings::SampleFormat sampleFormat,
Real outputSampleRate, Real outputSampleRate,
Real rfBandwidth, Real rfBandwidth,
int fmDeviation, int fmDeviation,
@ -122,7 +123,7 @@ protected:
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
public: public:
SampleFormat getSampleFormat() const { return m_sampleFormat; } UDPSrcSettings::SampleFormat getSampleFormat() const { return m_sampleFormat; }
Real getOutputSampleRate() const { return m_outputSampleRate; } Real getOutputSampleRate() const { return m_outputSampleRate; }
Real getRFBandwidth() const { return m_rfBandwidth; } Real getRFBandwidth() const { return m_rfBandwidth; }
int getFMDeviation() const { return m_fmDeviation; } int getFMDeviation() const { return m_fmDeviation; }
@ -131,7 +132,7 @@ protected:
int getAudioPort() const { return m_audioPort; } int getAudioPort() const { return m_audioPort; }
bool getForce() const { return m_force; } bool getForce() const { return m_force; }
static MsgUDPSrcConfigure* create(SampleFormat static MsgUDPSrcConfigure* create(UDPSrcSettings::SampleFormat
sampleFormat, sampleFormat,
Real sampleRate, Real sampleRate,
Real rfBandwidth, Real rfBandwidth,
@ -152,7 +153,7 @@ protected:
} }
private: private:
SampleFormat m_sampleFormat; UDPSrcSettings::SampleFormat m_sampleFormat;
Real m_outputSampleRate; Real m_outputSampleRate;
Real m_rfBandwidth; Real m_rfBandwidth;
int m_fmDeviation; int m_fmDeviation;
@ -161,7 +162,7 @@ protected:
int m_audioPort; int m_audioPort;
bool m_force; bool m_force;
MsgUDPSrcConfigure(SampleFormat sampleFormat, MsgUDPSrcConfigure(UDPSrcSettings::SampleFormat sampleFormat,
Real outputSampleRate, Real outputSampleRate,
Real rfBandwidth, Real rfBandwidth,
int fmDeviation, int fmDeviation,
@ -274,7 +275,7 @@ protected:
struct Config { struct Config {
Real m_outputSampleRate; Real m_outputSampleRate;
SampleFormat m_sampleFormat; UDPSrcSettings::SampleFormat m_sampleFormat;
Real m_inputSampleRate; Real m_inputSampleRate;
qint64 m_inputFrequencyOffset; qint64 m_inputFrequencyOffset;
Real m_rfBandwidth; Real m_rfBandwidth;
@ -295,7 +296,7 @@ protected:
Config() : Config() :
m_outputSampleRate(48000), m_outputSampleRate(48000),
m_sampleFormat(FormatS16LE), m_sampleFormat(UDPSrcSettings::FormatS16LE),
m_inputSampleRate(48000), m_inputSampleRate(48000),
m_inputFrequencyOffset(0), m_inputFrequencyOffset(0),
m_rfBandwidth(12500), m_rfBandwidth(12500),

View File

@ -132,36 +132,36 @@ bool UDPSrcGUI::deserialize(const QByteArray& data)
d.readS32(2, &s32tmp, 0); d.readS32(2, &s32tmp, 0);
m_channelMarker.setCenterFrequency(s32tmp); m_channelMarker.setCenterFrequency(s32tmp);
d.readS32(3, &s32tmp, UDPSrc::FormatS16LE); d.readS32(3, &s32tmp, UDPSrcSettings::FormatS16LE);
switch(s32tmp) { switch(s32tmp) {
case UDPSrc::FormatS16LE: case UDPSrcSettings::FormatS16LE:
ui->sampleFormat->setCurrentIndex(0); ui->sampleFormat->setCurrentIndex(0);
break; break;
case UDPSrc::FormatNFM: case UDPSrcSettings::FormatNFM:
ui->sampleFormat->setCurrentIndex(1); ui->sampleFormat->setCurrentIndex(1);
break; break;
case UDPSrc::FormatNFMMono: case UDPSrcSettings::FormatNFMMono:
ui->sampleFormat->setCurrentIndex(2); ui->sampleFormat->setCurrentIndex(2);
break; break;
case UDPSrc::FormatLSB: case UDPSrcSettings::FormatLSB:
ui->sampleFormat->setCurrentIndex(3); ui->sampleFormat->setCurrentIndex(3);
break; break;
case UDPSrc::FormatUSB: case UDPSrcSettings::FormatUSB:
ui->sampleFormat->setCurrentIndex(4); ui->sampleFormat->setCurrentIndex(4);
break; break;
case UDPSrc::FormatLSBMono: case UDPSrcSettings::FormatLSBMono:
ui->sampleFormat->setCurrentIndex(5); ui->sampleFormat->setCurrentIndex(5);
break; break;
case UDPSrc::FormatUSBMono: case UDPSrcSettings::FormatUSBMono:
ui->sampleFormat->setCurrentIndex(6); ui->sampleFormat->setCurrentIndex(6);
break; break;
case UDPSrc::FormatAMMono: case UDPSrcSettings::FormatAMMono:
ui->sampleFormat->setCurrentIndex(7); ui->sampleFormat->setCurrentIndex(7);
break; break;
case UDPSrc::FormatAMNoDCMono: case UDPSrcSettings::FormatAMNoDCMono:
ui->sampleFormat->setCurrentIndex(8); ui->sampleFormat->setCurrentIndex(8);
break; break;
case UDPSrc::FormatAMBPFMono: case UDPSrcSettings::FormatAMBPFMono:
ui->sampleFormat->setCurrentIndex(9); ui->sampleFormat->setCurrentIndex(9);
break; break;
default: default:
@ -294,6 +294,9 @@ UDPSrcGUI::UDPSrcGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidget*
m_channelMarker.setUDPReceivePort(9998); m_channelMarker.setUDPReceivePort(9998);
m_channelMarker.setVisible(true); m_channelMarker.setVisible(true);
m_settings.setChannelMarker(&m_channelMarker);
m_settings.setSpectrumGUI(ui->spectrumGUI);
connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged())); connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged()));
m_deviceAPI->registerChannelInstance(m_channelID, this); m_deviceAPI->registerChannelInstance(m_channelID, this);
@ -393,52 +396,52 @@ void UDPSrcGUI::applySettings(bool force)
outputSampleRate, m_channelMarker.getCenterFrequency()); outputSampleRate, m_channelMarker.getCenterFrequency());
m_udpSrc->getInputMessageQueue()->push(channelConfigMsg); m_udpSrc->getInputMessageQueue()->push(channelConfigMsg);
UDPSrc::SampleFormat sampleFormat; UDPSrcSettings::SampleFormat sampleFormat;
switch(ui->sampleFormat->currentIndex()) switch(ui->sampleFormat->currentIndex())
{ {
case 0: case 0:
sampleFormat = UDPSrc::FormatS16LE; sampleFormat = UDPSrcSettings::FormatS16LE;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 1: case 1:
sampleFormat = UDPSrc::FormatNFM; sampleFormat = UDPSrcSettings::FormatNFM;
ui->fmDeviation->setEnabled(true); ui->fmDeviation->setEnabled(true);
break; break;
case 2: case 2:
sampleFormat = UDPSrc::FormatNFMMono; sampleFormat = UDPSrcSettings::FormatNFMMono;
ui->fmDeviation->setEnabled(true); ui->fmDeviation->setEnabled(true);
break; break;
case 3: case 3:
sampleFormat = UDPSrc::FormatLSB; sampleFormat = UDPSrcSettings::FormatLSB;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 4: case 4:
sampleFormat = UDPSrc::FormatUSB; sampleFormat = UDPSrcSettings::FormatUSB;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 5: case 5:
sampleFormat = UDPSrc::FormatLSBMono; sampleFormat = UDPSrcSettings::FormatLSBMono;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 6: case 6:
sampleFormat = UDPSrc::FormatUSBMono; sampleFormat = UDPSrcSettings::FormatUSBMono;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 7: case 7:
sampleFormat = UDPSrc::FormatAMMono; sampleFormat = UDPSrcSettings::FormatAMMono;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 8: case 8:
sampleFormat = UDPSrc::FormatAMNoDCMono; sampleFormat = UDPSrcSettings::FormatAMNoDCMono;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
case 9: case 9:
sampleFormat = UDPSrc::FormatAMBPFMono; sampleFormat = UDPSrcSettings::FormatAMBPFMono;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
default: default:
sampleFormat = UDPSrc::FormatS16LE; sampleFormat = UDPSrcSettings::FormatS16LE;
ui->fmDeviation->setEnabled(false); ui->fmDeviation->setEnabled(false);
break; break;
} }

View File

@ -26,6 +26,7 @@
#include "util/messagequeue.h" #include "util/messagequeue.h"
#include "udpsrc.h" #include "udpsrc.h"
#include "udpsrcsettings.h"
class PluginAPI; class PluginAPI;
class DeviceSourceAPI; class DeviceSourceAPI;
@ -83,13 +84,14 @@ private:
PluginAPI* m_pluginAPI; PluginAPI* m_pluginAPI;
DeviceSourceAPI* m_deviceAPI; DeviceSourceAPI* m_deviceAPI;
UDPSrc* m_udpSrc; UDPSrc* m_udpSrc;
UDPSrcSettings m_settings;
ChannelMarker m_channelMarker; ChannelMarker m_channelMarker;
MovingAverage<double> m_channelPowerAvg; MovingAverage<double> m_channelPowerAvg;
MovingAverage<double> m_inPowerAvg; MovingAverage<double> m_inPowerAvg;
uint32_t m_tickCount; uint32_t m_tickCount;
// settings // settings
UDPSrc::SampleFormat m_sampleFormat; UDPSrcSettings::SampleFormat m_sampleFormat;
Real m_outputSampleRate; Real m_outputSampleRate;
Real m_rfBandwidth; Real m_rfBandwidth;
int m_fmDeviation; int m_fmDeviation;