1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-23 00:18:37 -05:00

TCP source: GUI and source separation phase 1

This commit is contained in:
f4exb 2017-10-07 12:55:17 +02:00
parent 6e7deef7e0
commit d3fc8396dd
4 changed files with 58 additions and 27 deletions

View File

@ -16,9 +16,13 @@
#include "tcpsrc.h" #include "tcpsrc.h"
#include <dsp/downchannelizer.h>
#include <QTcpServer> #include <QTcpServer>
#include <QTcpSocket> #include <QTcpSocket>
#include <dsp/downchannelizer.h>
#include "dsp/threadedbasebandsamplesink.h"
#include <device/devicesourceapi.h>
#include "tcpsrcgui.h" #include "tcpsrcgui.h"
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgConfigureTCPSrc, Message) MESSAGE_CLASS_DEFINITION(TCPSrc::MsgConfigureTCPSrc, Message)
@ -26,7 +30,8 @@ MESSAGE_CLASS_DEFINITION(TCPSrc::MsgConfigureChannelizer, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConnection, Message) MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConnection, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcSpectrum, Message) MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcSpectrum, Message)
TCPSrc::TCPSrc(BasebandSampleSink* spectrum) : TCPSrc::TCPSrc(DeviceSourceAPI* deviceAPI) :
m_deviceAPI(deviceAPI),
m_settingsMutex(QMutex::Recursive) m_settingsMutex(QMutex::Recursive)
{ {
setObjectName("TCPSrc"); setObjectName("TCPSrc");
@ -40,7 +45,7 @@ TCPSrc::TCPSrc(BasebandSampleSink* spectrum) :
m_nco.setFreq(0, m_inputSampleRate); m_nco.setFreq(0, m_inputSampleRate);
m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0); m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0);
m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate; m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
m_spectrum = spectrum; m_spectrum = 0;
m_spectrumEnabled = false; m_spectrumEnabled = false;
m_nextSSBId = 0; m_nextSSBId = 0;
m_nextS16leId = 0; m_nextS16leId = 0;
@ -50,6 +55,11 @@ TCPSrc::TCPSrc(BasebandSampleSink* spectrum) :
m_scale = 0; m_scale = 0;
m_volume = 0; m_volume = 0;
m_magsq = 0; m_magsq = 0;
m_channelizer = new DownChannelizer(this);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
m_sampleBufferSSB.resize(tcpFftLen); m_sampleBufferSSB.resize(tcpFftLen);
TCPFilter = new fftfilt(0.3 / 48.0, 16.0 / 48.0, tcpFftLen); TCPFilter = new fftfilt(0.3 / 48.0, 16.0 / 48.0, tcpFftLen);
// if (!TCPFilter) segfault; // if (!TCPFilter) segfault;
@ -58,6 +68,10 @@ TCPSrc::TCPSrc(BasebandSampleSink* spectrum) :
TCPSrc::~TCPSrc() TCPSrc::~TCPSrc()
{ {
if (TCPFilter) delete TCPFilter; if (TCPFilter) delete TCPFilter;
m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer;
delete m_channelizer;
} }
void TCPSrc::setSpectrum(MessageQueue* messageQueue, bool enabled) void TCPSrc::setSpectrum(MessageQueue* messageQueue, bool enabled)
@ -172,8 +186,6 @@ void TCPSrc::stop()
bool TCPSrc::handleMessage(const Message& cmd) bool TCPSrc::handleMessage(const Message& cmd)
{ {
qDebug() << "TCPSrc::handleMessage";
if (DownChannelizer::MsgChannelizerNotification::match(cmd)) if (DownChannelizer::MsgChannelizerNotification::match(cmd))
{ {
DownChannelizer::MsgChannelizerNotification& notif = (DownChannelizer::MsgChannelizerNotification&) cmd; DownChannelizer::MsgChannelizerNotification& notif = (DownChannelizer::MsgChannelizerNotification&) cmd;
@ -192,6 +204,20 @@ bool TCPSrc::handleMessage(const Message& cmd)
return true; return true;
} }
else if (MsgConfigureChannelizer::match(cmd))
{
MsgConfigureChannelizer& cfg = (MsgConfigureChannelizer&) cmd;
m_channelizer->configure(m_channelizer->getInputMessageQueue(),
cfg.getSampleRate(),
cfg.getCenterFrequency());
qDebug() << "TCPSrc::handleMessage: MsgConfigureChannelizer:"
<< " sampleRate: " << cfg.getSampleRate()
<< " centerFrequency: " << cfg.getCenterFrequency();
return true;
}
else if (MsgConfigureTCPSrc::match(cmd)) else if (MsgConfigureTCPSrc::match(cmd))
{ {
MsgConfigureTCPSrc& cfg = (MsgConfigureTCPSrc&) cmd; MsgConfigureTCPSrc& cfg = (MsgConfigureTCPSrc&) cmd;
@ -235,7 +261,7 @@ bool TCPSrc::handleMessage(const Message& cmd)
m_settingsMutex.unlock(); m_settingsMutex.unlock();
qDebug() << "MsgConfigureTCPSrc::handleMessage: MsgConfigureTCPSrc:" qDebug() << "TCPSrc::handleMessage: MsgConfigureTCPSrc:"
<< " m_sampleFormat: " << m_sampleFormat << " m_sampleFormat: " << m_sampleFormat
<< " m_outputSampleRate: " << m_outputSampleRate << " m_outputSampleRate: " << m_outputSampleRate
<< " m_rfBandwidth: " << m_rfBandwidth << " m_rfBandwidth: " << m_rfBandwidth
@ -251,7 +277,7 @@ bool TCPSrc::handleMessage(const Message& cmd)
m_spectrumEnabled = spc.getEnabled(); m_spectrumEnabled = spc.getEnabled();
qDebug() << " - MsgTCPSrcSpectrum: m_spectrumEnabled: " << m_spectrumEnabled; qDebug() << "TCPSrc::handleMessage: MsgTCPSrcSpectrum: m_spectrumEnabled: " << m_spectrumEnabled;
return true; return true;
} }
@ -259,6 +285,12 @@ bool TCPSrc::handleMessage(const Message& cmd)
{ {
MsgTCPSrcConnection& con = (MsgTCPSrcConnection&) cmd; MsgTCPSrcConnection& con = (MsgTCPSrcConnection&) cmd;
qDebug() << "TCPSrc::handleMessage: MsgTCPSrcConnection"
<< " connect: " << con.getConnect()
<< " id: " << con.getID()
<< " peer address: " << con.getPeerAddress()
<< " peer port: " << con.getPeerPort();
if (con.getConnect()) if (con.getConnect())
{ {
processNewConnection(); processNewConnection();

View File

@ -17,6 +17,9 @@
class QTcpServer; class QTcpServer;
class QTcpSocket; class QTcpSocket;
class TCPSrcGUI; class TCPSrcGUI;
class DeviceSourceAPI;
class ThreadedBasebandSampleSink;
class DownChannelizer;
class TCPSrc : public BasebandSampleSink { class TCPSrc : public BasebandSampleSink {
Q_OBJECT Q_OBJECT
@ -98,8 +101,9 @@ public:
{ } { }
}; };
TCPSrc(BasebandSampleSink* spectrum); TCPSrc(DeviceSourceAPI* m_deviceAPI);
virtual ~TCPSrc(); virtual ~TCPSrc();
void setSpectrum(BasebandSampleSink* spectrum) { m_spectrum = spectrum; }
void setSpectrum(MessageQueue* messageQueue, bool enabled); void setSpectrum(MessageQueue* messageQueue, bool enabled);
double getMagSq() const { return m_magsq; } double getMagSq() const { return m_magsq; }
@ -150,6 +154,9 @@ protected:
}; };
TCPSrcSettings m_settings; TCPSrcSettings m_settings;
DeviceSourceAPI* m_deviceAPI;
ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer;
int m_inputSampleRate; int m_inputSampleRate;

View File

@ -1,8 +1,6 @@
#include "../../channelrx/tcpsrc/tcpsrcgui.h" #include "tcpsrcgui.h"
#include <device/devicesourceapi.h> #include <device/devicesourceapi.h>
#include <dsp/downchannelizer.h>
#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h"
#include "plugin/pluginapi.h" #include "plugin/pluginapi.h"
#include "dsp/spectrumvis.h" #include "dsp/spectrumvis.h"
#include "dsp/dspengine.h" #include "dsp/dspengine.h"
@ -11,7 +9,7 @@
#include "gui/basicchannelsettingswidget.h" #include "gui/basicchannelsettingswidget.h"
#include "ui_tcpsrcgui.h" #include "ui_tcpsrcgui.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "../../channelrx/tcpsrc/tcpsrc.h" #include "tcpsrc.h"
const QString TCPSrcGUI::m_channelID = "sdrangel.channel.tcpsrc"; const QString TCPSrcGUI::m_channelID = "sdrangel.channel.tcpsrc";
@ -142,10 +140,8 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidget*
setAttribute(Qt::WA_DeleteOnClose, true); setAttribute(Qt::WA_DeleteOnClose, true);
m_spectrumVis = new SpectrumVis(ui->glSpectrum); m_spectrumVis = new SpectrumVis(ui->glSpectrum);
m_tcpSrc = new TCPSrc(m_spectrumVis); m_tcpSrc = new TCPSrc(m_deviceAPI);
m_channelizer = new DownChannelizer(m_tcpSrc); m_tcpSrc->setSpectrum(m_spectrumVis);
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03)));
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
@ -174,15 +170,15 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidget*
ui->spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, ui->glSpectrum); ui->spectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, ui->glSpectrum);
applySettings(); m_settings.setSpectrumGUI(ui->spectrumGUI);
m_settings.setChannelMarker(&m_channelMarker);
applySettings();
} }
TCPSrcGUI::~TCPSrcGUI() TCPSrcGUI::~TCPSrcGUI()
{ {
m_deviceAPI->removeChannelInstance(this); m_deviceAPI->removeChannelInstance(this);
m_deviceAPI->removeThreadedSink(m_threadedChannelizer);
delete m_threadedChannelizer;
delete m_channelizer;
delete m_tcpSrc; delete m_tcpSrc;
delete m_spectrumVis; delete m_spectrumVis;
delete ui; delete ui;
@ -199,9 +195,9 @@ void TCPSrcGUI::applySettings()
{ {
ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate); ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate);
m_channelizer->configure(m_channelizer->getInputMessageQueue(), TCPSrc::MsgConfigureChannelizer* channelConfigMsg = TCPSrc::MsgConfigureChannelizer::create(
m_settings.m_outputSampleRate, m_settings.m_outputSampleRate, m_channelMarker.getCenterFrequency());
m_channelMarker.getCenterFrequency()); m_tcpSrc->getInputMessageQueue()->push(channelConfigMsg);
TCPSrc::MsgConfigureTCPSrc* message = TCPSrc::MsgConfigureTCPSrc::create( m_settings, false); TCPSrc::MsgConfigureTCPSrc* message = TCPSrc::MsgConfigureTCPSrc::create( m_settings, false);
m_tcpSrc->getInputMessageQueue()->push(message); m_tcpSrc->getInputMessageQueue()->push(message);

View File

@ -14,8 +14,6 @@
class PluginAPI; class PluginAPI;
class DeviceSourceAPI; class DeviceSourceAPI;
class ThreadedBasebandSampleSink;
class DownChannelizer;
class TCPSrc; class TCPSrc;
class SpectrumVis; class SpectrumVis;
@ -76,8 +74,6 @@ private:
bool m_doApplySettings; bool m_doApplySettings;
// RF path // RF path
ThreadedBasebandSampleSink* m_threadedChannelizer;
DownChannelizer* m_channelizer;
SpectrumVis* m_spectrumVis; SpectrumVis* m_spectrumVis;
MessageQueue m_inputMessageQueue; MessageQueue m_inputMessageQueue;