]>
Commit | Line | Data |
---|---|---|
ff7c6d11 XL |
1 | // Licensed under the Apache License, Version 2.0 |
2 | // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | |
3 | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. | |
4 | // All files in the project carrying such notice may not be copied, modified, or distributed | |
5 | // except according to those terms. | |
6 | //! FFI bindings to winusb. | |
7 | use shared::minwindef::{BOOL, LPDWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT}; | |
8 | use shared::usb::PUSBD_ISO_PACKET_DESCRIPTOR; | |
9 | use shared::usbspec::PUSB_CONFIGURATION_DESCRIPTOR; | |
10 | use shared::winusbio::{PWINUSB_PIPE_INFORMATION, PWINUSB_PIPE_INFORMATION_EX}; | |
11 | use um::minwinbase::LPOVERLAPPED; | |
12 | use um::winnt::{HANDLE, LARGE_INTEGER, LONG, PVOID}; | |
13 | pub type WINUSB_INTERFACE_HANDLE = PVOID; | |
14 | pub type PWINUSB_INTERFACE_HANDLE = *mut PVOID; | |
15 | pub type WINUSB_ISOCH_BUFFER_HANDLE = PVOID; | |
16 | pub type PWINUSB_ISOCH_BUFFER_HANDLE = *mut PVOID; | |
17 | STRUCT!{#[repr(packed)] struct WINUSB_SETUP_PACKET { | |
18 | RequestType: UCHAR, | |
19 | Request: UCHAR, | |
20 | Value: USHORT, | |
21 | Index: USHORT, | |
22 | Length: USHORT, | |
23 | }} | |
24 | pub type PWINUSB_SETUP_PACKET = *mut WINUSB_SETUP_PACKET; | |
25 | extern "system" { | |
26 | pub fn WinUsb_Initialize( | |
27 | DeviceHandle: HANDLE, | |
28 | InterfaceHandle: PWINUSB_INTERFACE_HANDLE, | |
29 | ) -> BOOL; | |
30 | pub fn WinUsb_Free( | |
31 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
32 | ) -> BOOL; | |
33 | pub fn WinUsb_GetAssociatedInterface( | |
34 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
35 | AssociatedInterfaceIndex: UCHAR, | |
36 | AssociatedInterfaceHandle: PWINUSB_INTERFACE_HANDLE, | |
37 | ) -> BOOL; | |
38 | pub fn WinUsb_GetDescriptor( | |
39 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
40 | DescriptorType: UCHAR, | |
41 | Index: UCHAR, | |
42 | LanguageID: USHORT, | |
43 | Buffer: PUCHAR, | |
44 | BufferLength: ULONG, | |
45 | LengthTransferred: PULONG, | |
46 | ) -> BOOL; | |
47 | pub fn WinUsb_QueryInterfaceSettings( | |
48 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
49 | AlternateInterfaceNumber: UCHAR, | |
50 | UsbAltInterfaceDescriptor: PUSB_INTERFACE_DESCRIPTOR, | |
51 | ) -> BOOL; | |
52 | pub fn WinUsb_QueryDeviceInformation( | |
53 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
54 | InformationType: ULONG, | |
55 | BufferLength: PULONG, | |
56 | Buffer: PVOID, | |
57 | ) -> BOOL; | |
58 | pub fn WinUsb_SetCurrentAlternateSetting( | |
59 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
60 | SettingNumber: UCHAR, | |
61 | ) -> BOOL; | |
62 | pub fn WinUsb_GetCurrentAlternateSetting( | |
63 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
64 | SettingNumber: PUCHAR, | |
65 | ) -> BOOL; | |
66 | pub fn WinUsb_QueryPipe( | |
67 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
68 | AlternateInterfaceNumber: UCHAR, | |
69 | PipeIndex: UCHAR, | |
70 | PipeInformationEx: PWINUSB_PIPE_INFORMATION, | |
71 | ) -> BOOL; | |
72 | pub fn WinUsb_QueryPipeEx( | |
73 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
74 | AlternateInterfaceNumber: UCHAR, | |
75 | PipeIndex: UCHAR, | |
76 | PipeInformationEx: PWINUSB_PIPE_INFORMATION_EX, | |
77 | ) -> BOOL; | |
78 | pub fn WinUsb_SetPipePolicy( | |
79 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
80 | PipeID: UCHAR, | |
81 | PolicyType: ULONG, | |
82 | ValueLength: ULONG, | |
83 | Value: PVOID, | |
84 | ) -> BOOL; | |
85 | pub fn WinUsb_GetPipePolicy( | |
86 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
87 | PipeID: UCHAR, | |
88 | PolicyType: ULONG, | |
89 | ValueLength: PULONG, | |
90 | Value: PVOID, | |
91 | ) -> BOOL; | |
92 | pub fn WinUsb_ReadPipe( | |
93 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
94 | PipeID: UCHAR, | |
95 | Buffer: PUCHAR, | |
96 | BufferLength: ULONG, | |
97 | LengthTransferred: PULONG, | |
98 | Overlapped: LPOVERLAPPED, | |
99 | ) -> BOOL; | |
100 | pub fn WinUsb_WritePipe( | |
101 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
102 | PipeID: UCHAR, | |
103 | Buffer: PUCHAR, | |
104 | BufferLength: ULONG, | |
105 | LengthTransferred: PULONG, | |
106 | Overlapped: LPOVERLAPPED, | |
107 | ) -> BOOL; | |
108 | pub fn WinUsb_ControlTransfer( | |
109 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
110 | SetupPacket: WINUSB_SETUP_PACKET, | |
111 | Buffer: PUCHAR, | |
112 | BufferLength: ULONG, | |
113 | LengthTransferred: PULONG, | |
114 | Overlapped: LPOVERLAPPED, | |
115 | ) -> BOOL; | |
116 | pub fn WinUsb_ResetPipe( | |
117 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
118 | PipeID: UCHAR, | |
119 | ) -> BOOL; | |
120 | pub fn WinUsb_AbortPipe( | |
121 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
122 | PipeID: UCHAR, | |
123 | ) -> BOOL; | |
124 | pub fn WinUsb_FlushPipe( | |
125 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
126 | PipeID: UCHAR, | |
127 | ) -> BOOL; | |
128 | pub fn WinUsb_SetPowerPolicy( | |
129 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
130 | PolicyType: ULONG, | |
131 | ValueLength: ULONG, | |
132 | Value: PVOID, | |
133 | ) -> BOOL; | |
134 | pub fn WinUsb_GetPowerPolicy( | |
135 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
136 | PolicyType: ULONG, | |
137 | ValueLength: PULONG, | |
138 | Value: PVOID, | |
139 | ) -> BOOL; | |
140 | pub fn WinUsb_GetOverlappedResult( | |
141 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
142 | lpOverlapped: LPOVERLAPPED, | |
143 | lpNumberOfBytesTransferred: LPDWORD, | |
144 | bWait: BOOL, | |
145 | ) -> BOOL; | |
146 | pub fn WinUsb_ParseConfigurationDescriptor( | |
147 | ConfigurationDescriptor: PUSB_CONFIGURATION_DESCRIPTOR, | |
148 | StartPosition: PVOID, | |
149 | InterfaceNumber: LONG, | |
150 | AlternateSetting: LONG, | |
151 | InterfaceClass: LONG, | |
152 | InterfaceSubClass: LONG, | |
153 | InterfaceProtocol: LONG, | |
154 | ) -> BOOL; | |
155 | pub fn WinUsb_ParseDescriptors( | |
156 | DescriptorBuffer: PVOID, | |
157 | TotalLength: ULONG, | |
158 | StartPosition: PVOID, | |
159 | DescriptorType: LONG, | |
160 | ) -> BOOL; | |
161 | pub fn WinUsb_GetCurrentFrameNumber( | |
162 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
163 | CurrentFrameNumber: PULONG, | |
164 | TimeStamp: *mut LARGE_INTEGER, | |
165 | ) -> BOOL; | |
166 | pub fn WinUsb_GetAdjustedFrameNumber( | |
167 | CurrentFrameNumber: PULONG, | |
168 | TimeStamp: LARGE_INTEGER, | |
169 | ) -> BOOL; | |
170 | pub fn WinUsb_RegisterIsochBuffer( | |
171 | InterfaceHandle: WINUSB_INTERFACE_HANDLE, | |
172 | PipeID: UCHAR, | |
173 | Buffer: PUCHAR, | |
174 | BufferLength: ULONG, | |
175 | IsochBufferHandle: PWINUSB_ISOCH_BUFFER_HANDLE, | |
176 | ) -> BOOL; | |
177 | pub fn WinUsb_UnregisterIsochBuffer( | |
178 | IsochBufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, | |
179 | ) -> BOOL; | |
180 | pub fn WinUsb_WriteIsochPipe( | |
181 | BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, | |
182 | Offset: ULONG, | |
183 | Length: ULONG, | |
184 | FrameNumber: PULONG, | |
185 | Overlapped: LPOVERLAPPED, | |
186 | ) -> BOOL; | |
187 | pub fn WinUsb_ReadIsochPipe( | |
188 | BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, | |
189 | Offset: ULONG, | |
190 | Length: ULONG, | |
191 | FrameNumber: PULONG, | |
192 | NumberOfPackets: ULONG, | |
193 | IsoPacketDescriptors: PUSBD_ISO_PACKET_DESCRIPTOR, | |
194 | Overlapped: LPOVERLAPPED, | |
195 | ) -> BOOL; | |
196 | pub fn WinUsb_WriteIsochPipeAsap( | |
197 | BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, | |
198 | Offset: ULONG, | |
199 | Length: ULONG, | |
200 | ContinueStream: BOOL, | |
201 | Overlapped: LPOVERLAPPED, | |
202 | ) -> BOOL; | |
203 | pub fn WinUsb_ReadIsochPipeAsap( | |
204 | BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, | |
205 | Offset: ULONG, | |
206 | Length: ULONG, | |
207 | ContinueStream: BOOL, | |
208 | NumberOfPackets: ULONG, | |
209 | IsoPacketDescriptors: PUSBD_ISO_PACKET_DESCRIPTOR, | |
210 | Overlapped: LPOVERLAPPED, | |
211 | ) -> BOOL; | |
212 | } | |
ff7c6d11 XL |
213 | STRUCT!{struct USB_INTERFACE_DESCRIPTOR { |
214 | bLength: UCHAR, | |
215 | bDescriptorType: UCHAR, | |
216 | bInterfaceNumber: UCHAR, | |
217 | bAlternateSetting: UCHAR, | |
218 | bNumEndpoints: UCHAR, | |
219 | bInterfaceClass: UCHAR, | |
220 | bInterfaceSubClass: UCHAR, | |
221 | bInterfaceProtocol: UCHAR, | |
222 | iInterface: UCHAR, | |
223 | }} | |
224 | pub type PUSB_INTERFACE_DESCRIPTOR = *mut USB_INTERFACE_DESCRIPTOR; |