diff options
Diffstat (limited to 'DSLogic-gui/pv/toolbars/samplingbar.cpp')
-rw-r--r-- | DSLogic-gui/pv/toolbars/samplingbar.cpp | 91 |
1 files changed, 71 insertions, 20 deletions
diff --git a/DSLogic-gui/pv/toolbars/samplingbar.cpp b/DSLogic-gui/pv/toolbars/samplingbar.cpp index 9c5c2bb..0283939 100644 --- a/DSLogic-gui/pv/toolbars/samplingbar.cpp +++ b/DSLogic-gui/pv/toolbars/samplingbar.cpp @@ -27,6 +27,8 @@ #include <boost/foreach.hpp> +#include <libsigrok4DSLogic/libsigrok.h> + #include <QAction> #include <QDebug> #include <QLabel> @@ -63,24 +65,24 @@ const uint64_t SamplingBar::RecordLengths[19] = { const uint64_t SamplingBar::DefaultRecordLength = 1000000; const uint64_t SamplingBar::DSLogic_RecordLengths[15] = { - 1000, - 2000, - 5000, - 10000, - 20000, - 50000, - 100000, - 200000, - 500000, - 1000000, - 2000000, - 5000000, - 10000000, - 16000000, - 100000000, + 1024, + 2048, + 4096, + 8192, + 16384, + 32768, + 65536, + 131072, + 262144, + 524288, + 1048576, + 2097152, + 4194304, + 8388608, + 16777216, }; -const uint64_t SamplingBar::DSLogic_DefaultRecordLength = 16000000; +const uint64_t SamplingBar::DSLogic_DefaultRecordLength = 16777216; SamplingBar::SamplingBar(QWidget *parent) : QToolBar("Sampling Bar", parent), @@ -106,7 +108,7 @@ SamplingBar::SamplingBar(QWidget *parent) : // if (l == DefaultRecordLength) // _record_length_selector.setCurrentIndex(i); // } - + _record_length_selector.setSizeAdjustPolicy(QComboBox::AdjustToContents); set_sampling(false); //_run_stop_button.setToolButtonStyle(Qt::ToolButtonTextBesideIcon); @@ -131,7 +133,7 @@ void SamplingBar::set_device(struct sr_dev_inst *sdi) for (size_t i = 0; i < countof(DSLogic_RecordLengths); i++) { const uint64_t &l = DSLogic_RecordLengths[i]; - char *const text = sr_si_string_u64(l, " samples"); + char *const text = sr_iec_string_u64(l, " samples"); _record_length_selector.addItem(QString(text), qVariantFromValue(l)); g_free(text); @@ -163,18 +165,47 @@ uint64_t SamplingBar::get_record_length() const return _record_length_selector.itemData(index).value<uint64_t>(); } +void SamplingBar::set_record_length(uint64_t length) +{ + for (int i = 0; i < _record_length_selector.count(); i++) { + if (length == _record_length_selector.itemData( + i).value<uint64_t>()) { + _record_length_selector.setCurrentIndex(i); + break; + } + } +} + void SamplingBar::set_sampling(bool sampling) { _run_stop_button.setIcon(sampling ? _icon_stop : _icon_start); //_run_stop_button.setText(sampling ? " Stop" : "Start"); } +void SamplingBar::set_sample_rate(uint64_t sample_rate) +{ + for (int i = 0; i < _sample_rate_list.count(); i++) { + if (sample_rate == _sample_rate_list.itemData( + i).value<uint64_t>()) { + _sample_rate_list.setCurrentIndex(i); + // Set the samplerate + if (sr_config_set(_sdi, SR_CONF_SAMPLERATE, + g_variant_new_uint64(sample_rate)) != SR_OK) { + qDebug() << "Failed to configure samplerate."; + return; + } + break; + } + } + +} + void SamplingBar::update_sample_rate_selector() { GVariant *gvar_dict, *gvar_list; const uint64_t *elements = NULL; gsize num_elements; - QAction *selector_action = NULL; + //QAction *selector_action = NULL; assert(_sample_rate_list_action); @@ -205,7 +236,7 @@ void SamplingBar::update_sample_rate_selector() _sample_rate_list.show(); g_variant_unref(gvar_list); - selector_action = _sample_rate_list_action; + //selector_action = _sample_rate_list_action; } g_variant_unref(gvar_dict); @@ -242,7 +273,9 @@ void SamplingBar::update_sample_rate_selector_value() void SamplingBar::commit_sample_rate() { + GVariant *gvar; uint64_t sample_rate = 0; + uint64_t last_sample_rate = 0; assert(_sdi); @@ -259,12 +292,30 @@ void SamplingBar::commit_sample_rate() if (sample_rate == 0) return; + // Get last samplerate + if (sr_config_get(_sdi->driver, SR_CONF_SAMPLERATE, + &gvar, _sdi) != SR_OK) { + qDebug() << + "WARNING: Failed to get value of sample rate"; + return; + } + last_sample_rate = g_variant_get_uint64(gvar); + g_variant_unref(gvar); + // Set the samplerate if (sr_config_set(_sdi, SR_CONF_SAMPLERATE, g_variant_new_uint64(sample_rate)) != SR_OK) { qDebug() << "Failed to configure samplerate."; return; } + + if (strcmp(_sdi->driver->name, "DSLogic") == 0 && _sdi->mode != DSO) { + if ((last_sample_rate == SR_MHZ(200)&& sample_rate != SR_MHZ(200)) || + (last_sample_rate != SR_MHZ(200) && sample_rate == SR_MHZ(200)) || + (last_sample_rate == SR_MHZ(400)&& sample_rate != SR_MHZ(400)) || + (last_sample_rate != SR_MHZ(400) && sample_rate == SR_MHZ(400))) + device_reload(); + } } void SamplingBar::on_sample_rate_changed() |