stream pushing ok without access permission of /dev/video0
[rtmpclient.git] / app / src / main / jni / libusb / libusb / os / wince_usb.h
1 /*
2  * Windows CE backend for libusb 1.0
3  * Copyright © 2011-2013 RealVNC Ltd.
4  * Portions taken from Windows backend, which is
5  * Copyright © 2009-2010 Pete Batard <pbatard@gmail.com>
6  * With contributions from Michael Plante, Orin Eman et al.
7  * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer
8  * Major code testing contribution by Xiaofan Chen
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with this library; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24 #pragma once
25
26 #include "windows_common.h"
27
28 #include <windows.h>
29 #include "poll_windows.h"
30
31 #define MAX_DEVICE_COUNT            256
32
33 // This is a modified dump of the types in the ceusbkwrapper.h library header
34 // with functions transformed into extern pointers.
35 //
36 // This backend dynamically loads ceusbkwrapper.dll and doesn't include
37 // ceusbkwrapper.h directly to simplify the build process. The kernel
38 // side wrapper driver is built using the platform image build tools,
39 // which makes it difficult to reference directly from the libusb build
40 // system.
41 struct UKW_DEVICE_PRIV;
42 typedef struct UKW_DEVICE_PRIV *UKW_DEVICE;
43 typedef UKW_DEVICE *PUKW_DEVICE, *LPUKW_DEVICE;
44
45 typedef struct {
46         UINT8 bLength;
47         UINT8 bDescriptorType;
48         UINT16 bcdUSB;
49         UINT8 bDeviceClass;
50         UINT8 bDeviceSubClass;
51         UINT8 bDeviceProtocol;
52         UINT8 bMaxPacketSize0;
53         UINT16 idVendor;
54         UINT16 idProduct;
55         UINT16 bcdDevice;
56         UINT8 iManufacturer;
57         UINT8 iProduct;
58         UINT8 iSerialNumber;
59         UINT8 bNumConfigurations;
60 } UKW_DEVICE_DESCRIPTOR, *PUKW_DEVICE_DESCRIPTOR, *LPUKW_DEVICE_DESCRIPTOR;
61
62 typedef struct {
63         UINT8 bmRequestType;
64         UINT8 bRequest;
65         UINT16 wValue;
66         UINT16 wIndex;
67         UINT16 wLength;
68 } UKW_CONTROL_HEADER, *PUKW_CONTROL_HEADER, *LPUKW_CONTROL_HEADER;
69
70 // Collection of flags which can be used when issuing transfer requests
71 /* Indicates that the transfer direction is 'in' */
72 #define UKW_TF_IN_TRANSFER        0x00000001
73 /* Indicates that the transfer direction is 'out' */
74 #define UKW_TF_OUT_TRANSFER       0x00000000
75 /* Specifies that the transfer should complete as soon as possible,
76  * even if no OVERLAPPED structure has been provided. */
77 #define UKW_TF_NO_WAIT            0x00000100
78 /* Indicates that transfers shorter than the buffer are ok */
79 #define UKW_TF_SHORT_TRANSFER_OK  0x00000200
80 #define UKW_TF_SEND_TO_DEVICE     0x00010000
81 #define UKW_TF_SEND_TO_INTERFACE  0x00020000
82 #define UKW_TF_SEND_TO_ENDPOINT   0x00040000
83 /* Don't block when waiting for memory allocations */
84 #define UKW_TF_DONT_BLOCK_FOR_MEM 0x00080000
85
86 /* Value to use when dealing with configuration values, such as UkwGetConfigDescriptor, 
87  * to specify the currently active configuration for the device. */
88 #define UKW_ACTIVE_CONFIGURATION -1
89
90 DLL_DECLARE(WINAPI, HANDLE, UkwOpenDriver, ());
91 DLL_DECLARE(WINAPI, BOOL, UkwGetDeviceList, (HANDLE, LPUKW_DEVICE, DWORD, LPDWORD));
92 DLL_DECLARE(WINAPI, void, UkwReleaseDeviceList, (HANDLE, LPUKW_DEVICE, DWORD));
93 DLL_DECLARE(WINAPI, BOOL, UkwGetDeviceAddress, (UKW_DEVICE, unsigned char*, unsigned char*, unsigned long*));
94 DLL_DECLARE(WINAPI, BOOL, UkwGetDeviceDescriptor, (UKW_DEVICE, LPUKW_DEVICE_DESCRIPTOR));
95 DLL_DECLARE(WINAPI, BOOL, UkwGetConfigDescriptor, (UKW_DEVICE, DWORD, LPVOID, DWORD, LPDWORD));
96 DLL_DECLARE(WINAPI, void, UkwCloseDriver, (HANDLE));
97 DLL_DECLARE(WINAPI, BOOL, UkwCancelTransfer, (UKW_DEVICE, LPOVERLAPPED, DWORD));
98 DLL_DECLARE(WINAPI, BOOL, UkwIssueControlTransfer, (UKW_DEVICE, DWORD, LPUKW_CONTROL_HEADER, LPVOID, DWORD, LPDWORD, LPOVERLAPPED));
99 DLL_DECLARE(WINAPI, BOOL, UkwClaimInterface, (UKW_DEVICE, DWORD));
100 DLL_DECLARE(WINAPI, BOOL, UkwReleaseInterface, (UKW_DEVICE, DWORD));
101 DLL_DECLARE(WINAPI, BOOL, UkwSetInterfaceAlternateSetting, (UKW_DEVICE, DWORD, DWORD));
102 DLL_DECLARE(WINAPI, BOOL, UkwClearHaltHost, (UKW_DEVICE, UCHAR));
103 DLL_DECLARE(WINAPI, BOOL, UkwClearHaltDevice, (UKW_DEVICE, UCHAR));
104 DLL_DECLARE(WINAPI, BOOL, UkwGetConfig, (UKW_DEVICE, PUCHAR));
105 DLL_DECLARE(WINAPI, BOOL, UkwSetConfig, (UKW_DEVICE, UCHAR));
106 DLL_DECLARE(WINAPI, BOOL, UkwResetDevice, (UKW_DEVICE));
107 DLL_DECLARE(WINAPI, BOOL, UkwKernelDriverActive, (UKW_DEVICE, DWORD, PBOOL));
108 DLL_DECLARE(WINAPI, BOOL, UkwAttachKernelDriver, (UKW_DEVICE, DWORD));
109 DLL_DECLARE(WINAPI, BOOL, UkwDetachKernelDriver, (UKW_DEVICE, DWORD));
110 DLL_DECLARE(WINAPI, BOOL, UkwIssueBulkTransfer, (UKW_DEVICE, DWORD, UCHAR, LPVOID, DWORD, LPDWORD, LPOVERLAPPED));
111 DLL_DECLARE(WINAPI, BOOL, UkwIsPipeHalted, (UKW_DEVICE, UCHAR, LPBOOL));
112
113 // Used to determine if an endpoint status really is halted on a failed transfer.
114 #define STATUS_HALT_FLAG 0x1
115
116 struct wince_device_priv {
117         UKW_DEVICE dev;
118         UKW_DEVICE_DESCRIPTOR desc;
119 };
120
121 struct wince_device_handle_priv {
122         // This member isn't used, but only exists to avoid an empty structure
123         // for private data for the device handle.
124         int reserved;
125 };
126
127 struct wince_transfer_priv {
128         struct winfd pollable_fd;
129         uint8_t interface_number;
130 };
131