X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fvictor-dmm%2Fapi.c;h=ae0d2a76723c177d6a56e55675af27a110eb70b0;hb=b99457f09c90ce7fbb0de1793088dd53a59a0d07;hp=ae471d76fe82a124c37e406febe1d1fb8720646a;hpb=fa7730623a82bd1703b0d91adb97693e29b2a70c;p=libsigrok.git diff --git a/hardware/victor-dmm/api.c b/hardware/victor-dmm/api.c index ae471d76..ae0d2a76 100644 --- a/hardware/victor-dmm/api.c +++ b/hardware/victor-dmm/api.c @@ -76,7 +76,7 @@ static int clear_instances(void) return SR_OK; } -static int hw_init(void) +static int hw_init(struct sr_context *sr_ctx) { struct drv_context *drvc; @@ -84,6 +84,7 @@ static int hw_init(void) sr_err("Driver context malloc failed."); return SR_ERR_MALLOC; } + drvc->sr_ctx = sr_ctx; di->priv = drvc; return SR_OK; @@ -111,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", @@ -163,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; @@ -172,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) @@ -192,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; } } @@ -337,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; @@ -381,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; } @@ -393,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; @@ -421,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,