Index: third_party/libusb/src/libusb/os/wince_usb.h |
diff --git a/third_party/libusb/src/libusb/os/wince_usb.h b/third_party/libusb/src/libusb/os/wince_usb.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3db9693a1308e5794860e61c6915afe5de58cd59 |
--- /dev/null |
+++ b/third_party/libusb/src/libusb/os/wince_usb.h |
@@ -0,0 +1,131 @@ |
+/* |
+ * Windows CE backend for libusbx 1.0 |
+ * Copyright © 2011-2013 RealVNC Ltd. |
+ * Portions taken from Windows backend, which is |
+ * Copyright © 2009-2010 Pete Batard <pbatard@gmail.com> |
+ * With contributions from Michael Plante, Orin Eman et al. |
+ * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer |
+ * Major code testing contribution by Xiaofan Chen |
+ * |
+ * This library is free software; you can redistribute it and/or |
+ * modify it under the terms of the GNU Lesser General Public |
+ * License as published by the Free Software Foundation; either |
+ * version 2.1 of the License, or (at your option) any later version. |
+ * |
+ * This library is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+ * Lesser General Public License for more details. |
+ * |
+ * You should have received a copy of the GNU Lesser General Public |
+ * License along with this library; if not, write to the Free Software |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
+ */ |
+#pragma once |
+ |
+#include "windows_common.h" |
+ |
+#include <windows.h> |
+#include "poll_windows.h" |
+ |
+#define MAX_DEVICE_COUNT 256 |
+ |
+// This is a modified dump of the types in the ceusbkwrapper.h library header |
+// with functions transformed into extern pointers. |
+// |
+// This backend dynamically loads ceusbkwrapper.dll and doesn't include |
+// ceusbkwrapper.h directly to simplify the build process. The kernel |
+// side wrapper driver is built using the platform image build tools, |
+// which makes it difficult to reference directly from the libusbx build |
+// system. |
+struct UKW_DEVICE_PRIV; |
+typedef struct UKW_DEVICE_PRIV *UKW_DEVICE; |
+typedef UKW_DEVICE *PUKW_DEVICE, *LPUKW_DEVICE; |
+ |
+typedef struct { |
+ UINT8 bLength; |
+ UINT8 bDescriptorType; |
+ UINT16 bcdUSB; |
+ UINT8 bDeviceClass; |
+ UINT8 bDeviceSubClass; |
+ UINT8 bDeviceProtocol; |
+ UINT8 bMaxPacketSize0; |
+ UINT16 idVendor; |
+ UINT16 idProduct; |
+ UINT16 bcdDevice; |
+ UINT8 iManufacturer; |
+ UINT8 iProduct; |
+ UINT8 iSerialNumber; |
+ UINT8 bNumConfigurations; |
+} UKW_DEVICE_DESCRIPTOR, *PUKW_DEVICE_DESCRIPTOR, *LPUKW_DEVICE_DESCRIPTOR; |
+ |
+typedef struct { |
+ UINT8 bmRequestType; |
+ UINT8 bRequest; |
+ UINT16 wValue; |
+ UINT16 wIndex; |
+ UINT16 wLength; |
+} UKW_CONTROL_HEADER, *PUKW_CONTROL_HEADER, *LPUKW_CONTROL_HEADER; |
+ |
+// Collection of flags which can be used when issuing transfer requests |
+/* Indicates that the transfer direction is 'in' */ |
+#define UKW_TF_IN_TRANSFER 0x00000001 |
+/* Indicates that the transfer direction is 'out' */ |
+#define UKW_TF_OUT_TRANSFER 0x00000000 |
+/* Specifies that the transfer should complete as soon as possible, |
+ * even if no OVERLAPPED structure has been provided. */ |
+#define UKW_TF_NO_WAIT 0x00000100 |
+/* Indicates that transfers shorter than the buffer are ok */ |
+#define UKW_TF_SHORT_TRANSFER_OK 0x00000200 |
+#define UKW_TF_SEND_TO_DEVICE 0x00010000 |
+#define UKW_TF_SEND_TO_INTERFACE 0x00020000 |
+#define UKW_TF_SEND_TO_ENDPOINT 0x00040000 |
+/* Don't block when waiting for memory allocations */ |
+#define UKW_TF_DONT_BLOCK_FOR_MEM 0x00080000 |
+ |
+/* Value to use when dealing with configuration values, such as UkwGetConfigDescriptor, |
+ * to specify the currently active configuration for the device. */ |
+#define UKW_ACTIVE_CONFIGURATION -1 |
+ |
+DLL_DECLARE(WINAPI, HANDLE, UkwOpenDriver, ()); |
+DLL_DECLARE(WINAPI, BOOL, UkwGetDeviceList, (HANDLE, LPUKW_DEVICE, DWORD, LPDWORD)); |
+DLL_DECLARE(WINAPI, void, UkwReleaseDeviceList, (HANDLE, LPUKW_DEVICE, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwGetDeviceAddress, (UKW_DEVICE, unsigned char*, unsigned char*, unsigned long*)); |
+DLL_DECLARE(WINAPI, BOOL, UkwGetDeviceDescriptor, (UKW_DEVICE, LPUKW_DEVICE_DESCRIPTOR)); |
+DLL_DECLARE(WINAPI, BOOL, UkwGetConfigDescriptor, (UKW_DEVICE, DWORD, LPVOID, DWORD, LPDWORD)); |
+DLL_DECLARE(WINAPI, void, UkwCloseDriver, (HANDLE)); |
+DLL_DECLARE(WINAPI, BOOL, UkwCancelTransfer, (UKW_DEVICE, LPOVERLAPPED, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwIssueControlTransfer, (UKW_DEVICE, DWORD, LPUKW_CONTROL_HEADER, LPVOID, DWORD, LPDWORD, LPOVERLAPPED)); |
+DLL_DECLARE(WINAPI, BOOL, UkwClaimInterface, (UKW_DEVICE, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwReleaseInterface, (UKW_DEVICE, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwSetInterfaceAlternateSetting, (UKW_DEVICE, DWORD, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwClearHaltHost, (UKW_DEVICE, UCHAR)); |
+DLL_DECLARE(WINAPI, BOOL, UkwClearHaltDevice, (UKW_DEVICE, UCHAR)); |
+DLL_DECLARE(WINAPI, BOOL, UkwGetConfig, (UKW_DEVICE, PUCHAR)); |
+DLL_DECLARE(WINAPI, BOOL, UkwSetConfig, (UKW_DEVICE, UCHAR)); |
+DLL_DECLARE(WINAPI, BOOL, UkwResetDevice, (UKW_DEVICE)); |
+DLL_DECLARE(WINAPI, BOOL, UkwKernelDriverActive, (UKW_DEVICE, DWORD, PBOOL)); |
+DLL_DECLARE(WINAPI, BOOL, UkwAttachKernelDriver, (UKW_DEVICE, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwDetachKernelDriver, (UKW_DEVICE, DWORD)); |
+DLL_DECLARE(WINAPI, BOOL, UkwIssueBulkTransfer, (UKW_DEVICE, DWORD, UCHAR, LPVOID, DWORD, LPDWORD, LPOVERLAPPED)); |
+DLL_DECLARE(WINAPI, BOOL, UkwIsPipeHalted, (UKW_DEVICE, UCHAR, LPBOOL)); |
+ |
+// Used to determine if an endpoint status really is halted on a failed transfer. |
+#define STATUS_HALT_FLAG 0x1 |
+ |
+struct wince_device_priv { |
+ UKW_DEVICE dev; |
+ UKW_DEVICE_DESCRIPTOR desc; |
+}; |
+ |
+struct wince_device_handle_priv { |
+ // This member isn't used, but only exists to avoid an empty structure |
+ // for private data for the device handle. |
+ int reserved; |
+}; |
+ |
+struct wince_transfer_priv { |
+ struct winfd pollable_fd; |
+ uint8_t interface_number; |
+}; |
+ |