Files
templates/tools/dsview/windows-usb-events.patch

97 lines
2.8 KiB
Diff

--- a/libsigrok4DSL/hardware/DSL/dslogic.c
+++ b/libsigrok4DSL/hardware/DSL/dslogic.c
@@ -1316,10 +1316,15 @@
{
int i;
sr_info("%s: remove fds from polling", __func__);
+#ifdef _WIN32
+ /* Windows libusb has no poll descriptors; remove the timer source. */
+ sr_source_remove(-1);
+#else
/* Remove fds from polling. */
for (i = 0; devc->usbfd[i] != -1; i++)
sr_source_remove(devc->usbfd[i]);
g_free(devc->usbfd);
+#endif
}
static void report_overflow(struct DSL_context *devc)
@@ -1486,6 +1491,13 @@
}
/* setup callback function for data transfer */
+#ifdef _WIN32
+ /* libusb_get_pollfds() always returns NULL on Windows. The acquisition
+ * thread pumps libusb via receive_data on a bounded timer instead. */
+ ret = sr_source_add(-1, 0, 10, receive_data, sdi);
+ if (ret != SR_OK)
+ return ret;
+#else
lupfd = libusb_get_pollfds(drvc->sr_ctx->libusb_ctx);
for (i = 0; lupfd[i]; i++);
@@ -1500,7 +1512,8 @@
devc->usbfd[i] = lupfd[i]->fd;
}
devc->usbfd[i] = -1;
- g_free(lupfd);
+ libusb_free_pollfds(lupfd);
+#endif
wr_cmd.header.dest = DSL_CTL_START;
wr_cmd.header.size = 0;
--- a/libsigrok4DSL/hardware/DSL/dscope.c
+++ b/libsigrok4DSL/hardware/DSL/dscope.c
@@ -1901,10 +1901,15 @@
{
int i;
sr_info("%s: remove fds from polling", __func__);
+#ifdef _WIN32
+ /* Windows libusb has no poll descriptors; remove the timer source. */
+ sr_source_remove(-1);
+#else
/* Remove fds from polling. */
for (i = 0; devc->usbfd[i] != -1; i++)
sr_source_remove(devc->usbfd[i]);
g_free(devc->usbfd);
+#endif
}
static int receive_data(int fd, int revents, const struct sr_dev_inst *sdi)
@@ -2088,6 +2093,13 @@
}
/* setup callback function for data transfer */
+#ifdef _WIN32
+ /* libusb_get_pollfds() always returns NULL on Windows. The acquisition
+ * thread pumps libusb via receive_data on a bounded timer instead. */
+ ret = sr_source_add(-1, 0, 10, receive_data, sdi);
+ if (ret != SR_OK)
+ return ret;
+#else
lupfd = libusb_get_pollfds(drvc->sr_ctx->libusb_ctx);
for (i = 0; lupfd[i]; i++);
@@ -2103,7 +2115,8 @@
}
devc->usbfd[i] = -1;
- g_free(lupfd);
+ libusb_free_pollfds(lupfd);
+#endif
wr_cmd.header.dest = DSL_CTL_START;
wr_cmd.header.size = 0;
--- a/libsigrok4DSL/session.c
+++ b/libsigrok4DSL/session.c
@@ -207,7 +207,8 @@
sr_dbg("Running...");
/* Do we have real sources? */
- if (session->num_sources == 1 && session->pollfds[0].fd == -1) {
+ if (session->num_sources == 1 && session->pollfds[0].fd == -1
+ && session->sources[0].timeout == 0) {
/* Dummy source, freewheel over it. */
while (session->num_sources) {
if (session->abort_session) {