X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=hardware%2Fhantek-dso%2Fapi.c;h=eccc6e7856a0fd8f30db88551ce2fcf5cd980c81;hb=10e5cbede89976eeed3237d985da065238962dfe;hp=8a7e9f744a434167b189eca699470e0aade44690;hpb=45c59c8bdd01954f9214fe7b869d92c55415d109;p=libsigrok.git diff --git a/hardware/hantek-dso/api.c b/hardware/hantek-dso/api.c index 8a7e9f74..eccc6e78 100644 --- a/hardware/hantek-dso/api.c +++ b/hardware/hantek-dso/api.c @@ -145,7 +145,8 @@ static const char *coupling[] = { }; SR_PRIV libusb_context *usb_context = NULL; -SR_PRIV GSList *dev_insts = NULL; +SR_PRIV struct sr_dev_driver hantek_dso_driver_info; +static struct sr_dev_driver *hdi = &hantek_dso_driver_info; static struct sr_dev_inst *dso_dev_new(int index, const struct dso_profile *prof) { @@ -178,7 +179,7 @@ static struct sr_dev_inst *dso_dev_new(int index, const struct dso_profile *prof ctx->triggersource = g_strdup(DEFAULT_TRIGGER_SOURCE); ctx->triggerposition = DEFAULT_HORIZ_TRIGGERPOS; sdi->priv = ctx; - dev_insts = g_slist_append(dev_insts, sdi); + hdi->instances = g_slist_append(hdi->instances, sdi); return sdi; } @@ -200,29 +201,32 @@ static int configure_probes(struct context *ctx, const GSList *probes) return SR_OK; } -static int hw_init(const char *devinfo) +static int hw_init(void) +{ + + if (libusb_init(&usb_context) != 0) { + sr_err("hantek-dso: Failed to initialize USB."); + return SR_ERR; + } + + return SR_OK; +} + +static int hw_scan(void) { struct sr_dev_inst *sdi; struct libusb_device_descriptor des; const struct dso_profile *prof; struct context *ctx; libusb_device **devlist; - int err, devcnt, i, j; - - /* Avoid compiler warnings. */ - (void)devinfo; - - if (libusb_init(&usb_context) != 0) { - sr_err("hantek-dso: Failed to initialize USB."); - return 0; - } + int devcnt, ret, i, j; /* Find all Hantek DSO devices and upload firmware to all of them. */ devcnt = 0; libusb_get_device_list(usb_context, &devlist); for (i = 0; devlist[i]; i++) { - if ((err = libusb_get_device_descriptor(devlist[i], &des))) { - sr_err("hantek-dso: failed to get device descriptor: %d", err); + if ((ret = libusb_get_device_descriptor(devlist[i], &des))) { + sr_err("hantek-dso: failed to get device descriptor: %d", ret); continue; } @@ -278,7 +282,7 @@ static int hw_dev_open(int dev_index) int64_t timediff_us, timediff_ms; int err; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return SR_ERR_ARG; ctx = sdi->priv; @@ -323,7 +327,7 @@ static int hw_dev_close(int dev_index) { struct sr_dev_inst *sdi; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return SR_ERR_ARG; dso_close(sdi); @@ -338,7 +342,7 @@ static int hw_cleanup(void) struct context *ctx; /* Properly close and free all devices. */ - for (l = dev_insts; l; l = l->next) { + for (l = hdi->instances; l; l = l->next) { if (!(sdi = l->data)) { /* Log error, but continue cleaning up the rest. */ sr_err("hantek-dso: %s: sdi was NULL, continuing", __func__); @@ -356,8 +360,8 @@ static int hw_cleanup(void) sr_dev_inst_free(sdi); } - g_slist_free(dev_insts); - dev_insts = NULL; + g_slist_free(hdi->instances); + hdi->instances = NULL; if (usb_context) libusb_exit(usb_context); @@ -372,7 +376,7 @@ static const void *hw_dev_info_get(int dev_index, int dev_info_id) const void *info; uint64_t tmp; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return NULL; info = NULL; @@ -417,7 +421,7 @@ static int hw_dev_status_get(int dev_index) { struct sr_dev_inst *sdi; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return SR_ST_NOT_FOUND; return sdi->status; @@ -438,7 +442,7 @@ static int hw_dev_config_set(int dev_index, int hwcap, const void *value) int ret, i; char **targets; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return SR_ERR; if (sdi->status != SR_ST_ACTIVE) @@ -791,7 +795,7 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) struct context *ctx; int i; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return SR_ERR; if (sdi->status != SR_ST_ACTIVE) @@ -838,7 +842,7 @@ static int hw_dev_acquisition_stop(int dev_index, void *cb_data) struct sr_dev_inst *sdi; struct context *ctx; - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) + if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) return SR_ERR; if (sdi->status != SR_ST_ACTIVE) @@ -859,6 +863,7 @@ SR_PRIV struct sr_dev_driver hantek_dso_driver_info = { .api_version = 1, .init = hw_init, .cleanup = hw_cleanup, + .scan = hw_scan, .dev_open = hw_dev_open, .dev_close = hw_dev_close, .dev_info_get = hw_dev_info_get, @@ -867,4 +872,5 @@ SR_PRIV struct sr_dev_driver hantek_dso_driver_info = { .dev_config_set = hw_dev_config_set, .dev_acquisition_start = hw_dev_acquisition_start, .dev_acquisition_stop = hw_dev_acquisition_stop, + .instances = NULL, };