1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-03 05:25:17 -05:00

TCP source: use settings in source

This commit is contained in:
f4exb 2017-10-07 10:44:58 +02:00
parent 8cc0f53635
commit 9c1d2e43b1
3 changed files with 100 additions and 142 deletions

View File

@ -21,7 +21,8 @@
#include <QTcpSocket>
#include "tcpsrcgui.h"
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConfigure, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgConfigureTCPSrc, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgConfigureChannelizer, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConnection, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcSpectrum, Message)
@ -49,7 +50,7 @@ TCPSrc::TCPSrc(MessageQueue* uiMessageQueue, TCPSrcGUI* tcpSrcGUI, BasebandSampl
m_last = 0;
m_this = 0;
m_scale = 0;
m_boost = 0;
m_volume = 0;
m_magsq = 0;
m_sampleBufferSSB.resize(tcpFftLen);
TCPFilter = new fftfilt(0.3 / 48.0, 16.0 / 48.0, tcpFftLen);
@ -61,12 +62,6 @@ TCPSrc::~TCPSrc()
if (TCPFilter) delete TCPFilter;
}
void TCPSrc::configure(MessageQueue* messageQueue, TCPSrcSettings::SampleFormat sampleFormat, Real outputSampleRate, Real rfBandwidth, int tcpPort, int boost)
{
Message* cmd = MsgTCPSrcConfigure::create(sampleFormat, outputSampleRate, rfBandwidth, tcpPort, boost);
messageQueue->push(cmd);
}
void TCPSrc::setSpectrum(MessageQueue* messageQueue, bool enabled)
{
Message* cmd = MsgTCPSrcSpectrum::create(enabled);
@ -85,7 +80,7 @@ void TCPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector:
// Rtl-Sdr uses full 16-bit scale; FCDPP does not
//int rescale = 32768 * (1 << m_boost);
int rescale = (1 << m_boost);
int rescale = (1 << m_volume);
for(SampleVector::const_iterator it = begin; it < end; ++it) {
//Complex c(it->real() / 32768.0f, it->imag() / 32768.0f);
@ -199,50 +194,59 @@ bool TCPSrc::handleMessage(const Message& cmd)
return true;
}
else if (MsgTCPSrcConfigure::match(cmd))
{
MsgTCPSrcConfigure& cfg = (MsgTCPSrcConfigure&) cmd;
else if (MsgConfigureTCPSrc::match(cmd))
{
MsgConfigureTCPSrc& cfg = (MsgConfigureTCPSrc&) cmd;
m_settingsMutex.lock();
TCPSrcSettings settings = cfg.getSettings();
m_sampleFormat = cfg.getSampleFormat();
m_outputSampleRate = cfg.getOutputSampleRate();
m_rfBandwidth = cfg.getRFBandwidth();
// These settings are set with DownChannelizer::MsgChannelizerNotification
settings.m_inputSampleRate = m_settings.m_inputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;
if (cfg.getTCPPort() != m_tcpPort)
{
m_tcpPort = cfg.getTCPPort();
m_settingsMutex.lock();
if(m_tcpServer->isListening())
{
m_tcpServer->close();
}
m_sampleFormat = settings.m_sampleFormat;
m_outputSampleRate = settings.m_outputSampleRate;
m_rfBandwidth = settings.m_rfBandwidth;
m_tcpServer->listen(QHostAddress::Any, m_tcpPort);
}
if (settings.m_tcpPort != m_tcpPort)
{
m_tcpPort = settings.m_tcpPort;
m_boost = cfg.getBoost();
m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0);
m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
if(m_tcpServer->isListening())
{
m_tcpServer->close();
}
if (m_sampleFormat == TCPSrcSettings::FormatSSB)
{
TCPFilter->create_filter(0.3 / 48.0, m_rfBandwidth / 2.0 / m_outputSampleRate);
}
else
{
TCPFilter->create_filter(0.0, m_rfBandwidth / 2.0 / m_outputSampleRate);
}
m_tcpServer->listen(QHostAddress::Any, m_tcpPort);
}
m_settingsMutex.unlock();
m_volume = settings.m_volume;
m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0);
m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
qDebug() << " - MsgTCPSrcConfigure: m_sampleFormat: " << m_sampleFormat
<< " m_outputSampleRate: " << m_outputSampleRate
<< " m_rfBandwidth: " << m_rfBandwidth
<< " m_boost: " << m_boost;
if (m_sampleFormat == TCPSrcSettings::FormatSSB)
{
TCPFilter->create_filter(0.3 / 48.0, m_rfBandwidth / 2.0 / m_outputSampleRate);
}
else
{
TCPFilter->create_filter(0.0, m_rfBandwidth / 2.0 / m_outputSampleRate);
}
return true;
}
m_settingsMutex.unlock();
qDebug() << "MsgConfigureTCPSrc::handleMessage: MsgConfigureTCPSrc:"
<< " m_sampleFormat: " << m_sampleFormat
<< " m_outputSampleRate: " << m_outputSampleRate
<< " m_rfBandwidth: " << m_rfBandwidth
<< " m_volume: " << m_volume;
m_settings = settings;
return true;
}
else if (MsgTCPSrcSpectrum::match(cmd))
{
MsgTCPSrcSpectrum& spc = (MsgTCPSrcSpectrum&) cmd;

View File

@ -22,10 +22,56 @@ class TCPSrc : public BasebandSampleSink {
Q_OBJECT
public:
class MsgConfigureTCPSrc : public Message {
MESSAGE_CLASS_DECLARATION
public:
const TCPSrcSettings& getSettings() const { return m_settings; }
bool getForce() const { return m_force; }
static MsgConfigureTCPSrc* create(const TCPSrcSettings& settings, bool force)
{
return new MsgConfigureTCPSrc(settings, force);
}
private:
TCPSrcSettings m_settings;
bool m_force;
MsgConfigureTCPSrc(const TCPSrcSettings& settings, bool force) :
Message(),
m_settings(settings),
m_force(force)
{
}
};
class MsgConfigureChannelizer : public Message {
MESSAGE_CLASS_DECLARATION
public:
int getSampleRate() const { return m_sampleRate; }
int getCenterFrequency() const { return m_centerFrequency; }
static MsgConfigureChannelizer* create(int sampleRate, int centerFrequency)
{
return new MsgConfigureChannelizer(sampleRate, centerFrequency);
}
private:
int m_sampleRate;
int m_centerFrequency;
MsgConfigureChannelizer(int sampleRate, int centerFrequency) :
Message(),
m_sampleRate(sampleRate),
m_centerFrequency(centerFrequency)
{ }
};
TCPSrc(MessageQueue* uiMessageQueue, TCPSrcGUI* tcpSrcGUI, BasebandSampleSink* spectrum);
virtual ~TCPSrc();
void configure(MessageQueue* messageQueue, TCPSrcSettings::SampleFormat sampleFormat, Real outputSampleRate, Real rfBandwidth, int tcpPort, int boost);
void setSpectrum(MessageQueue* messageQueue, bool enabled);
double getMagSq() const { return m_magsq; }
@ -64,37 +110,6 @@ public:
};
protected:
class MsgTCPSrcConfigure : public Message {
MESSAGE_CLASS_DECLARATION
public:
TCPSrcSettings::SampleFormat getSampleFormat() const { return m_sampleFormat; }
Real getOutputSampleRate() const { return m_outputSampleRate; }
Real getRFBandwidth() const { return m_rfBandwidth; }
int getTCPPort() const { return m_tcpPort; }
int getBoost() const { return m_boost; }
static MsgTCPSrcConfigure* create(TCPSrcSettings::SampleFormat sampleFormat, Real sampleRate, Real rfBandwidth, int tcpPort, int boost)
{
return new MsgTCPSrcConfigure(sampleFormat, sampleRate, rfBandwidth, tcpPort, boost);
}
private:
TCPSrcSettings::SampleFormat m_sampleFormat;
Real m_outputSampleRate;
Real m_rfBandwidth;
int m_tcpPort;
int m_boost;
MsgTCPSrcConfigure(TCPSrcSettings::SampleFormat sampleFormat, Real outputSampleRate, Real rfBandwidth, int tcpPort, int boost) :
Message(),
m_sampleFormat(sampleFormat),
m_outputSampleRate(outputSampleRate),
m_rfBandwidth(rfBandwidth),
m_tcpPort(tcpPort),
m_boost(boost)
{ }
};
class MsgTCPSrcSpectrum : public Message {
MESSAGE_CLASS_DECLARATION
@ -137,13 +152,15 @@ protected:
MessageQueue* m_uiMessageQueue;
TCPSrcGUI* m_tcpSrcGUI;
int m_inputSampleRate;
TCPSrcSettings m_settings;
int m_inputSampleRate;
int m_sampleFormat;
Real m_outputSampleRate;
Real m_rfBandwidth;
int m_tcpPort;
int m_boost;
int m_volume;
double m_magsq;
Real m_scale;

View File

@ -81,65 +81,6 @@ bool TCPSrcGUI::deserialize(const QByteArray& data)
resetToDefaults();
return false;
}
// SimpleDeserializer d(data);
//
// if (!d.isValid())
// {
// resetToDefaults();
// return false;
// }
//
// if (d.getVersion() == 1)
// {
// QByteArray bytetmp;
// qint32 s32tmp;
// Real realtmp;
//
// blockApplySettings(true);
// m_channelMarker.blockSignals(true);
//
// d.readS32(2, &s32tmp, 0);
// m_channelMarker.setCenterFrequency(s32tmp);
// d.readS32(3, &s32tmp, TCPSrcSettings::FormatSSB);
// switch(s32tmp) {
// case TCPSrcSettings::FormatSSB:
// ui->sampleFormat->setCurrentIndex(0);
// break;
// case TCPSrcSettings::FormatNFM:
// ui->sampleFormat->setCurrentIndex(1);
// break;
// case TCPSrcSettings::FormatS16LE:
// ui->sampleFormat->setCurrentIndex(2);
// 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.readS32(6, &s32tmp, 9999);
// ui->tcpPort->setText(QString("%1").arg(s32tmp));
// d.readBlob(7, &bytetmp);
// ui->spectrumGUI->deserialize(bytetmp);
// d.readS32(8, &s32tmp, 1);
// ui->volume->setValue(s32tmp);
// d.readS32(9, &s32tmp, 0);
// m_channelMarker.setCenterFrequency(s32tmp);
//
// blockApplySettings(false);
// m_channelMarker.blockSignals(false);
//
// applySettings();
// return true;
// }
// else
// {
// resetToDefaults();
// return false;
// }
}
bool TCPSrcGUI::handleMessage(const Message& message)
@ -264,12 +205,8 @@ void TCPSrcGUI::applySettings()
m_settings.m_outputSampleRate,
m_channelMarker.getCenterFrequency());
m_tcpSrc->configure(m_tcpSrc->getInputMessageQueue(),
m_settings.m_sampleFormat,
m_settings.m_outputSampleRate,
m_settings.m_rfBandwidth,
m_settings.m_tcpPort,
m_settings.m_volume);
TCPSrc::MsgConfigureTCPSrc* message = TCPSrc::MsgConfigureTCPSrc::create( m_settings, false);
m_tcpSrc->getInputMessageQueue()->push(message);
}
}