From 76cdb94d348ed10e97463c90163a95791fbf6cd7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 11 Feb 2017 08:35:33 +0100 Subject: [PATCH] New scope: corrected trigger display levels --- sdrbase/dsp/scopevisng.cpp | 48 ++++++++++++++++++++++++++++++++++++++ sdrbase/dsp/scopevisng.h | 7 +++--- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/sdrbase/dsp/scopevisng.cpp b/sdrbase/dsp/scopevisng.cpp index cd5ce7a5e..4655bc4a4 100644 --- a/sdrbase/dsp/scopevisng.cpp +++ b/sdrbase/dsp/scopevisng.cpp @@ -491,6 +491,12 @@ bool ScopeVisNG::handleMessage(const Message& message) if (triggerIndex < m_triggerConditions.size()) { m_triggerConditions[triggerIndex].setData(conf.getTriggerData()); + + if (triggerIndex == m_focusedTriggerIndex) + { + computeDisplayTriggerLevels(); + m_glScope->updateDisplay(); + } } return true; @@ -572,3 +578,45 @@ void ScopeVisNG::initTraceBuffers() } } } + +void ScopeVisNG::computeDisplayTriggerLevels() +{ + std::vector::iterator itData = m_traces.m_tracesData.begin(); + + for (; itData != m_traces.m_tracesData.end(); ++itData) + { + if (m_triggerConditions[m_focusedTriggerIndex].m_projector->getProjectionType() == itData->m_projectionType) + { + float level = m_triggerConditions[m_focusedTriggerIndex].m_triggerData.m_triggerLevel; + float levelPowerLin = level + 1.0f; + float levelPowerdB = (100.0f * (level - 1.0f)); + float v; + + if (itData->m_projectionType == ProjectionMagLin) + { + v = (levelPowerLin - itData->m_ofs)*itData->m_amp - 1.0f; + } + else if (itData->m_projectionType == ProjectionMagDB) + { + float ofsdB = itData->m_ofs * 100.0f; + v = ((levelPowerdB + 100.0f - ofsdB)*itData->m_amp)/50.0f - 1.0f; + } + else + { + v = (level - itData->m_ofs) * itData->m_amp; + } + + if(v > 1.0f) { + v = 1.0f; + } else if (v < -1.0f) { + v = -1.0f; + } + + itData->m_triggerDisplayLevel = v; + } + else + { + itData->m_triggerDisplayLevel = 2.0f; + } + } +} diff --git a/sdrbase/dsp/scopevisng.h b/sdrbase/dsp/scopevisng.h index 6a738818f..a7ca9cfc3 100644 --- a/sdrbase/dsp/scopevisng.h +++ b/sdrbase/dsp/scopevisng.h @@ -729,7 +729,7 @@ private: bool condition, trigger; if (triggerCondition.m_projector->getProjectionType() == ProjectionMagDB) { - condition = triggerCondition.m_projector->run(s) > m_levelPwoerDB; + condition = triggerCondition.m_projector->run(s) > m_levelPowerDB; } else if (triggerCondition.m_projector->getProjectionType() == ProjectionMagLin) { condition = triggerCondition.m_projector->run(s) > m_levelPowerLin; } else { @@ -772,11 +772,11 @@ private: void computeLevels() { m_levelPowerLin = m_level + 1.0f; - m_levelPwoerDB = (100.0f * (m_level - 1.0f)); + m_levelPowerDB = (100.0f * (m_level - 1.0f)); } Real m_level; - Real m_levelPwoerDB; + Real m_levelPowerDB; Real m_levelPowerLin; bool m_reset; }; @@ -837,6 +837,7 @@ private: * - every time a trace data changes: projection type, amp, offset * - every time a trace data is added or removed */ + void computeDisplayTriggerLevels(); };