summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ddk_build.cmd2
-rw-r--r--libusb/os/poll_windows.c15
-rw-r--r--libusb/os/poll_windows.h7
-rw-r--r--libusb/os/threads_windows.c4
-rw-r--r--libusb/os/windows_usb.c19
-rw-r--r--libusb/os/windows_usb.h5
6 files changed, 26 insertions, 26 deletions
diff --git a/ddk_build.cmd b/ddk_build.cmd
index 236c589..f64b78d 100644
--- a/ddk_build.cmd
+++ b/ddk_build.cmd
@@ -20,7 +20,7 @@ set destType=x64
set srcPath=libusb\os\obj%BUILD_ALT_DIR%\%cpudir%
set dstPath=%destType%\Debug
-if %_BuildType%==chk goto isDebug
+if %DDKBUILDENV%==chk goto isDebug
set dstPath=%destType%\Release
:isDebug
diff --git a/libusb/os/poll_windows.c b/libusb/os/poll_windows.c
index b6fed7c..3bbe615 100644
--- a/libusb/os/poll_windows.c
+++ b/libusb/os/poll_windows.c
@@ -70,12 +70,6 @@
// Uncomment to debug the polling layer
//#define DEBUG_POLL_WINDOWS
-
-// Uncomment to have poll return with EINTR as soon as a new transfer (fd) is added
-// This should result in a LIBUSB_ERROR_INTERRUPTED being returned by libusb calls,
-// which should give the app an opportunity to resubmit a new fd set.
-//#define DYNAMIC_FDS
-
#if defined(DEBUG_POLL_WINDOWS)
#define poll_dbg usbi_dbg
#else
@@ -122,8 +116,6 @@ static inline int _open_osfhandle(intptr_t osfhandle, int flags)
#define CHECK_INIT_POLLING do {if(!is_polling_set) init_polling();} while(0)
-extern void usbi_fd_notification(struct libusb_context *ctx);
-
// public fd data
const struct winfd INVALID_WINFD = {-1, NULL, NULL, RW_NONE, FALSE};
struct winfd poll_fd[MAX_FDS];
@@ -434,7 +426,7 @@ out1:
* read and one for write. Using a single R/W fd is unsupported and will
* produce unexpected results
*/
-struct winfd usbi_create_fd(HANDLE handle, int access_mode, struct libusb_context *ctx)
+struct winfd usbi_create_fd(HANDLE handle, int access_mode)
{
int i, fd;
struct winfd wfd = INVALID_WINFD;
@@ -489,11 +481,6 @@ struct winfd usbi_create_fd(HANDLE handle, int access_mode, struct libusb_contex
usbi_mutex_unlock(&new_fd_mutex);
// Notify poll that fds have been updated
SetEvent(fd_update);
-#else
- // NOTE: For now, usbi_fd_notification is only called on fd creation, as
- // fd deletion results in a CancelIo() event, which poll should detect.
- // Will see if there's an actual justification to call this on delete...
- usbi_fd_notification(ctx);
#endif
return wfd;
}
diff --git a/libusb/os/poll_windows.h b/libusb/os/poll_windows.h
index 996ff48..0da805b 100644
--- a/libusb/os/poll_windows.h
+++ b/libusb/os/poll_windows.h
@@ -26,6 +26,11 @@
#pragma warning(disable:4127) // conditional expression is constant
#endif
+// Uncomment to have poll return with EINTR as soon as a new transfer (fd) is added
+// This should result in a LIBUSB_ERROR_INTERRUPTED being returned by libusb calls,
+// which should give the app an opportunity to resubmit a new fd set.
+//#define DYNAMIC_FDS
+
#if !defined(ssize_t)
#if defined (_WIN64)
#define ssize_t __int64
@@ -84,7 +89,7 @@ int usbi_close(int fd);
void init_polling(void);
void exit_polling(void);
-struct winfd usbi_create_fd(HANDLE handle, int access_mode, struct libusb_context *ctx);
+struct winfd usbi_create_fd(HANDLE handle, int access_mode);
void usbi_free_fd(int fd);
struct winfd fd_to_winfd(int fd);
struct winfd handle_to_winfd(HANDLE handle);
diff --git a/libusb/os/threads_windows.c b/libusb/os/threads_windows.c
index 7762190..6819059 100644
--- a/libusb/os/threads_windows.c
+++ b/libusb/os/threads_windows.c
@@ -194,11 +194,13 @@ int usbi_cond_timedwait(usbi_cond_t *cond,
TIMESPEC_TO_TIMEVAL(&targ_time, abstime);
timersub(&targ_time, &cur_time, &delta_time);
- if(delta_time.tv_sec <= 0) // abstime already passed?
+ if(delta_time.tv_sec < 0) // abstime already passed?
millis = 0;
else {
millis = delta_time.tv_usec/1000;
millis += delta_time.tv_sec *1000;
+ if (delta_time.tv_usec % 1000) // round up to next millisecond
+ millis++;
}
return usbi_cond_intwait(cond, mutex, millis);
diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c
index 62fb871..fe7961e 100644
--- a/libusb/os/windows_usb.c
+++ b/libusb/os/windows_usb.c
@@ -58,6 +58,8 @@
#define LOOP_CHECK(fcall) { r=fcall; if (r != LIBUSB_SUCCESS) continue; }
#define LOOP_BREAK(err) { r=err; continue; }
+extern void usbi_fd_notification(struct libusb_context *ctx);
+
// Helper prototypes
static int windows_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len, int *host_endian);
static int windows_clock_gettime(int clk_id, struct timespec *tp);
@@ -1737,6 +1739,9 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer)
usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd,
(short)((transfer->endpoint & LIBUSB_ENDPOINT_IN)?POLLIN:POLLOUT));
+#if !defined(DYNAMIC_FDS)
+ usbi_fd_notification(ctx);
+#endif
return LIBUSB_SUCCESS;
}
@@ -1756,6 +1761,9 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer)
usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd,
(short)((transfer->endpoint & LIBUSB_ENDPOINT_IN)?POLLIN:POLLOUT));
+#if !defined(DYNAMIC_FDS)
+ usbi_fd_notification(ctx);
+#endif
return LIBUSB_SUCCESS;
}
@@ -1774,6 +1782,9 @@ static int submit_control_transfer(struct usbi_transfer *itransfer)
}
usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, POLLIN);
+#if !defined(DYNAMIC_FDS)
+ usbi_fd_notification(ctx);
+#endif
return LIBUSB_SUCCESS;
@@ -2543,7 +2554,7 @@ static int winusb_submit_control_transfer(struct usbi_transfer *itransfer)
usbi_dbg("will use interface %d", current_interface);
winusb_handle = handle_priv->interface_handle[current_interface].api_handle;
- wfd = usbi_create_fd(winusb_handle, _O_RDONLY, ctx);
+ wfd = usbi_create_fd(winusb_handle, _O_RDONLY);
if (wfd.fd < 0) {
return LIBUSB_ERROR_NO_MEM;
}
@@ -2619,7 +2630,7 @@ static int winusb_submit_bulk_transfer(struct usbi_transfer *itransfer)
winusb_handle = handle_priv->interface_handle[current_interface].api_handle;
direction_in = transfer->endpoint & LIBUSB_ENDPOINT_IN;
- wfd = usbi_create_fd(winusb_handle, direction_in?_O_RDONLY:_O_WRONLY, ctx);
+ wfd = usbi_create_fd(winusb_handle, direction_in?_O_RDONLY:_O_WRONLY);
if (wfd.fd < 0) {
return LIBUSB_ERROR_NO_MEM;
}
@@ -3583,7 +3594,7 @@ static int hid_submit_control_transfer(struct usbi_transfer *itransfer)
usbi_dbg("will use interface %d", current_interface);
hid_handle = handle_priv->interface_handle[current_interface].api_handle;
- wfd = usbi_create_fd(hid_handle, _O_RDONLY, ctx);
+ wfd = usbi_create_fd(hid_handle, _O_RDONLY);
if (wfd.fd < 0) {
return LIBUSB_ERROR_NO_MEM;
}
@@ -3685,7 +3696,7 @@ static int hid_submit_bulk_transfer(struct usbi_transfer *itransfer) {
hid_handle = handle_priv->interface_handle[current_interface].api_handle;
direction_in = transfer->endpoint & LIBUSB_ENDPOINT_IN;
- wfd = usbi_create_fd(hid_handle, direction_in?_O_RDONLY:_O_WRONLY, ctx);
+ wfd = usbi_create_fd(hid_handle, direction_in?_O_RDONLY:_O_WRONLY);
if (wfd.fd < 0) {
return LIBUSB_ERROR_NO_MEM;
}
diff --git a/libusb/os/windows_usb.h b/libusb/os/windows_usb.h
index a7aaf7e..7a181b9 100644
--- a/libusb/os/windows_usb.h
+++ b/libusb/os/windows_usb.h
@@ -330,11 +330,6 @@ typedef RETURN_TYPE CONFIGRET;
#define CR_SUCCESS 0x00000000
#define CR_NO_SUCH_DEVNODE 0x0000000D
-//#if defined(_CFGMGR32_)
-//#define CMAPI DECLSPEC_EXPORT
-//#else
-//#define CMAPI DECLSPEC_IMPORT
-//#endif
#define USB_DEVICE_DESCRIPTOR_TYPE LIBUSB_DT_DEVICE
#define USB_CONFIGURATION_DESCRIPTOR_TYPE LIBUSB_DT_CONFIG