1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-06-25 05:25:27 -04:00

Scope: save/load traces memory: fixed trace length and pre trigger info propagation to GUI

This commit is contained in:
f4exb 2018-10-16 18:43:46 +02:00
parent a03165c688
commit efb48ce1cc
6 changed files with 69 additions and 21 deletions

View File

@ -42,6 +42,7 @@ const uint ScopeVis::m_traceChunkSize = 4800;
ScopeVis::ScopeVis(GLScope* glScope) : ScopeVis::ScopeVis(GLScope* glScope) :
m_glScope(glScope), m_glScope(glScope),
m_preTriggerDelay(0), m_preTriggerDelay(0),
m_livePreTriggerDelay(0),
m_currentTriggerIndex(0), m_currentTriggerIndex(0),
m_focusedTriggerIndex(0), m_focusedTriggerIndex(0),
m_triggerState(TriggerUntriggered), m_triggerState(TriggerUntriggered),
@ -94,7 +95,7 @@ void ScopeVis::setSampleRate(int sampleRate)
} }
} }
void ScopeVis::setTraceSize(uint32_t traceSize) void ScopeVis::setTraceSize(uint32_t traceSize, bool emitSignal)
{ {
m_traceSize = traceSize; m_traceSize = traceSize;
m_traces.resize(m_traceSize); m_traces.resize(m_traceSize);
@ -102,7 +103,16 @@ void ScopeVis::setTraceSize(uint32_t traceSize)
initTraceBuffers(); initTraceBuffers();
if (m_glScope) { if (m_glScope) {
m_glScope->setTraceSize(m_traceSize); m_glScope->setTraceSize(m_traceSize, emitSignal);
}
}
void ScopeVis::setPreTriggerDelay(uint32_t preTriggerDelay, bool emitSignal)
{
m_preTriggerDelay = preTriggerDelay;
if (m_glScope) {
m_glScope->setTriggerPre(m_preTriggerDelay, emitSignal);
} }
} }
@ -652,11 +662,7 @@ bool ScopeVis::handleMessage(const Message& message)
if (m_preTriggerDelay != triggerPre) if (m_preTriggerDelay != triggerPre)
{ {
m_preTriggerDelay = triggerPre; setPreTriggerDelay(triggerPre);
if (m_glScope) {
m_glScope->setTriggerPre(m_preTriggerDelay);
}
} }
if (freeRun != m_freeRun) if (freeRun != m_freeRun)
@ -844,16 +850,20 @@ bool ScopeVis::handleMessage(const Message& message)
if (memoryIndex != m_currentTraceMemoryIndex) if (memoryIndex != m_currentTraceMemoryIndex)
{ {
// transition from live mode // transition from live mode
if (memoryIndex == 0) { if (m_currentTraceMemoryIndex == 0)
{
m_liveTraceSize = m_traceSize; m_liveTraceSize = m_traceSize;
m_livePreTriggerDelay = m_preTriggerDelay;
} }
m_currentTraceMemoryIndex = memoryIndex; m_currentTraceMemoryIndex = memoryIndex;
if (m_currentTraceMemoryIndex == 0) // transition to live mode // transition to live mode
if (m_currentTraceMemoryIndex == 0)
{ {
setSampleRate(m_liveSampleRate); // reset to live rate setSampleRate(m_liveSampleRate); // reset to live rate
setTraceSize(m_liveTraceSize); // reset to live trace size setTraceSize(m_liveTraceSize, true); // reset to live trace size
setPreTriggerDelay(m_livePreTriggerDelay, true); // reset to live pre-trigger delay
} }
else else
{ {

View File

@ -172,9 +172,10 @@ public:
SimpleSerializer s(1); SimpleSerializer s(1);
s.writeU32(1, m_traceSize); s.writeU32(1, m_traceSize);
s.writeS32(2, m_sampleRate); s.writeU32(2, m_preTriggerDelay);
s.writeS32(3, m_sampleRate);
QByteArray buffer = m_traceDiscreteMemory.serialize(); QByteArray buffer = m_traceDiscreteMemory.serialize();
s.writeBlob(3, buffer); s.writeBlob(4, buffer);
return s.final(); return s.final();
} }
@ -189,16 +190,18 @@ public:
if (d.getVersion() == 1) if (d.getVersion() == 1)
{ {
uint32_t traceSize; uint32_t traceSize, preTriggerDelay;
int sampleRate; int sampleRate;
QByteArray buf; QByteArray buf;
bool traceDiscreteMemorySuccess; bool traceDiscreteMemorySuccess;
d.readU32(1, &traceSize, m_traceChunkSize); d.readU32(1, &traceSize, m_traceChunkSize);
d.readS32(2, &sampleRate, 0); d.readU32(2, &preTriggerDelay, 0);
d.readS32(3, &sampleRate, 0);
setSampleRate(sampleRate); setSampleRate(sampleRate);
setTraceSize(traceSize); setTraceSize(traceSize, true);
d.readBlob(3, &buf); setPreTriggerDelay(preTriggerDelay, true);
d.readBlob(4, &buf);
traceDiscreteMemorySuccess = m_traceDiscreteMemory.deserialize(buf); traceDiscreteMemorySuccess = m_traceDiscreteMemory.deserialize(buf);
if (traceDiscreteMemorySuccess && (m_glScope) && (m_currentTraceMemoryIndex > 0)) { if (traceDiscreteMemorySuccess && (m_glScope) && (m_currentTraceMemoryIndex > 0)) {
@ -1087,6 +1090,7 @@ private:
GLScope* m_glScope; GLScope* m_glScope;
uint32_t m_preTriggerDelay; //!< Pre-trigger delay in number of samples uint32_t m_preTriggerDelay; //!< Pre-trigger delay in number of samples
uint32_t m_livePreTriggerDelay; //!< Pre-trigger delay in number of samples in live mode
std::vector<TriggerCondition*> m_triggerConditions; //!< Chain of triggers std::vector<TriggerCondition*> m_triggerConditions; //!< Chain of triggers
uint32_t m_currentTriggerIndex; //!< Index of current index in the chain uint32_t m_currentTriggerIndex; //!< Index of current index in the chain
uint32_t m_focusedTriggerIndex; //!< Index of the trigger that has focus uint32_t m_focusedTriggerIndex; //!< Index of the trigger that has focus
@ -1170,7 +1174,12 @@ private:
/** /**
* Set the traces size * Set the traces size
*/ */
void setTraceSize(uint32_t traceSize); void setTraceSize(uint32_t traceSize, bool emitSignal = false);
/**
* Set the pre trigger delay
*/
void setPreTriggerDelay(uint32_t preTriggerDelay, bool emitSignal = false);
}; };

View File

@ -938,11 +938,15 @@ void GLScope::setTimeBase(int timeBase)
update(); update();
} }
void GLScope::setTriggerPre(uint32_t triggerPre) void GLScope::setTriggerPre(uint32_t triggerPre, bool emitSignal)
{ {
m_triggerPre = triggerPre; m_triggerPre = triggerPre;
m_configChanged = true; m_configChanged = true;
update(); update();
if (emitSignal) {
emit preTriggerChanged(m_triggerPre);
}
} }
void GLScope::setTimeOfsProMill(int timeOfsProMill) void GLScope::setTimeOfsProMill(int timeOfsProMill)
@ -966,11 +970,15 @@ void GLScope::setDisplayMode(DisplayMode displayMode)
update(); update();
} }
void GLScope::setTraceSize(int traceSize) void GLScope::setTraceSize(int traceSize, bool emitSignal)
{ {
m_traceSize = traceSize; m_traceSize = traceSize;
m_configChanged = true; m_configChanged = true;
update(); update();
if (emitSignal) {
emit traceSizeChanged(m_traceSize);
}
} }
void GLScope::updateDisplay() void GLScope::updateDisplay()

