diff --git a/plugins/channelrx/tcpsrc/tcpsrc.cpp b/plugins/channelrx/tcpsrc/tcpsrc.cpp index 3fa8765be..e44b3f52e 100644 --- a/plugins/channelrx/tcpsrc/tcpsrc.cpp +++ b/plugins/channelrx/tcpsrc/tcpsrc.cpp @@ -21,7 +21,8 @@ #include #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; diff --git a/plugins/channelrx/tcpsrc/tcpsrc.h b/plugins/channelrx/tcpsrc/tcpsrc.h index 122130c71..db802d927 100644 --- a/plugins/channelrx/tcpsrc/tcpsrc.h +++ b/plugins/channelrx/tcpsrc/tcpsrc.h @@ -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; diff --git a/plugins/channelrx/tcpsrc/tcpsrcgui.cpp b/plugins/channelrx/tcpsrc/tcpsrcgui.cpp index 17e12bbbb..b3ea4565a 100644 --- a/plugins/channelrx/tcpsrc/tcpsrcgui.cpp +++ b/plugins/channelrx/tcpsrc/tcpsrcgui.cpp @@ -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); } }