1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-27 15:26:33 -04:00

New scope: fixed trigger UI add, remove and change current

This commit is contained in:
f4exb 2017-02-10 04:35:08 +01:00
parent f1b5b08fa0
commit ec604c21c9
6 changed files with 125 additions and 10 deletions

View File

@ -101,6 +101,13 @@ void ScopeVisNG::addTrigger(const TriggerData& triggerData)
void ScopeVisNG::changeTrigger(const TriggerData& triggerData, uint32_t triggerIndex)
{
qDebug() << "ScopeVisNG::changeTrigger:"
<< " trigger: " << triggerIndex
<< " m_projectionType: " << triggerData.m_projectionType
<< " m_triggerRepeat: " << triggerData.m_triggerRepeat
<< " m_triggerPositiveEdge: " << triggerData.m_triggerPositiveEdge
<< " m_triggerBothEdges: " << triggerData.m_triggerBothEdges;
;
Message* cmd = MsgScopeVisNGChangeTrigger::create(triggerData, triggerIndex);
getInputMessageQueue()->push(cmd);
}

View File

@ -18,6 +18,8 @@
#ifndef SDRBASE_DSP_SCOPEVISNG_H_
#define SDRBASE_DSP_SCOPEVISNG_H_
#include <QDebug>
#include <stdint.h>
#include <vector>
#include <boost/circular_buffer.hpp>
@ -64,18 +66,28 @@ public:
ProjectionType m_projectionType; //!< Complex to real projection type
uint32_t m_inputIndex; //!< Input or feed index this trigger is associated with
Real m_triggerLevel; //!< Level in real units
int m_triggerLevelCoarse;
int m_triggerLevelFine;
bool m_triggerPositiveEdge; //!< Trigger on the positive edge (else negative)
bool m_triggerBothEdges; //!< Trigger on both edges (else only one)
uint32_t m_triggerDelay; //!< Delay before the trigger is kicked off in number of samples
uint32_t m_triggerDelay; //!< Delay before the trigger is kicked off in number of samples (trigger delay)
double m_triggerDelayMult; //!< Trigger delay as a multiplier of trace length
int m_triggerDelayCoarse;
int m_triggerDelayFine;
uint32_t m_triggerRepeat; //!< Number of trigger conditions before the final decisive trigger
TriggerData() :
m_projectionType(ProjectionReal),
m_inputIndex(0),
m_triggerLevel(0.0f),
m_triggerLevelCoarse(0),
m_triggerLevelFine(0),
m_triggerPositiveEdge(true),
m_triggerBothEdges(false),
m_triggerDelay(0),
m_triggerDelayMult(0.0),
m_triggerDelayCoarse(0),
m_triggerDelayFine(0),
m_triggerRepeat(0)
{}
};
@ -92,9 +104,20 @@ public:
void changeTrace(const TraceData& traceData, uint32_t traceIndex);
void removeTrace(uint32_t traceIndex);
void addTrigger(const TriggerData& triggerData);
void changeTrigger(const TriggerData& triggerData, uint32_t traceIndex);
void changeTrigger(const TriggerData& triggerData, uint32_t triggerIndex);
void removeTrigger(uint32_t triggerIndex);
void getTriggerData(TriggerData& triggerData, uint32_t triggerIndex)
{
if (triggerIndex < m_triggerConditions.size())
{
qDebug() << "copeVisNG::getTriggerData:"
<< " index: " << triggerIndex
<< " projection: " << (int) m_triggerConditions[triggerIndex].m_triggerData.m_projectionType;
triggerData = m_triggerConditions[triggerIndex].m_triggerData;
}
}
virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly);
virtual void start();
virtual void stop();

View File

@ -19,3 +19,8 @@ void ButtonSwitch::onToggled(bool checked)
setPalette(m_originalPalette);
}
}
void ButtonSwitch::doToggle(bool checked)
{
onToggled(checked);
}

View File

