X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fsiglent-sds%2Fapi.c;h=7799171def45bdff7a2a4fd181c06987e9045255;hb=fdf0744fa4b40adab32e8f10d84df784284c67cc;hp=9810aa1b3a3d23aea890deb60fc40c4930c904a5;hpb=567c6501d9b853453682001b13ae340afbea1551;p=libsigrok.git diff --git a/src/hardware/siglent-sds/api.c b/src/hardware/siglent-sds/api.c index 9810aa1b..7799171d 100644 --- a/src/hardware/siglent-sds/api.c +++ b/src/hardware/siglent-sds/api.c @@ -527,11 +527,11 @@ static int config_set(uint32_t key, GVariant *data, struct dev_context *devc; uint64_t p; double t_dbl; - unsigned int i; + int i; int ret, idx; const char *tmp_str; char buffer[16]; - char *cmd; + char *cmd = ""; char cmd4[4]; devc = sdi->priv; @@ -588,12 +588,14 @@ static int config_set(uint32_t key, GVariant *data, case 1000000: cmd = g_strdup_printf("%" PRIu64 "US", p); break; - case 100000000: + case 1000000000: cmd = g_strdup_printf("%" PRIu64 "NS", p); break; } sr_dbg("Setting device timebase: TDIV %s.", cmd); - return siglent_sds_config_set(sdi, "TDIV %s", cmd); + ret = siglent_sds_config_set(sdi, "TDIV %s", cmd); + g_free(cmd); + return ret; case SR_CONF_TRIGGER_SOURCE: if ((idx = std_str_idx(data, ARRAY_AND_SIZE(trigger_sources))) < 0) return SR_ERR_ARG; @@ -636,7 +638,9 @@ static int config_set(uint32_t key, GVariant *data, cmd = g_strdup_printf("%" PRIu64 "UV", p); break; } - return siglent_sds_config_set(sdi, "C%d:VDIV %s", i + 1, cmd); + ret = siglent_sds_config_set(sdi, "C%d:VDIV %s", i + 1, cmd); + g_free(cmd); + return ret; case SR_CONF_COUPLING: if (!cg) return SR_ERR_CHANNEL_GROUP; @@ -678,6 +682,14 @@ static int config_set(uint32_t key, GVariant *data, siglent_sds_get_dev_cfg_horizontal(sdi); data = g_variant_new_uint64(devc->samplerate); break; + case SR_CONF_AVERAGING: + devc->average_enabled = g_variant_get_boolean(data); + sr_dbg("%s averaging", devc->average_enabled ? "Enabling" : "Disabling"); + break; + case SR_CONF_AVG_SAMPLES: + devc->average_samples = g_variant_get_uint64(data); + sr_dbg("Setting averaging rate to %" PRIu64, devc->average_samples); + break; default: return SR_ERR_NA; } @@ -763,7 +775,7 @@ static int config_list(uint32_t key, GVariant **data, *data = g_variant_new_int32(devc->model->series->num_horizontal_divs); break; case SR_CONF_AVERAGING: - /* TODO: Implement averaging. */ + *data = g_variant_new_boolean(devc->average_enabled); break; default: return SR_ERR_NA; @@ -850,8 +862,13 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) case SPO_MODEL: if (siglent_sds_config_set(sdi, "WFSU SP,0,TYPE,1") != SR_OK) return SR_ERR; - if (siglent_sds_config_set(sdi, "ACQW SAMPLING") != SR_OK) - return SR_ERR; + if (devc->average_enabled) { + if (siglent_sds_config_set(sdi, "ACQW AVERAGE,%i", devc->average_samples) != SR_OK) + return SR_ERR; + } else { + if (siglent_sds_config_set(sdi, "ACQW SAMPLING") != SR_OK) + return SR_ERR; + } break; case NON_SPO_MODEL: /* TODO: Implement CML/CNL/DL models. */