View File

@ -58,13 +58,13 @@ public:
int getSampleRate() const { return m_sampleRate; } int getSampleRate() const { return m_sampleRate; }
int getTraceSize() const { return m_traceSize; } int getTraceSize() const { return m_traceSize; }
void setTriggerPre(uint32_t triggerPre); //!< number of samples void setTriggerPre(uint32_t triggerPre, bool emitSignal = false); //!< number of samples
void setTimeOfsProMill(int timeOfsProMill); void setTimeOfsProMill(int timeOfsProMill);
void setSampleRate(int sampleRate); void setSampleRate(int sampleRate);
void setTimeBase(int timeBase); void setTimeBase(int timeBase);
void setFocusedTraceIndex(uint32_t traceIndex); void setFocusedTraceIndex(uint32_t traceIndex);
void setDisplayMode(DisplayMode displayMode); void setDisplayMode(DisplayMode displayMode);
void setTraceSize(int trceSize); void setTraceSize(int trceSize, bool emitSignal = false);
void updateDisplay(); void updateDisplay();
void setDisplayGridIntensity(int intensity); void setDisplayGridIntensity(int intensity);
void setDisplayTraceIntensity(int intensity); void setDisplayTraceIntensity(int intensity);
@ -78,6 +78,8 @@ public:
signals: signals:
void sampleRateChanged(int); void sampleRateChanged(int);
void traceSizeChanged(uint32_t);
void preTriggerChanged(uint32_t); //!< number of samples
private: private:
std::vector<ScopeVis::TraceData> *m_tracesData; std::vector<ScopeVis::TraceData> *m_tracesData;