@ -8,6 +8,7 @@ class ButtonSwitch : public QToolButton {
public:
ButtonSwitch(QWidget* parent = NULL);
void doToggle(bool checked);
private slots:
void onToggled(bool checked);

View File

@ -260,6 +260,18 @@ void GLScopeNGGUI::on_traceLen_valueChanged(int value)
void GLScopeNGGUI::on_trig_valueChanged(int value)
{
ui->trigText->setText(tr("%1").arg(value));
ScopeVisNG::TriggerData triggerData;
m_scopeVis->getTriggerData(triggerData, value);
qDebug() << "GLScopeNGGUI::on_trig_valueChanged:"
<< " m_projectionType: " << (int) triggerData.m_projectionType
<< " m_triggerRepeat" << triggerData.m_triggerRepeat
<< " m_triggerPositiveEdge" << triggerData.m_triggerPositiveEdge
<< " m_triggerBothEdges" << triggerData.m_triggerBothEdges
<< " m_triggerLevel" << triggerData.m_triggerLevel;
setTriggerUI(triggerData);
}
void GLScopeNGGUI::on_trigAdd_clicked(bool checked)
@ -275,7 +287,7 @@ void GLScopeNGGUI::on_trigAdd_clicked(bool checked)
void GLScopeNGGUI::on_trigDel_clicked(bool checked)
{
if (ui->trig->maximum() > 0)
if (ui->trig->value() > 0)
{
m_scopeVis->removeTrigger(ui->trig->value());
ui->trig->setMaximum(ui->trig->maximum() - 1);
@ -320,10 +332,8 @@ void GLScopeNGGUI::on_trigMode_currentIndexChanged(int index)
void GLScopeNGGUI::on_trigCount_valueChanged(int value)
{
QString text;
text.sprintf("%02d", value);
ui->trigCountText->setText(text);
changeCurrentTrigger();
setTrigCountDisplay();
changeCurrentTrigger();
}
void GLScopeNGGUI::on_trigPos_toggled(bool checked)
@ -420,6 +430,13 @@ void GLScopeNGGUI::setTraceIndexDisplay()
ui->traceText->setText(tr("%1").arg(ui->trace->value()));
}
void GLScopeNGGUI::setTrigCountDisplay()
{
QString text;
text.sprintf("%02d", ui->trigCount->value());
ui->trigCountText->setText(text);
}
void GLScopeNGGUI::setTimeScaleDisplay()
{
m_sampleRate = m_glScope->getSampleRate();
@ -671,19 +688,80 @@ void GLScopeNGGUI::fillTraceData(ScopeVisNG::TraceData& traceData)
void GLScopeNGGUI::fillTriggerData(ScopeVisNG::TriggerData& triggerData)
{
triggerData.m_projectionType = (ScopeVisNG::ProjectionType) ui->traceMode->currentIndex();
triggerData.m_projectionType = (ScopeVisNG::ProjectionType) ui->trigMode->currentIndex();
triggerData.m_inputIndex = 0;
triggerData.m_triggerLevel = (ui->trigLevelCoarse->value() / 100.0) + (ui->trigLevelFine->value() / 20000.0);
triggerData.m_triggerLevelCoarse = ui->trigLevelCoarse->value();
triggerData.m_triggerLevelFine = ui->trigLevelFine->value();
triggerData.m_triggerPositiveEdge = ui->trigPos->isChecked();
triggerData.m_triggerBothEdges = ui->trigBoth->isChecked();
triggerData.m_triggerRepeat = ui->trigCount->value();
double delayMult = ui->trigDelayCoarse->value() + ui->trigDelayFine->value() / 100.0;
triggerData.m_triggerDelay = (int) (m_traceLenMult * ScopeVisNG::m_traceChunkSize * delayMult);
triggerData.m_triggerDelayMult = ui->trigDelayCoarse->value() + ui->trigDelayFine->value() / 100.0;
triggerData.m_triggerDelay = (int) (m_traceLenMult * ScopeVisNG::m_traceChunkSize * triggerData.m_triggerDelayMult);
triggerData.m_triggerDelayCoarse = ui->trigDelayCoarse->value();
triggerData.m_triggerDelayFine = ui->trigDelayFine->value();
}
void GLScopeNGGUI::setTriggerUI(ScopeVisNG::TriggerData& triggerData)
{
bool oldStateTrigMode = ui->trigMode->blockSignals(true);
bool oldStateTrigCount = ui->trigCount->blockSignals(true);
bool oldStateTrigPos = ui->trigPos->blockSignals(true);
bool oldStateTrigNeg = ui->trigNeg->blockSignals(true);
bool oldStateTrigBoth = ui->trigBoth->blockSignals(true);
bool oldStateTrigLevelCoarse = ui->trigLevelCoarse->blockSignals(true);
bool oldStateTrigLevelFine = ui->trigLevelFine->blockSignals(true);
bool oldStateTrigDelayCoarse = ui->trigDelayCoarse->blockSignals(true);
bool oldStateTrigDelayFine = ui->trigDelayFine->blockSignals(true);
ui->trigMode->setCurrentIndex((int) triggerData.m_projectionType);
ui->trigCount->setValue(triggerData.m_triggerRepeat);
setTrigCountDisplay();
ui->trigPos->setChecked(false);
ui->trigNeg->setChecked(false);
ui->trigPos->doToggle(false);
ui->trigNeg->doToggle(false);
if (triggerData.m_triggerBothEdges)
{
ui->trigBoth->setChecked(true);
ui->trigBoth->doToggle(true);
}
else
{
ui->trigBoth->setChecked(false);
ui->trigBoth->doToggle(false);
if (triggerData.m_triggerPositiveEdge)
{
ui->trigPos->setChecked(true);
ui->trigPos->doToggle(true);
}
else
{
ui->trigNeg->setChecked(true);
ui->trigNeg->doToggle(true);
}
}
ui->trigLevelCoarse->setValue(triggerData.m_triggerLevelCoarse);
ui->trigLevelFine->setValue(triggerData.m_triggerLevelFine);
setTrigLevelDisplay();
ui->trigDelayCoarse->setValue(triggerData.m_triggerDelayCoarse);
ui->trigDelayFine->setValue(triggerData.m_triggerDelayFine);
setTrigDelayDisplay();
ui->trigMode->blockSignals(oldStateTrigMode);
ui->trigCount->blockSignals(oldStateTrigCount);
ui->trigPos->blockSignals(oldStateTrigPos);
ui->trigNeg->blockSignals(oldStateTrigNeg);
ui->trigBoth->blockSignals(oldStateTrigBoth);
ui->trigLevelCoarse->blockSignals(oldStateTrigLevelCoarse);
ui->trigLevelFine->blockSignals(oldStateTrigLevelFine);
ui->trigDelayCoarse->blockSignals(oldStateTrigDelayCoarse);
ui->trigDelayFine->blockSignals(oldStateTrigDelayFine);
}
void GLScopeNGGUI::applySettings()

View File

@ -74,6 +74,7 @@ private:
void setAmpOfsDisplay();
// Third row
void setTrigIndexDisplay();
void setTrigCountDisplay();
void setTrigLevelDisplay();
void setTrigDelayDisplay();
void setTrigPreDisplay();