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);
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;
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;
}
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;
/*
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;
}
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) {
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);
{
uint64_t tmp;
+ (void)sdi;
+
switch (info_id) {
- case SR_DI_INST:
- *data = sdi;
- break;
case SR_DI_HWCAPS:
*data = hwcaps;
break;
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;
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;
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;
/* 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;
.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,