X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fzeroplus-logic-cube%2Fzeroplus.c;h=f2fcac63c182a54ba38b1c4ca60c7d631b20c0b3;hb=86c02e6554061bf84b5fb7893e5837d26534a6d8;hp=a67e46006fd769c8fc2bcd126d3c6c6de987fdf9;hpb=1ebe4b4e6926eb1288ce77b179a92bc670eb9eca;p=libsigrok.git diff --git a/hardware/zeroplus-logic-cube/zeroplus.c b/hardware/zeroplus-logic-cube/zeroplus.c index a67e4600..f2fcac63 100644 --- a/hardware/zeroplus-logic-cube/zeroplus.c +++ b/hardware/zeroplus-logic-cube/zeroplus.c @@ -85,30 +85,14 @@ static const int hwcaps[] = { * We currently ignore other untested/unsupported devices here. */ static const char *probe_names[NUM_PROBES + 1] = { - "A0", - "A1", - "A2", - "A3", - "A4", - "A5", - "A6", - "A7", - "B0", - "B1", - "B2", - "B3", - "B4", - "B5", - "B6", - "B7", + "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", + "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", NULL, }; /* List of struct sr_dev_inst, maintained by dev_open()/dev_close(). */ SR_PRIV struct sr_dev_driver zeroplus_logic_cube_driver_info; -static struct sr_dev_driver *zdi = &zeroplus_logic_cube_driver_info; - -static libusb_context *usb_context = NULL; +static struct sr_dev_driver *di = &zeroplus_logic_cube_driver_info; /* * The hardware supports more samplerates than these, but these are the @@ -279,7 +263,7 @@ static int clear_instances(void) struct drv_context *drvc; struct dev_context *devc; - drvc = zdi->priv; + drvc = di->priv; for (l = drvc->instances; l; l = l->next) { sdi = l->data; if (!(devc = sdi->priv)) { @@ -312,12 +296,7 @@ static int hw_init(struct sr_context *sr_ctx) return SR_ERR_MALLOC; } drvc->sr_ctx = sr_ctx; - zdi->priv = drvc; - - if (libusb_init(&usb_context) != 0) { - sr_err("zp: Failed to initialize USB."); - return 0; - } + di->priv = drvc; return SR_OK; } @@ -336,19 +315,20 @@ static GSList *hw_scan(GSList *options) (void)options; - drvc = zdi->priv; + drvc = di->priv; devices = NULL; clear_instances(); /* Find all ZEROPLUS analyzers and add them to device list. */ devcnt = 0; - libusb_get_device_list(usb_context, &devlist); /* TODO: Errors. */ + libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist); /* TODO: Errors. */ for (i = 0; devlist[i]; i++) { ret = libusb_get_device_descriptor(devlist[i], &des); if (ret != 0) { - sr_err("zp: failed to get device descriptor: %d", ret); + sr_err("zp: failed to get device descriptor: %s", + libusb_error_name(ret)); continue; } @@ -370,7 +350,7 @@ static GSList *hw_scan(GSList *options) sr_err("zp: %s: sr_dev_inst_new failed", __func__); return NULL; } - sdi->driver = zdi; + sdi->driver = di; /* Allocate memory for our private driver context. */ if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) { @@ -415,7 +395,7 @@ static GSList *hw_dev_list(void) { struct drv_context *drvc; - drvc = zdi->priv; + drvc = di->priv; return drvc->instances; } @@ -423,6 +403,7 @@ static GSList *hw_dev_list(void) static int hw_dev_open(struct sr_dev_inst *sdi) { struct dev_context *devc; + struct drv_context *drvc = di->priv; libusb_device **devlist, *dev; struct libusb_device_descriptor des; int device_count, ret, i; @@ -432,7 +413,8 @@ static int hw_dev_open(struct sr_dev_inst *sdi) return SR_ERR_ARG; } - device_count = libusb_get_device_list(usb_context, &devlist); + device_count = libusb_get_device_list(drvc->sr_ctx->libusb_ctx, + &devlist); if (device_count < 0) { sr_err("zp: Failed to retrieve device list"); return SR_ERR; @@ -441,8 +423,8 @@ static int hw_dev_open(struct sr_dev_inst *sdi) dev = NULL; for (i = 0; i < device_count; i++) { if ((ret = libusb_get_device_descriptor(devlist[i], &des))) { - sr_err("fx2lafw: Failed to get device descriptor: %d.", - ret); + sr_err("zp: Failed to get device descriptor: %s.", + libusb_error_name(ret)); continue; } if (libusb_get_bus_number(devlist[i]) == devc->usb->bus @@ -463,20 +445,21 @@ static int hw_dev_open(struct sr_dev_inst *sdi) sdi->index, devc->usb->bus, devc->usb->address, USB_INTERFACE); } else { - sr_err("zp: failed to open device: %d", ret); + sr_err("zp: failed to open device: %s", libusb_error_name(ret)); return SR_ERR; } ret = libusb_set_configuration(devc->usb->devhdl, USB_CONFIGURATION); if (ret < 0) { - sr_err("zp: Unable to set USB configuration %d: %d", - USB_CONFIGURATION, ret); + sr_err("zp: Unable to set USB configuration %d: %s", + USB_CONFIGURATION, libusb_error_name(ret)); return SR_ERR; } ret = libusb_claim_interface(devc->usb->devhdl, USB_INTERFACE); if (ret != 0) { - sr_err("zp: Unable to claim interface: %d", ret); + sr_err("zp: Unable to claim interface: %s", + libusb_error_name(ret)); return SR_ERR; } @@ -538,15 +521,11 @@ static int hw_cleanup(void) { struct drv_context *drvc; - if (!(drvc = zdi->priv)) + if (!(drvc = di->priv)) return SR_OK; clear_instances(); - if (usb_context) - libusb_exit(usb_context); - usb_context = NULL; - return SR_OK; } @@ -559,19 +538,6 @@ static int hw_info_get(int info_id, const void **data, case SR_DI_HWCAPS: *data = hwcaps; break; - case SR_DI_NUM_PROBES: - if (sdi) { - devc = sdi->priv; - *data = GINT_TO_POINTER(devc->num_channels); - sr_spew("zp: %s: Returning number of channels: %d.", - __func__, devc->num_channels); - } else - return SR_ERR; - break; - case SR_DI_PROBE_NAMES: - *data = probe_names; - sr_spew("zp: %s: Returning probenames.", __func__); - break; case SR_DI_SAMPLERATES: *data = &samplerates; sr_spew("zp: %s: Returning samplerates.", __func__);