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" { WinUsb_Initialize( DeviceHandle: HANDLE, InterfaceHandle: PWINUSB_INTERFACE_HANDLE, ) -> BOOL26 pub fn WinUsb_Initialize( 27 DeviceHandle: HANDLE, 28 InterfaceHandle: PWINUSB_INTERFACE_HANDLE, 29 ) -> BOOL; WinUsb_Free( InterfaceHandle: WINUSB_INTERFACE_HANDLE, ) -> BOOL30 pub fn WinUsb_Free( 31 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 32 ) -> BOOL; WinUsb_GetAssociatedInterface( InterfaceHandle: WINUSB_INTERFACE_HANDLE, AssociatedInterfaceIndex: UCHAR, AssociatedInterfaceHandle: PWINUSB_INTERFACE_HANDLE, ) -> BOOL33 pub fn WinUsb_GetAssociatedInterface( 34 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 35 AssociatedInterfaceIndex: UCHAR, 36 AssociatedInterfaceHandle: PWINUSB_INTERFACE_HANDLE, 37 ) -> BOOL; WinUsb_GetDescriptor( InterfaceHandle: WINUSB_INTERFACE_HANDLE, DescriptorType: UCHAR, Index: UCHAR, LanguageID: USHORT, Buffer: PUCHAR, BufferLength: ULONG, LengthTransferred: PULONG, ) -> BOOL38 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; WinUsb_QueryInterfaceSettings( InterfaceHandle: WINUSB_INTERFACE_HANDLE, AlternateInterfaceNumber: UCHAR, UsbAltInterfaceDescriptor: PUSB_INTERFACE_DESCRIPTOR, ) -> BOOL47 pub fn WinUsb_QueryInterfaceSettings( 48 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 49 AlternateInterfaceNumber: UCHAR, 50 UsbAltInterfaceDescriptor: PUSB_INTERFACE_DESCRIPTOR, 51 ) -> BOOL; WinUsb_QueryDeviceInformation( InterfaceHandle: WINUSB_INTERFACE_HANDLE, InformationType: ULONG, BufferLength: PULONG, Buffer: PVOID, ) -> BOOL52 pub fn WinUsb_QueryDeviceInformation( 53 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 54 InformationType: ULONG, 55 BufferLength: PULONG, 56 Buffer: PVOID, 57 ) -> BOOL; WinUsb_SetCurrentAlternateSetting( InterfaceHandle: WINUSB_INTERFACE_HANDLE, SettingNumber: UCHAR, ) -> BOOL58 pub fn WinUsb_SetCurrentAlternateSetting( 59 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 60 SettingNumber: UCHAR, 61 ) -> BOOL; WinUsb_GetCurrentAlternateSetting( InterfaceHandle: WINUSB_INTERFACE_HANDLE, SettingNumber: PUCHAR, ) -> BOOL62 pub fn WinUsb_GetCurrentAlternateSetting( 63 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 64 SettingNumber: PUCHAR, 65 ) -> BOOL; WinUsb_QueryPipe( InterfaceHandle: WINUSB_INTERFACE_HANDLE, AlternateInterfaceNumber: UCHAR, PipeIndex: UCHAR, PipeInformationEx: PWINUSB_PIPE_INFORMATION, ) -> BOOL66 pub fn WinUsb_QueryPipe( 67 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 68 AlternateInterfaceNumber: UCHAR, 69 PipeIndex: UCHAR, 70 PipeInformationEx: PWINUSB_PIPE_INFORMATION, 71 ) -> BOOL; WinUsb_QueryPipeEx( InterfaceHandle: WINUSB_INTERFACE_HANDLE, AlternateInterfaceNumber: UCHAR, PipeIndex: UCHAR, PipeInformationEx: PWINUSB_PIPE_INFORMATION_EX, ) -> BOOL72 pub fn WinUsb_QueryPipeEx( 73 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 74 AlternateInterfaceNumber: UCHAR, 75 PipeIndex: UCHAR, 76 PipeInformationEx: PWINUSB_PIPE_INFORMATION_EX, 77 ) -> BOOL; WinUsb_SetPipePolicy( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, PolicyType: ULONG, ValueLength: ULONG, Value: PVOID, ) -> BOOL78 pub fn WinUsb_SetPipePolicy( 79 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 80 PipeID: UCHAR, 81 PolicyType: ULONG, 82 ValueLength: ULONG, 83 Value: PVOID, 84 ) -> BOOL; WinUsb_GetPipePolicy( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, PolicyType: ULONG, ValueLength: PULONG, Value: PVOID, ) -> BOOL85 pub fn WinUsb_GetPipePolicy( 86 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 87 PipeID: UCHAR, 88 PolicyType: ULONG, 89 ValueLength: PULONG, 90 Value: PVOID, 91 ) -> BOOL; WinUsb_ReadPipe( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, Buffer: PUCHAR, BufferLength: ULONG, LengthTransferred: PULONG, Overlapped: LPOVERLAPPED, ) -> BOOL92 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; WinUsb_WritePipe( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, Buffer: PUCHAR, BufferLength: ULONG, LengthTransferred: PULONG, Overlapped: LPOVERLAPPED, ) -> BOOL100 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; WinUsb_ControlTransfer( InterfaceHandle: WINUSB_INTERFACE_HANDLE, SetupPacket: WINUSB_SETUP_PACKET, Buffer: PUCHAR, BufferLength: ULONG, LengthTransferred: PULONG, Overlapped: LPOVERLAPPED, ) -> BOOL108 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; WinUsb_ResetPipe( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, ) -> BOOL116 pub fn WinUsb_ResetPipe( 117 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 118 PipeID: UCHAR, 119 ) -> BOOL; WinUsb_AbortPipe( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, ) -> BOOL120 pub fn WinUsb_AbortPipe( 121 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 122 PipeID: UCHAR, 123 ) -> BOOL; WinUsb_FlushPipe( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, ) -> BOOL124 pub fn WinUsb_FlushPipe( 125 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 126 PipeID: UCHAR, 127 ) -> BOOL; WinUsb_SetPowerPolicy( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PolicyType: ULONG, ValueLength: ULONG, Value: PVOID, ) -> BOOL128 pub fn WinUsb_SetPowerPolicy( 129 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 130 PolicyType: ULONG, 131 ValueLength: ULONG, 132 Value: PVOID, 133 ) -> BOOL; WinUsb_GetPowerPolicy( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PolicyType: ULONG, ValueLength: PULONG, Value: PVOID, ) -> BOOL134 pub fn WinUsb_GetPowerPolicy( 135 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 136 PolicyType: ULONG, 137 ValueLength: PULONG, 138 Value: PVOID, 139 ) -> BOOL; WinUsb_GetOverlappedResult( InterfaceHandle: WINUSB_INTERFACE_HANDLE, lpOverlapped: LPOVERLAPPED, lpNumberOfBytesTransferred: LPDWORD, bWait: BOOL, ) -> BOOL140 pub fn WinUsb_GetOverlappedResult( 141 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 142 lpOverlapped: LPOVERLAPPED, 143 lpNumberOfBytesTransferred: LPDWORD, 144 bWait: BOOL, 145 ) -> BOOL; WinUsb_ParseConfigurationDescriptor( ConfigurationDescriptor: PUSB_CONFIGURATION_DESCRIPTOR, StartPosition: PVOID, InterfaceNumber: LONG, AlternateSetting: LONG, InterfaceClass: LONG, InterfaceSubClass: LONG, InterfaceProtocol: LONG, ) -> BOOL146 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; WinUsb_ParseDescriptors( DescriptorBuffer: PVOID, TotalLength: ULONG, StartPosition: PVOID, DescriptorType: LONG, ) -> BOOL155 pub fn WinUsb_ParseDescriptors( 156 DescriptorBuffer: PVOID, 157 TotalLength: ULONG, 158 StartPosition: PVOID, 159 DescriptorType: LONG, 160 ) -> BOOL; WinUsb_GetCurrentFrameNumber( InterfaceHandle: WINUSB_INTERFACE_HANDLE, CurrentFrameNumber: PULONG, TimeStamp: *mut LARGE_INTEGER, ) -> BOOL161 pub fn WinUsb_GetCurrentFrameNumber( 162 InterfaceHandle: WINUSB_INTERFACE_HANDLE, 163 CurrentFrameNumber: PULONG, 164 TimeStamp: *mut LARGE_INTEGER, 165 ) -> BOOL; WinUsb_GetAdjustedFrameNumber( CurrentFrameNumber: PULONG, TimeStamp: LARGE_INTEGER, ) -> BOOL166 pub fn WinUsb_GetAdjustedFrameNumber( 167 CurrentFrameNumber: PULONG, 168 TimeStamp: LARGE_INTEGER, 169 ) -> BOOL; WinUsb_RegisterIsochBuffer( InterfaceHandle: WINUSB_INTERFACE_HANDLE, PipeID: UCHAR, Buffer: PUCHAR, BufferLength: ULONG, IsochBufferHandle: PWINUSB_ISOCH_BUFFER_HANDLE, ) -> BOOL170 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; WinUsb_UnregisterIsochBuffer( IsochBufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, ) -> BOOL177 pub fn WinUsb_UnregisterIsochBuffer( 178 IsochBufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, 179 ) -> BOOL; WinUsb_WriteIsochPipe( BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, Offset: ULONG, Length: ULONG, FrameNumber: PULONG, Overlapped: LPOVERLAPPED, ) -> BOOL180 pub fn WinUsb_WriteIsochPipe( 181 BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, 182 Offset: ULONG, 183 Length: ULONG, 184 FrameNumber: PULONG, 185 Overlapped: LPOVERLAPPED, 186 ) -> BOOL; WinUsb_ReadIsochPipe( BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, Offset: ULONG, Length: ULONG, FrameNumber: PULONG, NumberOfPackets: ULONG, IsoPacketDescriptors: PUSBD_ISO_PACKET_DESCRIPTOR, Overlapped: LPOVERLAPPED, ) -> BOOL187 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; WinUsb_WriteIsochPipeAsap( BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, Offset: ULONG, Length: ULONG, ContinueStream: BOOL, Overlapped: LPOVERLAPPED, ) -> BOOL196 pub fn WinUsb_WriteIsochPipeAsap( 197 BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, 198 Offset: ULONG, 199 Length: ULONG, 200 ContinueStream: BOOL, 201 Overlapped: LPOVERLAPPED, 202 ) -> BOOL; WinUsb_ReadIsochPipeAsap( BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE, Offset: ULONG, Length: ULONG, ContinueStream: BOOL, NumberOfPackets: ULONG, IsoPacketDescriptors: PUSBD_ISO_PACKET_DESCRIPTOR, Overlapped: LPOVERLAPPED, ) -> BOOL203 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 } 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; 225