GLScope: implemented trigger counts

This commit is contained in:
f4exb 2015-11-05 00:07:51 +01:00
parent 1c7bab1762
commit 2917f015ea
4 changed files with 58 additions and 17 deletions

View File

@ -34,7 +34,8 @@ public:
bool triggerPositiveEdge, bool triggerPositiveEdge,
bool triggerBothEdges, bool triggerBothEdges,
uint triggerPre, uint triggerPre,
uint triggerDelay, uint triggerDelay,
uint triggerCounts,
uint traceSize); uint traceSize);
void setOneShot(bool oneShot); void setOneShot(bool oneShot);
@ -59,6 +60,7 @@ private:
Real getTriggerBothEdges() const { return m_triggerBothEdges; } Real getTriggerBothEdges() const { return m_triggerBothEdges; }
uint getTriggerPre() const { return m_triggerPre; } uint getTriggerPre() const { return m_triggerPre; }
uint getTriggerDelay() const { return m_triggerDelay; } uint getTriggerDelay() const { return m_triggerDelay; }
uint getTriggerCounts() const { return m_triggerCounts; }
uint getTraceSize() const { return m_traceSize; } uint getTraceSize() const { return m_traceSize; }
static MsgConfigureScopeVis* create(uint triggerIndex, static MsgConfigureScopeVis* create(uint triggerIndex,
@ -67,7 +69,8 @@ private:
bool triggerPositiveEdge, bool triggerPositiveEdge,
bool triggerBothEdges, bool triggerBothEdges,
uint triggerPre, uint triggerPre,
uint triggerDelay, uint triggerDelay,
uint triggerCounts,
uint traceSize) uint traceSize)
{ {
return new MsgConfigureScopeVis(triggerIndex, return new MsgConfigureScopeVis(triggerIndex,
@ -77,6 +80,7 @@ private:
triggerBothEdges, triggerBothEdges,
triggerPre, triggerPre,
triggerDelay, triggerDelay,
triggerCounts,
traceSize); traceSize);
} }
@ -88,6 +92,7 @@ private:
bool m_triggerBothEdges; bool m_triggerBothEdges;
uint m_triggerPre; uint m_triggerPre;
uint m_triggerDelay; uint m_triggerDelay;
uint m_triggerCounts;
uint m_traceSize; uint m_traceSize;
MsgConfigureScopeVis(uint triggerIndex, MsgConfigureScopeVis(uint triggerIndex,
@ -97,6 +102,7 @@ private:
bool triggerBothEdges, bool triggerBothEdges,
uint triggerPre, uint triggerPre,
uint triggerDelay, uint triggerDelay,
uint triggerCounts,
uint traceSize) : uint traceSize) :
Message(), Message(),
m_triggerIndex(triggerIndex), m_triggerIndex(triggerIndex),
@ -106,6 +112,7 @@ private:
m_triggerBothEdges(triggerBothEdges), m_triggerBothEdges(triggerBothEdges),
m_triggerPre(triggerPre), m_triggerPre(triggerPre),
m_triggerDelay(triggerDelay), m_triggerDelay(triggerDelay),
m_triggerCounts(triggerCounts),
m_traceSize(traceSize) m_traceSize(traceSize)
{ } { }
}; };
@ -148,6 +155,8 @@ private:
bool m_armed; bool m_armed;
uint m_triggerDelay[m_nbTriggers]; //!< Trigger delay in number of trace sizes uint m_triggerDelay[m_nbTriggers]; //!< Trigger delay in number of trace sizes
uint m_triggerDelayCount; //!< trace sizes delay counter uint m_triggerDelayCount; //!< trace sizes delay counter
uint m_triggerCounts[m_nbTriggers]; //!< Number of trigger events before the actual trigger is kicked off
uint m_triggerCount;
int m_sampleRate; int m_sampleRate;
SampleVector::const_iterator m_triggerPoint; SampleVector::const_iterator m_triggerPoint;
Real m_prevArg; Real m_prevArg;

View File

