diff --git a/sdrbase/dsp/scopevisng.cpp b/sdrbase/dsp/scopevisng.cpp index 255d10f33..578395c82 100644 --- a/sdrbase/dsp/scopevisng.cpp +++ b/sdrbase/dsp/scopevisng.cpp @@ -379,6 +379,9 @@ int ScopeVisNG::processTraces(const SampleVector::const_iterator& cbegin, const if (projectionType == ProjectionMagLin) { v = (itCtl->m_projector->run(*begin) - itData->m_ofs)*itData->m_amp - 1.0f; } else if (projectionType == ProjectionMagDB) { + // there is no processing advantage in direct calculation without projector +// uint32_t magsq = begin->m_real*begin->m_real + begin->m_imag*begin->m_imag; +// v = ((log10f(magsq/1073741824.0f)*0.2f - 2.0f*itData->m_ofs) + 2.0f)*itData->m_amp - 1.0f; float p = itCtl->m_projector->run(*begin) - (100.0f * itData->m_ofs); v = ((p/50.0f) + 2.0f)*itData->m_amp - 1.0f; } else { @@ -502,6 +505,7 @@ bool ScopeVisNG::handleMessage(const Message& message) if (triggerIndex == m_focusedTriggerIndex) { computeDisplayTriggerLevels(); + m_glScope->setFocusedTriggerData(m_triggerConditions[m_focusedTriggerIndex].m_triggerData); m_glScope->updateDisplay(); } } @@ -528,6 +532,7 @@ bool ScopeVisNG::handleMessage(const Message& message) { m_focusedTriggerIndex = triggerIndex; computeDisplayTriggerLevels(); + m_glScope->setFocusedTriggerData(m_triggerConditions[m_focusedTriggerIndex].m_triggerData); m_glScope->updateDisplay(); } diff --git a/sdrbase/dsp/scopevisng.h b/sdrbase/dsp/scopevisng.h index 85549d238..c7dee023d 100644 --- a/sdrbase/dsp/scopevisng.h +++ b/sdrbase/dsp/scopevisng.h @@ -70,7 +70,8 @@ public: setColor(m_traceColor); } - void setColor(QColor color) { + void setColor(QColor color) + { m_traceColor = color; qreal r,g,b,a; m_traceColor.getRgbF(&r, &g, &b, &a); @@ -95,6 +96,10 @@ public: int m_triggerDelayCoarse; int m_triggerDelayFine; uint32_t m_triggerRepeat; //!< Number of trigger conditions before the final decisive trigger + QColor m_triggerColor; //!< Trigger line display color + float m_triggerColorR; //!< Trigger line display color - red shortcut + float m_triggerColorG; //!< Trigger line display color - green shortcut + float m_triggerColorB; //!< Trigger line display color - blue shortcut TriggerData() : m_projectionType(ProjectionReal), @@ -108,8 +113,21 @@ public: m_triggerDelayMult(0.0), m_triggerDelayCoarse(0), m_triggerDelayFine(0), - m_triggerRepeat(0) - {} + m_triggerRepeat(0), + m_triggerColor(0,255,0) + { + setColor(m_triggerColor); + } + + void setColor(QColor color) + { + m_triggerColor = color; + qreal r,g,b,a; + m_triggerColor.getRgbF(&r, &g, &b, &a); + m_triggerColorR = r; + m_triggerColorG = g; + m_triggerColorB = b; + } }; static const uint m_traceChunkSize; @@ -681,7 +699,8 @@ private: { return (m_tracesData[traceIndex].m_projectionType != traceData.m_projectionType) || (m_tracesData[traceIndex].m_amp != traceData.m_amp) - || (m_tracesData[traceIndex].m_ofs != traceData.m_ofs); + || (m_tracesData[traceIndex].m_ofs != traceData.m_ofs + || (m_tracesData[traceIndex].m_traceColor != traceData.m_traceColor)); } void addTrace(const TraceData& traceData, int traceSize) diff --git a/sdrbase/gui/glscopeng.cpp b/sdrbase/gui/glscopeng.cpp index 920b3f515..7f3c891c3 100644 --- a/sdrbase/gui/glscopeng.cpp +++ b/sdrbase/gui/glscopeng.cpp @@ -329,7 +329,11 @@ void GLScopeNG::paintGL() float rectW = m_glScopeRect1.width(); float rectH = -m_glScopeRect1.height() / 2.0f; - QVector4D color(0.0f, 1.0f, 0.0f, 0.4f); + QVector4D color( + m_focusedTriggerData.m_triggerColorR, + m_focusedTriggerData.m_triggerColorG, + m_focusedTriggerData.m_triggerColorB, + 0.4f); QMatrix4x4 mat; mat.setToIdentity(); mat.translate(-1.0f + 2.0f * rectX, 1.0f - 2.0f * rectY); diff --git a/sdrbase/gui/glscopeng.h b/sdrbase/gui/glscopeng.h index edba9460b..2eacfbc44 100644 --- a/sdrbase/gui/glscopeng.h +++ b/sdrbase/gui/glscopeng.h @@ -67,6 +67,7 @@ public: void updateDisplay(); void setDisplayGridIntensity(int intensity); void setDisplayTraceIntensity(int intensity); + void setFocusedTriggerData(ScopeVisNG::TriggerData& triggerData) { m_focusedTriggerData = triggerData; } signals: void sampleRateChanged(int); @@ -74,6 +75,7 @@ signals: private: std::vector *m_tracesData; std::vector *m_traces; + ScopeVisNG::TriggerData m_focusedTriggerData; uint32_t m_bufferIndex; DisplayMode m_displayMode; QTimer m_timer; diff --git a/sdrbase/gui/glscopenggui.cpp b/sdrbase/gui/glscopenggui.cpp index 6faa085c8..343b6840a 100644 --- a/sdrbase/gui/glscopenggui.cpp +++ b/sdrbase/gui/glscopenggui.cpp @@ -41,6 +41,8 @@ GLScopeNGGUI::GLScopeNGGUI(QWidget* parent) : ui->trigDelayFine->setMaximum(ScopeVisNG::m_traceChunkSize / 10.0); ui->traceColor->setStyleSheet("QLabel { background-color : rgb(255,255,64); }"); m_focusedTraceColor.setRgb(255,255,64); + ui->trigColor->setStyleSheet("QLabel { background-color : rgb(0,255,0); }"); + m_focusedTriggerColor.setRgb(0,255,0); } GLScopeNGGUI::~GLScopeNGGUI() @@ -335,7 +337,6 @@ void GLScopeNGGUI::on_traceDelay_valueChanged(int value) void GLScopeNGGUI::on_traceColor_clicked() { - qDebug("GLScopeNGGUI::on_traceColor_clicked"); QColor newColor = QColorDialog::getColor(); m_focusedTraceColor = newColor; int r,g,b,a; @@ -419,6 +420,16 @@ void GLScopeNGGUI::on_trigPre_valueChanged(int value) ui->freerun->isChecked()); // TODO: implement one shot feature } +void GLScopeNGGUI::on_trigColor_clicked() +{ + QColor newColor = QColorDialog::getColor(); + m_focusedTriggerColor = newColor; + int r,g,b,a; + m_focusedTriggerColor.getRgb(&r, &g, &b, &a); + ui->trigColor->setStyleSheet(tr("QLabel { background-color : rgb(%1,%2,%3); }").arg(r).arg(g).arg(b)); + changeCurrentTrigger(); +} + void GLScopeNGGUI::on_trigOneShot_toggled(bool checked) { m_scopeVis->configure(m_traceLenMult*ScopeVisNG::m_traceChunkSize, @@ -722,6 +733,7 @@ void GLScopeNGGUI::fillTriggerData(ScopeVisNG::TriggerData& triggerData) triggerData.m_triggerDelay = (int) (m_traceLenMult * ScopeVisNG::m_traceChunkSize * triggerData.m_triggerDelayMult); triggerData.m_triggerDelayCoarse = ui->trigDelayCoarse->value(); triggerData.m_triggerDelayFine = ui->trigDelayFine->value(); + triggerData.setColor(m_focusedTriggerColor); } void GLScopeNGGUI::setTriggerUI(ScopeVisNG::TriggerData& triggerData) @@ -775,6 +787,11 @@ void GLScopeNGGUI::setTriggerUI(ScopeVisNG::TriggerData& triggerData) ui->trigDelayFine->setValue(triggerData.m_triggerDelayFine); setTrigDelayDisplay(); + m_focusedTriggerColor = triggerData.m_triggerColor; + int r, g, b, a; + m_focusedTriggerColor.getRgb(&r, &g, &b, &a); + ui->trigColor->setStyleSheet(tr("QLabel { background-color : rgb(%1,%2,%3); }").arg(r).arg(g).arg(b)); + ui->trigMode->blockSignals(oldStateTrigMode); ui->trigCount->blockSignals(oldStateTrigCount); ui->trigPos->blockSignals(oldStateTrigPos); diff --git a/sdrbase/gui/glscopenggui.h b/sdrbase/gui/glscopenggui.h index 6b1d719ce..06c57db63 100644 --- a/sdrbase/gui/glscopenggui.h +++ b/sdrbase/gui/glscopenggui.h @@ -61,6 +61,7 @@ private: int m_timeOffset; int m_traceLenMult; QColor m_focusedTraceColor; + QColor m_focusedTriggerColor; static const double amps[11]; @@ -123,6 +124,7 @@ private slots: void on_trigDelayCoarse_valueChanged(int value); void on_trigDelayFine_valueChanged(int value); void on_trigPre_valueChanged(int value); + void on_trigColor_clicked(); void on_trigOneShot_toggled(bool checked); void on_freerun_toggled(bool checked); }; diff --git a/sdrbase/gui/glscopenggui.ui b/sdrbase/gui/glscopenggui.ui index 0c76474da..d5c793473 100644 --- a/sdrbase/gui/glscopenggui.ui +++ b/sdrbase/gui/glscopenggui.ui @@ -6,7 +6,7 @@ 0 0 - 692 + 731 120 @@ -1515,6 +1515,25 @@ kS/s + + + + + 16 + 16 + + + + + 16 + 16 + + + + + + +