sr_err("Driver context malloc failed.");
return SR_ERR_MALLOC;
}
+ drvc->sr_ctx = sr_ctx;
di->priv = drvc;
return SR_OK;
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",
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;
}
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)
/* 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;
}
}
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;
}
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;
}
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;
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,