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