summaryrefslogtreecommitdiff
path: root/libusb/os/windows_usb.h
diff options
context:
space:
mode:
Diffstat (limited to 'libusb/os/windows_usb.h')
-rw-r--r--libusb/os/windows_usb.h43
1 files changed, 34 insertions, 9 deletions
diff --git a/libusb/os/windows_usb.h b/libusb/os/windows_usb.h
index fdb8549..59dde57 100644
--- a/libusb/os/windows_usb.h
+++ b/libusb/os/windows_usb.h
@@ -85,6 +85,7 @@ inline void upperize(char* str) {
str[i] = (char)toupper((int)str[i]);
}
+#define HCNUM_TO_CHECK 10
#define MAX_CTRL_BUFFER_LENGTH 4096
#define MAX_USB_DEVICES 256
#define MAX_USB_STRING_LENGTH 128
@@ -118,16 +119,19 @@ const GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, {0x90, 0
#define USB_API_UNSUPPORTED 0
#define USB_API_COMPOSITE 1
#define USB_API_WINUSB 2
-#define USB_API_HID 3
-#define USB_API_MAX 4
+#define USB_API_LIBUSB0 3
+#define USB_API_HID 4
+#define USB_API_MAX 5
-const GUID CLASS_GUID_UNSUPPORTED = { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x57, 0xDA} };
-const GUID CLASS_GUID_HID = { 0x745A17A0, 0x74D3, 0x11D0, {0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA} };
-const GUID CLASS_GUID_LIBUSB_WINUSB = { 0x78A1C341, 0x4539, 0x11D3, {0xB8, 0x8D, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71} };
-const GUID CLASS_GUID_COMPOSITE = { 0x36FC9E60, 0xC465, 0x11cF, {0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00} };
+const GUID CLASS_GUID_UNSUPPORTED = { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x57, 0xDA} };
+const GUID CLASS_GUID_HID = { 0x745A17A0, 0x74D3, 0x11D0, {0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA} };
+const GUID CLASS_GUID_LIBUSB_WINUSB = { 0x78A1C341, 0x4539, 0x11D3, {0xB8, 0x8D, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71} };
+const GUID CLASS_GUID_LIBUSB_LIBUSB0 = { 0xEB781AAF, 0x9C70, 0x4523, {0xA5, 0xDF, 0x64, 0x2A, 0x87, 0xEC, 0xA5, 0x67} };
+const GUID CLASS_GUID_COMPOSITE = { 0x36FC9E60, 0xC465, 0x11cF, {0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00} };
struct windows_usb_api_backend {
const uint8_t id;
+ const char *backend_name;
const GUID *class_guid; // The Class GUID (for fallback in case the driver name cannot be read)
const char **driver_name_list; // Driver name, without .sys, e.g. "usbccgp"
const uint8_t nb_driver_names;
@@ -243,6 +247,7 @@ struct windows_device_priv {
uint8_t active_config;
USB_DEVICE_DESCRIPTOR dev_descriptor;
unsigned char **config_descriptor; // list of pointers to the cached config descriptors
+ uint8_t libusb0_matched; // Flag indicating libusb0 driver has set the path
};
static inline void windows_device_priv_init(struct windows_device_priv* p) {
@@ -312,6 +317,7 @@ struct windows_transfer_priv {
/*
* API macros - from libusb-win32 1.x
*/
+
#define DLL_DECLARE(api, ret, name, args) \
typedef ret (api * __dll_##name##_t)args; __dll_##name##_t name
@@ -382,6 +388,12 @@ typedef RETURN_TYPE CONFIGRET;
#ifndef METHOD_BUFFERED
#define METHOD_BUFFERED 0
#endif
+#ifndef METHOD_IN_DIRECT
+#define METHOD_IN_DIRECT 1
+#endif
+#ifndef METHOD_OUT_DIRECT
+#define METHOD_OUT_DIRECT 2
+#endif
#ifndef FILE_ANY_ACCESS
#define FILE_ANY_ACCESS 0x00000000
#endif
@@ -415,6 +427,7 @@ typedef enum _USB_HUB_NODE {
} USB_HUB_NODE;
/* Cfgmgr32.dll interface */
+
DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Parent, (PDEVINST, DEVINST, ULONG));
DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Child, (PDEVINST, DEVINST, ULONG));
DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Sibling, (PDEVINST, DEVINST, ULONG));
@@ -622,9 +635,9 @@ typedef struct _USB_HUB_CAPABILITIES_EX {
#define AUTO_SUSPEND 0x81
#define SUSPEND_DELAY 0x83
#define DEVICE_SPEED 0x01
-#define LowSpeed 0x01
-#define FullSpeed 0x02
-#define HighSpeed 0x03
+#define wuLowSpeed 0x01
+#define wuFullSpeed 0x02
+#define wuHighSpeed 0x03
typedef enum _USBD_PIPE_TYPE {
UsbdPipeTypeControl,
@@ -670,6 +683,18 @@ DLL_DECLARE(WINAPI, BOOL, WinUsb_ResetPipe, (WINUSB_INTERFACE_HANDLE, UCHAR));
DLL_DECLARE(WINAPI, BOOL, WinUsb_AbortPipe, (WINUSB_INTERFACE_HANDLE, UCHAR));
DLL_DECLARE(WINAPI, BOOL, WinUsb_FlushPipe, (WINUSB_INTERFACE_HANDLE, UCHAR));
+/*
+ * libusb0 API definitions from libusb0-win32.
+ */
+
+#include "driver/driver_api.h"
+
+#define LIBUSB0_DEFAULT_TIMEOUT 5000
+#define LIBUSB0_DEVICE_NAME "\\\\.\\libusb0-"
+#define LIBUSB0_BUS_NAME "bus-0"
+#define LIBUSB0_DEVICE_NAME_MAX 256
+#define LIBUSB0_MAX_DEVICES 256
+
/* hid.dll interface */
#define HIDP_STATUS_SUCCESS 0x110000