From 0f5c055eca5aaaba42f5989d5c4b4198dfd53ce3 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 5 Feb 2017 13:26:07 +0100 Subject: [PATCH] New scope: interim state (8) --- sdrbase/dsp/scopevisng.cpp | 3 ++ sdrbase/gui/glscopeng.cpp | 8 +++++ sdrbase/gui/glscopeng.h | 1 + sdrbase/gui/glscopenggui.cpp | 69 ++++++++++++++++++++++++++++++++---- sdrbase/gui/glscopenggui.h | 5 +++ sdrbase/gui/glscopenggui.ui | 4 +-- 6 files changed, 81 insertions(+), 9 deletions(-) diff --git a/sdrbase/dsp/scopevisng.cpp b/sdrbase/dsp/scopevisng.cpp index df9c3d2a6..a572088d0 100644 --- a/sdrbase/dsp/scopevisng.cpp +++ b/sdrbase/dsp/scopevisng.cpp @@ -78,6 +78,7 @@ void ScopeVisNG::addTrace(const TraceData& traceData) void ScopeVisNG::changeTrace(const TraceData& traceData, uint32_t traceIndex) { + qDebug("ScopeVisNG::changeTrace: trace #%d", traceIndex); Message* cmd = MsgScopeVisNGChangeTrace::create(traceData, traceIndex); getInputMessageQueue()->push(cmd); } @@ -472,6 +473,8 @@ bool ScopeVisNG::handleMessage(const Message& message) m_traces[traceIndex].setData(conf.getTraceData()); } + m_glScope->updateDisplay(); + return true; } else if (MsgScopeVisNGRemoveTrace::match(message)) diff --git a/sdrbase/gui/glscopeng.cpp b/sdrbase/gui/glscopeng.cpp index 86003f383..141031033 100644 --- a/sdrbase/gui/glscopeng.cpp +++ b/sdrbase/gui/glscopeng.cpp @@ -67,6 +67,7 @@ void GLScopeNG::addTrace(ScopeVisNG::DisplayTrace *trace) { m_traces.push_back(trace); m_configChanged = true; + update(); } void GLScopeNG::removeTrace(int index) @@ -76,6 +77,7 @@ void GLScopeNG::removeTrace(int index) } m_configChanged = true; + update(); } void GLScopeNG::setDisplayGridIntensity(int intensity) @@ -373,6 +375,12 @@ void GLScopeNG::setTraceSize(int traceSize) update(); } +void GLScopeNG::updateDisplay() +{ + m_configChanged = true; + update(); +} + void GLScopeNG::applyConfig() { m_configChanged = false; diff --git a/sdrbase/gui/glscopeng.h b/sdrbase/gui/glscopeng.h index be7b2afb9..bc7a333c6 100644 --- a/sdrbase/gui/glscopeng.h +++ b/sdrbase/gui/glscopeng.h @@ -65,6 +65,7 @@ public: void setHighlightedTraceIndex(uint32_t traceIndex); void setDisplayMode(DisplayMode displayMode); void setTraceSize(int trceSize); + void updateDisplay(); void setDisplayGridIntensity(int intensity); void setDisplayTraceIntensity(int intensity); diff --git a/sdrbase/gui/glscopenggui.cpp b/sdrbase/gui/glscopenggui.cpp index 0b6472642..08397e7ca 100644 --- a/sdrbase/gui/glscopenggui.cpp +++ b/sdrbase/gui/glscopenggui.cpp @@ -33,14 +33,9 @@ GLScopeNGGUI::GLScopeNGGUI(QWidget* parent) : m_timeBase(1), m_timeOffset(0) { - ui->setupUi(this); + qDebug("GLScopeNGGUI::GLScopeNGGUI"); setEnabled(false); - - ui->traceMode->clear(); - fillProjectionCombo(ui->traceMode); - - ui->trigMode->clear(); - fillProjectionCombo(ui->trigMode); + ui->setupUi(this); } GLScopeNGGUI::~GLScopeNGGUI() @@ -50,6 +45,8 @@ GLScopeNGGUI::~GLScopeNGGUI() void GLScopeNGGUI::setBuddies(MessageQueue* messageQueue, ScopeVisNG* scopeVis, GLScopeNG* glScope) { + qDebug("GLScopeNGGUI::setBuddies"); + m_messageQueue = messageQueue; m_scopeVis = scopeVis; m_glScope = glScope; @@ -81,12 +78,19 @@ void GLScopeNGGUI::setBuddies(MessageQueue* messageQueue, ScopeVisNG* scopeVis, setEnabled(true); connect(m_glScope, SIGNAL(sampleRateChanged(int)), this, SLOT(on_scope_sampleRateChanged(int))); + ui->traceMode->clear(); + fillProjectionCombo(ui->traceMode); + + ui->trigMode->clear(); + fillProjectionCombo(ui->trigMode); + m_scopeVis->configure(2*m_traceLenMult*ScopeVisNG::m_traceChunkSize, m_timeOffset*10); m_scopeVis->configure(m_traceLenMult*ScopeVisNG::m_traceChunkSize, m_timeOffset*10); setTraceLenDisplay(); setTimeScaleDisplay(); setTimeOfsDisplay(); + setAmpScaleDisplay(); } void GLScopeNGGUI::setSampleRate(int sampleRate) @@ -237,6 +241,18 @@ void GLScopeNGGUI::on_traceLen_valueChanged(int value) setTimeOfsDisplay(); } +void GLScopeNGGUI::on_traceMode_currentIndexChanged(int index) +{ + setAmpScaleDisplay(); + changeCurrentTrace(); +} + +void GLScopeNGGUI::on_amp_valueChanged(int value) +{ + setAmpScaleDisplay(); + changeCurrentTrace(); +} + void GLScopeNGGUI::setTimeScaleDisplay() { m_sampleRate = m_glScope->getSampleRate(); @@ -303,6 +319,45 @@ void GLScopeNGGUI::setTimeOfsDisplay() ui->timeOfsText->setText(tr("%1\ns").arg(dt * 1.0)); } +void GLScopeNGGUI::setAmpScaleDisplay() +{ + ScopeVisNG::ProjectionType projectionType = (ScopeVisNG::ProjectionType) ui->traceMode->currentIndex(); + float ampValue = amps[ui->amp->value()]; + + if (projectionType == ScopeVisNG::ProjectionMagDB) + { + float displayValue = ampValue*500.0f; + + if (displayValue < 10.0f) { + ui->ampText->setText(tr("%1\ndB").arg(displayValue, 0, 'f', 2)); + } + else { + ui->ampText->setText(tr("%1\ndB").arg(displayValue, 0, 'f', 1)); + } + } + else + { + qreal a = ampValue*10.0f; + + if(a < 0.000001) + ui->ampText->setText(tr("%1\nn").arg(a * 1000000000.0)); + else if(a < 0.001) + ui->ampText->setText(tr("%1\nµ").arg(a * 1000000.0)); + else if(a < 1.0) + ui->ampText->setText(tr("%1\nm").arg(a * 1000.0)); + else + ui->ampText->setText(tr("%1").arg(a * 1.0)); + } +} + +void GLScopeNGGUI::changeCurrentTrace() +{ + ScopeVisNG::TraceData traceData; + fillTraceData(traceData); + uint32_t currentTraceIndex = ui->trace->value(); + m_scopeVis->changeTrace(traceData, currentTraceIndex); +} + void GLScopeNGGUI::fillProjectionCombo(QComboBox* comboBox) { comboBox->addItem("Real", ScopeVisNG::ProjectionReal); diff --git a/sdrbase/gui/glscopenggui.h b/sdrbase/gui/glscopenggui.h index d8f86aea3..c2f1160c2 100644 --- a/sdrbase/gui/glscopenggui.h +++ b/sdrbase/gui/glscopenggui.h @@ -67,6 +67,9 @@ private: void setTimeScaleDisplay(); void setTraceLenDisplay(); void setTimeOfsDisplay(); + void setAmpScaleDisplay(); + + void changeCurrentTrace(); void fillTraceData(ScopeVisNG::TraceData& traceData); void fillTriggerData(ScopeVisNG::TriggerData& triggerData); @@ -85,6 +88,8 @@ private slots: void on_time_valueChanged(int value); void on_timeOfs_valueChanged(int value); void on_traceLen_valueChanged(int value); + void on_traceMode_currentIndexChanged(int index); + void on_amp_valueChanged(int value); }; diff --git a/sdrbase/gui/glscopenggui.ui b/sdrbase/gui/glscopenggui.ui index 987d7b820..1f00ea483 100644 --- a/sdrbase/gui/glscopenggui.ui +++ b/sdrbase/gui/glscopenggui.ui @@ -643,7 +643,7 @@ kS/s - 56 + 65 16777215 @@ -1149,7 +1149,7 @@ kS/s - 56 + 65 16777215