From acbaa14dbdce7729a243ef93406dfe215f874100 Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 25 Oct 2018 13:12:49 +0200 Subject: [PATCH] Scope: some code refactoring to make it more elegant. Updated Debian changelog --- debian/changelog | 1 + sdrgui/dsp/scopevis.cpp | 90 ++++++++++++++++++++--------------------- 2 files changed, 44 insertions(+), 47 deletions(-) diff --git a/debian/changelog b/debian/changelog index f88a1fb45..21a540f07 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ sdrangel (4.2.4-1) unstable; urgency=medium * LimeSDR: use LimeSuite 18.10.0 for builds * DSD demod: use 1 dB steps for squelch + * Scope: fixed some trigger issues. Fixes issue #233 -- Edouard Griffiths, F4EXB Wed, 24 Oct 2018 21:14:18 +0200 diff --git a/sdrgui/dsp/scopevis.cpp b/sdrgui/dsp/scopevis.cpp index 3cbb97052..203cf3fe8 100644 --- a/sdrgui/dsp/scopevis.cpp +++ b/sdrgui/dsp/scopevis.cpp @@ -313,62 +313,32 @@ void ScopeVis::processTrace(const SampleVector::const_iterator& cbegin, const Sa m_triggerState = TriggerTriggered; } } - else + else if ((m_triggerState == TriggerUntriggered) || (m_triggerState == TriggerDelay)) // look for trigger or past trigger in delay mode { - if ((m_triggerState == TriggerUntriggered) || (m_triggerState == TriggerDelay)) + TriggerCondition* triggerCondition = m_triggerConditions[m_currentTriggerIndex]; // current trigger condition + + while (begin < end) { - TriggerCondition* triggerCondition = m_triggerConditions[m_currentTriggerIndex]; // current trigger condition - - while (begin < end) + if (m_triggerState == TriggerDelay) // delayed trigger { - if (m_triggerState == TriggerDelay) + if (triggerCondition->m_triggerDelayCount > 0) // skip samples during delay period { - if (triggerCondition->m_triggerDelayCount > 0) // skip samples during delay period - { - begin += triggerCondition->m_triggerDelayCount; - triggerCondition->m_triggerDelayCount = 0; - continue; - } - else // process trigger - { - if (nextTrigger()) // move to next trigger and keep going - { - m_triggerComparator.reset(); - m_triggerState = TriggerUntriggered; - ++begin; - continue; - } - else // this was the last trigger then start trace - { - m_traceStart = true; // start trace processing - m_nbSamples = m_traceSize + m_maxTraceDelay; - m_triggerComparator.reset(); - m_triggerState = TriggerTriggered; - triggerPointToEnd = end - begin; - break; - } - } + begin += triggerCondition->m_triggerDelayCount; + triggerCondition->m_triggerDelayCount = 0; + continue; } - - // look for trigger - if (m_triggerComparator.triggered(*begin, *triggerCondition)) + else // process trigger { - if (triggerCondition->m_triggerData.m_triggerDelay > 0) - { - triggerCondition->m_triggerDelayCount = triggerCondition->m_triggerData.m_triggerDelay; // initialize delayed samples counter - m_triggerState = TriggerDelay; - ++begin; - continue; - } - if (nextTrigger()) // move to next trigger and keep going { m_triggerComparator.reset(); m_triggerState = TriggerUntriggered; + ++begin; + continue; } else // this was the last trigger then start trace { - m_traceStart = true; // start of trace processing + m_traceStart = true; // start trace processing m_nbSamples = m_traceSize + m_maxTraceDelay; m_triggerComparator.reset(); m_triggerState = TriggerTriggered; @@ -376,11 +346,37 @@ void ScopeVis::processTrace(const SampleVector::const_iterator& cbegin, const Sa break; } } + } - ++begin; - } // look for trigger - } // untriggered or delayed - } // triggering active + if (m_triggerComparator.triggered(*begin, *triggerCondition)) // matched the current trigger + { + if (triggerCondition->m_triggerData.m_triggerDelay > 0) + { + triggerCondition->m_triggerDelayCount = triggerCondition->m_triggerData.m_triggerDelay; // initialize delayed samples counter + m_triggerState = TriggerDelay; + ++begin; + continue; + } + + if (nextTrigger()) // move to next trigger and keep going + { + m_triggerComparator.reset(); + m_triggerState = TriggerUntriggered; + } + else // this was the last trigger then start trace + { + m_traceStart = true; // start of trace processing + m_nbSamples = m_traceSize + m_maxTraceDelay; + m_triggerComparator.reset(); + m_triggerState = TriggerTriggered; + triggerPointToEnd = end - begin; + break; + } + } + + ++begin; + } // look for trigger + } // untriggered or delayed // trace process