From 7f98710c1964d3d6ebf4cf6c1d7fbeaaf7e63ba7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 22 Jul 2015 01:06:42 +0200 Subject: [PATCH] Implemented variable scope trace length --- include-gpl/gui/glscopegui.h | 4 ++- sdrbase/gui/glscopegui.cpp | 49 +++++++++++++++++++++++++++++-- sdrbase/gui/glscopegui.ui | 57 ++++++++++++++++++++++++++++++++++-- 3 files changed, 105 insertions(+), 5 deletions(-) diff --git a/include-gpl/gui/glscopegui.h b/include-gpl/gui/glscopegui.h index ea6e211e3..5d5afbc4a 100644 --- a/include-gpl/gui/glscopegui.h +++ b/include-gpl/gui/glscopegui.h @@ -52,13 +52,14 @@ private: qint32 m_triggerLevel; // percent bool m_triggerPositiveEdge; qint32 m_triggerPre; - qint32 m_traceSize; + qint32 m_traceLenMult; static const qreal amps[11]; void applySettings(); void applyTriggerSettings(); void setTimeScaleDisplay(); + void setTraceLenDisplay(); void setTimeOfsDisplay(); void setAmpScaleDisplay(); void setAmpOfsDisplay(); @@ -71,6 +72,7 @@ private slots: void on_scope_traceSizeChanged(int value); void on_scope_sampleRateChanged(int value); void on_time_valueChanged(int value); + void on_traceLen_valueChanged(int value); void on_timeOfs_valueChanged(int value); void on_dataMode_currentIndexChanged(int index); void on_gridIntensity_valueChanged(int index); diff --git a/sdrbase/gui/glscopegui.cpp b/sdrbase/gui/glscopegui.cpp index 38cef493a..4237993f2 100644 --- a/sdrbase/gui/glscopegui.cpp +++ b/sdrbase/gui/glscopegui.cpp @@ -29,7 +29,7 @@ GLScopeGUI::GLScopeGUI(QWidget* parent) : m_triggerLevel(0.0), m_triggerPositiveEdge(true), m_triggerPre(0), - m_traceSize(96000) + m_traceLenMult(20) { ui->setupUi(this); } @@ -82,6 +82,7 @@ QByteArray GLScopeGUI::serialize() const s.writeBool(11, m_triggerPositiveEdge); s.writeS32(12, m_displayTraceIntensity); s.writeS32(13, m_triggerPre); + s.writeS32(14, m_traceLenMult); return s.final(); } @@ -118,6 +119,9 @@ bool GLScopeGUI::deserialize(const QByteArray& data) d.readS32(13, &m_triggerPre, 0); ui->trigPre->setValue(m_triggerPre); setTrigPreDisplay(); + d.readS32(14, &m_traceLenMult, 20); + ui->traceLen->setValue(m_traceLenMult); + setTraceLenDisplay(); applySettings(); applyTriggerSettings(); return true; @@ -185,7 +189,12 @@ void GLScopeGUI::applyTriggerSettings() m_glScope->setTriggerChannel((ScopeVis::TriggerChannel) m_triggerChannel); m_glScope->setTriggerLevel(m_triggerLevel / 100.0); - m_scopeVis->configure(m_messageQueue, (ScopeVis::TriggerChannel) m_triggerChannel, triggerLevel, m_triggerPositiveEdge, preTriggerSamples, 96000); // TODO: pass trace size as last parameter + m_scopeVis->configure(m_messageQueue, + (ScopeVis::TriggerChannel) m_triggerChannel, + triggerLevel, + m_triggerPositiveEdge, + preTriggerSamples, + m_traceLenMult * ScopeVis::m_traceChunkSize); } void GLScopeGUI::setTrigLevelDisplay() @@ -238,6 +247,7 @@ void GLScopeGUI::on_ampOfs_valueChanged(int value) void GLScopeGUI::on_scope_traceSizeChanged(int) { setTimeScaleDisplay(); + setTraceLenDisplay(); setTimeOfsDisplay(); setTrigPreDisplay(); applySettings(); @@ -248,6 +258,7 @@ void GLScopeGUI::on_scope_sampleRateChanged(int) { m_sampleRate = m_glScope->getSampleRate(); setTimeScaleDisplay(); + setTraceLenDisplay(); setTimeOfsDisplay(); setTrigPreDisplay(); applySettings(); @@ -272,6 +283,30 @@ void GLScopeGUI::setTimeScaleDisplay() else ui->timeText->setText(tr("%1\ns").arg(t * 1.0)); } +void GLScopeGUI::setTraceLenDisplay() +{ + uint n_samples = m_traceLenMult * ScopeVis::m_traceChunkSize; + + if (n_samples < 1000) { + ui->traceLenText->setToolTip(tr("%1S").arg(n_samples)); + } else if (n_samples < 1000000) { + ui->traceLenText->setToolTip(tr("%1kS").arg(n_samples/1000.0)); + } else { + ui->traceLenText->setToolTip(tr("%1MS").arg(n_samples/1000000.0)); + } + + m_sampleRate = m_glScope->getSampleRate(); + qreal t = (m_glScope->getTraceSize() * 1.0 / m_sampleRate); + + if(t < 0.000001) + ui->traceLenText->setText(tr("%1\nns").arg(t * 1000000000.0)); + else if(t < 0.001) + ui->traceLenText->setText(tr("%1\nµs").arg(t * 1000000.0)); + else if(t < 1.0) + ui->traceLenText->setText(tr("%1\nms").arg(t * 1000.0)); + else ui->traceLenText->setText(tr("%1\ns").arg(t * 1.0)); +} + void GLScopeGUI::setTimeOfsDisplay() { qreal dt = m_glScope->getTraceSize() * (m_timeOffset/100.0) / m_sampleRate; @@ -307,6 +342,16 @@ void GLScopeGUI::on_time_valueChanged(int value) m_glScope->setTimeBase(m_timeBase); } +void GLScopeGUI::on_traceLen_valueChanged(int value) +{ + if ((value < 1) || (value > 100)) { + return; + } + m_traceLenMult = value; + setTraceLenDisplay(); + applyTriggerSettings(); +} + void GLScopeGUI::on_timeOfs_valueChanged(int value) { if ((value < 0) || (value > 100)) { diff --git a/sdrbase/gui/glscopegui.ui b/sdrbase/gui/glscopegui.ui index 958d77d33..5c6216310 100644 --- a/sdrbase/gui/glscopegui.ui +++ b/sdrbase/gui/glscopegui.ui @@ -233,7 +233,7 @@ - Time + t @@ -353,7 +353,7 @@ - Amp + A @@ -752,6 +752,59 @@ + + + + Qt::Vertical + + + + + + + + 8 + + + + Len + + + + + + + Trace length + + + 1 + + + 100 + + + 1 + + + 20 + + + Qt::Horizontal + + + + + + + + 8 + + + + 0 + + +