X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fasix-sigma%2Fapi.c;h=89783456c5bbe416ed5fcc8c3945eb9093400181;hb=f6ce25ec05e8707ee3783b111ea13779f237c3b3;hp=96cdb2a787ad4653cbc7f7394684f4c5aa4da797;hpb=758906aa711c2936e7e9adcb449f70905087a5d9;p=libsigrok.git diff --git a/src/hardware/asix-sigma/api.c b/src/hardware/asix-sigma/api.c index 96cdb2a7..89783456 100644 --- a/src/hardware/asix-sigma/api.c +++ b/src/hardware/asix-sigma/api.c @@ -193,7 +193,6 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { struct dev_context *devc; - uint64_t tmp; (void)cg; @@ -206,16 +205,13 @@ static int config_set(uint32_t key, GVariant *data, devc->limit_msec = g_variant_get_uint64(data); break; case SR_CONF_LIMIT_SAMPLES: - tmp = g_variant_get_uint64(data); - devc->limit_samples = tmp; - devc->limit_msec = sigma_limit_samples_to_msec(devc, tmp); + devc->limit_samples = g_variant_get_uint64(data); + devc->limit_msec = sigma_limit_samples_to_msec(devc, + devc->limit_samples); break; #if ASIX_SIGMA_WITH_TRIGGER case SR_CONF_CAPTURE_RATIO: - tmp = g_variant_get_uint64(data); - if (tmp > 100) - return SR_ERR; - devc->capture_ratio = tmp; + devc->capture_ratio = g_variant_get_uint64(data); break; #endif default: @@ -230,7 +226,7 @@ static int config_list(uint32_t key, GVariant **data, { switch (key) { case SR_CONF_DEVICE_OPTIONS: - return STD_CONFIG_LIST(key, data, sdi, cg, NULL, drvopts, devopts); + return STD_CONFIG_LIST(key, data, sdi, cg, NO_OPTS, drvopts, devopts); case SR_CONF_SAMPLERATE: *data = std_gvar_samplerates(samplerates, samplerates_count); break; @@ -367,9 +363,20 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) struct dev_context *devc; devc = sdi->priv; - devc->state.state = SIGMA_IDLE; - sr_session_source_remove(sdi->session, -1); + /* + * When acquisition is currently running, keep the receive + * routine registered and have it stop the acquisition upon the + * next invocation. Else unregister the receive routine here + * already. The detour is required to have sample data retrieved + * for forced acquisition stops. + */ + if (devc->state.state == SIGMA_CAPTURE) { + devc->state.state = SIGMA_STOPPING; + } else { + devc->state.state = SIGMA_IDLE; + sr_session_source_remove(sdi->session, -1); + } return SR_OK; }