X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhantek-6xxx%2Fapi.c;h=d88f4c6847bef4316bda03a08d3fb8d6f1b69e19;hb=e66d1892d0dd16ed166fc8f13493f95de0607362;hp=08062add77ec07424012d6a6a78d490d23c63b62;hpb=64f628bf8a7b94073de14e34d70a2b23c955f1b0;p=libsigrok.git diff --git a/src/hardware/hantek-6xxx/api.c b/src/hardware/hantek-6xxx/api.c index 08062add..d88f4c68 100644 --- a/src/hardware/hantek-6xxx/api.c +++ b/src/hardware/hantek-6xxx/api.c @@ -88,8 +88,6 @@ static const uint64_t vdivs[][2] = { static int read_channel(const struct sr_dev_inst *sdi, uint32_t amount); -static int dev_acquisition_stop(struct sr_dev_inst *sdi); - static struct sr_dev_inst *hantek_6xxx_dev_new(const struct hantek_6xxx_profile *prof) { struct sr_dev_inst *sdi; @@ -158,18 +156,14 @@ static int configure_channels(const struct sr_dev_inst *sdi) return SR_OK; } -static void clear_dev_context(void *priv) +static void clear_helper(struct dev_context *devc) { - struct dev_context *devc; - - devc = priv; g_slist_free(devc->enabled_channels); - g_free(devc); } static int dev_clear(const struct sr_dev_driver *di) { - return std_dev_clear(di, clear_dev_context); + return std_dev_clear_with_callback(di, (std_dev_clear_callback)clear_helper); } static GSList *scan(struct sr_dev_driver *di, GSList *options) @@ -399,14 +393,10 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd { struct dev_context *devc; uint64_t p, q; - int tmp_int, ch_idx, ret; + int tmp_int, ch_idx; unsigned int i; const char *tmp_str; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - - ret = SR_OK; devc = sdi->priv; if (!cg) { switch (key) { @@ -421,8 +411,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd devc->limit_samples = g_variant_get_uint64(data); break; default: - ret = SR_ERR_NA; - break; + return SR_ERR_NA; } } else { if (sdi->channel_groups->data == cg) @@ -445,7 +434,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd devc->voltage[ch_idx] = tmp_int; hantek_6xxx_update_vdiv(sdi); } else - ret = SR_ERR_ARG; + return SR_ERR_ARG; break; case SR_CONF_COUPLING: tmp_str = g_variant_get_string(data, NULL); @@ -456,15 +445,14 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd } } if (i == devc->coupling_tab_size) - ret = SR_ERR_ARG; + return SR_ERR_ARG; break; default: - ret = SR_ERR_NA; - break; + return SR_ERR_NA; } } - return ret; + return SR_OK; } static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, @@ -474,27 +462,15 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * GVariantBuilder gvb; unsigned int i; GVariant *gvar; - struct dev_context *devc = NULL; - - if (key == SR_CONF_SCAN_OPTIONS) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t)); - return SR_OK; - } else if (key == SR_CONF_DEVICE_OPTIONS && !sdi) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t)); - return SR_OK; - } + struct dev_context *devc; - if (sdi) - devc = sdi->priv; + devc = (sdi) ? sdi->priv : NULL; if (!cg) { switch (key) { + case SR_CONF_SCAN_OPTIONS: case SR_CONF_DEVICE_OPTIONS: - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - devopts, ARRAY_SIZE(devopts), sizeof(uint32_t)); - break; + return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); case SR_CONF_SAMPLERATE: g_variant_builder_init(&gvb, G_VARIANT_TYPE("a{sv}")); gvar = g_variant_new_fixed_array(G_VARIANT_TYPE("t"), @@ -513,8 +489,6 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * devopts_cg, ARRAY_SIZE(devopts_cg), sizeof(uint32_t)); break; case SR_CONF_COUPLING: - if (!devc) - return SR_ERR_NA; *data = g_variant_new_strv(devc->coupling_vals, devc->coupling_tab_size); break; case SR_CONF_VDIV: @@ -709,7 +683,7 @@ static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer) PRIu64 " <= %" PRIu64, devc->limit_samples, devc->samp_received); send_data(sdi, devc->sample_buf, devc->limit_samples); - sdi->driver->dev_acquisition_stop(sdi); + sr_dev_acquisition_stop(sdi); } else if (devc->limit_msec && (g_get_monotonic_time() - devc->aq_started) / 1000 >= devc->limit_msec) { sr_info("Requested time limit reached, stopping. %d <= %d", @@ -718,7 +692,7 @@ static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer) send_data(sdi, devc->sample_buf, devc->samp_received); g_free(devc->sample_buf); devc->sample_buf = NULL; - sdi->driver->dev_acquisition_stop(sdi); + sr_dev_acquisition_stop(sdi); } else { read_channel(sdi, data_amount(sdi)); } @@ -786,9 +760,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) struct sr_dev_driver *di = sdi->driver; struct drv_context *drvc = di->context; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - devc = sdi->priv; if (configure_channels(sdi) != SR_OK) { @@ -818,13 +789,11 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) { struct dev_context *devc; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR; - devc = sdi->priv; devc->dev_state = STOPPING; - g_free(devc->sample_buf); devc->sample_buf = NULL; + g_free(devc->sample_buf); + devc->sample_buf = NULL; return SR_OK; }