winapi_ui_automation/um/
winusb.rs

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.
7use shared::minwindef::{BOOL, LPDWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT};
8use shared::usb::PUSBD_ISO_PACKET_DESCRIPTOR;
9use shared::usbspec::PUSB_CONFIGURATION_DESCRIPTOR;
10use shared::winusbio::{PWINUSB_PIPE_INFORMATION, PWINUSB_PIPE_INFORMATION_EX};
11use um::minwinbase::LPOVERLAPPED;
12use um::winnt::{HANDLE, LARGE_INTEGER, LONG, PVOID};
13pub type WINUSB_INTERFACE_HANDLE = PVOID;
14pub type PWINUSB_INTERFACE_HANDLE = *mut PVOID;
15pub type WINUSB_ISOCH_BUFFER_HANDLE = PVOID;
16pub type PWINUSB_ISOCH_BUFFER_HANDLE = *mut PVOID;
17STRUCT!{#[repr(packed)] struct WINUSB_SETUP_PACKET {
18    RequestType: UCHAR,
19    Request: UCHAR,
20    Value: USHORT,
21    Index: USHORT,
22    Length: USHORT,
23}}
24pub type PWINUSB_SETUP_PACKET = *mut WINUSB_SETUP_PACKET;
25extern "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}
213STRUCT!{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}}
224pub type PUSB_INTERFACE_DESCRIPTOR = *mut USB_INTERFACE_DESCRIPTOR;