summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libusb/os/windows_nt_shared_types.h12
-rw-r--r--libusb/os/windows_usbdk.c12
-rw-r--r--libusb/os/windows_winusb.c34
-rw-r--r--libusb/version_nano.h2
4 files changed, 27 insertions, 33 deletions
diff --git a/libusb/os/windows_nt_shared_types.h b/libusb/os/windows_nt_shared_types.h
index d809bfd..79b5b64 100644
--- a/libusb/os/windows_nt_shared_types.h
+++ b/libusb/os/windows_nt_shared_types.h
@@ -34,6 +34,18 @@ typedef struct USB_CONFIGURATION_DESCRIPTOR {
#include <poppack.h>
+// https://msdn.microsoft.com/en-us/library/windows/hardware/ff539136(v=vs.85).aspx
+#if !defined(USBD_SUCCESS)
+typedef LONG USBD_STATUS;
+
+#define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
+
+#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030L)
+#define USBD_STATUS_TIMEOUT ((USBD_STATUS)0xC0006000L)
+#define USBD_STATUS_DEVICE_GONE ((USBD_STATUS)0xC0007000L)
+#define USBD_STATUS_CANCELED ((USBD_STATUS)0xC0010000L)
+#endif
+
#define MAX_DEVICE_ID_LEN 200
typedef struct USB_DK_DEVICE_ID {
diff --git a/libusb/os/windows_usbdk.c b/libusb/os/windows_usbdk.c
index 2b4f7e0..f9a967b 100644
--- a/libusb/os/windows_usbdk.c
+++ b/libusb/os/windows_usbdk.c
@@ -44,18 +44,6 @@ typedef LONG NTSTATUS;
#define STATUS_REQUEST_CANCELED ((NTSTATUS)0xC0000703L)
#endif
-#if !defined(USBD_SUCCESS)
-typedef LONG USBD_STATUS;
-#define USBD_SUCCESS(Status) ((USBD_STATUS) (Status) >= 0)
-#define USBD_PENDING(Status) ((ULONG) (Status) >> 30 == 1)
-#define USBD_ERROR(Status) ((USBD_STATUS) (Status) < 0)
-#define USBD_STATUS_STALL_PID ((USBD_STATUS) 0xc0000004)
-#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS) 0xc0000030)
-#define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS) 0xc0000a00)
-#define USBD_STATUS_TIMEOUT ((USBD_STATUS) 0xc0006000)
-#define USBD_STATUS_CANCELED ((USBD_STATUS) 0xc0010000)
-#endif
-
static inline struct usbdk_device_priv *_usbdk_device_priv(struct libusb_device *dev)
{
return (struct usbdk_device_priv *)dev->os_priv;
diff --git a/libusb/os/windows_winusb.c b/libusb/os/windows_winusb.c
index 1b42d4e..71794c1 100644
--- a/libusb/os/windows_winusb.c
+++ b/libusb/os/windows_winusb.c
@@ -2552,27 +2552,21 @@ static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_ha
static enum libusb_transfer_status usbd_status_to_libusb_transfer_status(USBD_STATUS status)
{
- /* Based on https://msdn.microsoft.com/en-us/library/windows/hardware/ff539136(v=vs.85).aspx :
- * USBD_STATUS have the most significant 4 bits indicating overall status and the rest gives the details. */
- switch (status >> 28) {
- case 0x00: /* USBD_STATUS_SUCCESS */
+ if (USBD_SUCCESS(status))
return LIBUSB_TRANSFER_COMPLETED;
- case 0x01: /* USBD_STATUS_PENDING */
- return LIBUSB_TRANSFER_COMPLETED;
- default: /* USBD_STATUS_ERROR */
- switch (status & 0x0fffffff) {
- case 0xC0006000: /* USBD_STATUS_TIMEOUT */
- return LIBUSB_TRANSFER_TIMED_OUT;
- case 0xC0010000: /* USBD_STATUS_CANCELED */
- return LIBUSB_TRANSFER_CANCELLED;
- case 0xC0000030: /* USBD_STATUS_ENDPOINT_HALTED */
- return LIBUSB_TRANSFER_STALL;
- case 0xC0007000: /* USBD_STATUS_DEVICE_GONE */
- return LIBUSB_TRANSFER_NO_DEVICE;
- default:
- usbi_dbg("USBD_STATUS 0x%08lx translated to LIBUSB_TRANSFER_ERROR", status);
- return LIBUSB_TRANSFER_ERROR;
- }
+
+ switch (status) {
+ case USBD_STATUS_TIMEOUT:
+ return LIBUSB_TRANSFER_TIMED_OUT;
+ case USBD_STATUS_CANCELED:
+ return LIBUSB_TRANSFER_CANCELLED;
+ case USBD_STATUS_ENDPOINT_HALTED:
+ return LIBUSB_TRANSFER_STALL;
+ case USBD_STATUS_DEVICE_GONE:
+ return LIBUSB_TRANSFER_NO_DEVICE;
+ default:
+ usbi_dbg("USBD_STATUS 0x%08lx translated to LIBUSB_TRANSFER_ERROR", status);
+ return LIBUSB_TRANSFER_ERROR;
}
}
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index ba3fee6..3b9b7ee 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11416
+#define LIBUSB_NANO 11417