From 63772095b3803b03dc12c4fa9766d3a1ad0e1441 Mon Sep 17 00:00:00 2001 From: DreamSourceLab Date: Thu, 8 Oct 2015 21:20:38 +0800 Subject: [PATCH] Add warning message when buffer full @ LA RLE mode --- DSView/pv/mainwindow.cpp | 19 +++++++++++++++++++ libsigrok4DSL/hardware/DSL/dslogic.c | 7 +++++++ libsigrok4DSL/hwdriver.c | 2 ++ libsigrok4DSL/libsigrok.h | 5 +++++ 4 files changed, 33 insertions(+) diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index 080f4fb5..5aebecaa 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -486,6 +486,25 @@ void MainWindow::capture_state_changed(int state) _sampling_bar->enable_toggle(state != SigSession::Running); _trig_bar->enable_toggle(state != SigSession::Running); _measure_dock->widget()->setEnabled(state != SigSession::Running); + if (_session.get_device()->dev_inst()->mode == LOGIC && + state == SigSession::Stopped) { + GVariant *gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_RLE); + if (gvar != NULL) { + bool rle = g_variant_get_boolean(gvar); + g_variant_unref(gvar); + if (rle) { + gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_ACTUAL_SAMPLES); + if (gvar != NULL) { + uint64_t actual_samples = g_variant_get_uint64(gvar); + g_variant_unref(gvar); + if (actual_samples != _session.get_device()->get_sample_limit()) { + show_session_error(tr("RLE Mode Warning"), + tr("Hardware buffer is full!\nActually received samples is less than setted sample depth!")); + } + } + } + } + } #ifdef TEST_MODE if (state == SigSession::Stopped) { test_timer.start(100); diff --git a/libsigrok4DSL/hardware/DSL/dslogic.c b/libsigrok4DSL/hardware/DSL/dslogic.c index 676e73e0..895f7ec5 100644 --- a/libsigrok4DSL/hardware/DSL/dslogic.c +++ b/libsigrok4DSL/hardware/DSL/dslogic.c @@ -1196,6 +1196,12 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi, devc = sdi->priv; *data = g_variant_new_uint64(devc->limit_samples); break; + case SR_CONF_ACTUAL_SAMPLES: + if (!sdi) + return SR_ERR; + devc = sdi->priv; + *data = g_variant_new_uint64(devc->actual_samples); + break; case SR_CONF_SAMPLERATE: if (!sdi) return SR_ERR; @@ -2530,6 +2536,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) devc->status = DSL_INIT; devc->num_transfers = 0; devc->submitted_transfers = 0; + devc->actual_samples = devc->limit_samples; /* Configures devc->trigger_* and devc->sample_wide */ if (configure_probes(sdi) != SR_OK) { diff --git a/libsigrok4DSL/hwdriver.c b/libsigrok4DSL/hwdriver.c index 6bbd0051..4e437dfd 100644 --- a/libsigrok4DSL/hwdriver.c +++ b/libsigrok4DSL/hwdriver.c @@ -59,6 +59,8 @@ static struct sr_config_info sr_config_info_data[] = { "Sample rate", "Sample rate", NULL}, {SR_CONF_LIMIT_SAMPLES, SR_T_UINT64, "samplecount", "Sample count", "Sample count", NULL}, + {SR_CONF_ACTUAL_SAMPLES, SR_T_UINT64, "samplecount", + "Sample count", "Sample count", NULL}, {SR_CONF_CLOCK_TYPE, SR_T_BOOL, "clocktype", "Using External Clock", "Using External Clock", NULL}, {SR_CONF_CLOCK_EDGE, SR_T_BOOL, "clockedge", diff --git a/libsigrok4DSL/libsigrok.h b/libsigrok4DSL/libsigrok.h index be9b1d74..b701b191 100644 --- a/libsigrok4DSL/libsigrok.h +++ b/libsigrok4DSL/libsigrok.h @@ -856,6 +856,11 @@ enum { */ SR_CONF_LIMIT_SAMPLES, + /** + * The actual sample count received + */ + SR_CONF_ACTUAL_SAMPLES, + /** * The device supports setting a frame limit (how many * frames should be acquired).