summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorChristian Daniel <cd@maintech.de>2013-09-23 21:31:54 +0200
committerChristian Daniel <cd@maintech.de>2013-09-23 21:31:54 +0200
commit9fd7152f13157f88136a386779919ce57ac59e2b (patch)
tree749ea73a56a062b2893a181d5b99fa5dc766033e /plugins
parent69673c7a642ee532d43a40c9cd273c2015323d5e (diff)
major rewrite and changes... far too many to put into individual commits
Diffstat (limited to 'plugins')
-rw-r--r--plugins/demod/CMakeLists.txt5
-rw-r--r--plugins/demod/nfm/nfmdemod.cpp11
-rw-r--r--plugins/demod/nfm/nfmdemodgui.cpp2
-rw-r--r--plugins/demod/tcpsrc/CMakeLists.txt47
-rw-r--r--plugins/demod/tcpsrc/tcpsrc.cpp82
-rw-r--r--plugins/demod/tcpsrc/tcpsrc.h66
-rw-r--r--plugins/demod/tcpsrc/tcpsrcgui.cpp147
-rw-r--r--plugins/demod/tcpsrc/tcpsrcgui.h59
-rw-r--r--plugins/demod/tcpsrc/tcpsrcgui.ui198
-rw-r--r--plugins/demod/tcpsrc/tcpsrcplugin.cpp55
-rw-r--r--plugins/demod/tcpsrc/tcpsrcplugin.h29
-rw-r--r--plugins/demod/tetra/tetrademodgui.cpp2
-rw-r--r--plugins/samplesource/osmosdr/osmosdrgui.cpp7
-rw-r--r--plugins/samplesource/osmosdr/osmosdrgui.h12
-rw-r--r--plugins/samplesource/osmosdr/osmosdrgui.ui7
-rw-r--r--plugins/samplesource/osmosdr/osmosdrplugin.cpp6
-rw-r--r--plugins/samplesource/rtlsdr/rtlsdrgui.cpp7
-rw-r--r--plugins/samplesource/rtlsdr/rtlsdrgui.h4
-rw-r--r--plugins/samplesource/rtlsdr/rtlsdrplugin.cpp4
19 files changed, 722 insertions, 28 deletions
diff --git a/plugins/demod/CMakeLists.txt b/plugins/demod/CMakeLists.txt
index 78804e6..19c7962 100644
--- a/plugins/demod/CMakeLists.txt
+++ b/plugins/demod/CMakeLists.txt
@@ -1,4 +1,5 @@
project(demod)
-add_subdirectory(nfm)
-add_subdirectory(tetra)
+#add_subdirectory(nfm)
+add_subdirectory(tcpsrc)
+#add_subdirectory(tetra)
diff --git a/plugins/demod/nfm/nfmdemod.cpp b/plugins/demod/nfm/nfmdemod.cpp
index 6330a16..fde579b 100644
--- a/plugins/demod/nfm/nfmdemod.cpp
+++ b/plugins/demod/nfm/nfmdemod.cpp
@@ -58,8 +58,6 @@ void NFMDemod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBa
void NFMDemod::feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool firstOfBurst)
{
- size_t count = end - begin;
-
Complex ci;
bool consumed;
@@ -74,7 +72,7 @@ void NFMDemod::feed(SampleVector::const_iterator begin, SampleVector::const_iter
m_movingAverage.feed(ci.real() * ci.real() + ci.imag() * ci.imag());
if(m_movingAverage.average() >= m_squelchLevel)
- m_squelchState = m_sampleRate / 100;
+ m_squelchState = m_sampleRate / 50;
if(m_squelchState > 0) {
m_squelchState--;
@@ -89,8 +87,11 @@ void NFMDemod::feed(SampleVector::const_iterator begin, SampleVector::const_iter
m_audioBuffer[m_audioBufferFill].r = sample;
++m_audioBufferFill;
if(m_audioBufferFill >= m_audioBuffer.size()) {
- if(m_audioFifo->write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 0) != m_audioBufferFill)
- ;//qDebug("lost samples");
+ uint res = m_audioFifo->write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 1);
+ /*
+ if(res != m_audioBufferFill)
+ qDebug("lost %u samples", m_audioBufferFill - res);
+ */
m_audioBufferFill = 0;
}
}
diff --git a/plugins/demod/nfm/nfmdemodgui.cpp b/plugins/demod/nfm/nfmdemodgui.cpp
index a630dd4..d507cfd 100644
--- a/plugins/demod/nfm/nfmdemodgui.cpp
+++ b/plugins/demod/nfm/nfmdemodgui.cpp
@@ -139,7 +139,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QDockWidget* dockWidget, QWidget*
ui->glSpectrum->setCenterFrequency(0);
ui->glSpectrum->setSampleRate(44100);
ui->glSpectrum->setDisplayWaterfall(true);
- ui->glSpectrum->setDisplayLiveSpectrum(true);
+ ui->glSpectrum->setDisplayMaxHold(true);
m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris);
m_channelMarker = new ChannelMarker(this);
diff --git a/plugins/demod/tcpsrc/CMakeLists.txt b/plugins/demod/tcpsrc/CMakeLists.txt
new file mode 100644
index 0000000..df7c4d4
--- /dev/null
+++ b/plugins/demod/tcpsrc/CMakeLists.txt
@@ -0,0 +1,47 @@
+project(tcpsrc)
+
+set(tcpsrc_SOURCES
+ tcpsrc.cpp
+ tcpsrcgui.cpp
+ tcpsrcplugin.cpp
+)
+
+set(tcpsrc_HEADERS
+ tcpsrc.h
+ tcpsrcgui.h
+ tcpsrcplugin.h
+)
+
+set(tcpsrc_FORMS
+ tcpsrcgui.ui
+)
+
+include_directories(
+ .
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/include-gpl
+ ${OPENGL_INCLUDE_DIR}
+)
+
+#include(${QT_USE_FILE})
+add_definitions(${QT_DEFINITIONS})
+add_definitions(-DQT_PLUGIN)
+add_definitions(-DQT_SHARED)
+
+#qt5_wrap_cpp(tcpsrc_HEADERS_MOC ${tcpsrc_HEADERS})
+qt5_wrap_ui(tcpsrc_FORMS_HEADERS ${tcpsrc_FORMS})
+
+add_library(demodtcpsrc SHARED
+ ${tcpsrc_SOURCES}
+ ${tcpsrc_HEADERS_MOC}
+ ${tcpsrc_FORMS_HEADERS}
+)
+
+target_link_libraries(demodtcpsrc
+ ${QT_LIBRARIES}
+ ${OPENGL_LIBRARIES}
+ sdrbase
+)
+
+qt5_use_modules(demodtcpsrc Core Widgets OpenGL Network)
diff --git a/plugins/demod/tcpsrc/tcpsrc.cpp b/plugins/demod/tcpsrc/tcpsrc.cpp
new file mode 100644
index 0000000..6ed4194
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrc.cpp
@@ -0,0 +1,82 @@
+#include "tcpsrc.h"
+#include "dsp/dspcommands.h"
+
+MessageRegistrator TCPSrc::MsgConfigureTCPSrc::ID("MsgConfigureTCPSrc");
+
+TCPSrc::TCPSrc(SampleSink* spectrum)
+{
+ m_inputSampleRate = 100000;
+ m_sampleFormat = 0;
+ m_outputSampleRate = 50000;
+ m_rfBandwidth = 50000;
+ m_tcpPort = 9999;
+ m_nco.setFreq(0, m_inputSampleRate);
+ m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.1);
+ m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
+ m_spectrum = spectrum;
+}
+
+TCPSrc::~TCPSrc()
+{
+}
+
+void TCPSrc::configure(MessageQueue* messageQueue, int sampleFormat, Real outputSampleRate, Real rfBandwidth, int tcpPort)
+{
+ Message* cmd = MsgConfigureTCPSrc::create(sampleFormat, outputSampleRate, rfBandwidth, tcpPort);
+ cmd->submit(messageQueue, this);
+}
+
+void TCPSrc::feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool firstOfBurst)
+{
+ Complex ci;
+ bool consumed;
+
+ for(SampleVector::const_iterator it = begin; it < end; ++it) {
+ Complex c(it->real() / 32768.0, it->imag() / 32768.0);
+ c *= m_nco.nextIQ();
+
+ consumed = false;
+ if(m_interpolator.interpolate(&m_sampleDistanceRemain, c, &consumed, &ci)) {
+ m_sampleBuffer.push_back(Sample(ci.real() * 32768.0, ci.imag() * 32768.0));
+ m_sampleDistanceRemain += m_inputSampleRate / m_outputSampleRate;
+ }
+ }
+
+ if(m_spectrum != NULL)
+ m_spectrum->feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), firstOfBurst);
+ m_sampleBuffer.clear();
+}
+
+void TCPSrc::start()
+{
+}
+
+void TCPSrc::stop()
+{
+}
+
+bool TCPSrc::handleMessage(Message* cmd)
+{
+ if(cmd->id() == DSPSignalNotification::ID()) {
+ DSPSignalNotification* signal = (DSPSignalNotification*)cmd;
+ qDebug("%d samples/sec, %lld Hz offset", signal->getSampleRate(), signal->getFrequencyOffset());
+ m_inputSampleRate = signal->getSampleRate();
+ m_nco.setFreq(-signal->getFrequencyOffset(), m_inputSampleRate);
+ m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.1);
+ m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
+ cmd->completed();
+ return true;
+ } else if(cmd->id() == MsgConfigureTCPSrc::ID()) {
+ MsgConfigureTCPSrc* cfg = (MsgConfigureTCPSrc*)cmd;
+ m_sampleFormat = cfg->getSampleFormat();
+ m_outputSampleRate = cfg->getOutputSampleRate();
+ m_rfBandwidth = cfg->getRFBandwidth();
+ m_tcpPort = cfg->getTCPPort();
+ m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.1);
+ m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
+ cmd->completed();
+ return true;
+ } else {
+ return false;
+ }
+}
diff --git a/plugins/demod/tcpsrc/tcpsrc.h b/plugins/demod/tcpsrc/tcpsrc.h
new file mode 100644
index 0000000..895a555
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrc.h
@@ -0,0 +1,66 @@
+#ifndef INCLUDE_TCPSRC_H
+#define INCLUDE_TCPSRC_H
+
+#include "dsp/samplesink.h"
+#include "dsp/nco.h"
+#include "dsp/interpolator.h"
+#include "util/message.h"
+
+class TCPSrc : public SampleSink {
+public:
+ TCPSrc(SampleSink* spectrum);
+ ~TCPSrc();
+
+ void configure(MessageQueue* messageQueue, int sampleFormat, Real outputSampleRate, Real rfBandwidth, int tcpPort);
+
+ void feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool firstOfBurst);
+ void start();
+ void stop();
+ bool handleMessage(Message* cmd);
+
+protected:
+ class MsgConfigureTCPSrc : public Message {
+ public:
+ static MessageRegistrator ID;
+
+ int getSampleFormat() const { return m_sampleFormat; }
+ Real getOutputSampleRate() const { return m_outputSampleRate; }
+ Real getRFBandwidth() const { return m_rfBandwidth; }
+ int getTCPPort() const { return m_tcpPort; }
+
+ static MsgConfigureTCPSrc* create(int sampleFormat, Real sampleRate, Real rfBandwidth, int tcpPort)
+ {
+ return new MsgConfigureTCPSrc(sampleFormat, sampleRate, rfBandwidth, tcpPort);
+ }
+
+ private:
+ int m_sampleFormat;
+ Real m_outputSampleRate;
+ Real m_rfBandwidth;
+ int m_tcpPort;
+
+ MsgConfigureTCPSrc(int sampleFormat, Real outputSampleRate, Real rfBandwidth, int tcpPort) :
+ Message(ID()),
+ m_sampleFormat(sampleFormat),
+ m_outputSampleRate(outputSampleRate),
+ m_rfBandwidth(rfBandwidth),
+ m_tcpPort(tcpPort)
+ { }
+ };
+
+ int m_inputSampleRate;
+
+ int m_sampleFormat;
+ Real m_outputSampleRate;
+ Real m_rfBandwidth;
+ int m_tcpPort;
+
+ NCO m_nco;
+ Interpolator m_interpolator;
+ Real m_sampleDistanceRemain;
+
+ SampleVector m_sampleBuffer;
+ SampleSink* m_spectrum;
+};
+
+#endif // INCLUDE_TCPSRC_H
diff --git a/plugins/demod/tcpsrc/tcpsrcgui.cpp b/plugins/demod/tcpsrc/tcpsrcgui.cpp
new file mode 100644
index 0000000..3567d03
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrcgui.cpp
@@ -0,0 +1,147 @@
+#include "tcpsrcgui.h"
+#include "plugin/pluginapi.h"
+#include "tcpsrc.h"
+#include "dsp/channelizer.h"
+#include "dsp/spectrumvis.h"
+#include "dsp/threadedsamplesink.h"
+#include "ui_tcpsrcgui.h"
+
+TCPSrcGUI* TCPSrcGUI::create(PluginAPI* pluginAPI)
+{
+ TCPSrcGUI* gui = new TCPSrcGUI(pluginAPI);
+ return gui;
+}
+
+void TCPSrcGUI::destroy()
+{
+ delete this;
+}
+
+void TCPSrcGUI::setName(const QString& name)
+{
+ setObjectName(name);
+}
+
+void TCPSrcGUI::resetToDefaults()
+{
+ ui->sampleFormat->setCurrentIndex(0);
+ ui->sampleRate->setText("25000");
+ ui->rfBandwidth->setText("20000");
+ ui->tcpPort->setText("9999");
+ applySettings();
+}
+
+QByteArray TCPSrcGUI::serialize() const
+{
+ return QByteArray();
+}
+
+bool TCPSrcGUI::deserialize(const QByteArray& data)
+{
+ return false;
+}
+
+bool TCPSrcGUI::handleMessage(Message* message)
+{
+ return false;
+}
+
+void TCPSrcGUI::channelMarkerChanged()
+{
+ applySettings();
+}
+
+TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, QWidget* parent) :
+ RollupWidget(parent),
+ ui(new Ui::TCPSrcGUI),
+ m_pluginAPI(pluginAPI)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose, true);
+
+ m_spectrumVis = new SpectrumVis(ui->glSpectrum);
+ m_tcpSrc = new TCPSrc(m_spectrumVis);
+ m_channelizer = new Channelizer(m_tcpSrc);
+ m_threadedSampleSink = new ThreadedSampleSink(m_channelizer);
+ m_pluginAPI->addSampleSink(m_threadedSampleSink);
+
+ ui->glSpectrum->setCenterFrequency(0);
+ ui->glSpectrum->setSampleRate(ui->sampleRate->text().toInt());
+ ui->glSpectrum->setDisplayWaterfall(true);
+ ui->glSpectrum->setDisplayMaxHold(true);
+ m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris);
+
+ m_channelMarker = new ChannelMarker(this);
+ m_channelMarker->setColor(Qt::red);
+ m_channelMarker->setBandwidth(25000);
+ m_channelMarker->setCenterFrequency(0);
+ m_channelMarker->setVisible(true);
+ connect(m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged()));
+ m_pluginAPI->addChannelMarker(m_channelMarker);
+
+ applySettings();
+}
+
+TCPSrcGUI::~TCPSrcGUI()
+{
+ m_pluginAPI->removeChannelInstance(this);
+ delete ui;
+}
+
+void TCPSrcGUI::applySettings()
+{
+ bool ok;
+
+ Real outputSampleRate = ui->sampleRate->text().toDouble(&ok);
+ if((!ok) || (outputSampleRate < 100))
+ outputSampleRate = 25000;
+ Real rfBandwidth = ui->rfBandwidth->text().toDouble(&ok);
+ if((!ok) || (rfBandwidth > outputSampleRate))
+ rfBandwidth = outputSampleRate / 1.05;
+ int tcpPort = ui->tcpPort->text().toInt(&ok);
+ if((!ok) || (tcpPort < 1) || (tcpPort > 65535))
+ tcpPort = 9999;
+
+ ui->sampleRate->setText(QString("%1").arg(outputSampleRate, 0));
+ ui->rfBandwidth->setText(QString("%1").arg(rfBandwidth, 0));
+ ui->tcpPort->setText(QString("%1").arg(tcpPort));
+ m_channelMarker->setBandwidth(rfBandwidth);
+ ui->glSpectrum->setSampleRate(outputSampleRate);
+
+ m_channelizer->configure(m_threadedSampleSink->getMessageQueue(),
+ outputSampleRate,
+ m_channelMarker->getCenterFrequency());
+
+ m_tcpSrc->configure(m_threadedSampleSink->getMessageQueue(),
+ ui->sampleFormat->currentIndex(),
+ outputSampleRate,
+ rfBandwidth,
+ tcpPort);
+
+ ui->applyBtn->setEnabled(false);
+}
+
+void TCPSrcGUI::on_sampleFormat_currentIndexChanged(int index)
+{
+ ui->applyBtn->setEnabled(true);
+}
+
+void TCPSrcGUI::on_sampleRate_textEdited(const QString& arg1)
+{
+ ui->applyBtn->setEnabled(true);
+}
+
+void TCPSrcGUI::on_rfBandwidth_textEdited(const QString& arg1)
+{
+ ui->applyBtn->setEnabled(true);
+}
+
+void TCPSrcGUI::on_tcpPort_textEdited(const QString& arg1)
+{
+ ui->applyBtn->setEnabled(true);
+}
+
+void TCPSrcGUI::on_applyBtn_clicked()
+{
+ applySettings();
+}
diff --git a/plugins/demod/tcpsrc/tcpsrcgui.h b/plugins/demod/tcpsrc/tcpsrcgui.h
new file mode 100644
index 0000000..f65efe6
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrcgui.h
@@ -0,0 +1,59 @@
+#ifndef INCLUDE_TCPSRCGUI_H
+#define INCLUDE_TCPSRCGUI_H
+
+#include "gui/rollupwidget.h"
+#include "plugin/plugingui.h"
+
+class PluginAPI;
+class ChannelMarker;
+class ThreadedSampleSink;
+class Channelizer;
+class TCPSrc;
+class SpectrumVis;
+
+namespace Ui {
+ class TCPSrcGUI;
+}
+
+class TCPSrcGUI : public RollupWidget, public PluginGUI {
+ Q_OBJECT
+
+public:
+ static TCPSrcGUI* create(PluginAPI* pluginAPI);
+ void destroy();
+
+ void setName(const QString& name);
+
+ void resetToDefaults();
+ QByteArray serialize() const;
+ bool deserialize(const QByteArray& data);
+
+ bool handleMessage(Message* message);
+
+private slots:
+ void channelMarkerChanged();
+ void on_sampleFormat_currentIndexChanged(int index);
+ void on_sampleRate_textEdited(const QString& arg1);
+ void on_rfBandwidth_textEdited(const QString& arg1);
+ void on_tcpPort_textEdited(const QString& arg1);
+
+ void on_applyBtn_clicked();
+
+private:
+ Ui::TCPSrcGUI* ui;
+ PluginAPI* m_pluginAPI;
+ ChannelMarker* m_channelMarker;
+
+ // RF path
+ ThreadedSampleSink* m_threadedSampleSink;
+ Channelizer* m_channelizer;
+ TCPSrc* m_tcpSrc;
+ SpectrumVis* m_spectrumVis;
+
+ explicit TCPSrcGUI(PluginAPI* pluginAPI, QWidget* parent = NULL);
+ ~TCPSrcGUI();
+
+ void applySettings();
+};
+
+#endif // INCLUDE_TCPSRCGUI_H
diff --git a/plugins/demod/tcpsrc/tcpsrcgui.ui b/plugins/demod/tcpsrc/tcpsrcgui.ui
new file mode 100644
index 0000000..12cb079
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrcgui.ui
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TCPSrcGUI</class>
+ <widget class="RollupWidget" name="TCPSrcGUI">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>443</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>TCP Sample Source</string>
+ </property>
+ <widget class="QWidget" name="widget" native="true">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>5</y>
+ <width>201</width>
+ <height>142</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Settings</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Sample Format</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="tcpPort">
+ <property name="text">
+ <string>9999</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>RF Bandwidth</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="sampleRate">
+ <property name="text">
+ <string>25000</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="rfBandwidth">
+ <property name="text">
+ <string>20000</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Samplerate</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>TCP Port</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="sampleFormat">
+ <item>
+ <property name="text">
+ <string>S8 I/Q</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>S16LE I/Q</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QPushButton" name="applyBtn">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="widget_3" native="true">
+ <property name="geometry">
+ <rect>
+ <x>15</x>
+ <y>160</y>
+ <width>231</width>
+ <height>156</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Channel Spectrum</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="GLSpectrum" name="glSpectrum" native="true"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="widget_2" native="true">
+ <property name="geometry">
+ <rect>
+ <x>15</x>
+ <y>330</y>
+ <width>274</width>
+ <height>101</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Connected Clients</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QTreeWidget" name="treeWidget">
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="itemsExpandable">
+ <bool>false</bool>
+ </property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>IP:Port</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>RollupWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/rollupwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>GLSpectrum</class>
+ <extends>QWidget</extends>
+ <header>gui/glspectrum.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <tabstops>
+ <tabstop>sampleFormat</tabstop>
+ <tabstop>sampleRate</tabstop>
+ <tabstop>rfBandwidth</tabstop>
+ <tabstop>tcpPort</tabstop>
+ <tabstop>applyBtn</tabstop>
+ <tabstop>treeWidget</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/plugins/demod/tcpsrc/tcpsrcplugin.cpp b/plugins/demod/tcpsrc/tcpsrcplugin.cpp
new file mode 100644
index 0000000..81b654b
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrcplugin.cpp
@@ -0,0 +1,55 @@
+#include <QtPlugin>
+#include <QAction>
+#include "plugin/pluginapi.h"
+#include "tcpsrcplugin.h"
+#include "tcpsrcgui.h"
+
+const PluginDescriptor TCPSrcPlugin::m_pluginDescriptor = {
+ QString("TCP Channel Source"),
+ QString("---"),
+ QString("(c) maintech GmbH (written by Christian Daniel)"),
+ QString("http://www.maintech.de"),
+ true,
+ QString("http://www.maintech.de")
+};
+
+TCPSrcPlugin::TCPSrcPlugin(QObject* parent) :
+ QObject(parent)
+{
+}
+
+const PluginDescriptor& TCPSrcPlugin::getPluginDescriptor() const
+{
+ return m_pluginDescriptor;
+}
+
+void TCPSrcPlugin::initPlugin(PluginAPI* pluginAPI)
+{
+ m_pluginAPI = pluginAPI;
+
+ // register TCP Channel Source
+ QAction* action = new QAction(tr("&TCP Source"), this);
+ connect(action, SIGNAL(triggered()), this, SLOT(createInstanceTCPSrc()));
+ m_pluginAPI->registerChannel("de.maintech.sdrangelove.channel.tcpsrc", this, action);
+}
+
+PluginGUI* TCPSrcPlugin::createChannel(const QString& channelName)
+{
+ if(channelName == "de.maintech.sdrangelove.channel.tcpsrc") {
+ TCPSrcGUI* gui = TCPSrcGUI::create(m_pluginAPI);
+ m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.tcpsrc", gui);
+ m_pluginAPI->addChannelRollup(gui);
+ return gui;
+ } else {
+ return NULL;
+ }
+}
+
+void TCPSrcPlugin::createInstanceTCPSrc()
+{
+ TCPSrcGUI* gui = TCPSrcGUI::create(m_pluginAPI);
+ m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.tcpsrc", gui);
+ m_pluginAPI->addChannelRollup(gui);
+ //m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.tcpsrc", TCPSrcGUI::create(m_pluginAPI));
+}
+
diff --git a/plugins/demod/tcpsrc/tcpsrcplugin.h b/plugins/demod/tcpsrc/tcpsrcplugin.h
new file mode 100644
index 0000000..984cd8f
--- /dev/null
+++ b/plugins/demod/tcpsrc/tcpsrcplugin.h
@@ -0,0 +1,29 @@
+#ifndef INCLUDE_TCPSRCPLUGIN_H
+#define INCLUDE_TCPSRCPLUGIN_H
+
+#include <QObject>
+#include "plugin/plugininterface.h"
+
+class TCPSrcPlugin : public QObject, PluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface)
+ Q_PLUGIN_METADATA(IID "de.maintech.sdrangelove.demod.tcpsrc")
+
+public:
+ explicit TCPSrcPlugin(QObject* parent = NULL);
+
+ const PluginDescriptor& getPluginDescriptor() const;
+ void initPlugin(PluginAPI* pluginAPI);
+
+ PluginGUI* createChannel(const QString& channelName);
+
+private:
+ static const PluginDescriptor m_pluginDescriptor;
+
+ PluginAPI* m_pluginAPI;
+
+private slots:
+ void createInstanceTCPSrc();
+};
+
+#endif // INCLUDE_TCPSRCPLUGIN_H
diff --git a/plugins/demod/tetra/tetrademodgui.cpp b/plugins/demod/tetra/tetrademodgui.cpp
index a0659b5..978f4f7 100644
--- a/plugins/demod/tetra/tetrademodgui.cpp
+++ b/plugins/demod/tetra/tetrademodgui.cpp
@@ -79,7 +79,7 @@ TetraDemodGUI::TetraDemodGUI(PluginAPI* pluginAPI, QDockWidget* dockWidget, QWid
ui->glSpectrum->setCenterFrequency(0);
ui->glSpectrum->setSampleRate(36000);
ui->glSpectrum->setDisplayWaterfall(true);
- ui->glSpectrum->setDisplayLiveSpectrum(true);
+ ui->glSpectrum->setDisplayMaxHold(true);
m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris);
m_channelMarker = new ChannelMarker(this);
diff --git a/plugins/samplesource/osmosdr/osmosdrgui.cpp b/plugins/samplesource/osmosdr/osmosdrgui.cpp
index ddaf4d3..3ecaa35 100644
--- a/plugins/samplesource/osmosdr/osmosdrgui.cpp
+++ b/plugins/samplesource/osmosdr/osmosdrgui.cpp
@@ -3,7 +3,7 @@
#include "plugin/pluginapi.h"
OsmoSDRGui::OsmoSDRGui(PluginAPI* pluginAPI, QWidget* parent) :
- PluginGUI(parent),
+ QWidget(parent),
ui(new Ui::OsmoSDRGui),
m_pluginAPI(pluginAPI),
m_settings(),
@@ -28,6 +28,11 @@ void OsmoSDRGui::destroy()
delete this;
}
+void OsmoSDRGui::setName(const QString& name)
+{
+ setObjectName(name);
+}
+
void OsmoSDRGui::resetToDefaults()
{
m_generalSettings.resetToDefaults();
diff --git a/plugins/samplesource/osmosdr/osmosdrgui.h b/plugins/samplesource/osmosdr/osmosdrgui.h
index 770b48e..f043653 100644
--- a/plugins/samplesource/osmosdr/osmosdrgui.h
+++ b/plugins/samplesource/osmosdr/osmosdrgui.h
@@ -11,7 +11,7 @@ namespace Ui {
class OsmoSDRGui;
}
-class OsmoSDRGui : public PluginGUI {
+class OsmoSDRGui : public QWidget, public PluginGUI {
Q_OBJECT
public:
@@ -19,6 +19,8 @@ public:
~OsmoSDRGui();
void destroy();
+ void setName(const QString& name);
+
void resetToDefaults();
QByteArray serializeGeneral() const;
bool deserializeGeneral(const QByteArray&data);
@@ -28,14 +30,6 @@ public:
bool handleMessage(Message* message);
private:
- /*
- Ui::OsmoSDRGui* ui;
-
- MessageQueue* m_msgQueue;
- OsmoSDRInput::Settings m_settings;
- QTimer m_updateTimer;
- */
-
Ui::OsmoSDRGui* ui;
PluginAPI* m_pluginAPI;
diff --git a/plugins/samplesource/osmosdr/osmosdrgui.ui b/plugins/samplesource/osmosdr/osmosdrgui.ui
index 1ad4a88..e618941 100644
--- a/plugins/samplesource/osmosdr/osmosdrgui.ui
+++ b/plugins/samplesource/osmosdr/osmosdrgui.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>253</width>
- <height>224</height>
+ <height>229</height>
</rect>
</property>
<property name="sizePolicy">
@@ -118,10 +118,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
- <enum>QSlider::TicksAbove</enum>
- </property>
- <property name="tickInterval">
- <number>1</number>
+ <enum>QSlider::TicksBelow</enum>
</property>
</widget>
</item>
diff --git a/plugins/samplesource/osmosdr/osmosdrplugin.cpp b/plugins/samplesource/osmosdr/osmosdrplugin.cpp
index a61e4c8..183642d 100644
--- a/plugins/samplesource/osmosdr/osmosdrplugin.cpp
+++ b/plugins/samplesource/osmosdr/osmosdrplugin.cpp
@@ -48,17 +48,21 @@ PluginInterface::SampleSourceDevices OsmoSDRPlugin::enumSampleSources()
if(osmosdr_get_device_usb_strings(i, vendor, product, serial) != 0)
continue;
QString displayedName(QString("OsmoSDR #%1 (#%2)").arg(i + 1).arg(serial));
+ qDebug("found %s", qPrintable(displayedName));
SimpleSerializer s(1);
s.writeS32(1, i);
result.append(SampleSourceDevice(displayedName, "org.osmocom.sdr.samplesource.osmo-sdr", s.final()));
}
+
return result;
}
PluginGUI* OsmoSDRPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.osmo-sdr") {
- return new OsmoSDRGui(m_pluginAPI);
+ OsmoSDRGui* gui = new OsmoSDRGui(m_pluginAPI);
+ m_pluginAPI->setInputGUI(gui);
+ return gui;
} else {
return NULL;
}
diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
index 7f933cf..c7024e2 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
+++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
@@ -3,7 +3,7 @@
#include "plugin/pluginapi.h"
RTLSDRGui::RTLSDRGui(PluginAPI* pluginAPI, QWidget* parent) :
- PluginGUI(parent),
+ QWidget(parent),
ui(new Ui::RTLSDRGui),
m_pluginAPI(pluginAPI),
m_settings(),
@@ -28,6 +28,11 @@ void RTLSDRGui::destroy()
delete this;
}
+void RTLSDRGui::setName(const QString& name)
+{
+ setObjectName(name);
+}
+
void RTLSDRGui::resetToDefaults()
{
m_generalSettings.resetToDefaults();
diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h
index 5a1944d..46b248b 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrgui.h
+++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h
@@ -11,7 +11,7 @@ namespace Ui {
class RTLSDRGui;
}
-class RTLSDRGui : public PluginGUI {
+class RTLSDRGui : public QWidget, public PluginGUI {
Q_OBJECT
public:
@@ -19,6 +19,8 @@ public:
~RTLSDRGui();
void destroy();
+ void setName(const QString& name);
+
void resetToDefaults();
QByteArray serializeGeneral() const;
bool deserializeGeneral(const QByteArray&data);
diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp
index 184a97a..785aa2d 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp
+++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp
@@ -58,7 +58,9 @@ PluginInterface::SampleSourceDevices RTLSDRPlugin::enumSampleSources()
PluginGUI* RTLSDRPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.rtl-sdr") {
- return new RTLSDRGui(m_pluginAPI);
+ RTLSDRGui* gui = new RTLSDRGui(m_pluginAPI);
+ m_pluginAPI->setInputGUI(gui);
+ return gui;
} else {
return NULL;
}