@ -52,6 +52,7 @@ private:
qint32 m_amp2OffsetFine; qint32 m_amp2OffsetFine;
int m_displayGridIntensity; int m_displayGridIntensity;
int m_displayTraceIntensity; int m_displayTraceIntensity;
quint32 m_triggerIndex;
qint32 m_triggerChannel; qint32 m_triggerChannel;
qint32 m_triggerLevelCoarse; // percent of full range qint32 m_triggerLevelCoarse; // percent of full range
qint32 m_triggerLevelFine; // percent of coarse qint32 m_triggerLevelFine; // percent of coarse
@ -59,6 +60,7 @@ private:
bool m_triggerBothEdges; bool m_triggerBothEdges;
qint32 m_triggerPre; qint32 m_triggerPre;
qint32 m_triggerDelay; qint32 m_triggerDelay;
qint32 m_triggerCounts;
qint32 m_traceLenMult; qint32 m_traceLenMult;
static const qreal amps[11]; static const qreal amps[11];
@ -94,6 +96,7 @@ private slots:
void on_trigPre_valueChanged(int value); void on_trigPre_valueChanged(int value);
void on_trigDelay_valueChanged(int value); void on_trigDelay_valueChanged(int value);
void on_memHistory_valueChanged(int value); void on_memHistory_valueChanged(int value);
void on_trigCount_valueChanged(int value);
void on_horizView_clicked(); void on_horizView_clicked();
void on_vertView_clicked(); void on_vertView_clicked();

View File

@ -21,6 +21,7 @@ ScopeVis::ScopeVis(GLScope* glScope) :
m_triggerDelayCount(0), m_triggerDelayCount(0),
m_triggerOneShot(false), m_triggerOneShot(false),
m_armed(false), m_armed(false),
m_triggerCount(0),
m_sampleRate(0), m_sampleRate(0),
m_prevArg(0.0), m_prevArg(0.0),
m_firstArg(true) m_firstArg(true)
@ -37,6 +38,7 @@ ScopeVis::ScopeVis(GLScope* glScope) :
m_triggerPositiveEdge[i] = true; m_triggerPositiveEdge[i] = true;
m_triggerBothEdges[i] = false; m_triggerBothEdges[i] = false;
m_triggerDelay[i] = 0; m_triggerDelay[i] = 0;
m_triggerCounts[i] = 0;
} }
} }
@ -52,6 +54,7 @@ void ScopeVis::configure(MessageQueue* msgQueue,
bool triggerBothEdges, bool triggerBothEdges,
uint triggerPre, uint triggerPre,
uint triggerDelay, uint triggerDelay,
uint triggerCounts,
uint traceSize) uint traceSize)
{ {
Message* cmd = MsgConfigureScopeVis::create(triggerIndex, Message* cmd = MsgConfigureScopeVis::create(triggerIndex,
@ -61,6 +64,7 @@ void ScopeVis::configure(MessageQueue* msgQueue,
triggerBothEdges, triggerBothEdges,
triggerPre, triggerPre,
triggerDelay, triggerDelay,
triggerCounts,
traceSize); traceSize);
msgQueue->push(cmd); msgQueue->push(cmd);
} }
@ -289,6 +293,7 @@ bool ScopeVis::handleMessage(const Message& message)
} }
m_triggerDelay[index] = conf.getTriggerDelay(); m_triggerDelay[index] = conf.getTriggerDelay();
m_triggerCounts[index] = conf.getTriggerCounts();
uint newSize = conf.getTraceSize(); uint newSize = conf.getTraceSize();
if (newSize != m_trace.size()) if (newSize != m_trace.size())
@ -309,6 +314,7 @@ bool ScopeVis::handleMessage(const Message& message)
<< " m_triggerBothEdges: " << (m_triggerBothEdges[index] ? "yes" : "no") << " m_triggerBothEdges: " << (m_triggerBothEdges[index] ? "yes" : "no")
<< " m_preTrigger: " << m_triggerPre << " m_preTrigger: " << m_triggerPre
<< " m_triggerDelay: " << m_triggerDelay[index] << " m_triggerDelay: " << m_triggerDelay[index]
<< " m_triggerCounts: " << m_triggerCounts[index]
<< " m_traceSize: " << m_trace.size(); << " m_traceSize: " << m_trace.size();
return true; return true;
@ -396,23 +402,32 @@ void ScopeVis::setOneShot(bool oneShot)
bool ScopeVis::nextTrigger() bool ScopeVis::nextTrigger()
{ {
m_triggerIndex++; if (m_triggerCount < m_triggerCounts[m_triggerIndex])
m_prevTrigger = false;
m_triggerDelayCount = 0;
m_armed = false;
if (m_triggerIndex == m_nbTriggers)
{ {
m_triggerIndex = 0; m_triggerCount++;
return false; return true;
}
else if (m_triggerChannel[m_triggerIndex] == TriggerFreeRun)
{
m_triggerIndex = 0;
return false;
} }
else else
{ {
return true; m_triggerIndex++;
m_prevTrigger = false;
m_triggerDelayCount = 0;
m_triggerCount = 0;
m_armed = false;
if (m_triggerIndex == m_nbTriggers)
{
m_triggerIndex = 0;
return false;
}
else if (m_triggerChannel[m_triggerIndex] == TriggerFreeRun)
{
m_triggerIndex = 0;
return false;
}
else
{
return true;
}
} }
} }

