diff options
author | Christian Daniel <cd@maintech.de> | 2013-09-23 21:31:54 +0200 |
---|---|---|
committer | Christian Daniel <cd@maintech.de> | 2013-09-23 21:31:54 +0200 |
commit | 9fd7152f13157f88136a386779919ce57ac59e2b (patch) | |
tree | 749ea73a56a062b2893a181d5b99fa5dc766033e /plugins | |
parent | 69673c7a642ee532d43a40c9cd273c2015323d5e (diff) |
major rewrite and changes... far too many to put into individual commits
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/demod/CMakeLists.txt | 5 | ||||
-rw-r--r-- | plugins/demod/nfm/nfmdemod.cpp | 11 | ||||
-rw-r--r-- | plugins/demod/nfm/nfmdemodgui.cpp | 2 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/CMakeLists.txt | 47 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrc.cpp | 82 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrc.h | 66 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrcgui.cpp | 147 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrcgui.h | 59 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrcgui.ui | 198 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrcplugin.cpp | 55 | ||||
-rw-r--r-- | plugins/demod/tcpsrc/tcpsrcplugin.h | 29 | ||||
-rw-r--r-- | plugins/demod/tetra/tetrademodgui.cpp | 2 | ||||
-rw-r--r-- | plugins/samplesource/osmosdr/osmosdrgui.cpp | 7 | ||||
-rw-r--r-- | plugins/samplesource/osmosdr/osmosdrgui.h | 12 | ||||
-rw-r--r-- | plugins/samplesource/osmosdr/osmosdrgui.ui | 7 | ||||
-rw-r--r-- | plugins/samplesource/osmosdr/osmosdrplugin.cpp | 6 | ||||
-rw-r--r-- | plugins/samplesource/rtlsdr/rtlsdrgui.cpp | 7 | ||||
-rw-r--r-- | plugins/samplesource/rtlsdr/rtlsdrgui.h | 4 | ||||
-rw-r--r-- | plugins/samplesource/rtlsdr/rtlsdrplugin.cpp | 4 |
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; } |