View File

@ -104,6 +104,8 @@ void GLScopeGUI::setBuddies(MessageQueue* messageQueue, ScopeVis* scopeVis, GLSc
setEnabled(true); setEnabled(true);
connect(m_glScope, SIGNAL(sampleRateChanged(int)), this, SLOT(on_scope_sampleRateChanged(int))); connect(m_glScope, SIGNAL(sampleRateChanged(int)), this, SLOT(on_scope_sampleRateChanged(int)));
connect(m_glScope, SIGNAL(traceSizeChanged(uint32_t)), this, SLOT(on_scope_traceSizeChanged(uint32_t)));
connect(m_glScope, SIGNAL(preTriggerChanged(uint32_t)), this, SLOT(on_scope_preTriggerChanged(uint32_t)));
ui->traceMode->clear(); ui->traceMode->clear();
fillProjectionCombo(ui->traceMode); fillProjectionCombo(ui->traceMode);
@ -149,6 +151,21 @@ void GLScopeGUI::on_scope_sampleRateChanged(int sampleRate)
setTrigDelayDisplay(); setTrigDelayDisplay();
} }
void GLScopeGUI::on_scope_traceSizeChanged(uint32_t traceNbSamples)
{
qDebug("GLScopeGUI::on_scope_traceSizeChanged: %u", traceNbSamples);
m_traceLenMult = traceNbSamples / ScopeVis::m_traceChunkSize;
ui->traceLen->setValue(m_traceLenMult);
setTraceLenDisplay();
}
void GLScopeGUI::on_scope_preTriggerChanged(uint32_t preTriggerNbSamples)
{
qDebug("GLScopeGUI::on_scope_preTriggerChanged: %u", preTriggerNbSamples);
ui->trigPre->setValue(preTriggerNbSamples*100 / m_glScope->getTraceSize()); // slider position is a percentage value of the trace size
setTrigPreDisplay();
}
void GLScopeGUI::resetToDefaults() void GLScopeGUI::resetToDefaults()
{ {
} }

View File

@ -185,6 +185,8 @@ private:
private slots: private slots:
void on_scope_sampleRateChanged(int value); void on_scope_sampleRateChanged(int value);
void on_scope_traceSizeChanged(uint32_t value);
void on_scope_preTriggerChanged(uint32_t value);
// First row // First row
void on_onlyX_toggled(bool checked); void on_onlyX_toggled(bool checked);
void on_onlyY_toggled(bool checked); void on_onlyY_toggled(bool checked);