97 lines
2.8 KiB
Diff
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) {
|