1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-10-01 01:06:35 -04:00

DSD demod plugin: added scope window on discriminator output

This commit is contained in:
f4exb 2016-04-07 19:54:26 +02:00
parent d4cd66f433
commit 93b0b91f79
3 changed files with 51 additions and 61 deletions

View File

@ -41,7 +41,7 @@ DSDDemod::DSDDemod(SampleSink* sampleSink) :
m_fmExcursion(24), m_fmExcursion(24),
m_settingsMutex(QMutex::Recursive), m_settingsMutex(QMutex::Recursive),
m_scope(sampleSink), m_scope(sampleSink),
m_scopeEnabled(false) m_scopeEnabled(true)
{ {
setObjectName("DSDDemod"); setObjectName("DSDDemod");
@ -113,7 +113,7 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
m_AGC.feed(ci); m_AGC.feed(ci);
Real demod = m_phaseDiscri.phaseDiscriminator(ci); Real demod = 32768.0f * m_phaseDiscri.phaseDiscriminator(ci) * ((float) m_running.m_demodGain / 100.0f);
m_sampleCount++; m_sampleCount++;
// AF processing // AF processing
@ -144,21 +144,21 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
Sample s(demod, 0.0); Sample s(demod, 0.0);
m_scopeSampleBuffer.push_back(s); m_scopeSampleBuffer.push_back(s);
// m_audioBuffer[m_audioBufferFill].l = sample; m_audioBuffer[m_audioBufferFill].l = sample;
// m_audioBuffer[m_audioBufferFill].r = sample; m_audioBuffer[m_audioBufferFill].r = sample;
// ++m_audioBufferFill; ++m_audioBufferFill;
//
// if (m_audioBufferFill >= m_audioBuffer.size()) if (m_audioBufferFill >= m_audioBuffer.size())
// { {
// uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10); uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10);
//
// if (res != m_audioBufferFill) if (res != m_audioBufferFill)
// { {
// qDebug("DSDDemod::feed: %u/%u audio samples written", res, m_audioBufferFill); qDebug("DSDDemod::feed: %u/%u audio samples written", res, m_audioBufferFill);
// } }
//
// m_audioBufferFill = 0; m_audioBufferFill = 0;
// } }
m_interpolatorDistanceRemain += m_interpolatorDistance; m_interpolatorDistanceRemain += m_interpolatorDistance;
} }

View File

@ -1,13 +1,11 @@
#include <QDockWidget> #include <QDockWidget>
#include <QMainWindow> #include <QMainWindow>
#include <QDebug> #include <QDebug>
#include "dsddemodgui.h"
#include "ui_dsddemodgui.h" #include "ui_dsddemodgui.h"
#include "dsp/threadedsamplesink.h" #include "dsp/threadedsamplesink.h"
#include "dsp/channelizer.h" #include "dsp/channelizer.h"
#include "dsp/scopevis.h" #include "dsp/scopevis.h"
#include "dsddemod.h" #include "gui/glscope.h"
#include "dsp/nullsink.h"
#include "plugin/pluginapi.h" #include "plugin/pluginapi.h"
#include "util/simpleserializer.h" #include "util/simpleserializer.h"
#include "util/db.h" #include "util/db.h"
@ -15,6 +13,9 @@
#include "dsp/dspengine.h" #include "dsp/dspengine.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "dsddemod.h"
#include "dsddemodgui.h"
DSDDemodGUI* DSDDemodGUI::create(PluginAPI* pluginAPI) DSDDemodGUI* DSDDemodGUI::create(PluginAPI* pluginAPI)
{ {
DSDDemodGUI* gui = new DSDDemodGUI(pluginAPI); DSDDemodGUI* gui = new DSDDemodGUI(pluginAPI);
@ -74,6 +75,7 @@ QByteArray DSDDemodGUI::serialize() const
s.writeU32(7, m_channelMarker.getColor().rgb()); s.writeU32(7, m_channelMarker.getColor().rgb());
s.writeS32(8, ui->squelchGate->value()); s.writeS32(8, ui->squelchGate->value());
s.writeS32(9, ui->volume->value()); s.writeS32(9, ui->volume->value());
s.writeBlob(10, ui->scopeGUI->serialize());
return s.final(); return s.final();
} }
@ -117,6 +119,8 @@ bool DSDDemodGUI::deserialize(const QByteArray& data)
ui->squelchGate->setValue(tmp); ui->squelchGate->setValue(tmp);
d.readS32(9, &tmp, 20); d.readS32(9, &tmp, 20);
ui->volume->setValue(tmp); ui->volume->setValue(tmp);
d.readBlob(10, &bytetmp);
ui->scopeGUI->deserialize(bytetmp);
blockApplySettings(false); blockApplySettings(false);
m_channelMarker.blockSignals(false); m_channelMarker.blockSignals(false);
@ -242,6 +246,9 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
m_dsdDemod = new DSDDemod(m_scopeVis); m_dsdDemod = new DSDDemod(m_scopeVis);
m_dsdDemod->registerGUI(this); m_dsdDemod->registerGUI(this);
ui->glScope->setSampleRate(48000);
m_scopeVis->setSampleRate(48000);
ui->glScope->connectTimer(m_pluginAPI->getMainWindow()->getMasterTimer()); ui->glScope->connectTimer(m_pluginAPI->getMainWindow()->getMasterTimer());
connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick()));

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>503</width> <width>503</width>
<height>506</height> <height>898</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -234,7 +234,7 @@
<number>50</number> <number>50</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>150</number> <number>200</number>
</property> </property>
<property name="pageStep"> <property name="pageStep">
<number>1</number> <number>1</number>
@ -525,50 +525,33 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="scopeContainer" native="true"> <widget class="QWidget" name="verticalWidget" native="true">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>10</x>
<y>180</y> <y>180</y>
<width>501</width> <width>481</width>
<height>291</height> <height>651</height>
</rect> </rect>
</property> </property>
<widget class="GLScope" name="glScope" native="true"> <property name="windowTitle">
<property name="geometry"> <string>Discriminator Scope</string>
<rect> </property>
<x>0</x> <layout class="QVBoxLayout" name="scopeContainer">
<y>0</y> <item>
<width>491</width> <widget class="GLScope" name="glScope" native="true">
<height>250</height> <property name="minimumSize">
</rect> <size>
</property> <width>200</width>
<property name="minimumSize"> <height>250</height>
<size> </size>
<width>200</width> </property>
<height>250</height> </widget>
</size> </item>
</property> <item>
<property name="font"> <widget class="GLScopeGUI" name="scopeGUI" native="true"/>
<font> </item>
<family>Monospace</family> </layout>
<pointsize>8</pointsize>
</font>
</property>
</widget>
<widget class="GLScopeGUI" name="scopeGUI" native="true">
<property name="geometry">
<rect>
<x>0</x>
<y>260</y>
<width>481</width>
<height>26</height>
</rect>
</property>
</widget>
</widget> </widget>
</widget> </widget>
<customwidgets> <customwidgets>