diff --git a/sdrbase/dsp/glscopesettings.cpp b/sdrbase/dsp/glscopesettings.cpp index 0583b036f..25c5b7ff5 100644 --- a/sdrbase/dsp/glscopesettings.cpp +++ b/sdrbase/dsp/glscopesettings.cpp @@ -66,6 +66,7 @@ void GLScopeSettings::resetToDefaults() m_timeOfs = 0; m_traceLenMult = 1; m_trigPre = 0; + m_freerun = true; } QByteArray GLScopeSettings::serialize() const @@ -79,6 +80,7 @@ QByteArray GLScopeSettings::serialize() const s.writeS32(4, m_time); // s.writeS32(5, m_timeOfs); s.writeS32(6, m_traceLenMult); + s.writeBool(7, m_freerun); std::vector::const_iterator traceDataIt = m_tracesData.begin(); unsigned int i = 0; @@ -148,6 +150,7 @@ bool GLScopeSettings::deserialize(const QByteArray& data) d.readS32(4, &m_time, 1); // d.readS32(5, &m_timeOfs, 0); d.readS32(6, &m_traceLenMult, 1); + d.readBool(7, &m_freerun, true); d.readS32(201, &m_trigPre, 0); uint32_t nbTracesSaved; diff --git a/sdrbase/dsp/glscopesettings.h b/sdrbase/dsp/glscopesettings.h index 647821f58..eb7ef9abe 100644 --- a/sdrbase/dsp/glscopesettings.h +++ b/sdrbase/dsp/glscopesettings.h @@ -162,6 +162,7 @@ public: int m_timeOfs; int m_traceLenMult; int m_trigPre; + bool m_freerun; std::vector m_tracesData; std::vector m_triggersData; static const double AMPS[27]; diff --git a/sdrgui/gui/glscopegui.cpp b/sdrgui/gui/glscopegui.cpp index b59b31963..ad4ecf99e 100644 --- a/sdrgui/gui/glscopegui.cpp +++ b/sdrgui/gui/glscopegui.cpp @@ -809,7 +809,7 @@ void GLScopeGUI::on_memorySave_clicked(bool checked) { (void) checked; QString fileName = QFileDialog::getSaveFileName(this, - tr("Open trace memory file"), ".", tr("Trace memory files (*.trcm)"), 0, QFileDialog::DontUseNativeDialog); + tr("Create trace memory file"), ".", tr("Trace memory files (*.trcm)"), 0, QFileDialog::DontUseNativeDialog); if (fileName != "") { @@ -1008,6 +1008,8 @@ void GLScopeGUI::on_freerun_toggled(bool checked) (uint32_t) (m_glScope->getTraceSize() * (ui->trigPre->value()/100.0f)), ui->freerun->isChecked() ); + + m_settings.m_freerun = checked; } void GLScopeGUI::setTraceIndexDisplay() @@ -1367,6 +1369,7 @@ void GLScopeGUI::fillTraceData(GLScopeSettings::TraceData& traceData) void GLScopeGUI::fillTriggerData(GLScopeSettings::TriggerData& triggerData) { + triggerData.m_streamIndex = ui->trigStream->currentIndex(); triggerData.m_projectionType = (Projector::ProjectionType) ui->trigMode->currentIndex(); triggerData.m_inputIndex = 0; triggerData.m_triggerLevel = (ui->trigLevelCoarse->value() / 100.0) + (ui->trigLevelFine->value() / 50000.0); @@ -1428,6 +1431,7 @@ void GLScopeGUI::setTriggerUI(const GLScopeSettings::TriggerData& triggerData) { TrigUIBlocker trigUIBlocker(ui); + ui->trigStream->setCurrentIndex(triggerData.m_streamIndex); ui->trigMode->setCurrentIndex((int) triggerData.m_projectionType); ui->trigCount->setValue(triggerData.m_triggerRepeat); setTrigCountDisplay(); @@ -1507,6 +1511,9 @@ void GLScopeGUI::displaySettings() ui->timeOfs->setValue(m_settings.m_timeOfs); setTimeOfsDisplay(); ui->traceLen->setValue(m_settings.m_traceLenMult); + setPreTrigger(100.0f * m_settings.m_trigPre / m_glScope->getTraceSize()); + ui->freerun->setChecked(m_settings.m_freerun); + changeCurrentTrigger(); // Ensure consistency with GUI } bool GLScopeGUI::handleMessage(Message* message) @@ -1518,6 +1525,7 @@ bool GLScopeGUI::handleMessage(Message* message) GLScopeGUI::TrigUIBlocker::TrigUIBlocker(Ui::GLScopeGUI *ui) : m_ui(ui) { + m_oldStateTrigStream = ui->trigStream->blockSignals(true); m_oldStateTrigMode = ui->trigMode->blockSignals(true); m_oldStateTrigCount = ui->trigCount->blockSignals(true); m_oldStateTrigPos = ui->trigPos->blockSignals(true); @@ -1537,6 +1545,7 @@ GLScopeGUI::TrigUIBlocker::~TrigUIBlocker() void GLScopeGUI::TrigUIBlocker::unBlock() { + m_ui->trigStream->blockSignals(m_oldStateTrigStream); m_ui->trigMode->blockSignals(m_oldStateTrigMode); m_ui->trigCount->blockSignals(m_oldStateTrigCount); m_ui->trigPos->blockSignals(m_oldStateTrigPos); @@ -1746,7 +1755,7 @@ void GLScopeGUI::changeTrace(int traceIndex, const GLScopeSettings::TraceData& t void GLScopeGUI::addTrace(const GLScopeSettings::TraceData& traceData) { - if (ui->trace->maximum() < 3) + if (ui->trace->maximum() < 7) // Limit number of channels to 8. Is it necessary? { if (ui->trace->value() == 0) { diff --git a/sdrgui/gui/glscopegui.h b/sdrgui/gui/glscopegui.h index b225baa24..8c1272a2e 100644 --- a/sdrgui/gui/glscopegui.h +++ b/sdrgui/gui/glscopegui.h @@ -89,6 +89,7 @@ private: private: Ui::GLScopeGUI *m_ui; + bool m_oldStateTrigStream; bool m_oldStateTrigMode; bool m_oldStateTrigCount; bool m_oldStateTrigPos;