From 1a7610a7e4f57b2486e9d6df0ef866ac2454bd27 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 31 Oct 2015 12:33:59 +0100 Subject: [PATCH] GLScope: individual settings for channels 1 and 2. Fine and Coarse sliders for Y offsets. Interim state #1: channel 1 working --- include/gui/glscope.h | 6 +- include/gui/glscopegui.h | 14 +- sdrbase/gui/glscope.cpp | 234 ++++++++--------------- sdrbase/gui/glscopegui.cpp | 84 +++++---- sdrbase/gui/glscopegui.ui | 367 ++++++++++++++++++++++++------------- 5 files changed, 383 insertions(+), 322 deletions(-) diff --git a/include/gui/glscope.h b/include/gui/glscope.h index ad875e2bf..e7deced41 100644 --- a/include/gui/glscope.h +++ b/include/gui/glscope.h @@ -56,8 +56,8 @@ public: ~GLScope(); void setDSPEngine(DSPEngine* dspEngine); - void setAmp(Real amp); - void setAmpOfs(Real ampOfs); + void setAmp1(Real amp); + void setAmp1Ofs(Real ampOfs); void setTimeBase(int timeBase); void setTimeOfsProMill(int timeOfsProMill); void setMode(Mode mode); @@ -117,6 +117,8 @@ private: ScopeVis::TriggerChannel m_triggerChannel; Real m_triggerLevel; Real m_triggerPre; + Real m_triggerLevelDis1; + Real m_triggerLevelDis2; int m_nbPow; Real m_prevArg; diff --git a/include/gui/glscopegui.h b/include/gui/glscopegui.h index 32e2b5a7e..5f75d95d9 100644 --- a/include/gui/glscopegui.h +++ b/include/gui/glscopegui.h @@ -44,8 +44,9 @@ private: qint32 m_displays; qint32 m_timeBase; qint32 m_timeOffset; - qint32 m_amplification; - qint32 m_ampOffset; + qint32 m_amplification1; + qint32 m_amp1OffsetCoarse; + qint32 m_amp1OffsetFine; int m_displayGridIntensity; int m_displayTraceIntensity; qint32 m_triggerChannel; @@ -64,15 +65,16 @@ private: void setTimeScaleDisplay(); void setTraceLenDisplay(); void setTimeOfsDisplay(); - void setAmpScaleDisplay(); - void setAmpOfsDisplay(); + void setAmp1ScaleDisplay(); + void setAmp1OfsDisplay(); void setTrigLevelDisplay(); void setTrigPreDisplay(); void setTrigDelayDisplay(); private slots: - void on_amp_valueChanged(int value); - void on_ampOfs_valueChanged(int value); + void on_amp1_valueChanged(int value); + void on_amp1OfsCoarse_valueChanged(int value); + void on_amp1OfsFine_valueChanged(int value); void on_scope_traceSizeChanged(int value); void on_scope_sampleRateChanged(int value); void on_time_valueChanged(int value); diff --git a/sdrbase/gui/glscope.cpp b/sdrbase/gui/glscope.cpp index d010b439c..64ba6a882 100644 --- a/sdrbase/gui/glscope.cpp +++ b/sdrbase/gui/glscope.cpp @@ -37,6 +37,8 @@ GLScope::GLScope(QWidget* parent) : m_triggerChannel(ScopeVis::TriggerFreeRun), m_triggerLevel(0.0), m_triggerPre(0.0), + m_triggerLevelDis1(0.0), + m_triggerLevelDis2(0.0), m_prevArg(0), m_displayGridIntensity(5), m_displayTraceIntensity(50), @@ -86,16 +88,20 @@ void GLScope::setSampleRate(int sampleRate) { emit sampleRateChanged(m_sampleRate); } -void GLScope::setAmp(Real amp) +void GLScope::setAmp1(Real amp) { + qDebug("GLScope::setAmp1: %f", amp); m_amp = amp; + m_amp1 = amp; m_configChanged = true; update(); } -void GLScope::setAmpOfs(Real ampOfs) +void GLScope::setAmp1Ofs(Real ampOfs) { + qDebug("GLScope::setAmp1Ofs: %f", ampOfs); m_ofs = ampOfs; + m_ofs1 = ampOfs; m_configChanged = true; update(); } @@ -250,13 +256,6 @@ void GLScope::paintGL() } } } - /* - for(int i = 1; i < 10; i++) { - glBegin(GL_LINE_LOOP); - glVertex2f(0, i * 0.1); - glVertex2f(1, i * 0.1); - glEnd(); - }*/ // Vertical X1 tickList = &m_x1Scale.getTickList(); for(int i= 0; i < tickList->count(); i++) { @@ -271,13 +270,6 @@ void GLScope::paintGL() } } } - /* - for(int i = 1; i < 10; i++) { - glBegin(GL_LINE_LOOP); - glVertex2f(i * 0.1, 0); - glVertex2f(i * 0.1, 1); - glEnd(); - }*/ glPopMatrix(); // paint left #1 scale @@ -326,7 +318,7 @@ void GLScope::paintGL() glDisable(GL_TEXTURE_2D); glPopMatrix(); - // paint trigger level + // paint trigger level #1 if ((m_triggerChannel == ScopeVis::TriggerChannelI) || (m_triggerChannel == ScopeVis::TriggerMagLin) || (m_triggerChannel == ScopeVis::TriggerMagDb) @@ -342,22 +334,18 @@ void GLScope::paintGL() glColor4f(0, 1, 0, m_displayTraceIntensity / 100.0); glBegin(GL_LINE_LOOP); - if (m_triggerChannel == ScopeVis::TriggerChannelI) + float posLimit = 1.0 / m_amp1; + float negLimit = -1.0 / m_amp1; + + if ((m_triggerChannel == ScopeVis::TriggerChannelI) + || (m_triggerChannel == ScopeVis::TriggerMagLin) + || (m_triggerChannel == ScopeVis::TriggerMagDb)) { - glVertex2f(0, m_triggerLevel); - glVertex2f(1, m_triggerLevel); - } - else if (m_triggerChannel == ScopeVis::TriggerMagLin) - { - Real y = (m_triggerLevel + 1.0 - (m_ofs / 2.0)) * m_amp1; - glVertex2f(0, (y - 1.0)/m_amp1); - glVertex2f(1, (y - 1.0)/m_amp1); - } - else if (m_triggerChannel == ScopeVis::TriggerMagDb) - { - Real y = (m_triggerLevel - m_ofs) * m_amp1; - glVertex2f(0, (y - 1.0)/m_amp1); - glVertex2f(1, (y - 1.0)/m_amp1); + if ((m_triggerLevelDis1 > negLimit) && (m_triggerLevelDis1 < posLimit)) + { + glVertex2f(0, m_triggerLevelDis1); + glVertex2f(1, m_triggerLevelDis1); + } } glEnd(); @@ -365,7 +353,7 @@ void GLScope::paintGL() glPopMatrix(); } - // paint trace + // paint trace #1 if(m_displayTrace->size() > 0) { glPushMatrix(); @@ -387,7 +375,7 @@ void GLScope::paintGL() for(int i = start; i < end; i++) { - float v = (*m_displayTrace)[i].real() + m_ofs1; + float v = (*m_displayTrace)[i].real(); if(v > posLimit) v = posLimit; else if(v < negLimit) @@ -430,39 +418,6 @@ void GLScope::paintGL() drawPowerOverlay(); } } - - // paint trigger time line if pretriggered - /* - if ((m_triggerPre > 0.0) && - ((m_triggerChannel == ScopeVis::TriggerChannelI) - || (m_triggerChannel == ScopeVis::TriggerMagLin) - || (m_triggerChannel == ScopeVis::TriggerMagDb))) - { - float x = (m_triggerPre - (m_timeOfsProMill/1000.0)) * m_displayTrace->size(); - - if ((x >= 0.0) && (x <= (float) m_displayTrace->size() / (float) m_timeBase)) - { - glPushMatrix(); - glTranslatef(m_glScopeRect1.x(), m_glScopeRect1.y() + m_glScopeRect1.height() / 2.0, 0); - glScalef(m_glScopeRect1.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1), -(m_glScopeRect1.height() / 2) * m_amp1, 1); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - //glEnable(GL_LINE_SMOOTH); - glLineWidth(1.0f); - glColor4f(0, 1, 0, m_displayTraceIntensity / 100.0); - glBegin(GL_LINE_LOOP); - - float posLimit = 1.0 / m_amp1; - float negLimit = -1.0 / m_amp1; - glVertex2f(x, posLimit); - glVertex2f(x, negLimit); - - glEnd(); - //glDisable(GL_LINE_SMOOTH); - glPopMatrix(); - } - }*/ - } // Both displays or primary only // Q - secondary display @@ -506,13 +461,6 @@ void GLScope::paintGL() } } } - /* - for(int i = 1; i < 10; i++) { - glBegin(GL_LINE_LOOP); - glVertex2f(0, i * 0.1); - glVertex2f(1, i * 0.1); - glEnd(); - }*/ // Vertical X2 tickList = &m_x2Scale.getTickList(); for(int i= 0; i < tickList->count(); i++) { @@ -527,13 +475,6 @@ void GLScope::paintGL() } } } - /* - for(int i = 1; i < 10; i++) { - glBegin(GL_LINE_LOOP); - glVertex2f(i * 0.1, 0); - glVertex2f(i * 0.1, 1); - glEnd(); - }*/ glPopMatrix(); // paint left #2 scale @@ -582,7 +523,7 @@ void GLScope::paintGL() glDisable(GL_TEXTURE_2D); glPopMatrix(); - // paint trigger level + // paint trigger level #2 if ((m_triggerChannel == ScopeVis::TriggerPhase) || (m_triggerChannel == ScopeVis::TriggerChannelQ)) { glPushMatrix(); @@ -597,17 +538,11 @@ void GLScope::paintGL() glVertex2f(0, m_triggerLevel); glVertex2f(1, m_triggerLevel); glEnd(); - /* - glColor4f(0, 0.8f, 0.0, 0.3f); - glBegin(GL_LINE_LOOP); - glVertex2f(0, m_triggerLevelLow); - glVertex2f(1, m_triggerLevelLow); - glEnd();*/ //glDisable(GL_LINE_SMOOTH); glPopMatrix(); } - // paint trace + // paint trace #2 if(m_displayTrace->size() > 0) { glPushMatrix(); glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0, 0); @@ -636,38 +571,6 @@ void GLScope::paintGL() //glDisable(GL_LINE_SMOOTH); glPopMatrix(); } - - // paint trigger time line if pretriggered - /* - if ((m_triggerPre > 0.0) && - ((m_triggerChannel == ScopeVis::TriggerPhase) - || (m_triggerChannel == ScopeVis::TriggerChannelQ))) - { - float x = (m_triggerPre - (m_timeOfsProMill/1000.0)) * m_displayTrace->size(); - - if ((x >= 0.0) && (x <= (float) m_displayTrace->size() / (float) m_timeBase)) - { - glPushMatrix(); - glTranslatef(m_glScopeRect2.x(), m_glScopeRect2.y() + m_glScopeRect2.height() / 2.0, 0); - glScalef(m_glScopeRect2.width() * (float)m_timeBase / (float)(m_displayTrace->size() - 1), -(m_glScopeRect2.height() / 2) * m_amp2, 1); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - //glEnable(GL_LINE_SMOOTH); - glLineWidth(1.0f); - glColor4f(0, 1, 0, m_displayTraceIntensity / 100.0); - glBegin(GL_LINE_LOOP); - - float posLimit = 1.0 / m_amp2; - float negLimit = -1.0 / m_amp2; - glVertex2f(x, posLimit); - glVertex2f(x, negLimit); - - glEnd(); - //glDisable(GL_LINE_SMOOTH); - glPopMatrix(); - } - }*/ - } // Both displays or secondary display only glPopMatrix(); @@ -730,51 +633,70 @@ void GLScope::mousePressEvent(QMouseEvent* event) void GLScope::handleMode() { switch(m_mode) { - case ModeIQ: { + case ModeIQ: + { m_mathTrace.resize(m_rawTrace.size()); std::vector::iterator dst = m_mathTrace.begin(); m_displayTrace = &m_rawTrace; + for(std::vector::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src) { - *dst++ = Complex(src->real() - 2*m_ofs, src->imag() - m_ofs); + *dst++ = Complex(src->real() - m_ofs1, src->imag() - m_ofs1); } + + m_triggerLevelDis1 = m_triggerLevel - m_ofs1; + m_displayTrace = &m_mathTrace; - m_amp1 = m_amp; - m_amp2 = m_amp; - m_ofs1 = m_ofs; - m_ofs2 = m_ofs; + //m_amp1 = m_amp; + //m_amp2 = m_amp; + //m_ofs1 = m_ofs; + //m_ofs2 = m_ofs; break; } - case ModeMagLinPha: { + case ModeMagLinPha: + { m_mathTrace.resize(m_rawTrace.size()); std::vector::iterator dst = m_mathTrace.begin(); + for(std::vector::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src) - *dst++ = Complex(abs(*src) - m_ofs/2.0, arg(*src) / M_PI); + { + *dst++ = Complex(abs(*src) - m_ofs1/2.0 - 1.0/m_amp1, arg(*src) / M_PI); + } + + m_triggerLevelDis1 = (m_triggerLevel + 1) - m_ofs1/2.0 - 1.0/m_amp1; + m_displayTrace = &m_mathTrace; - m_amp1 = m_amp; + //m_amp1 = m_amp; m_amp2 = 1.0; - m_ofs1 = -1.0 / m_amp1; + //m_ofs1 = -1.0 / m_amp1; m_ofs2 = 0.0; break; } - case ModeMagdBPha: { + case ModeMagdBPha: + { m_mathTrace.resize(m_rawTrace.size()); m_powTrace.resize(m_rawTrace.size()); std::vector::iterator dst = m_mathTrace.begin(); std::vector::iterator powDst = m_powTrace.begin(); + for(std::vector::const_iterator src = m_rawTrace.begin(); src != m_rawTrace.end(); ++src) { Real v = src->real() * src->real() + src->imag() * src->imag(); *powDst++ = v; - v = (100.0f - m_ofs*100.0f + (10.0f * log10f(v))) / 100.0f; // TODO: first term is the offset + v = 1.0f + 2.0f*(((10.0f*log10f(v))/100.0f) - m_ofs1) + 1.0f - 1.0f/m_amp1; *dst++ = Complex(v, arg(*src) / M_PI); } + + Real tdB = (m_triggerLevel - 1) * 100.0f; + m_triggerLevelDis1 = 1.0f + 2.0f*(((tdB)/100.0f) - m_ofs1) + 1.0f - 1.0f/m_amp1; + m_displayTrace = &m_mathTrace; - m_amp1 = 2.0 * m_amp; + //m_amp1 = 2.0 * m_amp; m_amp2 = 1.0; - m_ofs1 = -1.0 / m_amp1; + //m_ofs1 = -1.0 / m_amp1; m_ofs2 = 0.0; break; } - case ModeMagLinDPha: { + case ModeMagLinDPha: + { m_mathTrace.resize(m_rawTrace.size()); std::vector::iterator dst = m_mathTrace.begin(); Real curArg; @@ -783,27 +705,27 @@ void GLScope::handleMode() { curArg = arg(*src) - m_prevArg; - if (curArg < -M_PI) - { + if (curArg < -M_PI) { curArg += 2.0 * M_PI; - } - else if (curArg > M_PI) - { + } else if (curArg > M_PI) { curArg -= 2.0 * M_PI; } - *dst++ = Complex(abs(*src) - m_ofs/2.0, curArg / M_PI); + *dst++ = Complex(abs(*src) - m_ofs1/2.0 - 1.0/m_amp1, curArg / M_PI); m_prevArg = arg(*src); } + m_triggerLevelDis1 = (m_triggerLevel + 1) - m_ofs1/2.0 - 1.0/m_amp1; + m_displayTrace = &m_mathTrace; - m_amp1 = m_amp; + //m_amp1 = m_amp; m_amp2 = 1.0; - m_ofs1 = -1.0 / m_amp1; + //m_ofs1 = -1.0 / m_amp1; m_ofs2 = 0.0; break; } - case ModeMagdBDPha: { + case ModeMagdBDPha: + { m_mathTrace.resize(m_rawTrace.size()); m_powTrace.resize(m_rawTrace.size()); std::vector::iterator dst = m_mathTrace.begin(); @@ -814,15 +736,12 @@ void GLScope::handleMode() { Real v = src->real() * src->real() + src->imag() * src->imag(); *powDst++ = v; - v = (100.0f - m_ofs*100.0f + (10.0f * log10f(v))) / 100.0f; + v = 1.0f + 2.0f*(((10.0f*log10f(v))/100.0f) - m_ofs1) + 1.0f - 1.0f/m_amp1; curArg = arg(*src) - m_prevArg; - if (curArg < -M_PI) - { + if (curArg < -M_PI) { curArg += 2.0 * M_PI; - } - else if (curArg > M_PI) - { + } else if (curArg > M_PI) { curArg -= 2.0 * M_PI; } @@ -831,9 +750,9 @@ void GLScope::handleMode() } m_displayTrace = &m_mathTrace; - m_amp1 = 2.0 * m_amp; + //m_amp1 = 2.0 * m_amp; m_amp2 = 1.0; - m_ofs1 = -1.0 / m_amp1; + //m_ofs1 = -1.0 / m_amp1; m_ofs2 = 0.0; break; } @@ -847,9 +766,9 @@ void GLScope::handleMode() abs(m_rawTrace[i] - m_rawTrace[i - 1]) - abs(m_rawTrace[i - 2] - m_rawTrace[i - 3])); } m_displayTrace = &m_mathTrace; - m_amp1 = m_amp; + //m_amp1 = m_amp; m_amp2 = m_amp; - m_ofs1 = -1.0 / m_amp1; + //m_ofs1 = -1.0 / m_amp1; m_ofs2 = 0.0; } break; @@ -861,9 +780,9 @@ void GLScope::handleMode() for(uint i = 2; i < m_rawTrace.size() ; i++) *dst++ = Complex(abs(m_rawTrace[i] - conj(m_rawTrace[i - 1])), 0); m_displayTrace = &m_mathTrace; - m_amp1 = m_amp; + //m_amp1 = m_amp; m_amp2 = m_amp; - m_ofs1 = -1.0 / m_amp1; + //m_ofs1 = -1.0 / m_amp1; m_ofs2 = 0.0; } break; @@ -1582,6 +1501,7 @@ void GLScope::setTriggerChannel(ScopeVis::TriggerChannel triggerChannel) void GLScope::setTriggerLevel(Real triggerLevel) { + qDebug("GLScope::setTriggerLevel: %f", triggerLevel); m_triggerLevel = triggerLevel; } diff --git a/sdrbase/gui/glscopegui.cpp b/sdrbase/gui/glscopegui.cpp index 2034cfe6c..9a4459562 100644 --- a/sdrbase/gui/glscopegui.cpp +++ b/sdrbase/gui/glscopegui.cpp @@ -21,9 +21,11 @@ GLScopeGUI::GLScopeGUI(QWidget* parent) : m_displays(GLScope::DisplayBoth), m_timeBase(1), m_timeOffset(0), - m_amplification(0), - m_ampOffset(0), + m_amplification1(0), + m_amp1OffsetCoarse(0), + m_amp1OffsetFine(0), m_displayGridIntensity(1), + m_displayTraceIntensity(50), m_triggerChannel(ScopeVis::TriggerFreeRun), m_triggerLevelCoarse(0), m_triggerLevelFine(0), @@ -62,7 +64,7 @@ void GLScopeGUI::resetToDefaults() m_displayOrientation = Qt::Horizontal; m_timeBase = 1; m_timeOffset = 0; - m_amplification = 0; + m_amplification1 = 0; m_displayGridIntensity = 5; m_triggerChannel = ScopeVis::TriggerFreeRun; m_triggerLevelCoarse = 0; @@ -82,9 +84,9 @@ QByteArray GLScopeGUI::serialize() const s.writeS32(2, m_displayOrientation); s.writeS32(3, m_timeBase); s.writeS32(4, m_timeOffset); - s.writeS32(5, m_amplification); + s.writeS32(5, m_amplification1); s.writeS32(6, m_displayGridIntensity); - s.writeS32(7, m_ampOffset); + s.writeS32(7, m_amp1OffsetCoarse); s.writeS32(8, m_displays); s.writeS32(9, m_triggerChannel); s.writeS32(10, m_triggerLevelCoarse); @@ -95,6 +97,7 @@ QByteArray GLScopeGUI::serialize() const s.writeS32(15, m_triggerDelay); s.writeBool(16, m_triggerBothEdges); s.writeS32(17, m_triggerLevelFine); + s.writeS32(18, m_amp1OffsetFine); return s.final(); } @@ -113,11 +116,11 @@ bool GLScopeGUI::deserialize(const QByteArray& data) d.readS32(2, &m_displayOrientation, Qt::Horizontal); d.readS32(3, &m_timeBase, 1); d.readS32(4, &m_timeOffset, 0); - d.readS32(5, &m_amplification, 0); + d.readS32(5, &m_amplification1, 0); d.readS32(6, &m_displayGridIntensity, 5); if(m_timeBase < 0) m_timeBase = 1; - d.readS32(7, &m_ampOffset, 0); + d.readS32(7, &m_amp1OffsetCoarse, 0); d.readS32(8, &m_displays, GLScope::DisplayBoth); d.readS32(9, &m_triggerChannel, ScopeVis::TriggerFreeRun); ui->trigMode->setCurrentIndex(m_triggerChannel); @@ -146,6 +149,7 @@ bool GLScopeGUI::deserialize(const QByteArray& data) } d.readS32(17, &m_triggerLevelFine, 0); ui->trigLevelFine->setValue(m_triggerLevelFine); + d.readS32(18, &m_amp1OffsetFine, 0); setTrigLevelDisplay(); applySettings(); applyTriggerSettings(); @@ -193,8 +197,9 @@ void GLScopeGUI::applySettings() } ui->time->setValue(m_timeBase); ui->timeOfs->setValue(m_timeOffset); - ui->amp->setValue(m_amplification); - ui->ampOfs->setValue(m_ampOffset); + ui->amp1->setValue(m_amplification1); + ui->amp1OfsCoarse->setValue(m_amp1OffsetCoarse); + ui->amp1OfsFine->setValue(m_amp1OffsetFine); ui->gridIntensity->setSliderPosition(m_displayGridIntensity); ui->traceIntensity->setSliderPosition(m_displayTraceIntensity); } @@ -260,32 +265,34 @@ void GLScopeGUI::setTrigLevelDisplay() } } -void GLScopeGUI::setAmpScaleDisplay() +void GLScopeGUI::setAmp1ScaleDisplay() { if ((m_glScope->getDataMode() == GLScope::ModeMagdBPha) || (m_glScope->getDataMode() == GLScope::ModeMagdBDPha)) { - ui->ampText->setText(tr("%1\ndB").arg(amps[m_amplification]*500.0, 0, 'f', 1)); + ui->amp1Text->setText(tr("%1\ndB").arg(amps[m_amplification1]*500.0, 0, 'f', 1)); } else { - qreal a = amps[m_amplification]*10.0; + qreal a = amps[m_amplification1]*10.0; if(a < 0.000001) - ui->ampText->setText(tr("%1\nn").arg(a * 1000000000.0)); + ui->amp1Text->setText(tr("%1\nn").arg(a * 1000000000.0)); else if(a < 0.001) - ui->ampText->setText(tr("%1\nµ").arg(a * 1000000.0)); + ui->amp1Text->setText(tr("%1\nµ").arg(a * 1000000.0)); else if(a < 1.0) - ui->ampText->setText(tr("%1\nm").arg(a * 1000.0)); + ui->amp1Text->setText(tr("%1\nm").arg(a * 1000.0)); else - ui->ampText->setText(tr("%1").arg(a * 1.0)); + ui->amp1Text->setText(tr("%1").arg(a * 1.0)); } } -void GLScopeGUI::setAmpOfsDisplay() +void GLScopeGUI::setAmp1OfsDisplay() { + qreal o = (m_amp1OffsetCoarse * 10.0) + (m_amp1OffsetFine / 20.0); + if ((m_glScope->getDataMode() == GLScope::ModeMagdBPha) || (m_glScope->getDataMode() == GLScope::ModeMagdBDPha)) { - ui->ampOfsText->setText(tr("%1\ndB").arg(m_ampOffset/10.0 - 100.0, 0, 'f', 1)); + ui->amp1OfsText->setText(tr("%1\ndB").arg(o/10.0 - 100.0, 0, 'f', 1)); } else { @@ -293,36 +300,45 @@ void GLScopeGUI::setAmpOfsDisplay() if ((m_glScope->getDataMode() == GLScope::ModeMagLinPha) || (m_glScope->getDataMode() == GLScope::ModeMagLinDPha)) { - a = m_ampOffset/2000.0; + a = o/2000.0; } else { - a = m_ampOffset/1000.0; + a = o/1000.0; } if(fabs(a) < 0.000001) - ui->ampOfsText->setText(tr("%1\nn").arg(a * 1000000000.0)); + ui->amp1OfsText->setText(tr("%1\nn").arg(a * 1000000000.0)); else if(fabs(a) < 0.001) - ui->ampOfsText->setText(tr("%1\nµ").arg(a * 1000000.0)); + ui->amp1OfsText->setText(tr("%1\nµ").arg(a * 1000000.0)); else if(fabs(a) < 1.0) - ui->ampOfsText->setText(tr("%1\nm").arg(a * 1000.0)); + ui->amp1OfsText->setText(tr("%1\nm").arg(a * 1000.0)); else - ui->ampOfsText->setText(tr("%1").arg(a * 1.0)); + ui->amp1OfsText->setText(tr("%1").arg(a * 1.0)); } } -void GLScopeGUI::on_amp_valueChanged(int value) +void GLScopeGUI::on_amp1_valueChanged(int value) { - m_amplification = value; - setAmpScaleDisplay(); - m_glScope->setAmp(0.2 / amps[m_amplification]); + m_amplification1 = value; + setAmp1ScaleDisplay(); + m_glScope->setAmp1(0.2 / amps[m_amplification1]); } -void GLScopeGUI::on_ampOfs_valueChanged(int value) +void GLScopeGUI::on_amp1OfsCoarse_valueChanged(int value) { - m_ampOffset = value; - setAmpOfsDisplay(); - m_glScope->setAmpOfs(value/1000.0); // scale to [-1.0,1.0] + m_amp1OffsetCoarse = value; + setAmp1OfsDisplay(); + qreal o = (m_amp1OffsetCoarse * 10.0) + (m_amp1OffsetFine / 20.0); + m_glScope->setAmp1Ofs(o/1000.0); // scale to [-1.0,1.0] +} + +void GLScopeGUI::on_amp1OfsFine_valueChanged(int value) +{ + m_amp1OffsetFine = value; + setAmp1OfsDisplay(); + qreal o = (m_amp1OffsetCoarse * 10.0) + (m_amp1OffsetFine / 20.0); + m_glScope->setAmp1Ofs(o/1000.0); // scale to [-1.0,1.0] } void GLScopeGUI::on_scope_traceSizeChanged(int) @@ -522,8 +538,8 @@ void GLScopeGUI::on_dataMode_currentIndexChanged(int index) break; } - setAmpScaleDisplay(); - setAmpOfsDisplay(); + setAmp1ScaleDisplay(); + setAmp1OfsDisplay(); } void GLScopeGUI::on_horizView_clicked() diff --git a/sdrbase/gui/glscopegui.ui b/sdrbase/gui/glscopegui.ui index 8e003689c..cef49bfae 100644 --- a/sdrbase/gui/glscopegui.ui +++ b/sdrbase/gui/glscopegui.ui @@ -6,8 +6,8 @@ 0 0 - 809 - 65 + 811 + 120 @@ -297,8 +297,7 @@ - 0.1000 -/div + 0 Qt::AlignCenter @@ -356,19 +355,19 @@ - + 8 - A + A1 - + 0 @@ -376,7 +375,7 @@ - Y range + Y range for display 1 0 @@ -402,7 +401,7 @@ - + 40 @@ -415,8 +414,7 @@ - 0.2000 -/div + 0 Qt::AlignCenter @@ -424,38 +422,58 @@ - - - - 0 - 0 - - - - Y offset - - - -1000 - - - 1000 - - - 1 - - - Qt::Horizontal - - - QSlider::NoTicks - - - 10 - - + + + + + + 0 + 0 + + + + Y coarse offset for display 1 + + + -100 + + + 99 + + + 1 + + + Qt::Horizontal + + + QSlider::NoTicks + + + 10 + + + + + + + Y fine offset for display 1 + + + 200 + + + 1 + + + Qt::Horizontal + + + + - + 8 @@ -494,6 +512,191 @@ + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 60 + 20 + + + + + + + + + 8 + + + + Len + + + + + + + Trace length + + + 1 + + + 100 + + + 1 + + + 20 + + + Qt::Horizontal + + + + + + + + 8 + + + + 0 + + + + + + + Qt::Vertical + + + + + + + A2 + + + + + + + Y range for display 2 + + + 10 + + + 1 + + + Qt::Horizontal + + + + + + + 0 + + + + + + + + + Y coarse offset for display 2 + + + -100 + + + 1 + + + Qt::Horizontal + + + + + + + Y fine offset for display 2 + + + 200 + + + 1 + + + Qt::Horizontal + + + + + + + + + 0 + + + + + + + Qt::Vertical + + + + + + + + 24 + 24 + + + + Trace intensity + + + 100 + + + 1 + + + 50 + + + + + @@ -854,88 +1057,6 @@ - - - - Qt::Vertical - - - - - - - - 8 - - - - Len - - - - - - - Trace length - - - 1 - - - 100 - - - 1 - - - 20 - - - Qt::Horizontal - - - - - - - - 8 - - - - 0 - - - - - - - Qt::Vertical - - - - - - - - 24 - 24 - - - - Trace intensity - - - 100 - - - 1 - - - 50 - - -