Implemented variable scope trace length

This commit is contained in:
f4exb 2015-07-22 01:06:42 +02:00
parent 2f195ce6de
commit 7f98710c19
3 changed files with 105 additions and 5 deletions

View File

@ -52,13 +52,14 @@ private:
qint32 m_triggerLevel; // percent
bool m_triggerPositiveEdge;
qint32 m_triggerPre;
qint32 m_traceSize;
qint32 m_traceLenMult;
static const qreal amps[11];
void applySettings();
void applyTriggerSettings();
void setTimeScaleDisplay();
void setTraceLenDisplay();
void setTimeOfsDisplay();
void setAmpScaleDisplay();
void setAmpOfsDisplay();
@ -71,6 +72,7 @@ private slots:
void on_scope_traceSizeChanged(int value);
void on_scope_sampleRateChanged(int value);
void on_time_valueChanged(int value);
void on_traceLen_valueChanged(int value);
void on_timeOfs_valueChanged(int value);
void on_dataMode_currentIndexChanged(int index);
void on_gridIntensity_valueChanged(int index);

View File

@ -29,7 +29,7 @@ GLScopeGUI::GLScopeGUI(QWidget* parent) :
m_triggerLevel(0.0),
m_triggerPositiveEdge(true),
m_triggerPre(0),
m_traceSize(96000)
m_traceLenMult(20)
{
ui->setupUi(this);
}
@ -82,6 +82,7 @@ QByteArray GLScopeGUI::serialize() const
s.writeBool(11, m_triggerPositiveEdge);
s.writeS32(12, m_displayTraceIntensity);
s.writeS32(13, m_triggerPre);
s.writeS32(14, m_traceLenMult);
return s.final();
}
@ -118,6 +119,9 @@ bool GLScopeGUI::deserialize(const QByteArray& data)
d.readS32(13, &m_triggerPre, 0);
ui->trigPre->setValue(m_triggerPre);
setTrigPreDisplay();
d.readS32(14, &m_traceLenMult, 20);
ui->traceLen->setValue(m_traceLenMult);
setTraceLenDisplay();
applySettings();
applyTriggerSettings();
return true;
@ -185,7 +189,12 @@ void GLScopeGUI::applyTriggerSettings()
m_glScope->setTriggerChannel((ScopeVis::TriggerChannel) m_triggerChannel);
m_glScope->setTriggerLevel(m_triggerLevel / 100.0);
m_scopeVis->configure(m_messageQueue, (ScopeVis::TriggerChannel) m_triggerChannel, triggerLevel, m_triggerPositiveEdge, preTriggerSamples, 96000); // TODO: pass trace size as last parameter
m_scopeVis->configure(m_messageQueue,
(ScopeVis::TriggerChannel) m_triggerChannel,
triggerLevel,
m_triggerPositiveEdge,
preTriggerSamples,
m_traceLenMult * ScopeVis::m_traceChunkSize);
}
void GLScopeGUI::setTrigLevelDisplay()
@ -238,6 +247,7 @@ void GLScopeGUI::on_ampOfs_valueChanged(int value)
void GLScopeGUI::on_scope_traceSizeChanged(int)
{
setTimeScaleDisplay();
setTraceLenDisplay();
setTimeOfsDisplay();
setTrigPreDisplay();
applySettings();
@ -248,6 +258,7 @@ void GLScopeGUI::on_scope_sampleRateChanged(int)
{
m_sampleRate = m_glScope->getSampleRate();
setTimeScaleDisplay();
setTraceLenDisplay();
setTimeOfsDisplay();
setTrigPreDisplay();
applySettings();
@ -272,6 +283,30 @@ void GLScopeGUI::setTimeScaleDisplay()
else ui->timeText->setText(tr("%1\ns").arg(t * 1.0));
}
void GLScopeGUI::setTraceLenDisplay()
{
uint n_samples = m_traceLenMult * ScopeVis::m_traceChunkSize;
if (n_samples < 1000) {
ui->traceLenText->setToolTip(tr("%1S").arg(n_samples));
} else if (n_samples < 1000000) {
ui->traceLenText->setToolTip(tr("%1kS").arg(n_samples/1000.0));
} else {
ui->traceLenText->setToolTip(tr("%1MS").arg(n_samples/1000000.0));
}
m_sampleRate = m_glScope->getSampleRate();
qreal t = (m_glScope->getTraceSize() * 1.0 / m_sampleRate);
if(t < 0.000001)
ui->traceLenText->setText(tr("%1\nns").arg(t * 1000000000.0));
else if(t < 0.001)
ui->traceLenText->setText(tr("%1\nµs").arg(t * 1000000.0));
else if(t < 1.0)
ui->traceLenText->setText(tr("%1\nms").arg(t * 1000.0));
else ui->traceLenText->setText(tr("%1\ns").arg(t * 1.0));
}
void GLScopeGUI::setTimeOfsDisplay()
{
qreal dt = m_glScope->getTraceSize() * (m_timeOffset/100.0) / m_sampleRate;
@ -307,6 +342,16 @@ void GLScopeGUI::on_time_valueChanged(int value)
m_glScope->setTimeBase(m_timeBase);
}
void GLScopeGUI::on_traceLen_valueChanged(int value)
{
if ((value < 1) || (value > 100)) {
return;
}
m_traceLenMult = value;
setTraceLenDisplay();
applyTriggerSettings();
}
void GLScopeGUI::on_timeOfs_valueChanged(int value)
{
if ((value < 0) || (value > 100)) {

View File

@ -233,7 +233,7 @@
</font>
</property>
<property name="text">
<string>Time</string>
<string>t</string>
</property>
</widget>
</item>
@ -353,7 +353,7 @@
</font>
</property>
<property name="text">
<string>Amp</string>
<string>A</string>
</property>
</widget>
</item>
@ -752,6 +752,59 @@
</property>
</widget>
</item>
<item>
<widget class="Line" name="traceLenLine">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="traceLenLabel">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Len</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="traceLen">
<property name="toolTip">
<string>Trace length</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>20</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="traceLenText">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="traceIntensityLine">
<property name="orientation">