return ret;
}
+SR_PRIV void sr_usb_close(struct sr_usb_dev_inst *usb)
+{
+ libusb_close(usb->devhdl);
+ usb->devhdl = NULL;
+ sr_dbg("Closed USB device %d.%d.", usb->bus, usb->address);
+}
+
#ifdef _WIN32
/* Thread used to run libusb_wait_for_event() and set a pollable event. */
static gpointer usb_thread(gpointer data)
/* Add event, set by USB wait thread, to session poll set. */
ctx->usb_pollfd.fd = ctx->usb_wait_complete_event;
ctx->usb_pollfd.events = G_IO_IN;
+ ctx->usb_pollfd.revents = 0;
ctx->usb_cb = cb;
ctx->usb_cb_data = cb_data;
- sr_session_source_add_pollfd(session, &ctx->usb_pollfd, timeout,
- usb_callback, ctx);
+ sr_session_source_add_internal(session, &ctx->usb_pollfd, timeout,
+ usb_callback, ctx, (gintptr)&ctx->usb_pollfd, TRUE);
#else
const struct libusb_pollfd **lupfd;
unsigned int i;
lupfd = libusb_get_pollfds(ctx->libusb_ctx);
- for (i = 0; lupfd[i]; i++)
- sr_session_source_add(session, lupfd[i]->fd, lupfd[i]->events,
- timeout, cb, cb_data);
+ for (i = 0; lupfd[i]; i++) {
+ GPollFD p;
+
+ p.fd = lupfd[i]->fd;
+ p.events = lupfd[i]->events;
+ p.revents = 0;
+
+ sr_session_source_add_internal(session, &p, timeout,
+ cb, cb_data, p.fd, TRUE);
+ }
free(lupfd);
#endif
ctx->usb_source_present = TRUE;