X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Ftoolbars%2Fsamplingbar.cpp;h=7e052f81cf6c16e77d91307fc956097fff410711;hp=d42e6de7293fd56102f85223ebcf87f93cd86c00;hb=5ac961e325a9d2cbafdd8fae3a6704d7348cf19a;hpb=f4c92e1c49680738bde7d5fa08153fa914ac2920 diff --git a/pv/toolbars/samplingbar.cpp b/pv/toolbars/samplingbar.cpp index d42e6de7..7e052f81 100644 --- a/pv/toolbars/samplingbar.cpp +++ b/pv/toolbars/samplingbar.cpp @@ -72,11 +72,11 @@ SamplingBar::SamplingBar(QWidget *parent) : _run_stop_button(this) { connect(&_run_stop_button, SIGNAL(clicked()), - this, SIGNAL(run_stop())); + this, SLOT(on_run_stop())); connect(&_device_selector, SIGNAL(currentIndexChanged (int)), this, SLOT(on_device_selected())); connect(&_configure_button, SIGNAL(clicked()), - this, SLOT(configure())); + this, SLOT(on_configure())); _sample_rate_value.setDecimals(0); _sample_rate_value.setSuffix("Hz"); @@ -171,7 +171,9 @@ void SamplingBar::set_sampling(bool sampling) void SamplingBar::update_sample_rate_selector() { const sr_dev_inst *const sdi = get_selected_device(); - const struct sr_samplerates *samplerates; + GVariant *gvar_dict, *gvar_list; + const uint64_t *elements = NULL; + gsize num_elements; assert(_sample_rate_value_action); assert(_sample_rate_list_action); @@ -180,56 +182,71 @@ void SamplingBar::update_sample_rate_selector() return; if (sr_config_list(sdi->driver, SR_CONF_SAMPLERATE, - (const void **)&samplerates, sdi) != SR_OK) + &gvar_dict, sdi) != SR_OK) return; _sample_rate_list_action->setVisible(false); _sample_rate_value_action->setVisible(false); - if (samplerates->step) - { - _sample_rate_value.setRange( - samplerates->low, samplerates->high); - _sample_rate_value.setSingleStep(samplerates->step); + if ((gvar_list = g_variant_lookup_value(gvar_dict, + "samplerate-steps", G_VARIANT_TYPE("at")))) { + elements = (const uint64_t *)g_variant_get_fixed_array( + gvar_list, &num_elements, sizeof(uint64_t)); + _sample_rate_value.setRange(elements[0], elements[1]); + _sample_rate_value.setSingleStep(elements[2]); _sample_rate_value_action->setVisible(true); + g_variant_unref(gvar_list); } - else + else if ((gvar_list = g_variant_lookup_value(gvar_dict, + "samplerates", G_VARIANT_TYPE("at")))) { + elements = (const uint64_t *)g_variant_get_fixed_array( + gvar_list, &num_elements, sizeof(uint64_t)); _sample_rate_list.clear(); - for (const uint64_t *rate = samplerates->list; - *rate; rate++) - _sample_rate_list.addItem( - sr_samplerate_string(*rate), - qVariantFromValue(*rate)); + + for (unsigned int i = 0; i < num_elements; i++) + { + char *const s = sr_samplerate_string(elements[i]); + _sample_rate_list.addItem(QString(s), + qVariantFromValue(elements[i])); + g_free(s); + } + _sample_rate_list.show(); _sample_rate_list_action->setVisible(true); + g_variant_unref(gvar_list); } + g_variant_unref(gvar_dict); update_sample_rate_selector_value(); } void SamplingBar::update_sample_rate_selector_value() { sr_dev_inst *const sdi = get_selected_device(); + GVariant *gvar; + uint64_t samplerate; + assert(sdi); - uint64_t *samplerate = NULL; if (sr_config_get(sdi->driver, SR_CONF_SAMPLERATE, - (const void**)&samplerate, sdi) != SR_OK) { + &gvar, sdi) != SR_OK) { qDebug() << "WARNING: Failed to get value of sample rate"; return; } + samplerate = g_variant_get_uint64(gvar); + g_variant_unref(gvar); assert(_sample_rate_value_action); assert(_sample_rate_list_action); if (_sample_rate_value_action->isVisible()) - _sample_rate_value.setValue(*samplerate); + _sample_rate_value.setValue(samplerate); else if (_sample_rate_list_action->isVisible()) { for (int i = 0; i < _sample_rate_list.count(); i++) - if (*samplerate == _sample_rate_list.itemData( + if (samplerate == _sample_rate_list.itemData( i).value()) _sample_rate_list.setCurrentIndex(i); } @@ -257,7 +274,7 @@ void SamplingBar::commit_sample_rate() // Set the samplerate if (sr_config_set(sdi, SR_CONF_SAMPLERATE, - &sample_rate) != SR_OK) { + g_variant_new_uint64(sample_rate)) != SR_OK) { qDebug() << "Failed to configure samplerate."; return; } @@ -266,6 +283,7 @@ void SamplingBar::commit_sample_rate() void SamplingBar::on_device_selected() { update_sample_rate_selector(); + device_selected(); } void SamplingBar::on_sample_rate_changed() @@ -273,7 +291,7 @@ void SamplingBar::on_sample_rate_changed() commit_sample_rate(); } -void SamplingBar::configure() +void SamplingBar::on_configure() { commit_sample_rate(); @@ -286,5 +304,11 @@ void SamplingBar::configure() update_sample_rate_selector_value(); } +void SamplingBar::on_run_stop() +{ + commit_sample_rate(); + run_stop(); +} + } // namespace toolbars } // namespace pv