View File

@ -29,6 +29,7 @@ GLScopeGUI::GLScopeGUI(QWidget* parent) :
m_amp2OffsetFine(0), m_amp2OffsetFine(0),
m_displayGridIntensity(1), m_displayGridIntensity(1),
m_displayTraceIntensity(50), m_displayTraceIntensity(50),
m_triggerIndex(0),
m_triggerChannel(ScopeVis::TriggerFreeRun), m_triggerChannel(ScopeVis::TriggerFreeRun),
m_triggerLevelCoarse(0), m_triggerLevelCoarse(0),
m_triggerLevelFine(0), m_triggerLevelFine(0),
@ -36,6 +37,7 @@ GLScopeGUI::GLScopeGUI(QWidget* parent) :
m_triggerBothEdges(false), m_triggerBothEdges(false),
m_triggerPre(0), m_triggerPre(0),
m_triggerDelay(0), m_triggerDelay(0),
m_triggerCounts(0),
m_traceLenMult(20) m_traceLenMult(20)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -246,13 +248,14 @@ void GLScopeGUI::applyTriggerSettings()
m_glScope->setTriggerPre(m_triggerPre/100.0); // [0.0, 1.0] m_glScope->setTriggerPre(m_triggerPre/100.0); // [0.0, 1.0]
m_scopeVis->configure(m_messageQueue, m_scopeVis->configure(m_messageQueue,
0, // FIXME 0, // FIXME: trigger index
(ScopeVis::TriggerChannel) m_triggerChannel, (ScopeVis::TriggerChannel) m_triggerChannel,
triggerLevel, triggerLevel,
m_triggerPositiveEdge, m_triggerPositiveEdge,
m_triggerBothEdges, m_triggerBothEdges,
preTriggerSamples, preTriggerSamples,
m_triggerDelay, m_triggerDelay,
m_triggerCounts,
m_traceLenMult * ScopeVis::m_traceChunkSize); m_traceLenMult * ScopeVis::m_traceChunkSize);
} }
@ -748,6 +751,17 @@ void GLScopeGUI::on_memHistory_valueChanged(int value)
} }
} }
void GLScopeGUI::on_trigCount_valueChanged(int value)
{
m_triggerCounts = value;
QString text;
text.sprintf("%02d", value);
ui->trigCountText->setText(text);
applyTriggerSettings();
}
void GLScopeGUI::on_slopePos_clicked() void GLScopeGUI::on_slopePos_clicked()
{ {
m_triggerPositiveEdge = true; m_triggerPositiveEdge = true;