1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-03 05:37:50 -04:00

GLScope redesign: ScopeVis: processTraces by start iterator and length. TraceBackBuffer: m_endPoint is now private

This commit is contained in:
f4exb 2021-05-31 19:35:14 +02:00
parent 657d2d5996
commit 4283159e6a
3 changed files with 28 additions and 15 deletions

View File

@ -301,13 +301,13 @@ void ScopeVis::processMemoryTrace()
traceMemoryIndex += GLScopeSettings::m_nbTraceMemories; traceMemoryIndex += GLScopeSettings::m_nbTraceMemories;
} }
SampleVector::const_iterator mend = m_traceDiscreteMemory.at(traceMemoryIndex).m_endPoint; SampleVector::const_iterator mend = m_traceDiscreteMemory.at(traceMemoryIndex).getEndPoint();
SampleVector::const_iterator mbegin = mend - m_traceSize; SampleVector::const_iterator mbegin = mend - m_traceSize;
SampleVector::const_iterator mbegin_tb = mbegin - m_maxTraceDelay; SampleVector::const_iterator mbegin_tb = mbegin - m_maxTraceDelay;
m_nbSamples = m_traceSize + m_maxTraceDelay; m_nbSamples = m_traceSize + m_maxTraceDelay;
processTraces(mbegin_tb, mbegin, true); // traceback processTraces(mbegin_tb, m_maxTraceDelay, true); // traceback
processTraces(mbegin, mend, false); processTraces(mbegin, m_traceSize, false);
} }
} }
@ -408,7 +408,8 @@ void ScopeVis::processTrace(const std::vector<SampleVector::const_iterator>& vbe
{ {
int remainder; int remainder;
int count = end - begin; // number of samples in traceback buffer past the current point int count = end - begin; // number of samples in traceback buffer past the current point
SampleVector::iterator mend = m_traceDiscreteMemory.current().current(); SampleVector::iterator mend;
m_traceDiscreteMemory.current().current(mend);
SampleVector::iterator mbegin = mend - count; SampleVector::iterator mbegin = mend - count;
if (m_traceStart) // start of trace processing if (m_traceStart) // start of trace processing
@ -424,27 +425,27 @@ void ScopeVis::processTrace(const std::vector<SampleVector::const_iterator>& vbe
// process until begin point // process until begin point
if (m_maxTraceDelay > 0) { // trace back if (m_maxTraceDelay > 0) { // trace back
processTraces(mbegin - m_preTriggerDelay - m_maxTraceDelay, mbegin - m_preTriggerDelay, true); processTraces(mbegin - m_preTriggerDelay - m_maxTraceDelay, m_maxTraceDelay, true);
} }
if (m_preTriggerDelay > 0) { // pre-trigger if (m_preTriggerDelay > 0) { // pre-trigger
processTraces(mbegin - m_preTriggerDelay, mbegin); processTraces(mbegin - m_preTriggerDelay, m_preTriggerDelay);
} }
// process the rest of the trace // process the rest of the trace
remainder = processTraces(mbegin, mend); remainder = processTraces(mbegin, count);
m_traceStart = false; m_traceStart = false;
} }
else // process the current trace else // process the current trace
{ {
remainder = processTraces(mbegin, mend); remainder = processTraces(mbegin, count);
} }
if (remainder >= 0) // finished if (remainder >= 0) // finished
{ {
mbegin = mend - remainder; mbegin = mend - remainder;
m_traceDiscreteMemory.current().m_endPoint = mbegin; m_traceDiscreteMemory.current().setEndPoint(mbegin);
m_traceDiscreteMemory.store(m_preTriggerDelay+remainder); // next memory trace. m_traceDiscreteMemory.store(m_preTriggerDelay+remainder); // next memory trace.
m_triggerState = TriggerUntriggered; m_triggerState = TriggerUntriggered;
m_triggerWaitForReset = m_triggerOneShot; m_triggerWaitForReset = m_triggerOneShot;
@ -506,9 +507,10 @@ bool ScopeVis::nextTrigger()
} }
} }
int ScopeVis::processTraces(const SampleVector::const_iterator& cbegin, const SampleVector::const_iterator& end, bool traceBack) int ScopeVis::processTraces(const SampleVector::const_iterator& cbegin, int ilength, bool traceBack)
{ {
SampleVector::const_iterator begin(cbegin); SampleVector::const_iterator begin(cbegin);
SampleVector::const_iterator end(cbegin + ilength);
uint32_t shift = (m_timeOfsProMill / 1000.0) * m_traceSize; uint32_t shift = (m_timeOfsProMill / 1000.0) * m_traceSize;
uint32_t length = m_traceSize / m_timeBase; uint32_t length = m_traceSize / m_timeBase;

View File

@ -529,7 +529,6 @@ private:
struct TraceBackBuffer struct TraceBackBuffer
{ {
TraceBuffer m_traceBuffer; TraceBuffer m_traceBuffer;
SampleVector::iterator m_endPoint;
TraceBackBuffer() { TraceBackBuffer() {
m_endPoint = m_traceBuffer.getCurrent(); m_endPoint = m_traceBuffer.getCurrent();
@ -551,8 +550,8 @@ private:
return m_traceBuffer.absoluteFill(); return m_traceBuffer.absoluteFill();
} }
SampleVector::iterator current() { void current(SampleVector::iterator& it) {
return m_traceBuffer.getCurrent(); m_traceBuffer.getCurrent(it);
} }
QByteArray serialize() const QByteArray serialize() const
@ -592,6 +591,17 @@ private:
return false; return false;
} }
} }
void setEndPoint(const SampleVector::iterator& endPoint) {
m_endPoint = endPoint;
}
SampleVector::iterator getEndPoint() {
return m_endPoint;
}
private:
SampleVector::iterator m_endPoint;
}; };
struct TraceBackDiscreteMemory struct TraceBackDiscreteMemory
@ -632,7 +642,7 @@ private:
uint32_t nextMemIndex = m_currentMemIndex < (m_memSize-1) ? m_currentMemIndex+1 : 0; uint32_t nextMemIndex = m_currentMemIndex < (m_memSize-1) ? m_currentMemIndex+1 : 0;
m_traceBackBuffers[nextMemIndex].reset(); m_traceBackBuffers[nextMemIndex].reset();
m_traceBackBuffers[nextMemIndex].write( m_traceBackBuffers[nextMemIndex].write(
m_traceBackBuffers[m_currentMemIndex].m_endPoint - samplesToReport, m_traceBackBuffers[m_currentMemIndex].getEndPoint() - samplesToReport,
samplesToReport samplesToReport
); );
m_currentMemIndex = nextMemIndex; m_currentMemIndex = nextMemIndex;
@ -1078,7 +1088,7 @@ private:
* - if finished it returns the number of unprocessed samples left in the buffer * - if finished it returns the number of unprocessed samples left in the buffer
* - if not finished it returns -1 * - if not finished it returns -1
*/ */
int processTraces(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool traceBack = false); int processTraces(const SampleVector::const_iterator& begin, int length, bool traceBack = false);
/** /**
* Get maximum trace delay * Get maximum trace delay

View File

@ -84,6 +84,7 @@ public:
} }
typename std::vector<T>::iterator getCurrent() { return m_data.begin() + m_currentPosition + m_size; } typename std::vector<T>::iterator getCurrent() { return m_data.begin() + m_currentPosition + m_size; }
void getCurrent(typename std::vector<T>::iterator& it) { it = m_data.begin() + m_currentPosition + m_size; }
typename std::vector<T>::const_iterator begin() const { return m_data.begin(); } typename std::vector<T>::const_iterator begin() const { return m_data.begin(); }
typename std::vector<T>::iterator begin() { return m_data.begin(); } typename std::vector<T>::iterator begin() { return m_data.begin(); }
unsigned int absoluteFill() const { return m_currentPosition; } unsigned int absoluteFill() const { return m_currentPosition; }