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

pull/263/head
f4exb 2018-10-16 18:43:46 +02:00
rodzic a03165c688
commit efb48ce1cc
6 zmienionych plików z 69 dodań i 21 usunięć

Wyświetl plik

@ -42,6 +42,7 @@ const uint ScopeVis::m_traceChunkSize = 4800;
ScopeVis::ScopeVis(GLScope* glScope) :
m_glScope(glScope),
m_preTriggerDelay(0),
m_livePreTriggerDelay(0),
m_currentTriggerIndex(0),
m_focusedTriggerIndex(0),
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_traces.resize(m_traceSize);
@ -102,7 +103,16 @@ void ScopeVis::setTraceSize(uint32_t traceSize)
initTraceBuffers();
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)
{
m_preTriggerDelay = triggerPre;
if (m_glScope) {
m_glScope->setTriggerPre(m_preTriggerDelay);
}
setPreTriggerDelay(triggerPre);
}
if (freeRun != m_freeRun)
@ -844,16 +850,20 @@ bool ScopeVis::handleMessage(const Message& message)
if (memoryIndex != m_currentTraceMemoryIndex)
{
// transition from live mode
if (memoryIndex == 0) {
if (m_currentTraceMemoryIndex == 0)
{
m_liveTraceSize = m_traceSize;
m_livePreTriggerDelay = m_preTriggerDelay;
}
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
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
{

Wyświetl plik

@ -172,9 +172,10 @@ public:
SimpleSerializer s(1);
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();
s.writeBlob(3, buffer);
s.writeBlob(4, buffer);
return s.final();
}
@ -189,16 +190,18 @@ public:
if (d.getVersion() == 1)
{
uint32_t traceSize;
uint32_t traceSize, preTriggerDelay;
int sampleRate;
QByteArray buf;
bool traceDiscreteMemorySuccess;
d.readU32(1, &traceSize, m_traceChunkSize);
d.readS32(2, &sampleRate, 0);
d.readU32(2, &preTriggerDelay, 0);
d.readS32(3, &sampleRate, 0);
setSampleRate(sampleRate);
setTraceSize(traceSize);
d.readBlob(3, &buf);
setTraceSize(traceSize, true);
setPreTriggerDelay(preTriggerDelay, true);
d.readBlob(4, &buf);
traceDiscreteMemorySuccess = m_traceDiscreteMemory.deserialize(buf);
if (traceDiscreteMemorySuccess && (m_glScope) && (m_currentTraceMemoryIndex > 0)) {
@ -1087,6 +1090,7 @@ private:
GLScope* m_glScope;
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
uint32_t m_currentTriggerIndex; //!< Index of current index in the chain
uint32_t m_focusedTriggerIndex; //!< Index of the trigger that has focus
@ -1170,7 +1174,12 @@ private:
/**
* 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);
};

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -104,6 +104,8 @@ void GLScopeGUI::setBuddies(MessageQueue* messageQueue, ScopeVis* scopeVis, GLSc
setEnabled(true);
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();
fillProjectionCombo(ui->traceMode);
@ -149,6 +151,21 @@ void GLScopeGUI::on_scope_sampleRateChanged(int sampleRate)
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()
{
}

Wyświetl plik

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