From d0dcc01318c17bd311f500a72eafe492a9dcda21 Mon Sep 17 00:00:00 2001 From: DreamSourceLab Date: Thu, 8 Oct 2015 19:12:49 +0800 Subject: [PATCH] Limit trigger position less than hardware depth --- DSView/pv/dock/triggerdock.cpp | 38 +++++++++++------- DSView/pv/dock/triggerdock.h | 4 +- DSView/pv/mainwindow.cpp | 2 + DSView/pv/toolbars/samplingbar.cpp | 58 +++------------------------- DSView/pv/toolbars/samplingbar.h | 1 + DSView/pv/view/viewport.cpp | 2 +- libsigrok4DSL/hardware/DSL/dslogic.c | 5 --- 7 files changed, 35 insertions(+), 75 deletions(-) diff --git a/DSView/pv/dock/triggerdock.cpp b/DSView/pv/dock/triggerdock.cpp index 8b40af7d..4db07de5 100644 --- a/DSView/pv/dock/triggerdock.cpp +++ b/DSView/pv/dock/triggerdock.cpp @@ -487,23 +487,33 @@ void TriggerDock::pos_changed(int pos) void TriggerDock::device_change() { - bool stream = false; - GVariant *gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_STREAM); + uint64_t max_hd_depth; + bool stream; + uint8_t maxRange; + uint64_t sample_limits; + GVariant *gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_MAX_LOGIC_SAMPLELIMITS); if (gvar != NULL) { - stream = g_variant_get_boolean(gvar); + max_hd_depth = g_variant_get_uint64(gvar); g_variant_unref(gvar); - } - if (stream && - strcmp(_session.get_device()->dev_inst()->driver->name, "DSLogic") == 0) { - const int maxRange = SR_MB(11)*100/_session.get_device()->get_sample_limit(); - position_spinBox->setRange(0, maxRange); - position_slider->setRange(0, maxRange); - simple_radioButton->setChecked(true); - simple_trigger(); - } else { - position_spinBox->setRange(0, 99); - position_slider->setRange(0, 99); + if (_session.get_device()->dev_inst()->mode == LOGIC) { + sample_limits = _session.get_device()->get_sample_limit(); + if (max_hd_depth >= sample_limits) + maxRange = 99; + else + maxRange = max_hd_depth*70 / sample_limits; + position_spinBox->setRange(0, maxRange); + position_slider->setRange(0, maxRange); + simple_radioButton->setChecked(true); + + gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_STREAM); + if (gvar != NULL) { + stream = g_variant_get_boolean(gvar); + g_variant_unref(gvar); + if (stream) + simple_trigger(); + } + } } } diff --git a/DSView/pv/dock/triggerdock.h b/DSView/pv/dock/triggerdock.h index 8b76b959..886bf972 100644 --- a/DSView/pv/dock/triggerdock.h +++ b/DSView/pv/dock/triggerdock.h @@ -61,8 +61,6 @@ public: void paintEvent(QPaintEvent *); - void device_change(); - void init(); QJsonObject get_session(); @@ -86,6 +84,8 @@ public slots: void adv_tog(int index); void serial_channel_changed(int index); + void device_change(); + private: private: diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index a8fb8d31..080f4fb5 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -192,6 +192,8 @@ void MainWindow::setup_ui() SLOT(instant_stop())); connect(_sampling_bar, SIGNAL(update_scale()), _view, SLOT(update_scale()), Qt::DirectConnection); + connect(_sampling_bar, SIGNAL(sample_count_changed()), _trigger_widget, + SLOT(device_change())); connect(_dso_trigger_widget, SIGNAL(set_trig_pos(quint64)), _view, SLOT(set_trig_pos(quint64))); diff --git a/DSView/pv/toolbars/samplingbar.cpp b/DSView/pv/toolbars/samplingbar.cpp index 8b06e0cd..e252e555 100644 --- a/DSView/pv/toolbars/samplingbar.cpp +++ b/DSView/pv/toolbars/samplingbar.cpp @@ -493,10 +493,7 @@ void SamplingBar::on_samplecount_sel(int index) { uint64_t sample_count = 0; uint64_t max_sample_count = 0; - //uint64_t last_sample_count = 0; bool stream_mode = false; - //bool buffer2stream = false; - //bool stream2buffer = false; qDebug() << "index: " << index; if (index >= 0) @@ -505,52 +502,25 @@ void SamplingBar::on_samplecount_sel(int index) boost::shared_ptr _devInst = get_selected_device(); assert(_devInst); -qDebug() << "1!\n"; - if (strcmp(_devInst->dev_inst()->driver->name, "DSLogic") == 0 && _devInst->dev_inst()->mode != DSO) { - /*GVariant* gvar = _devInst->get_config(NULL, NULL, SR_CONF_LIMIT_SAMPLES); - if (gvar != NULL) { - last_sample_count = g_variant_get_uint64(gvar); - g_variant_unref(gvar); - } - gvar = _devInst->get_config(NULL, NULL, SR_CONF_MAX_LOGIC_SAMPLELIMITS); - if (gvar != NULL) { - max_sample_count = g_variant_get_uint64(gvar); - g_variant_unref(gvar); - } - gvar = _devInst->get_config(NULL, NULL, SR_CONF_STREAM); - if (gvar != NULL) { - stream_mode = g_variant_get_boolean(gvar); - g_variant_unref(gvar); - } - if (((!stream_mode || (last_sample_count >= SR_GB(1))) && sample_count > max_sample_count) || - (sample_count >= SR_GB(1) && _devInst->get_sample_rate() <= SR_MHZ(10))) { - stream_mode = sample_count > max_sample_count; - buffer2stream = true; - } else if (stream_mode && sample_count <= max_sample_count) { - stream_mode = sample_count > max_sample_count; - stream2buffer = true; - }*/ -qDebug() << "2!\n"; + if (strcmp(_devInst->dev_inst()->driver->name, "DSLogic") == 0 && _devInst->dev_inst()->mode != DSO) { + // Set the sample count _devInst->set_config(NULL, NULL, SR_CONF_LIMIT_SAMPLES, g_variant_new_uint64(sample_count)); -qDebug() << "21!\n"; + GVariant* gvar = _devInst->get_config(NULL, NULL, SR_CONF_STREAM); if (gvar != NULL) { stream_mode = g_variant_get_boolean(gvar); g_variant_unref(gvar); } - qDebug() << "22!\n"; gvar = _devInst->get_config(NULL, NULL, SR_CONF_MAX_LOGIC_SAMPLELIMITS); - qDebug() << "23!\n"; if (gvar != NULL) { max_sample_count = g_variant_get_uint64(gvar); g_variant_unref(gvar); } - qDebug() << "3!\n"; if (!stream_mode) { if (sample_count > max_sample_count) { _devInst->set_config(NULL, NULL, @@ -562,27 +532,8 @@ qDebug() << "21!\n"; g_variant_new_boolean(false)); } } -qDebug() << "4!\n"; - /*if (buffer2stream) { - pv::dialogs::StreamOptions stream(this, _devInst, sample_count, stream_mode); - stream.setFixedSize(300, 150); - stream.exec(); - update_sample_rate_selector_value(); - update_sample_count_selector_value(); - _devInst->set_config(NULL, NULL, - SR_CONF_STREAM, - g_variant_new_boolean(true)); - } else if (stream2buffer) { - QMessageBox msg(this); - pv::dialogs::StreamOptions stream(this, _devInst, sample_count, stream_mode); - stream.setFixedSize(300, 100); - stream.exec(); - _devInst->set_config(NULL, NULL, - SR_CONF_STREAM, - g_variant_new_boolean(false)); - } - device_updated();*/ + sample_count_changed(); update_scale(); } } @@ -712,6 +663,7 @@ void SamplingBar::update_sample_count_selector_value() _sample_count.setCurrentIndex(i); _updating_sample_count = false; + sample_count_changed(); } void SamplingBar::commit_sample_count() diff --git a/DSView/pv/toolbars/samplingbar.h b/DSView/pv/toolbars/samplingbar.h index 1414ceca..4055a1af 100644 --- a/DSView/pv/toolbars/samplingbar.h +++ b/DSView/pv/toolbars/samplingbar.h @@ -96,6 +96,7 @@ signals: void device_selected(); void device_updated(); void update_scale(); + void sample_count_changed(); private: void update_sample_rate_selector(); diff --git a/DSView/pv/view/viewport.cpp b/DSView/pv/view/viewport.cpp index 43f0145f..9fd60244 100644 --- a/DSView/pv/view/viewport.cpp +++ b/DSView/pv/view/viewport.cpp @@ -72,7 +72,7 @@ Viewport::Viewport(View &parent) : { setMouseTracking(true); setAutoFillBackground(true); - setBackgroundRole(QPalette::Base); + setBackgroundRole(QPalette::Base); //setFixedSize(QSize(600, 400)); _mm_width = "#####"; diff --git a/libsigrok4DSL/hardware/DSL/dslogic.c b/libsigrok4DSL/hardware/DSL/dslogic.c index c3bd8198..676e73e0 100644 --- a/libsigrok4DSL/hardware/DSL/dslogic.c +++ b/libsigrok4DSL/hardware/DSL/dslogic.c @@ -1376,13 +1376,8 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi, case SR_CONF_MAX_LOGIC_SAMPLELIMITS: if (!sdi) return SR_ERR; - sr_spew("dslogic:before"); devc = sdi->priv; - sr_spew("DSLOGIC_MAX_LOGIC_DEPTH: %d", DSLOGIC_MAX_LOGIC_DEPTH); - sr_spew("devc->cur_samplerate: %d", devc->cur_samplerate); - sr_spew("DSLOGIC_MAX_LOGIC_SAMPLERATE: %d", DSLOGIC_MAX_LOGIC_SAMPLERATE); *data = g_variant_new_uint64(DSLOGIC_MAX_LOGIC_DEPTH*ceil(devc->cur_samplerate * 1.0 / DSLOGIC_MAX_LOGIC_SAMPLERATE)); - sr_spew("dslogic:after"); break; case SR_CONF_STATUS: if (!sdi)