X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fasix-sigma%2Fapi.c;h=bc6c87e86ebd51baf49e5c710f7daa587416b48b;hb=c8e789fa0c7264f8356b0446367cc1252fadfe4c;hp=4b35ea333070b5bcb2d06cc49bfe198d6fe72cae;hpb=2f425a56edbe528ed4566ea6791009dad61ef56d;p=libsigrok.git diff --git a/src/hardware/asix-sigma/api.c b/src/hardware/asix-sigma/api.c index 4b35ea33..bc6c87e8 100644 --- a/src/hardware/asix-sigma/api.c +++ b/src/hardware/asix-sigma/api.c @@ -50,17 +50,23 @@ static const uint32_t devopts[] = { #endif }; +#if ASIX_SIGMA_WITH_TRIGGER static const int32_t trigger_matches[] = { SR_TRIGGER_ZERO, SR_TRIGGER_ONE, SR_TRIGGER_RISING, SR_TRIGGER_FALLING, }; +#endif +static void clear_helper(struct dev_context *devc) +{ + ftdi_deinit(&devc->ftdic); +} static int dev_clear(const struct sr_dev_driver *di) { - return std_dev_clear(di, sigma_clear_helper); + return std_dev_clear_with_callback(di, (std_dev_clear_callback)clear_helper); } static GSList *scan(struct sr_dev_driver *di, GSList *options) @@ -139,18 +145,13 @@ static int dev_open(struct sr_dev_inst *sdi) devc = sdi->priv; - /* Make sure it's an ASIX SIGMA. */ if ((ret = ftdi_usb_open_desc(&devc->ftdic, - USB_VENDOR, USB_PRODUCT, USB_DESCRIPTION, NULL)) < 0) { - - sr_err("ftdi_usb_open failed: %s", - ftdi_get_error_string(&devc->ftdic)); - - return 0; + USB_VENDOR, USB_PRODUCT, USB_DESCRIPTION, NULL)) < 0) { + sr_err("Failed to open device (%d): %s.", + ret, ftdi_get_error_string(&devc->ftdic)); + return SR_ERR; } - sdi->status = SR_ST_ACTIVE; - return SR_OK; } @@ -160,13 +161,7 @@ static int dev_close(struct sr_dev_inst *sdi) devc = sdi->priv; - /* TODO */ - if (sdi->status == SR_ST_ACTIVE) - ftdi_usb_close(&devc->ftdic); - - sdi->status = SR_ST_INACTIVE; - - return SR_OK; + return (ftdi_usb_close(&devc->ftdic) == 0) ? SR_OK : SR_ERR; } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, @@ -211,9 +206,6 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd (void)cg; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - devc = sdi->priv; ret = SR_OK; @@ -254,17 +246,9 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * GVariant *gvar; GVariantBuilder gvb; - (void)cg; - switch (key) { case SR_CONF_DEVICE_OPTIONS: - if (!sdi) - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t)); - else - *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, NULL, 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"), samplerates, @@ -298,9 +282,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) uint8_t clock_bytes[sizeof(clockselect)]; size_t clock_idx; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - devc = sdi->priv; if (sigma_convert_trigger(sdi) != SR_OK) {