1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-20 00:25:53 -05: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) 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); Message* cmd = MsgScopeVisNGChangeTrigger::create(triggerData, triggerIndex);
getInputMessageQueue()->push(cmd); getInputMessageQueue()->push(cmd);
} }

View File

@ -18,6 +18,8 @@
#ifndef SDRBASE_DSP_SCOPEVISNG_H_ #ifndef SDRBASE_DSP_SCOPEVISNG_H_
#define SDRBASE_DSP_SCOPEVISNG_H_ #define SDRBASE_DSP_SCOPEVISNG_H_
#include <QDebug>
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
#include <boost/circular_buffer.hpp> #include <boost/circular_buffer.hpp>
@ -64,18 +66,28 @@ public:
ProjectionType m_projectionType; //!< Complex to real projection type ProjectionType m_projectionType; //!< Complex to real projection type
uint32_t m_inputIndex; //!< Input or feed index this trigger is associated with uint32_t m_inputIndex; //!< Input or feed index this trigger is associated with
Real m_triggerLevel; //!< Level in real units 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_triggerPositiveEdge; //!< Trigger on the positive edge (else negative)
bool m_triggerBothEdges; //!< Trigger on both edges (else only one) 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 uint32_t m_triggerRepeat; //!< Number of trigger conditions before the final decisive trigger
TriggerData() : TriggerData() :
m_projectionType(ProjectionReal), m_projectionType(ProjectionReal),
m_inputIndex(0), m_inputIndex(0),
m_triggerLevel(0.0f), m_triggerLevel(0.0f),
m_triggerLevelCoarse(0),
m_triggerLevelFine(0),
m_triggerPositiveEdge(true), m_triggerPositiveEdge(true),
m_triggerBothEdges(false), m_triggerBothEdges(false),
m_triggerDelay(0), m_triggerDelay(0),
m_triggerDelayMult(0.0),
m_triggerDelayCoarse(0),
m_triggerDelayFine(0),
m_triggerRepeat(0) m_triggerRepeat(0)
{} {}
}; };
@ -92,9 +104,20 @@ public:
void changeTrace(const TraceData& traceData, uint32_t traceIndex); void changeTrace(const TraceData& traceData, uint32_t traceIndex);
void removeTrace(uint32_t traceIndex); void removeTrace(uint32_t traceIndex);
void addTrigger(const TriggerData& triggerData); 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 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 feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly);
virtual void start(); virtual void start();
virtual void stop(); virtual void stop();

View File

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

View File

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

View File

@ -260,6 +260,18 @@ void GLScopeNGGUI::on_traceLen_valueChanged(int value)
void GLScopeNGGUI::on_trig_valueChanged(int value) void GLScopeNGGUI::on_trig_valueChanged(int value)
{ {
ui->trigText->setText(tr("%1").arg(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) 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) void GLScopeNGGUI::on_trigDel_clicked(bool checked)
{ {
if (ui->trig->maximum() > 0) if (ui->trig->value() > 0)
{ {
m_scopeVis->removeTrigger(ui->trig->value()); m_scopeVis->removeTrigger(ui->trig->value());
ui->trig->setMaximum(ui->trig->maximum() - 1); 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) void GLScopeNGGUI::on_trigCount_valueChanged(int value)
{ {
QString text; setTrigCountDisplay();
text.sprintf("%02d", value); changeCurrentTrigger();
ui->trigCountText->setText(text);
changeCurrentTrigger();
} }
void GLScopeNGGUI::on_trigPos_toggled(bool checked) void GLScopeNGGUI::on_trigPos_toggled(bool checked)
@ -420,6 +430,13 @@ void GLScopeNGGUI::setTraceIndexDisplay()
ui->traceText->setText(tr("%1").arg(ui->trace->value())); 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() void GLScopeNGGUI::setTimeScaleDisplay()
{ {
m_sampleRate = m_glScope->getSampleRate(); m_sampleRate = m_glScope->getSampleRate();
@ -671,19 +688,80 @@ void GLScopeNGGUI::fillTraceData(ScopeVisNG::TraceData& traceData)
void GLScopeNGGUI::fillTriggerData(ScopeVisNG::TriggerData& triggerData) 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_inputIndex = 0;
triggerData.m_triggerLevel = (ui->trigLevelCoarse->value() / 100.0) + (ui->trigLevelFine->value() / 20000.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_triggerPositiveEdge = ui->trigPos->isChecked();
triggerData.m_triggerBothEdges = ui->trigBoth->isChecked(); triggerData.m_triggerBothEdges = ui->trigBoth->isChecked();
triggerData.m_triggerRepeat = ui->trigCount->value(); triggerData.m_triggerRepeat = ui->trigCount->value();
double delayMult = ui->trigDelayCoarse->value() + ui->trigDelayFine->value() / 100.0; triggerData.m_triggerDelayMult = ui->trigDelayCoarse->value() + ui->trigDelayFine->value() / 100.0;
triggerData.m_triggerDelay = (int) (m_traceLenMult * ScopeVisNG::m_traceChunkSize * delayMult); 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) 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() void GLScopeNGGUI::applySettings()

View File

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