mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-06-01 22:42:25 -04:00
UDP source: use settings class
This commit is contained in:
parent
8bee1b600c
commit
bb6b313bc8
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
const Real UDPSrc::m_agcTarget = 16384.0f;
|
const Real UDPSrc::m_agcTarget = 16384.0f;
|
||||||
|
|
||||||
|
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgConfigureUDPSrc, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgConfigureChannelizer, Message)
|
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgConfigureChannelizer, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgUDPSrcConfigure, Message)
|
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgUDPSrcConfigure, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgUDPSrcConfigureImmediate, Message)
|
MESSAGE_CLASS_DEFINITION(UDPSrc::MsgUDPSrcConfigureImmediate, Message)
|
||||||
@ -138,7 +139,7 @@ void UDPSrc::configureImmediate(MessageQueue* messageQueue,
|
|||||||
Real boost,
|
Real boost,
|
||||||
int volume,
|
int volume,
|
||||||
Real squelchDB,
|
Real squelchDB,
|
||||||
Real squelchGate,
|
int squelchGate,
|
||||||
bool squelchEnabled,
|
bool squelchEnabled,
|
||||||
bool agc,
|
bool agc,
|
||||||
bool force)
|
bool force)
|
||||||
@ -358,8 +359,6 @@ void UDPSrc::stop()
|
|||||||
|
|
||||||
bool UDPSrc::handleMessage(const Message& cmd)
|
bool UDPSrc::handleMessage(const Message& cmd)
|
||||||
{
|
{
|
||||||
qDebug() << "UDPSrc::handleMessage";
|
|
||||||
|
|
||||||
if (DownChannelizer::MsgChannelizerNotification::match(cmd))
|
if (DownChannelizer::MsgChannelizerNotification::match(cmd))
|
||||||
{
|
{
|
||||||
DownChannelizer::MsgChannelizerNotification& notif = (DownChannelizer::MsgChannelizerNotification&) cmd;
|
DownChannelizer::MsgChannelizerNotification& notif = (DownChannelizer::MsgChannelizerNotification&) cmd;
|
||||||
@ -382,6 +381,60 @@ bool UDPSrc::handleMessage(const Message& cmd)
|
|||||||
cfg.getSampleRate(),
|
cfg.getSampleRate(),
|
||||||
cfg.getCenterFrequency());
|
cfg.getCenterFrequency());
|
||||||
|
|
||||||
|
qDebug() << "UDPSrc::handleMessage: MsgConfigureChannelizer:"
|
||||||
|
<< " sampleRate: " << cfg.getSampleRate()
|
||||||
|
<< " centerFrequency: " << cfg.getCenterFrequency();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (MsgConfigureUDPSrc::match(cmd))
|
||||||
|
{
|
||||||
|
MsgConfigureUDPSrc& cfg = (MsgConfigureUDPSrc&) cmd;
|
||||||
|
|
||||||
|
UDPSrcSettings settings = cfg.getSettings();
|
||||||
|
|
||||||
|
// These settings are set with DownChannelizer::MsgChannelizerNotification
|
||||||
|
settings.m_inputSampleRate = m_settings.m_inputSampleRate;
|
||||||
|
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;
|
||||||
|
|
||||||
|
m_config.m_audioActive = m_settings.m_audioActive;
|
||||||
|
m_config.m_audioStereo = m_settings.m_audioStereo;
|
||||||
|
m_config.m_gain = m_settings.m_gain;
|
||||||
|
m_config.m_volume = m_settings.m_volume;
|
||||||
|
m_config.m_squelch = CalcDb::powerFromdB((double) m_settings.m_squelchdB);
|
||||||
|
m_config.m_squelchGate = m_settings.m_squelchGate;
|
||||||
|
m_config.m_squelchEnabled = m_settings.m_squelchEnabled;
|
||||||
|
m_config.m_agc = m_settings.m_agc;
|
||||||
|
m_config.m_sampleFormat = m_settings.m_sampleFormat;
|
||||||
|
m_config.m_outputSampleRate = m_settings.m_outputSampleRate;
|
||||||
|
m_config.m_rfBandwidth = m_settings.m_rfBandwidth;
|
||||||
|
m_config.m_udpAddressStr = m_settings.m_udpAddress;
|
||||||
|
m_config.m_udpPort = m_settings.m_udpPort;
|
||||||
|
m_config.m_audioPort = m_settings.m_audioPort;
|
||||||
|
m_config.m_fmDeviation = m_settings.m_fmDeviation;
|
||||||
|
|
||||||
|
apply(cfg.getForce());
|
||||||
|
|
||||||
|
qDebug() << "UDPSrc::handleMessage: MsgConfigureUDPSrc: "
|
||||||
|
<< " m_inputSampleRate: " << m_config.m_inputSampleRate
|
||||||
|
<< " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset
|
||||||
|
<< " m_audioActive: " << m_config.m_audioActive
|
||||||
|
<< " m_audioStereo: " << m_config.m_audioStereo
|
||||||
|
<< " m_gain: " << m_config.m_gain
|
||||||
|
<< " m_squelchEnabled: " << m_config.m_squelchEnabled
|
||||||
|
<< " m_squelch: " << m_config.m_squelch
|
||||||
|
<< " getSquelchDB: " << m_settings.m_squelchdB
|
||||||
|
<< " m_squelchGate" << m_config.m_squelchGate
|
||||||
|
<< " m_agc" << m_config.m_agc
|
||||||
|
<< " m_sampleFormat: " << m_config.m_sampleFormat
|
||||||
|
<< " m_outputSampleRate: " << m_config.m_outputSampleRate
|
||||||
|
<< " m_rfBandwidth: " << m_config.m_rfBandwidth
|
||||||
|
<< " m_fmDeviation: " << m_config.m_fmDeviation
|
||||||
|
<< " m_udpAddressStr: " << m_config.m_udpAddressStr
|
||||||
|
<< " m_udpPort: " << m_config.m_udpPort
|
||||||
|
<< " m_audioPort: " << m_config.m_audioPort
|
||||||
|
<< " force: " << cfg.getForce();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (MsgUDPSrcConfigureImmediate::match(cmd))
|
else if (MsgUDPSrcConfigureImmediate::match(cmd))
|
||||||
@ -407,7 +460,13 @@ bool UDPSrc::handleMessage(const Message& cmd)
|
|||||||
<< " m_squelch: " << m_config.m_squelch
|
<< " m_squelch: " << m_config.m_squelch
|
||||||
<< " getSquelchDB: " << cfg.getSquelchDB()
|
<< " getSquelchDB: " << cfg.getSquelchDB()
|
||||||
<< " m_squelchGate" << m_config.m_squelchGate
|
<< " m_squelchGate" << m_config.m_squelchGate
|
||||||
<< " m_agc" << m_config.m_agc;
|
<< " m_agc" << m_config.m_agc
|
||||||
|
<< " m_sampleFormat: " << m_config.m_sampleFormat
|
||||||
|
<< " m_outputSampleRate: " << m_config.m_outputSampleRate
|
||||||
|
<< " m_rfBandwidth: " << m_config.m_rfBandwidth
|
||||||
|
<< " m_udpAddressStr: " << m_config.m_udpAddressStr
|
||||||
|
<< " m_udpPort: " << m_config.m_udpPort
|
||||||
|
<< " m_audioPort: " << m_config.m_audioPort;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -426,9 +485,13 @@ bool UDPSrc::handleMessage(const Message& cmd)
|
|||||||
|
|
||||||
apply(cfg.getForce());
|
apply(cfg.getForce());
|
||||||
|
|
||||||
qDebug() << "UDPSrc::handleMessage: MsgUDPSrcConfigure: m_sampleFormat: " << m_config.m_sampleFormat
|
qDebug() << "UDPSrc::handleMessage: MsgUDPSrcConfigure:"
|
||||||
|
<< " m_inputSampleRate: " << m_config.m_inputSampleRate
|
||||||
|
<< " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset
|
||||||
|
<< " m_sampleFormat: " << m_config.m_sampleFormat
|
||||||
<< " m_outputSampleRate: " << m_config.m_outputSampleRate
|
<< " m_outputSampleRate: " << m_config.m_outputSampleRate
|
||||||
<< " m_rfBandwidth: " << m_config.m_rfBandwidth
|
<< " m_rfBandwidth: " << m_config.m_rfBandwidth
|
||||||
|
<< " m_fmDeviation: " << m_config.m_fmDeviation
|
||||||
<< " m_udpAddressStr: " << m_config.m_udpAddressStr
|
<< " m_udpAddressStr: " << m_config.m_udpAddressStr
|
||||||
<< " m_udpPort: " << m_config.m_udpPort
|
<< " m_udpPort: " << m_config.m_udpPort
|
||||||
<< " m_audioPort: " << m_config.m_audioPort;
|
<< " m_audioPort: " << m_config.m_audioPort;
|
||||||
@ -480,13 +543,14 @@ void UDPSrc::apply(bool force)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_squelchGate = m_config.m_outputSampleRate * m_config.m_squelchGate;
|
m_squelchGate = (m_config.m_outputSampleRate * m_config.m_squelchGate) / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_squelchRelease = m_config.m_outputSampleRate * m_config.m_squelchGate;
|
m_squelchRelease = (m_config.m_outputSampleRate * m_config.m_squelchGate) / 100;
|
||||||
initSquelch(m_squelchOpen);
|
initSquelch(m_squelchOpen);
|
||||||
m_agc.resize(m_config.m_outputSampleRate * 0.2, m_agcTarget); // Fixed 200 ms
|
m_agc.resize(m_config.m_outputSampleRate * 0.2, m_agcTarget); // Fixed 200 ms
|
||||||
m_agc.setStepDownDelay( m_config.m_outputSampleRate * (m_config.m_squelchGate == 0 ? 0.01 : m_config.m_squelchGate));
|
int stepDownDelay = (m_config.m_outputSampleRate * (m_config.m_squelchGate == 0 ? 1 : m_config.m_squelchGate))/100;
|
||||||
|
m_agc.setStepDownDelay(stepDownDelay);
|
||||||
m_agc.setGate(m_config.m_outputSampleRate * 0.05);
|
m_agc.setGate(m_config.m_outputSampleRate * 0.05);
|
||||||
|
|
||||||
m_bandpass.create(301, m_config.m_outputSampleRate, 300.0, m_config.m_rfBandwidth / 2.0f);
|
m_bandpass.create(301, m_config.m_outputSampleRate, 300.0, m_config.m_rfBandwidth / 2.0f);
|
||||||
@ -520,12 +584,13 @@ void UDPSrc::apply(bool force)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_squelchGate = m_config.m_outputSampleRate * m_config.m_squelchGate;
|
m_squelchGate = (m_config.m_outputSampleRate * m_config.m_squelchGate)/100;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_squelchRelease = m_config.m_outputSampleRate * m_config.m_squelchGate;
|
m_squelchRelease = (m_config.m_outputSampleRate * m_config.m_squelchGate)/100;
|
||||||
initSquelch(m_squelchOpen);
|
initSquelch(m_squelchOpen);
|
||||||
m_agc.setStepDownDelay(m_config.m_outputSampleRate * (m_config.m_squelchGate == 0 ? 0.01 : m_config.m_squelchGate)); // same delay for up and down
|
int stepDownDelay = (m_config.m_outputSampleRate * (m_config.m_squelchGate == 0 ? 1 : m_config.m_squelchGate))/100;
|
||||||
|
m_agc.setStepDownDelay(stepDownDelay); // same delay for up and down
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_config.m_squelch != m_running.m_squelch) || force)
|
if ((m_config.m_squelch != m_running.m_squelch) || force)
|
||||||
|
@ -43,6 +43,29 @@ class UDPSrc : public BasebandSampleSink {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
class MsgConfigureUDPSrc : public Message {
|
||||||
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
|
public:
|
||||||
|
const UDPSrcSettings& getSettings() const { return m_settings; }
|
||||||
|
bool getForce() const { return m_force; }
|
||||||
|
|
||||||
|
static MsgConfigureUDPSrc* create(const UDPSrcSettings& settings, bool force)
|
||||||
|
{
|
||||||
|
return new MsgConfigureUDPSrc(settings, force);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
UDPSrcSettings m_settings;
|
||||||
|
bool m_force;
|
||||||
|
|
||||||
|
MsgConfigureUDPSrc(const UDPSrcSettings& settings, bool force) :
|
||||||
|
Message(),
|
||||||
|
m_settings(settings),
|
||||||
|
m_force(force)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class MsgConfigureChannelizer : public Message {
|
class MsgConfigureChannelizer : public Message {
|
||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
@ -66,20 +89,6 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
// enum SampleFormat {
|
|
||||||
// FormatS16LE,
|
|
||||||
// FormatNFM,
|
|
||||||
// FormatNFMMono,
|
|
||||||
// FormatLSB,
|
|
||||||
// FormatUSB,
|
|
||||||
// FormatLSBMono,
|
|
||||||
// FormatUSBMono,
|
|
||||||
// FormatAMMono,
|
|
||||||
// FormatAMNoDCMono,
|
|
||||||
// FormatAMBPFMono,
|
|
||||||
// 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; }
|
||||||
@ -99,7 +108,7 @@ public:
|
|||||||
Real gain,
|
Real gain,
|
||||||
int volume,
|
int volume,
|
||||||
Real squelchDB,
|
Real squelchDB,
|
||||||
Real squelchGate,
|
int squelchGate,
|
||||||
bool squelchEnabled,
|
bool squelchEnabled,
|
||||||
bool agc,
|
bool agc,
|
||||||
bool force);
|
bool force);
|
||||||
@ -191,7 +200,7 @@ protected:
|
|||||||
bool getAudioActive() const { return m_audioActive; }
|
bool getAudioActive() const { return m_audioActive; }
|
||||||
bool getAudioStereo() const { return m_audioStereo; }
|
bool getAudioStereo() const { return m_audioStereo; }
|
||||||
Real getSquelchDB() const { return m_squelchDB; }
|
Real getSquelchDB() const { return m_squelchDB; }
|
||||||
Real getSquelchGate() const { return m_squelchGate; }
|
int getSquelchGate() const { return m_squelchGate; }
|
||||||
bool getSquelchEnabled() const { return m_squelchEnabled; }
|
bool getSquelchEnabled() const { return m_squelchEnabled; }
|
||||||
bool getAGC() const { return m_agc; }
|
bool getAGC() const { return m_agc; }
|
||||||
bool getForce() const { return m_force; }
|
bool getForce() const { return m_force; }
|
||||||
@ -199,10 +208,10 @@ protected:
|
|||||||
static MsgUDPSrcConfigureImmediate* create(
|
static MsgUDPSrcConfigureImmediate* create(
|
||||||
bool audioActive,
|
bool audioActive,
|
||||||
bool audioStereo,
|
bool audioStereo,
|
||||||
int gain,
|
Real gain,
|
||||||
int volume,
|
int volume,
|
||||||
Real squelchDB,
|
Real squelchDB,
|
||||||
Real squelchGate,
|
int squelchGate,
|
||||||
bool squelchEnabled,
|
bool squelchEnabled,
|
||||||
bool agc,
|
bool agc,
|
||||||
bool force)
|
bool force)
|
||||||
@ -225,7 +234,7 @@ protected:
|
|||||||
bool m_audioActive;
|
bool m_audioActive;
|
||||||
bool m_audioStereo;
|
bool m_audioStereo;
|
||||||
Real m_squelchDB;
|
Real m_squelchDB;
|
||||||
Real m_squelchGate; // seconds
|
int m_squelchGate; // 100ths seconds
|
||||||
bool m_squelchEnabled;
|
bool m_squelchEnabled;
|
||||||
bool m_agc;
|
bool m_agc;
|
||||||
bool m_force;
|
bool m_force;
|
||||||
@ -236,7 +245,7 @@ protected:
|
|||||||
Real gain,
|
Real gain,
|
||||||
int volume,
|
int volume,
|
||||||
Real squelchDB,
|
Real squelchDB,
|
||||||
Real squelchGate,
|
int squelchGate,
|
||||||
bool squelchEnabled,
|
bool squelchEnabled,
|
||||||
bool agc,
|
bool agc,
|
||||||
bool force) :
|
bool force) :
|
||||||
@ -283,7 +292,7 @@ protected:
|
|||||||
bool m_channelMute;
|
bool m_channelMute;
|
||||||
Real m_gain;
|
Real m_gain;
|
||||||
Real m_squelch; //!< squared magnitude
|
Real m_squelch; //!< squared magnitude
|
||||||
Real m_squelchGate; //!< seconds
|
int m_squelchGate; //!< 100ths seconds
|
||||||
bool m_squelchEnabled;
|
bool m_squelchEnabled;
|
||||||
bool m_agc;
|
bool m_agc;
|
||||||
bool m_audioActive;
|
bool m_audioActive;
|
||||||
@ -304,7 +313,7 @@ protected:
|
|||||||
m_channelMute(false),
|
m_channelMute(false),
|
||||||
m_gain(1.0),
|
m_gain(1.0),
|
||||||
m_squelch(1e-6),
|
m_squelch(1e-6),
|
||||||
m_squelchGate(0.0),
|
m_squelchGate(5),
|
||||||
m_squelchEnabled(true),
|
m_squelchEnabled(true),
|
||||||
m_agc(false),
|
m_agc(false),
|
||||||
m_audioActive(false),
|
m_audioActive(false),
|
||||||
@ -318,6 +327,7 @@ protected:
|
|||||||
|
|
||||||
Config m_config;
|
Config m_config;
|
||||||
Config m_running;
|
Config m_running;
|
||||||
|
UDPSrcSettings m_settings;
|
||||||
|
|
||||||
DeviceSourceAPI *m_deviceAPI;
|
DeviceSourceAPI *m_deviceAPI;
|
||||||
ThreadedBasebandSampleSink* m_threadedChannelizer;
|
ThreadedBasebandSampleSink* m_threadedChannelizer;
|
||||||
|
@ -69,53 +69,18 @@ void UDPSrcGUI::resetToDefaults()
|
|||||||
displaySettings();
|
displaySettings();
|
||||||
applySettingsImmediate(true);
|
applySettingsImmediate(true);
|
||||||
applySettings(true);
|
applySettings(true);
|
||||||
|
|
||||||
// blockApplySettings(true);
|
|
||||||
//
|
|
||||||
// ui->sampleFormat->setCurrentIndex(0);
|
|
||||||
// ui->sampleRate->setText("48000");
|
|
||||||
// ui->rfBandwidth->setText("32000");
|
|
||||||
// ui->fmDeviation->setText("2500");
|
|
||||||
// ui->spectrumGUI->resetToDefaults();
|
|
||||||
// ui->gain->setValue(10);
|
|
||||||
// ui->volume->setValue(20);
|
|
||||||
// ui->audioActive->setChecked(false);
|
|
||||||
// ui->audioStereo->setChecked(false);
|
|
||||||
// ui->agc->setChecked(false);
|
|
||||||
// m_channelMarker.setUDPAddress("127.0.0.1");
|
|
||||||
// m_channelMarker.setUDPSendPort(9999);
|
|
||||||
// m_channelMarker.setUDPReceivePort(9998);
|
|
||||||
//
|
|
||||||
// blockApplySettings(false);
|
|
||||||
// applySettingsImmediate();
|
|
||||||
// applySettings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray UDPSrcGUI::serialize() const
|
QByteArray UDPSrcGUI::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.writeBlob(6, m_channelMarker.serialize());
|
|
||||||
// s.writeBlob(7, ui->spectrumGUI->serialize());
|
|
||||||
// s.writeS32(8, ui->gain->value());
|
|
||||||
// s.writeBool(11, m_audioActive);
|
|
||||||
// s.writeS32(12, (qint32)m_volume);
|
|
||||||
// s.writeBool(14, m_audioStereo);
|
|
||||||
// s.writeS32(15, m_fmDeviation);
|
|
||||||
// s.writeS32(16, ui->squelch->value());
|
|
||||||
// s.writeS32(17, ui->squelchGate->value());
|
|
||||||
// s.writeBool(18, ui->agc->isChecked());
|
|
||||||
// return s.final();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UDPSrcGUI::deserialize(const QByteArray& data)
|
bool UDPSrcGUI::deserialize(const QByteArray& data)
|
||||||
{
|
{
|
||||||
if(m_settings.deserialize(data))
|
if(m_settings.deserialize(data))
|
||||||
{
|
{
|
||||||
|
qDebug("UDPSrcGUI::deserialize: m_squelchGate: %d", m_settings.m_squelchGate);
|
||||||
displaySettings();
|
displaySettings();
|
||||||
applySettingsImmediate(true);
|
applySettingsImmediate(true);
|
||||||
applySettings(true);
|
applySettings(true);
|
||||||
@ -124,108 +89,6 @@ bool UDPSrcGUI::deserialize(const QByteArray& data)
|
|||||||
resetToDefaults();
|
resetToDefaults();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SimpleDeserializer d(data);
|
|
||||||
//
|
|
||||||
// if (!d.isValid())
|
|
||||||
// {
|
|
||||||
// resetToDefaults();
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (d.getVersion() == 1)
|
|
||||||
// {
|
|
||||||
// QByteArray bytetmp;
|
|
||||||
// QString strtmp;
|
|
||||||
// qint32 s32tmp;
|
|
||||||
// Real realtmp;
|
|
||||||
// bool booltmp;
|
|
||||||
//
|
|
||||||
// blockApplySettings(true);
|
|
||||||
// m_channelMarker.blockSignals(true);
|
|
||||||
//
|
|
||||||
// d.readBlob(6, &bytetmp);
|
|
||||||
// m_channelMarker.deserialize(bytetmp);
|
|
||||||
//
|
|
||||||
// d.readS32(2, &s32tmp, 0);
|
|
||||||
// m_channelMarker.setCenterFrequency(s32tmp);
|
|
||||||
// d.readS32(3, &s32tmp, UDPSrcSettings::FormatS16LE);
|
|
||||||
// switch(s32tmp) {
|
|
||||||
// case UDPSrcSettings::FormatS16LE:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(0);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatNFM:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(1);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatNFMMono:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(2);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatLSB:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(3);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatUSB:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(4);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatLSBMono:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(5);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatUSBMono:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(6);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatAMMono:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(7);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatAMNoDCMono:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(8);
|
|
||||||
// break;
|
|
||||||
// case UDPSrcSettings::FormatAMBPFMono:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(9);
|
|
||||||
// break;
|
|
||||||
// default:
|
|
||||||
// ui->sampleFormat->setCurrentIndex(0);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// d.readReal(4, &realtmp, 48000);
|
|
||||||
// ui->sampleRate->setText(QString("%1").arg(realtmp, 0));
|
|
||||||
// d.readReal(5, &realtmp, 32000);
|
|
||||||
// ui->rfBandwidth->setText(QString("%1").arg(realtmp, 0));
|
|
||||||
// d.readBlob(7, &bytetmp);
|
|
||||||
// ui->spectrumGUI->deserialize(bytetmp);
|
|
||||||
// d.readS32(8, &s32tmp, 10);
|
|
||||||
// ui->gain->setValue(s32tmp);
|
|
||||||
// ui->gainText->setText(tr("%1").arg(s32tmp/10.0, 0, 'f', 1));
|
|
||||||
// d.readBool(11, &booltmp, false);
|
|
||||||
// ui->audioActive->setChecked(booltmp);
|
|
||||||
// d.readS32(12, &s32tmp, 20);
|
|
||||||
// ui->volume->setValue(s32tmp);
|
|
||||||
// ui->volumeText->setText(QString("%1").arg(s32tmp));
|
|
||||||
// d.readBool(14, &booltmp, false);
|
|
||||||
// ui->audioStereo->setChecked(booltmp);
|
|
||||||
// d.readS32(15, &s32tmp, 2500);
|
|
||||||
// ui->fmDeviation->setText(QString("%1").arg(s32tmp));
|
|
||||||
// d.readS32(16, &s32tmp, -60);
|
|
||||||
// ui->squelch->setValue(s32tmp);
|
|
||||||
// ui->squelchText->setText(tr("%1").arg(s32tmp*1.0, 0, 'f', 0));
|
|
||||||
// d.readS32(17, &s32tmp, 5);
|
|
||||||
// ui->squelchGate->setValue(s32tmp);
|
|
||||||
// ui->squelchGateText->setText(tr("%1").arg(s32tmp*10.0, 0, 'f', 0));
|
|
||||||
// d.readBool(18, &booltmp, false);
|
|
||||||
// ui->agc->setChecked(booltmp);
|
|
||||||
//
|
|
||||||
// blockApplySettings(false);
|
|
||||||
// m_channelMarker.blockSignals(false);
|
|
||||||
//
|
|
||||||
// this->setWindowTitle(m_channelMarker.getTitle());
|
|
||||||
// displaySettings();
|
|
||||||
// applySettingsImmediate(true);
|
|
||||||
// applySettings(true);
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// resetToDefaults();
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UDPSrcGUI::handleMessage(const Message& message __attribute__((unused)))
|
bool UDPSrcGUI::handleMessage(const Message& message __attribute__((unused)))
|
||||||
@ -236,11 +99,13 @@ bool UDPSrcGUI::handleMessage(const Message& message __attribute__((unused)))
|
|||||||
|
|
||||||
void UDPSrcGUI::channelMarkerChanged()
|
void UDPSrcGUI::channelMarkerChanged()
|
||||||
{
|
{
|
||||||
this->setWindowTitle(m_channelMarker.getTitle());
|
//m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency();
|
||||||
m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency();
|
//m_settings.m_rfBandwidth = m_channelMarker.getBandwidth();
|
||||||
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();
|
||||||
|
this->setWindowTitle(m_channelMarker.getTitle());
|
||||||
|
setTitleColor(m_settings.m_rgbColor);
|
||||||
displayUDPAddress();
|
displayUDPAddress();
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
@ -277,9 +142,8 @@ UDPSrcGUI::UDPSrcGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidget*
|
|||||||
m_channelPowerAvg(4, 1e-10),
|
m_channelPowerAvg(4, 1e-10),
|
||||||
m_inPowerAvg(4, 1e-10),
|
m_inPowerAvg(4, 1e-10),
|
||||||
m_tickCount(0),
|
m_tickCount(0),
|
||||||
m_gain(1.0),
|
m_doApplySettings(true),
|
||||||
m_volume(20),
|
m_rfBandwidthChanged(false)
|
||||||
m_doApplySettings(true)
|
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
||||||
@ -356,10 +220,42 @@ void UDPSrcGUI::displaySettings()
|
|||||||
m_channelMarker.blockSignals(false);
|
m_channelMarker.blockSignals(false);
|
||||||
|
|
||||||
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
||||||
|
|
||||||
ui->sampleRate->setText(QString("%1").arg(m_settings.m_outputSampleRate, 0));
|
ui->sampleRate->setText(QString("%1").arg(m_settings.m_outputSampleRate, 0));
|
||||||
|
setSampleFormatIndex(m_settings.m_sampleFormat);
|
||||||
|
|
||||||
switch(m_settings.m_sampleFormat)
|
ui->squelch->setValue(m_settings.m_squelchdB);
|
||||||
|
ui->squelchText->setText(tr("%1").arg(ui->squelch->value()*1.0, 0, 'f', 0));
|
||||||
|
|
||||||
|
qDebug("UDPSrcGUI::deserialize: m_squelchGate: %d", m_settings.m_squelchGate);
|
||||||
|
ui->squelchGate->setValue(m_settings.m_squelchGate);
|
||||||
|
ui->squelchGateText->setText(tr("%1").arg(m_settings.m_squelchGate*10.0, 0, 'f', 0));
|
||||||
|
|
||||||
|
ui->rfBandwidth->setText(QString("%1").arg(m_settings.m_rfBandwidth, 0));
|
||||||
|
ui->fmDeviation->setText(QString("%1").arg(m_settings.m_fmDeviation, 0));
|
||||||
|
|
||||||
|
ui->agc->setChecked(m_settings.m_agc);
|
||||||
|
ui->audioActive->setChecked(m_settings.m_audioActive);
|
||||||
|
ui->audioStereo->setChecked(m_settings.m_audioStereo);
|
||||||
|
|
||||||
|
ui->volume->setValue(m_settings.m_volume);
|
||||||
|
ui->volumeText->setText(QString("%1").arg(ui->volume->value()));
|
||||||
|
|
||||||
|
ui->gain->setValue(m_settings.m_gain*10.0);
|
||||||
|
ui->gainText->setText(tr("%1").arg(ui->gain->value()/10.0, 0, 'f', 1));
|
||||||
|
|
||||||
|
ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate);
|
||||||
|
|
||||||
|
displayUDPAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDPSrcGUI::displayUDPAddress()
|
||||||
|
{
|
||||||
|
ui->addressText->setText(tr("%1:%2/%3").arg(m_channelMarker.getUDPAddress()).arg(m_channelMarker.getUDPSendPort()).arg(m_channelMarker.getUDPReceivePort()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDPSrcGUI::setSampleFormatIndex(const UDPSrcSettings::SampleFormat& sampleFormat)
|
||||||
|
{
|
||||||
|
switch(sampleFormat)
|
||||||
{
|
{
|
||||||
case UDPSrcSettings::FormatS16LE:
|
case UDPSrcSettings::FormatS16LE:
|
||||||
ui->sampleFormat->setCurrentIndex(0);
|
ui->sampleFormat->setCurrentIndex(0);
|
||||||
@ -395,168 +291,99 @@ void UDPSrcGUI::displaySettings()
|
|||||||
ui->sampleFormat->setCurrentIndex(0);
|
ui->sampleFormat->setCurrentIndex(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->squelch->setValue(m_settings.m_squelch);
|
|
||||||
ui->squelchText->setText(tr("%1").arg(ui->squelch->value()*1.0, 0, 'f', 0));
|
|
||||||
|
|
||||||
ui->squelchGate->setValue(m_settings.m_squelchGate*100.0);
|
|
||||||
ui->squelchGateText->setText(tr("%1").arg(ui->squelchGate->value()*10.0, 0, 'f', 0));
|
|
||||||
|
|
||||||
ui->rfBandwidth->setText(QString("%1").arg(m_settings.m_rfBandwidth, 0));
|
|
||||||
ui->fmDeviation->setText(QString("%1").arg(m_settings.m_fmDeviation, 0));
|
|
||||||
|
|
||||||
ui->agc->setChecked(m_settings.m_agc);
|
|
||||||
ui->audioActive->setChecked(m_settings.m_audioActive);
|
|
||||||
ui->audioStereo->setChecked(m_settings.m_audioStereo);
|
|
||||||
|
|
||||||
ui->volume->setValue(m_settings.m_volume);
|
|
||||||
ui->volumeText->setText(QString("%1").arg(ui->volume->value()));
|
|
||||||
|
|
||||||
ui->gain->setValue(m_settings.m_gain*10.0);
|
|
||||||
ui->gainText->setText(tr("%1").arg(ui->gain->value()/10.0, 0, 'f', 1));
|
|
||||||
|
|
||||||
ui->squelch->setValue(m_settings.m_squelch);
|
|
||||||
ui->squelchText->setText(tr("%1").arg(ui->squelch->value()*1.0, 0, 'f', 0));
|
|
||||||
|
|
||||||
ui->squelchGate->setValue(m_settings.m_squelchGate*100.0);
|
|
||||||
ui->squelchGateText->setText(tr("%1").arg(ui->squelchGate->value()*10.0, 0, 'f', 0));
|
|
||||||
|
|
||||||
displayUDPAddress();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::displayUDPAddress()
|
void UDPSrcGUI::setSampleFormat(int index)
|
||||||
{
|
{
|
||||||
ui->addressText->setText(tr("%1:%2/%3").arg(m_channelMarker.getUDPAddress()).arg(m_channelMarker.getUDPSendPort()).arg(m_channelMarker.getUDPReceivePort()));
|
switch(index)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatS16LE;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatNFM;
|
||||||
|
ui->fmDeviation->setEnabled(true);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatNFMMono;
|
||||||
|
ui->fmDeviation->setEnabled(true);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatLSB;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatUSB;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatLSBMono;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatUSBMono;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatAMMono;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatAMNoDCMono;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatAMBPFMono;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
m_settings.m_sampleFormat = UDPSrcSettings::FormatS16LE;
|
||||||
|
ui->fmDeviation->setEnabled(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::applySettingsImmediate(bool force)
|
void UDPSrcGUI::applySettingsImmediate(bool force)
|
||||||
{
|
{
|
||||||
if (m_doApplySettings)
|
if (m_doApplySettings)
|
||||||
{
|
{
|
||||||
m_audioActive = ui->audioActive->isChecked();
|
UDPSrc::MsgConfigureUDPSrc* message = UDPSrc::MsgConfigureUDPSrc::create( m_settings, force);
|
||||||
m_audioStereo = ui->audioStereo->isChecked();
|
m_udpSrc->getInputMessageQueue()->push(message);
|
||||||
m_gain = ui->gain->value() / 10.0;
|
|
||||||
m_volume = ui->volume->value();
|
|
||||||
|
|
||||||
m_udpSrc->configureImmediate(m_udpSrc->getInputMessageQueue(),
|
// m_udpSrc->configureImmediate(m_udpSrc->getInputMessageQueue(),
|
||||||
m_audioActive,
|
// m_settings.m_audioActive,
|
||||||
m_audioStereo,
|
// m_settings.m_audioStereo,
|
||||||
m_gain,
|
// m_settings.m_gain,
|
||||||
m_volume,
|
// m_settings.m_volume,
|
||||||
ui->squelch->value() * 1.0f,
|
// m_settings.m_squelch,
|
||||||
ui->squelchGate->value() * 0.01f,
|
// m_settings.m_squelchGate,
|
||||||
ui->squelch->value() != -100,
|
// m_settings.m_squelch != -100,
|
||||||
ui->agc->isChecked(),
|
// m_settings.m_agc,
|
||||||
force);
|
// force);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void UDPSrcGUI::applySettings(bool force)
|
void UDPSrcGUI::applySettings(bool force)
|
||||||
{
|
{
|
||||||
if (m_doApplySettings)
|
if (m_doApplySettings)
|
||||||
{
|
{
|
||||||
bool ok;
|
|
||||||
|
|
||||||
Real outputSampleRate = ui->sampleRate->text().toDouble(&ok);
|
|
||||||
|
|
||||||
if((!ok) || (outputSampleRate < 1000))
|
|
||||||
{
|
|
||||||
outputSampleRate = 48000;
|
|
||||||
}
|
|
||||||
|
|
||||||
Real rfBandwidth = ui->rfBandwidth->text().toDouble(&ok);
|
|
||||||
|
|
||||||
if((!ok) || (rfBandwidth > outputSampleRate))
|
|
||||||
{
|
|
||||||
rfBandwidth = outputSampleRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fmDeviation = ui->fmDeviation->text().toInt(&ok);
|
|
||||||
|
|
||||||
if ((!ok) || (fmDeviation < 1))
|
|
||||||
{
|
|
||||||
fmDeviation = 2500;
|
|
||||||
}
|
|
||||||
|
|
||||||
setTitleColor(m_channelMarker.getColor());
|
|
||||||
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
|
||||||
ui->sampleRate->setText(QString("%1").arg(outputSampleRate, 0));
|
|
||||||
ui->rfBandwidth->setText(QString("%1").arg(rfBandwidth, 0));
|
|
||||||
ui->fmDeviation->setText(QString("%1").arg(fmDeviation));
|
|
||||||
m_channelMarker.disconnect(this, SLOT(channelMarkerChanged()));
|
|
||||||
m_channelMarker.setBandwidth((int)rfBandwidth);
|
|
||||||
connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged()));
|
|
||||||
ui->glSpectrum->setSampleRate(outputSampleRate);
|
|
||||||
|
|
||||||
UDPSrc::MsgConfigureChannelizer* channelConfigMsg = UDPSrc::MsgConfigureChannelizer::create(
|
UDPSrc::MsgConfigureChannelizer* channelConfigMsg = UDPSrc::MsgConfigureChannelizer::create(
|
||||||
outputSampleRate, m_channelMarker.getCenterFrequency());
|
m_settings.m_outputSampleRate, m_channelMarker.getCenterFrequency());
|
||||||
m_udpSrc->getInputMessageQueue()->push(channelConfigMsg);
|
m_udpSrc->getInputMessageQueue()->push(channelConfigMsg);
|
||||||
|
|
||||||
UDPSrcSettings::SampleFormat sampleFormat;
|
UDPSrc::MsgConfigureUDPSrc* message = UDPSrc::MsgConfigureUDPSrc::create( m_settings, force);
|
||||||
|
m_udpSrc->getInputMessageQueue()->push(message);
|
||||||
|
|
||||||
switch(ui->sampleFormat->currentIndex())
|
// m_udpSrc->configure(m_udpSrc->getInputMessageQueue(),
|
||||||
{
|
// m_settings.m_sampleFormat,
|
||||||
case 0:
|
// m_settings.m_outputSampleRate,
|
||||||
sampleFormat = UDPSrcSettings::FormatS16LE;
|
// m_settings.m_rfBandwidth,
|
||||||
ui->fmDeviation->setEnabled(false);
|
// m_settings.m_fmDeviation,
|
||||||
break;
|
// m_channelMarker.getUDPAddress(),
|
||||||
case 1:
|
// m_channelMarker.getUDPSendPort(),
|
||||||
sampleFormat = UDPSrcSettings::FormatNFM;
|
// m_channelMarker.getUDPReceivePort(),
|
||||||
ui->fmDeviation->setEnabled(true);
|
// force);
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatNFMMono;
|
|
||||||
ui->fmDeviation->setEnabled(true);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatLSB;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatUSB;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatLSBMono;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatUSBMono;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatAMMono;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatAMNoDCMono;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatAMBPFMono;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sampleFormat = UDPSrcSettings::FormatS16LE;
|
|
||||||
ui->fmDeviation->setEnabled(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sampleFormat = sampleFormat;
|
|
||||||
m_outputSampleRate = outputSampleRate;
|
|
||||||
m_rfBandwidth = rfBandwidth;
|
|
||||||
m_fmDeviation = fmDeviation;
|
|
||||||
|
|
||||||
m_udpSrc->configure(m_udpSrc->getInputMessageQueue(),
|
|
||||||
sampleFormat,
|
|
||||||
outputSampleRate,
|
|
||||||
rfBandwidth,
|
|
||||||
fmDeviation,
|
|
||||||
m_channelMarker.getUDPAddress(),
|
|
||||||
m_channelMarker.getUDPSendPort(),
|
|
||||||
m_channelMarker.getUDPReceivePort(),
|
|
||||||
force);
|
|
||||||
|
|
||||||
ui->applyBtn->setEnabled(false);
|
ui->applyBtn->setEnabled(false);
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }");
|
ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }");
|
||||||
@ -566,6 +393,8 @@ void UDPSrcGUI::applySettings(bool force)
|
|||||||
void UDPSrcGUI::on_deltaFrequency_changed(qint64 value)
|
void UDPSrcGUI::on_deltaFrequency_changed(qint64 value)
|
||||||
{
|
{
|
||||||
m_channelMarker.setCenterFrequency(value);
|
m_channelMarker.setCenterFrequency(value);
|
||||||
|
m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency();
|
||||||
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_sampleFormat_currentIndexChanged(int index)
|
void UDPSrcGUI::on_sampleFormat_currentIndexChanged(int index)
|
||||||
@ -576,87 +405,131 @@ void UDPSrcGUI::on_sampleFormat_currentIndexChanged(int index)
|
|||||||
ui->fmDeviation->setEnabled(false);
|
ui->fmDeviation->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setSampleFormat(index);
|
||||||
|
|
||||||
ui->applyBtn->setEnabled(true);
|
ui->applyBtn->setEnabled(true);
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_sampleRate_textEdited(const QString& arg1 __attribute__((unused)))
|
void UDPSrcGUI::on_sampleRate_textEdited(const QString& arg1 __attribute__((unused)))
|
||||||
{
|
{
|
||||||
|
bool ok;
|
||||||
|
Real outputSampleRate = ui->sampleRate->text().toDouble(&ok);
|
||||||
|
|
||||||
|
if((!ok) || (outputSampleRate < 1000))
|
||||||
|
{
|
||||||
|
m_settings.m_outputSampleRate = 48000;
|
||||||
|
ui->sampleRate->setText(QString("%1").arg(outputSampleRate, 0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_settings.m_outputSampleRate = outputSampleRate;
|
||||||
|
}
|
||||||
|
|
||||||
ui->applyBtn->setEnabled(true);
|
ui->applyBtn->setEnabled(true);
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_rfBandwidth_textEdited(const QString& arg1 __attribute__((unused)))
|
void UDPSrcGUI::on_rfBandwidth_textEdited(const QString& arg1 __attribute__((unused)))
|
||||||
{
|
{
|
||||||
|
bool ok;
|
||||||
|
Real rfBandwidth = ui->rfBandwidth->text().toDouble(&ok);
|
||||||
|
|
||||||
|
if((!ok) || (rfBandwidth > m_settings.m_outputSampleRate))
|
||||||
|
{
|
||||||
|
m_settings.m_rfBandwidth = m_settings.m_outputSampleRate;
|
||||||
|
ui->rfBandwidth->setText(QString("%1").arg(m_settings.m_rfBandwidth, 0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_settings.m_rfBandwidth = rfBandwidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_rfBandwidthChanged = true;
|
||||||
|
|
||||||
ui->applyBtn->setEnabled(true);
|
ui->applyBtn->setEnabled(true);
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_fmDeviation_textEdited(const QString& arg1 __attribute__((unused)))
|
void UDPSrcGUI::on_fmDeviation_textEdited(const QString& arg1 __attribute__((unused)))
|
||||||
{
|
{
|
||||||
ui->applyBtn->setEnabled(true);
|
bool ok;
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
int fmDeviation = ui->fmDeviation->text().toInt(&ok);
|
||||||
}
|
|
||||||
|
|
||||||
void UDPSrcGUI::on_udpAddress_textEdited(const QString& arg1 __attribute__((unused)))
|
if ((!ok) || (fmDeviation < 1))
|
||||||
{
|
{
|
||||||
ui->applyBtn->setEnabled(true);
|
m_settings.m_fmDeviation = 2500;
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
ui->fmDeviation->setText(QString("%1").arg(m_settings.m_fmDeviation));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_settings.m_fmDeviation = fmDeviation;
|
||||||
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_udpPort_textEdited(const QString& arg1 __attribute__((unused)))
|
|
||||||
{
|
|
||||||
ui->applyBtn->setEnabled(true);
|
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
|
||||||
}
|
|
||||||
|
|
||||||
void UDPSrcGUI::on_audioPort_textEdited(const QString& arg1 __attribute__((unused)))
|
|
||||||
{
|
|
||||||
ui->applyBtn->setEnabled(true);
|
ui->applyBtn->setEnabled(true);
|
||||||
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_applyBtn_clicked()
|
void UDPSrcGUI::on_applyBtn_clicked()
|
||||||
{
|
{
|
||||||
|
if (m_rfBandwidthChanged)
|
||||||
|
{
|
||||||
|
blockApplySettings(true);
|
||||||
|
m_channelMarker.setBandwidth((int) m_settings.m_rfBandwidth);
|
||||||
|
m_rfBandwidthChanged = false;
|
||||||
|
blockApplySettings(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate);
|
||||||
|
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_audioActive_toggled(bool active __attribute__((unused)))
|
void UDPSrcGUI::on_audioActive_toggled(bool active)
|
||||||
{
|
{
|
||||||
|
m_settings.m_audioActive = active;
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_audioStereo_toggled(bool stereo __attribute__((unused)))
|
void UDPSrcGUI::on_audioStereo_toggled(bool stereo)
|
||||||
{
|
{
|
||||||
|
m_settings.m_audioStereo = stereo;
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_agc_toggled(bool agc __attribute__((unused)))
|
void UDPSrcGUI::on_agc_toggled(bool agc)
|
||||||
{
|
{
|
||||||
|
m_settings.m_agc = agc;
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_gain_valueChanged(int value)
|
void UDPSrcGUI::on_gain_valueChanged(int value)
|
||||||
{
|
{
|
||||||
|
m_settings.m_gain = value / 10.0;
|
||||||
ui->gainText->setText(tr("%1").arg(value/10.0, 0, 'f', 1));
|
ui->gainText->setText(tr("%1").arg(value/10.0, 0, 'f', 1));
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_volume_valueChanged(int value)
|
void UDPSrcGUI::on_volume_valueChanged(int value)
|
||||||
{
|
{
|
||||||
|
m_settings.m_volume = value;
|
||||||
ui->volumeText->setText(QString("%1").arg(value));
|
ui->volumeText->setText(QString("%1").arg(value));
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPSrcGUI::on_squelch_valueChanged(int value)
|
void UDPSrcGUI::on_squelch_valueChanged(int value)
|
||||||
{
|
{
|
||||||
|
m_settings.m_squelchdB = value;
|
||||||
|
|
||||||
if (value == -100) // means disabled
|
if (value == -100) // means disabled
|
||||||
{
|
{
|
||||||
ui->squelchText->setText("---");
|
ui->squelchText->setText("---");
|
||||||
|
m_settings.m_squelchEnabled = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ui->squelchText->setText(tr("%1").arg(value*1.0, 0, 'f', 0));
|
ui->squelchText->setText(tr("%1").arg(value*1.0, 0, 'f', 0));
|
||||||
|
m_settings.m_squelchEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
@ -664,6 +537,7 @@ void UDPSrcGUI::on_squelch_valueChanged(int value)
|
|||||||
|
|
||||||
void UDPSrcGUI::on_squelchGate_valueChanged(int value)
|
void UDPSrcGUI::on_squelchGate_valueChanged(int value)
|
||||||
{
|
{
|
||||||
|
m_settings.m_squelchGate = value;
|
||||||
ui->squelchGateText->setText(tr("%1").arg(value*10.0, 0, 'f', 0));
|
ui->squelchGateText->setText(tr("%1").arg(value*10.0, 0, 'f', 0));
|
||||||
applySettingsImmediate();
|
applySettingsImmediate();
|
||||||
}
|
}
|
||||||
|
@ -63,9 +63,6 @@ private slots:
|
|||||||
void on_sampleFormat_currentIndexChanged(int index);
|
void on_sampleFormat_currentIndexChanged(int index);
|
||||||
void on_sampleRate_textEdited(const QString& arg1);
|
void on_sampleRate_textEdited(const QString& arg1);
|
||||||
void on_rfBandwidth_textEdited(const QString& arg1);
|
void on_rfBandwidth_textEdited(const QString& arg1);
|
||||||
void on_udpAddress_textEdited(const QString& arg1);
|
|
||||||
void on_udpPort_textEdited(const QString& arg1);
|
|
||||||
void on_audioPort_textEdited(const QString& arg1);
|
|
||||||
void on_fmDeviation_textEdited(const QString& arg1);
|
void on_fmDeviation_textEdited(const QString& arg1);
|
||||||
void on_audioActive_toggled(bool active);
|
void on_audioActive_toggled(bool active);
|
||||||
void on_audioStereo_toggled(bool stereo);
|
void on_audioStereo_toggled(bool stereo);
|
||||||
@ -91,15 +88,8 @@ private:
|
|||||||
uint32_t m_tickCount;
|
uint32_t m_tickCount;
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
UDPSrcSettings::SampleFormat m_sampleFormat;
|
|
||||||
Real m_outputSampleRate;
|
|
||||||
Real m_rfBandwidth;
|
|
||||||
int m_fmDeviation;
|
|
||||||
Real m_gain;
|
|
||||||
bool m_audioActive;
|
|
||||||
bool m_audioStereo;
|
|
||||||
int m_volume;
|
|
||||||
bool m_doApplySettings;
|
bool m_doApplySettings;
|
||||||
|
bool m_rfBandwidthChanged;
|
||||||
MessageQueue m_inputMessageQueue;
|
MessageQueue m_inputMessageQueue;
|
||||||
|
|
||||||
// RF path
|
// RF path
|
||||||
@ -113,6 +103,8 @@ private:
|
|||||||
void applySettingsImmediate(bool force = false);
|
void applySettingsImmediate(bool force = false);
|
||||||
void displaySettings();
|
void displaySettings();
|
||||||
void displayUDPAddress();
|
void displayUDPAddress();
|
||||||
|
void setSampleFormat(int index);
|
||||||
|
void setSampleFormatIndex(const UDPSrcSettings::SampleFormat& sampleFormat);
|
||||||
|
|
||||||
void leaveEvent(QEvent*);
|
void leaveEvent(QEvent*);
|
||||||
void enterEvent(QEvent*);
|
void enterEvent(QEvent*);
|
||||||
|
@ -38,7 +38,7 @@ void UDPSrcSettings::resetToDefaults()
|
|||||||
m_fmDeviation = 2500;
|
m_fmDeviation = 2500;
|
||||||
m_channelMute = false;
|
m_channelMute = false;
|
||||||
m_gain = 1.0;
|
m_gain = 1.0;
|
||||||
m_squelch = -60.0;
|
m_squelchdB = -60;
|
||||||
m_squelchGate = 0.0;
|
m_squelchGate = 0.0;
|
||||||
m_squelchEnabled = true;
|
m_squelchEnabled = true;
|
||||||
m_agc = false;
|
m_agc = false;
|
||||||
@ -55,7 +55,7 @@ QByteArray UDPSrcSettings::serialize() const
|
|||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
s.writeS32(2, m_inputFrequencyOffset);
|
s.writeS32(2, m_inputFrequencyOffset);
|
||||||
s.writeS32(3, m_sampleFormat);
|
s.writeS32(3, (int) m_sampleFormat);
|
||||||
s.writeReal(4, m_outputSampleRate);
|
s.writeReal(4, m_outputSampleRate);
|
||||||
s.writeReal(5, m_rfBandwidth);
|
s.writeReal(5, m_rfBandwidth);
|
||||||
|
|
||||||
@ -73,8 +73,8 @@ QByteArray UDPSrcSettings::serialize() const
|
|||||||
s.writeS32(12, m_volume);
|
s.writeS32(12, m_volume);
|
||||||
s.writeBool(14, m_audioStereo);
|
s.writeBool(14, m_audioStereo);
|
||||||
s.writeS32(15, m_fmDeviation);
|
s.writeS32(15, m_fmDeviation);
|
||||||
s.writeS32(16, m_squelch);
|
s.writeS32(16, m_squelchdB);
|
||||||
s.writeS32(17, m_squelchGate * 100.0);
|
s.writeS32(17, m_squelchGate);
|
||||||
s.writeBool(18, m_agc);
|
s.writeBool(18, m_agc);
|
||||||
return s.final();
|
return s.final();
|
||||||
|
|
||||||
@ -127,10 +127,8 @@ bool UDPSrcSettings::deserialize(const QByteArray& data)
|
|||||||
d.readS32(12, &m_volume, 20);
|
d.readS32(12, &m_volume, 20);
|
||||||
d.readBool(14, &m_audioStereo, false);
|
d.readBool(14, &m_audioStereo, false);
|
||||||
d.readS32(15, &m_fmDeviation, 2500);
|
d.readS32(15, &m_fmDeviation, 2500);
|
||||||
d.readS32(16, &s32tmp, -60);
|
d.readS32(16, &m_squelchdB, -60);
|
||||||
m_squelch = s32tmp * 1.0;
|
d.readS32(17, &m_squelchGate, 5);
|
||||||
d.readS32(17, &s32tmp, 5);
|
|
||||||
m_squelchGate = s32tmp / 100.0;
|
|
||||||
d.readBool(18, &m_agc, false);
|
d.readBool(18, &m_agc, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -47,8 +47,8 @@ struct UDPSrcSettings
|
|||||||
int m_fmDeviation;
|
int m_fmDeviation;
|
||||||
bool m_channelMute;
|
bool m_channelMute;
|
||||||
float m_gain;
|
float m_gain;
|
||||||
float m_squelch; //!< squared magnitude
|
int m_squelchdB; //!< power dB
|
||||||
float m_squelchGate; //!< seconds
|
int m_squelchGate; //!< 100ths seconds
|
||||||
bool m_squelchEnabled;
|
bool m_squelchEnabled;
|
||||||
bool m_agc;
|
bool m_agc;
|
||||||
bool m_audioActive;
|
bool m_audioActive;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user