X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=hardware%2Fhantek-dso%2Fapi.c;h=addc29032c27a99527d572f2293824a118a744cc;hb=c259726a161411a7fe955dd139fce374635ddf7c;hp=4fd07eab18f38a8244553f2c6057289cb6e11bc3;hpb=2ce9f04629e93c4d202608dec6fa72d52aa44c6c;p=libsigrok.git diff --git a/hardware/hantek-dso/api.c b/hardware/hantek-dso/api.c index 4fd07eab..addc2903 100644 --- a/hardware/hantek-dso/api.c +++ b/hardware/hantek-dso/api.c @@ -151,7 +151,9 @@ 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) { struct sr_dev_inst *sdi; + struct sr_probe *probe; struct context *ctx; + int i; sdi = sr_dev_inst_new(index, SR_ST_INITIALIZING, prof->vendor, prof->model, NULL); @@ -159,6 +161,16 @@ static struct sr_dev_inst *dso_dev_new(int index, const struct dso_profile *prof return NULL; sdi->driver = hdi; + /* Add only the real probes -- EXT isn't a source of data, only + * a trigger source internal to the device. + */ + for (i = 0; probe_names[i]; i++) { + if (!(probe = sr_probe_new(i, SR_PROBE_ANALOG, TRUE, + probe_names[i]))) + return NULL; + sdi->probes = g_slist_append(sdi->probes, probe); + } + if (!(ctx = g_try_malloc0(sizeof(struct context)))) { sr_err("hantek-dso: ctx malloc failed"); return NULL; @@ -193,9 +205,9 @@ static int configure_probes(struct context *ctx, const GSList *probes) ctx->ch1_enabled = ctx->ch2_enabled = FALSE; for (l = probes; l; l = l->next) { probe = (struct sr_probe *)l->data; - if (probe->index == 1) + if (probe->index == 0) ctx->ch1_enabled = probe->enabled; - else if (probe->index == 2) + else if (probe->index == 1) ctx->ch2_enabled = probe->enabled; } @@ -315,15 +327,12 @@ static GSList *hw_scan(GSList *options) return devices; } -static int hw_dev_open(int dev_index) +static int hw_dev_open(struct sr_dev_inst *sdi) { - struct sr_dev_inst *sdi; struct context *ctx; int64_t timediff_us, timediff_ms; int err; - if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) - return SR_ERR_ARG; ctx = sdi->priv; /* @@ -337,7 +346,7 @@ static int hw_dev_open(int dev_index) g_usleep(300 * 1000); timediff_ms = 0; while (timediff_ms < MAX_RENUM_DELAY_MS) { - if ((err = dso_open(dev_index)) == SR_OK) + if ((err = dso_open(sdi)) == SR_OK) break; g_usleep(100 * 1000); timediff_us = g_get_monotonic_time() - ctx->fw_updated; @@ -346,7 +355,7 @@ static int hw_dev_open(int dev_index) } sr_info("hantek-dso: device came back after %d ms", timediff_ms); } else { - err = dso_open(dev_index); + err = dso_open(sdi); } if (err != SR_OK) { @@ -363,12 +372,8 @@ static int hw_dev_open(int dev_index) return SR_OK; } -static int hw_dev_close(int dev_index) +static int hw_dev_close(struct sr_dev_inst *sdi) { - struct sr_dev_inst *sdi; - - if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) - return SR_ERR_ARG; dso_close(sdi); @@ -392,10 +397,9 @@ static int hw_info_get(int info_id, const void **data, { uint64_t tmp; + (void)sdi; + switch (info_id) { - case SR_DI_INST: - *data = sdi; - break; case SR_DI_HWCAPS: *data = hwcaps; break; @@ -434,19 +438,9 @@ static int hw_info_get(int info_id, const void **data, return SR_OK; } -static int hw_dev_status_get(int dev_index) -{ - struct sr_dev_inst *sdi; - - if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) - return SR_ST_NOT_FOUND; - - return sdi->status; -} - -static int hw_dev_config_set(int dev_index, int hwcap, const void *value) +static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, + const void *value) { - struct sr_dev_inst *sdi; struct context *ctx; struct sr_rational tmp_rat; float tmp_float; @@ -454,9 +448,6 @@ 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(hdi->instances, dev_index))) - return SR_ERR; - if (sdi->status != SR_ST_ACTIVE) return SR_ERR; @@ -797,19 +788,16 @@ static int handle_event(int fd, int revents, void *cb_data) return TRUE; } -static int hw_dev_acquisition_start(int dev_index, void *cb_data) +static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, + void *cb_data) { const struct libusb_pollfd **lupfd; struct sr_datafeed_packet packet; struct sr_datafeed_header header; struct sr_datafeed_meta_analog meta; - struct sr_dev_inst *sdi; struct context *ctx; int i; - if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) - return SR_ERR; - if (sdi->status != SR_ST_ACTIVE) return SR_ERR; @@ -848,15 +836,12 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) /* TODO: doesn't really cancel pending transfers so they might come in after * SR_DF_END is sent. */ -static int hw_dev_acquisition_stop(int dev_index, void *cb_data) +static int hw_dev_acquisition_stop(const struct sr_dev_inst *sdi, + void *cb_data) { struct sr_datafeed_packet packet; - struct sr_dev_inst *sdi; struct context *ctx; - if (!(sdi = sr_dev_inst_get(hdi->instances, dev_index))) - return SR_ERR; - if (sdi->status != SR_ST_ACTIVE) return SR_ERR; @@ -879,7 +864,6 @@ SR_PRIV struct sr_dev_driver hantek_dso_driver_info = { .dev_open = hw_dev_open, .dev_close = hw_dev_close, .info_get = hw_info_get, - .dev_status_get = hw_dev_status_get, .dev_config_set = hw_dev_config_set, .dev_acquisition_start = hw_dev_acquisition_start, .dev_acquisition_stop = hw_dev_acquisition_stop,