mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-27 15:26:33 -04:00
New Scope: trigger implementation interim state (1)
This commit is contained in:
parent
4d36eeb4c7
commit
27116d5b3f
@ -182,9 +182,11 @@ void ScopeVisNG::feed(const SampleVector::const_iterator& cbegin, const SampleVe
|
||||
if (triggerCondition.m_triggerData.m_triggerBothEdges) {
|
||||
trigger = triggerCondition.m_prevCondition ^ condition;
|
||||
} else {
|
||||
trigger = condition ^ !triggerCondition.m_triggerData.m_triggerPositiveEdge;
|
||||
trigger = (triggerCondition.m_prevCondition ^ condition) && (condition ^ !triggerCondition.m_triggerData.m_triggerPositiveEdge);
|
||||
}
|
||||
|
||||
triggerCondition.m_prevCondition = condition;
|
||||
|
||||
if (trigger) // trigger condition
|
||||
{
|
||||
if (triggerCondition.m_triggerData.m_triggerDelay > 0) // there is a delay => initialize the delay
|
||||
|
@ -63,6 +63,8 @@ void GLScopeNGGUI::setBuddies(MessageQueue* messageQueue, ScopeVisNG* scopeVis,
|
||||
ui->trigPos->setChecked(true);
|
||||
ui->trigNeg->setChecked(false);
|
||||
ui->trigBoth->setChecked(false);
|
||||
ui->trigOneShot->setChecked(false);
|
||||
ui->trigOneShot->setEnabled(false);
|
||||
ui->freerun->setChecked(true);
|
||||
|
||||
// Add a trace
|
||||
@ -253,9 +255,109 @@ void GLScopeNGGUI::on_amp_valueChanged(int value)
|
||||
changeCurrentTrace();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_ofsCoarse_valueChanged(int value)
|
||||
{
|
||||
setAmpOfsDisplay();
|
||||
changeCurrentTrace();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_ofsFine_valueChanged(int value)
|
||||
{
|
||||
setAmpOfsDisplay();
|
||||
changeCurrentTrace();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_traceDelay_valueChanged(int value)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigMode_currentIndexChanged(int index)
|
||||
{
|
||||
setTrigLevelDisplay();
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigCount_valueChanged(int value)
|
||||
{
|
||||
QString text;
|
||||
text.sprintf("%02d", value);
|
||||
ui->trigCountText->setText(text);
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigPos_toggled(bool checked)
|
||||
{
|
||||
if (checked)
|
||||
{
|
||||
ui->trigNeg->setChecked(false);
|
||||
ui->trigBoth->setChecked(false);
|
||||
}
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigNeg_toggled(bool checked)
|
||||
{
|
||||
if (checked)
|
||||
{
|
||||
ui->trigPos->setChecked(false);
|
||||
ui->trigBoth->setChecked(false);
|
||||
}
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigBoth_toggled(bool checked)
|
||||
{
|
||||
if (checked)
|
||||
{
|
||||
ui->trigNeg->setChecked(false);
|
||||
ui->trigPos->setChecked(false);
|
||||
}
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigLevelCoarse_valueChanged(int value)
|
||||
{
|
||||
setTrigLevelDisplay();
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigLevelFine_valueChanged(int value)
|
||||
{
|
||||
setTrigLevelDisplay();
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigDelay_valueChanged(int value)
|
||||
{
|
||||
setTrigDelayDisplay();
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigPre_valueChanged(int value)
|
||||
{
|
||||
setTrigPreDisplay();
|
||||
changeCurrentTrigger();
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_trigOneShot_toggled(bool checked)
|
||||
{
|
||||
m_scopeVis->configure(m_traceLenMult*ScopeVisNG::m_traceChunkSize, m_timeOffset*10, ui->freerun->isChecked()); // TODO: implement one shot feature
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::on_freerun_toggled(bool checked)
|
||||
{
|
||||
m_scopeVis->configure(m_traceLenMult*ScopeVisNG::m_traceChunkSize, m_timeOffset*10, ui->freerun->isChecked());
|
||||
if (checked)
|
||||
{
|
||||
ui->trigOneShot->setChecked(false);
|
||||
ui->trigOneShot->setEnabled(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->trigOneShot->setEnabled(true);
|
||||
}
|
||||
|
||||
m_scopeVis->configure(m_traceLenMult*ScopeVisNG::m_traceChunkSize, m_timeOffset*10, ui->freerun->isChecked()); // TODO: implement one shot feature
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::setTimeScaleDisplay()
|
||||
@ -355,6 +457,103 @@ void GLScopeNGGUI::setAmpScaleDisplay()
|
||||
}
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::setAmpOfsDisplay()
|
||||
{
|
||||
ScopeVisNG::ProjectionType projectionType = (ScopeVisNG::ProjectionType) ui->traceMode->currentIndex();
|
||||
float o = (ui->ofsCoarse->value() * 10.0f) + (ui->ofsFine->value() / 20.0f);
|
||||
|
||||
if (projectionType == ScopeVisNG::ProjectionMagDB)
|
||||
{
|
||||
ui->ofsText->setText(tr("%1").arg(o/1000.0, 0, 'f', 4));
|
||||
}
|
||||
else
|
||||
{
|
||||
float a = o/1000.0f;
|
||||
|
||||
if(fabs(a) < 0.000001)
|
||||
ui->ofsText->setText(tr("%1\nn").arg(a * 1000000000.0));
|
||||
else if(fabs(a) < 0.001)
|
||||
ui->ofsText->setText(tr("%1\nµ").arg(a * 1000000.0));
|
||||
else if(fabs(a) < 1.0)
|
||||
ui->ofsText->setText(tr("%1\nm").arg(a * 1000.0));
|
||||
else
|
||||
ui->ofsText->setText(tr("%1").arg(a * 1.0));
|
||||
}
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::setTrigLevelDisplay()
|
||||
{
|
||||
float t = (ui->trigLevelCoarse->value() / 100.0f) + (ui->trigLevelFine->value() / 20000.0f);
|
||||
ScopeVisNG::ProjectionType projectionType = (ScopeVisNG::ProjectionType) ui->trigMode->currentIndex();
|
||||
|
||||
ui->trigLevelCoarse->setToolTip(QString("Trigger level coarse: %1 %").arg(ui->trigLevelCoarse->value() / 100.0f));
|
||||
ui->trigLevelFine->setToolTip(QString("Trigger level fine: %1 ppm").arg(ui->trigLevelFine->value() * 50));
|
||||
|
||||
if (projectionType == ScopeVisNG::ProjectionMagDB) {
|
||||
ui->trigLevelText->setText(tr("%1\ndB").arg(100.0 * (t - 1.0), 0, 'f', 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
float a;
|
||||
|
||||
if (projectionType == ScopeVisNG::ProjectionMagLin) {
|
||||
a = 1.0 + t;
|
||||
} else {
|
||||
a = t;
|
||||
}
|
||||
|
||||
if(fabs(a) < 0.000001)
|
||||
ui->trigLevelText->setText(tr("%1\nn").arg(a * 1000000000.0f));
|
||||
else if(fabs(a) < 0.001)
|
||||
ui->trigLevelText->setText(tr("%1\nµ").arg(a * 1000000.0f));
|
||||
else if(fabs(a) < 1.0)
|
||||
ui->trigLevelText->setText(tr("%1\nm").arg(a * 1000.0f));
|
||||
else
|
||||
ui->trigLevelText->setText(tr("%1").arg(a * 1.0f));
|
||||
}
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::setTrigDelayDisplay()
|
||||
{
|
||||
unsigned int n_samples_delay = m_traceLenMult * ScopeVisNG::m_traceChunkSize * ui->trigDelay->value();
|
||||
|
||||
if (n_samples_delay < 1000) {
|
||||
ui->trigDelayText->setToolTip(tr("%1S").arg(n_samples_delay));
|
||||
} else if (n_samples_delay < 1000000) {
|
||||
ui->trigDelayText->setToolTip(tr("%1kS").arg(n_samples_delay/1000.0));
|
||||
} else if (n_samples_delay < 1000000000) {
|
||||
ui->trigDelayText->setToolTip(tr("%1MS").arg(n_samples_delay/1000000.0));
|
||||
} else {
|
||||
ui->trigDelayText->setToolTip(tr("%1GS").arg(n_samples_delay/1000000000.0));
|
||||
}
|
||||
|
||||
m_sampleRate = m_glScope->getSampleRate();
|
||||
float t = (n_samples_delay * 1.0f / m_sampleRate);
|
||||
|
||||
if(t < 0.000001)
|
||||
ui->trigDelayText->setText(tr("%1\nns").arg(t * 1000000000.0));
|
||||
else if(t < 0.001)
|
||||
ui->trigDelayText->setText(tr("%1\nµs").arg(t * 1000000.0));
|
||||
else if(t < 1.0)
|
||||
ui->trigDelayText->setText(tr("%1\nms").arg(t * 1000.0));
|
||||
else
|
||||
ui->trigDelayText->setText(tr("%1\ns").arg(t * 1.0));
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::setTrigPreDisplay()
|
||||
{
|
||||
float dt = m_glScope->getTraceSize() * (ui->trigPre->value()/100.0f) / m_sampleRate;
|
||||
|
||||
if(dt < 0.000001)
|
||||
ui->trigPreText->setText(tr("%1\nns").arg(dt * 1000000000.0f));
|
||||
else if(dt < 0.001)
|
||||
ui->trigPreText->setText(tr("%1\nµs").arg(dt * 1000000.0f));
|
||||
else if(dt < 1.0)
|
||||
ui->trigPreText->setText(tr("%1\nms").arg(dt * 1000.0f));
|
||||
else
|
||||
ui->trigPreText->setText(tr("%1\ns").arg(dt * 1.0f));
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::changeCurrentTrace()
|
||||
{
|
||||
ScopeVisNG::TraceData traceData;
|
||||
@ -363,6 +562,14 @@ void GLScopeNGGUI::changeCurrentTrace()
|
||||
m_scopeVis->changeTrace(traceData, currentTraceIndex);
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::changeCurrentTrigger()
|
||||
{
|
||||
ScopeVisNG::TriggerData triggerData;
|
||||
fillTriggerData(triggerData);
|
||||
uint32_t currentTriggerIndex = ui->trig->value();
|
||||
m_scopeVis->changeTrigger(triggerData, currentTriggerIndex);
|
||||
}
|
||||
|
||||
void GLScopeNGGUI::fillProjectionCombo(QComboBox* comboBox)
|
||||
{
|
||||
comboBox->addItem("Real", ScopeVisNG::ProjectionReal);
|
||||
|
@ -64,12 +64,20 @@ private:
|
||||
static const double amps[11];
|
||||
|
||||
void applySettings();
|
||||
// First row
|
||||
void setTimeScaleDisplay();
|
||||
void setTraceLenDisplay();
|
||||
void setTimeOfsDisplay();
|
||||
// Second row
|
||||
void setAmpScaleDisplay();
|
||||
void setAmpOfsDisplay();
|
||||
// Third row
|
||||
void setTrigLevelDisplay();
|
||||
void setTrigDelayDisplay();
|
||||
void setTrigPreDisplay();
|
||||
|
||||
void changeCurrentTrace();
|
||||
void changeCurrentTrigger();
|
||||
|
||||
void fillTraceData(ScopeVisNG::TraceData& traceData);
|
||||
void fillTriggerData(ScopeVisNG::TriggerData& triggerData);
|
||||
@ -92,7 +100,20 @@ private slots:
|
||||
// Second row
|
||||
void on_traceMode_currentIndexChanged(int index);
|
||||
void on_amp_valueChanged(int value);
|
||||
void on_ofsCoarse_valueChanged(int value);
|
||||
void on_ofsFine_valueChanged(int value);
|
||||
void on_traceDelay_valueChanged(int value);
|
||||
// Third row
|
||||
void on_trigMode_currentIndexChanged(int index);
|
||||
void on_trigCount_valueChanged(int value);
|
||||
void on_trigPos_toggled(bool checked);
|
||||
void on_trigNeg_toggled(bool checked);
|
||||
void on_trigBoth_toggled(bool checked);
|
||||
void on_trigLevelCoarse_valueChanged(int value);
|
||||
void on_trigLevelFine_valueChanged(int value);
|
||||
void on_trigDelay_valueChanged(int value);
|
||||
void on_trigPre_valueChanged(int value);
|
||||
void on_trigOneShot_toggled(bool checked);
|
||||
void on_freerun_toggled(bool checked);
|
||||
};
|
||||
|
||||
|
@ -18,6 +18,7 @@ mkdir %2\plugins\channeltx
|
||||
mkdir %2\plugins\samplesource
|
||||
mkdir %2\plugins\samplesink
|
||||
copy plugins\channelrx\chanalyzer\%1\chanalyzer.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\chanalyzerng\%1\chanalyzerng.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\demodam\%1\demodam.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\demodbfm\%1\demodbfm.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\demoddsd\%1\demoddsd.dll %2\plugins\channelrx
|
||||
|
@ -31,6 +31,7 @@ mkdir %2\plugins\channeltx
|
||||
mkdir %2\plugins\samplesource
|
||||
mkdir %2\plugins\samplesink
|
||||
copy plugins\channelrx\chanalyzer\%1\chanalyzer.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\chanalyzerng\%1\chanalyzerng.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\demodam\%1\demodam.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\demodbfm\%1\demodbfm.dll %2\plugins\channelrx
|
||||
copy plugins\channelrx\demoddsd\%1\demoddsd.dll %2\plugins\channelrx
|
||||
|
Loading…
Reference in New Issue
Block a user