From b9e8c02c09614f539ac0e65ca99a316b7d957dd3 Mon Sep 17 00:00:00 2001 From: DreamSourceLab Date: Mon, 7 Dec 2015 23:07:11 +0800 Subject: [PATCH] Add "RLE" flag into sample count combobox --- DSView/pv/sigsession.cpp | 16 ++++--- DSView/pv/toolbars/samplingbar.cpp | 72 ++++++++-------------------- DSView/pv/view/view.cpp | 1 + DSView/pv/view/viewport.cpp | 11 ++++- DSView/pv/view/viewport.h | 2 + libsigrok4DSL/hardware/DSL/dscope.c | 5 ++ libsigrok4DSL/hardware/DSL/dslogic.c | 6 +++ libsigrok4DSL/hardware/demo/demo.c | 5 +- libsigrok4DSL/libsigrok.h | 1 + 9 files changed, 58 insertions(+), 61 deletions(-) diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp index deff6746..5b038474 100644 --- a/DSView/pv/sigsession.cpp +++ b/DSView/pv/sigsession.cpp @@ -1107,14 +1107,16 @@ void SigSession::data_feed_in(const struct sr_dev_inst *sdi, { { boost::lock_guard lock(_data_mutex); - BOOST_FOREACH(const boost::shared_ptr g, _group_traces) - { - assert(g); + if (_cur_logic_snapshot) { + BOOST_FOREACH(const boost::shared_ptr g, _group_traces) + { + assert(g); - _cur_group_snapshot = boost::shared_ptr( - new data::GroupSnapshot(_logic_data->get_snapshots().front(), g->get_index_list())); - _group_data->push_snapshot(_cur_group_snapshot); - _cur_group_snapshot.reset(); + _cur_group_snapshot = boost::shared_ptr( + new data::GroupSnapshot(_logic_data->get_snapshots().front(), g->get_index_list())); + _group_data->push_snapshot(_cur_group_snapshot); + _cur_group_snapshot.reset(); + } } _cur_logic_snapshot.reset(); _cur_dso_snapshot.reset(); diff --git a/DSView/pv/toolbars/samplingbar.cpp b/DSView/pv/toolbars/samplingbar.cpp index fe05e001..a9c34f1e 100644 --- a/DSView/pv/toolbars/samplingbar.cpp +++ b/DSView/pv/toolbars/samplingbar.cpp @@ -224,6 +224,7 @@ void SamplingBar::on_configure() ret = dlg.exec(); if (ret == QDialog::Accepted) { device_updated(); + update_sample_count_selector(); update_sample_rate_selector(); commit_sample_rate(); } @@ -511,29 +512,6 @@ void SamplingBar::on_samplecount_sel(int index) SR_CONF_LIMIT_SAMPLES, g_variant_new_uint64(sample_count)); - -// GVariant* gvar = _devInst->get_config(NULL, NULL, SR_CONF_STREAM); -// if (gvar != NULL) { -// stream_mode = g_variant_get_boolean(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); -// } -// if (!stream_mode) { -// if (sample_count > max_sample_count) { -// _devInst->set_config(NULL, NULL, -// SR_CONF_RLE, -// g_variant_new_boolean(true)); -// } else { -// _devInst->set_config(NULL, NULL, -// SR_CONF_RLE, -// g_variant_new_boolean(false)); -// } -// } - sample_count_changed(); update_scale(); } @@ -563,33 +541,6 @@ void SamplingBar::on_samplerate_sel(int index) SR_CONF_SAMPLERATE, g_variant_new_uint64(sample_rate)); -// GVariant* gvar = _devInst->get_config(NULL, NULL, SR_CONF_STREAM); -// if (gvar != NULL) { -// stream_mode = g_variant_get_boolean(gvar); -// g_variant_unref(gvar); -// } -// gvar = _devInst->get_config(NULL, NULL, SR_CONF_LIMIT_SAMPLES); -// if (gvar != NULL) { -// 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); -// } -// if (!stream_mode) { -// if (sample_count > max_sample_count) { -// _devInst->set_config(NULL, NULL, -// SR_CONF_RLE, -// g_variant_new_boolean(true)); -// } else { -// _devInst->set_config(NULL, NULL, -// SR_CONF_RLE, -// g_variant_new_boolean(false)); -// } -// } - update_scale(); } } @@ -599,6 +550,8 @@ void SamplingBar::update_sample_count_selector() GVariant *gvar_dict, *gvar_list; const uint64_t *elements = NULL; gsize num_elements; + bool stream_mode = false; + uint64_t max_sample_count = 0; if (_updating_sample_count) return; @@ -621,6 +574,17 @@ void SamplingBar::update_sample_count_selector() return; } + GVariant* gvar = dev_inst->get_config(NULL, NULL, SR_CONF_STREAM); + if (gvar != NULL) { + stream_mode = g_variant_get_boolean(gvar); + g_variant_unref(gvar); + } + gvar = dev_inst->get_config(NULL, NULL, SR_CONF_RLE_SAMPLELIMITS); + if (gvar != NULL) { + max_sample_count = g_variant_get_uint64(gvar); + g_variant_unref(gvar); + } + if ((gvar_list = g_variant_lookup_value(gvar_dict, "samplecounts", G_VARIANT_TYPE("at")))) { @@ -631,8 +595,12 @@ void SamplingBar::update_sample_count_selector() for (unsigned int i = 0; i < num_elements; i++) { char *const s = sr_samplecount_string(elements[i]); - _sample_count.addItem(QString(s), - qVariantFromValue(elements[i])); + if (!stream_mode && (elements[i] > max_sample_count)) + _sample_count.addItem(QString(s)+"(RLE)", + qVariantFromValue(elements[i])); + else + _sample_count.addItem(QString(s), + qVariantFromValue(elements[i])); g_free(s); } diff --git a/DSView/pv/view/view.cpp b/DSView/pv/view/view.cpp index be191e93..911a89e4 100644 --- a/DSView/pv/view/view.cpp +++ b/DSView/pv/view/view.cpp @@ -508,6 +508,7 @@ void View::signals_changed() next_v_offset += traceHeight + 2 * SignalMargin; } + _viewport->clear_measure(); header_updated(); normalize_layout(); } diff --git a/DSView/pv/view/viewport.cpp b/DSView/pv/view/viewport.cpp index 16e7dcf8..dfa94970 100644 --- a/DSView/pv/view/viewport.cpp +++ b/DSView/pv/view/viewport.cpp @@ -414,6 +414,9 @@ void Viewport::mousePressEvent(QMouseEvent *event) } } + if (_measure_type == LOGIC_FREQ) + _measure_type = NO_MEASURE; + update(); } @@ -481,7 +484,7 @@ void Viewport::mouseMoveEvent(QMouseEvent *event) (_mouse_down_point - event->pos()).x() * _view.scale()); _drag_strength = (_mouse_down_point - event->pos()).x(); - measure(); + //measure(); } } @@ -658,6 +661,12 @@ void Viewport::set_receive_len(quint64 length) update(); } +void Viewport::clear_measure() +{ + _measure_type = NO_MEASURE; + update(); +} + void Viewport::measure() { if ((_view.session().get_device()->dev_inst()->mode == LOGIC && diff --git a/DSView/pv/view/viewport.h b/DSView/pv/view/viewport.h index f74a3b17..40a15bbc 100644 --- a/DSView/pv/view/viewport.h +++ b/DSView/pv/view/viewport.h @@ -77,6 +77,8 @@ public: void start_trigger_timer(int msec); void stop_trigger_timer(); + void clear_measure(); + protected: void paintEvent(QPaintEvent *event); diff --git a/libsigrok4DSL/hardware/DSL/dscope.c b/libsigrok4DSL/hardware/DSL/dscope.c index 3d7971d0..26191168 100644 --- a/libsigrok4DSL/hardware/DSL/dscope.c +++ b/libsigrok4DSL/hardware/DSL/dscope.c @@ -1300,6 +1300,11 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi, return SR_ERR; *data = g_variant_new_uint64(DSCOPE_MAX_DEPTH); break; + case SR_CONF_RLE_SAMPLELIMITS: + if (!sdi) + return SR_ERR; + *data = g_variant_new_uint64(DSCOPE_MAX_DEPTH); + break; default: return SR_ERR_NA; } diff --git a/libsigrok4DSL/hardware/DSL/dslogic.c b/libsigrok4DSL/hardware/DSL/dslogic.c index f9992288..587cab68 100644 --- a/libsigrok4DSL/hardware/DSL/dslogic.c +++ b/libsigrok4DSL/hardware/DSL/dslogic.c @@ -1391,6 +1391,12 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi, devc = sdi->priv; *data = g_variant_new_uint64(DSLOGIC_MAX_LOGIC_DEPTH*ceil(devc->cur_samplerate * 1.0 / DSLOGIC_MAX_LOGIC_SAMPLERATE)); break; + case SR_CONF_RLE_SAMPLELIMITS: + if (!sdi) + return SR_ERR; + devc = sdi->priv; + *data = g_variant_new_uint64(DSLOGIC_MAX_LOGIC_DEPTH*ceil(samplerates[devc->samplerates_size-1] * 1.0 / DSLOGIC_MAX_LOGIC_SAMPLERATE)); + break; case SR_CONF_STATUS: if (!sdi) return SR_ERR; diff --git a/libsigrok4DSL/hardware/demo/demo.c b/libsigrok4DSL/hardware/demo/demo.c index cc38258b..a31467a5 100644 --- a/libsigrok4DSL/hardware/demo/demo.c +++ b/libsigrok4DSL/hardware/demo/demo.c @@ -498,7 +498,10 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi, case SR_CONF_MAX_LOGIC_SAMPLELIMITS: *data = g_variant_new_uint64(DEMO_MAX_LOGIC_DEPTH); break; - default: + case SR_CONF_RLE_SAMPLELIMITS: + *data = g_variant_new_uint64(DEMO_MAX_LOGIC_DEPTH); + break; + default: return SR_ERR_NA; } diff --git a/libsigrok4DSL/libsigrok.h b/libsigrok4DSL/libsigrok.h index 4062a61a..e55adbb0 100644 --- a/libsigrok4DSL/libsigrok.h +++ b/libsigrok4DSL/libsigrok.h @@ -827,6 +827,7 @@ enum { SR_CONF_MAX_DSO_SAMPLELIMITS, SR_CONF_MAX_LOGIC_SAMPLERATE, SR_CONF_MAX_LOGIC_SAMPLELIMITS, + SR_CONF_RLE_SAMPLELIMITS, /*--- Special stuff -------------------------------------------------*/