X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fvictor-dmm%2Fapi.c;h=ae0d2a76723c177d6a56e55675af27a110eb70b0;hb=c0bf69c29b138d18ee9f542985664eeaeeb47a0a;hp=07c61faf3056f2a149dfe6dd1c85de0a808700a9;hpb=1ebe4b4e6926eb1288ce77b179a92bc670eb9eca;p=libsigrok.git diff --git a/hardware/victor-dmm/api.c b/hardware/victor-dmm/api.c index 07c61faf..ae0d2a76 100644 --- a/hardware/victor-dmm/api.c +++ b/hardware/victor-dmm/api.c @@ -112,7 +112,7 @@ static GSList *hw_scan(GSList *options) clear_instances(); devices = NULL; - libusb_get_device_list(NULL, &devlist); + libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist); for (i = 0; devlist[i]; i++) { if ((ret = libusb_get_device_descriptor(devlist[i], &des)) != 0) { sr_warn("Failed to get device descriptor: %s", @@ -164,6 +164,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; int ret, i; @@ -173,7 +174,7 @@ static int hw_dev_open(struct sr_dev_inst *sdi) } devc = sdi->priv; - libusb_get_device_list(NULL, &devlist); + libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist); for (i = 0; devlist[i]; i++) { if (libusb_get_bus_number(devlist[i]) != devc->usb->bus || libusb_get_device_address(devlist[i]) != devc->usb->address) @@ -193,8 +194,9 @@ static int hw_dev_open(struct sr_dev_inst *sdi) /* The device reports as HID class, so the kernel would have * claimed it. */ if (libusb_kernel_driver_active(devc->usb->devhdl, 0) == 1) { - if (libusb_detach_kernel_driver(devc->usb->devhdl, 0) < 0) { - sr_err("Failed to detach kernel driver."); + if ((ret = libusb_detach_kernel_driver(devc->usb->devhdl, 0)) < 0) { + sr_err("Failed to detach kernel driver: %s.", + libusb_error_name(ret)); return SR_ERR; } } @@ -338,21 +340,22 @@ static void receive_transfer(struct libusb_transfer *transfer) if ((ret = libusb_submit_transfer(transfer) != 0)) { sr_err("Unable to resubmit transfer: %s.", libusb_error_name(ret)); - libusb_free_transfer(transfer); g_free(transfer->buffer); + libusb_free_transfer(transfer); hw_dev_acquisition_stop(sdi, sdi); } } else { /* This was the last transfer we're going to receive, so * clean up now. */ - libusb_free_transfer(transfer); g_free(transfer->buffer); + libusb_free_transfer(transfer); } } static int handle_events(int fd, int revents, void *cb_data) { struct dev_context *devc; + struct drv_context *drvc = di->priv; struct sr_datafeed_packet packet; struct sr_dev_inst *sdi; struct timeval tv; @@ -382,7 +385,8 @@ static int handle_events(int fd, int revents, void *cb_data) } memset(&tv, 0, sizeof(struct timeval)); - libusb_handle_events_timeout_completed(NULL, &tv, NULL); + libusb_handle_events_timeout_completed(drvc->sr_ctx->libusb_ctx, &tv, + NULL); return TRUE; } @@ -394,6 +398,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, struct sr_datafeed_header header; struct sr_datafeed_meta_analog meta; struct dev_context *devc; + struct drv_context *drvc = di->priv; const struct libusb_pollfd **pfd; struct libusb_transfer *transfer; int ret, i; @@ -422,7 +427,7 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, meta.num_probes = 1; sr_session_send(devc->cb_data, &packet); - pfd = libusb_get_pollfds(NULL); + pfd = libusb_get_pollfds(drvc->sr_ctx->libusb_ctx); for (i = 0; pfd[i]; i++) { /* Handle USB events every 100ms, for decent latency. */ sr_source_add(pfd[i]->fd, pfd[i]->events, 100,