libusbk_sys/
bindings.rs

1/* automatically generated by rust-bindgen 0.69.4 */
2
3#[repr(C)]
4#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
5pub struct __BindgenBitfieldUnit<Storage> {
6    storage: Storage,
7}
8impl<Storage> __BindgenBitfieldUnit<Storage> {
9    #[inline]
10    pub const fn new(storage: Storage) -> Self {
11        Self { storage }
12    }
13}
14impl<Storage> __BindgenBitfieldUnit<Storage>
15where
16    Storage: AsRef<[u8]> + AsMut<[u8]>,
17{
18    #[inline]
19    pub fn get_bit(&self, index: usize) -> bool {
20        debug_assert!(index / 8 < self.storage.as_ref().len());
21        let byte_index = index / 8;
22        let byte = self.storage.as_ref()[byte_index];
23        let bit_index = if cfg!(target_endian = "big") {
24            7 - (index % 8)
25        } else {
26            index % 8
27        };
28        let mask = 1 << bit_index;
29        byte & mask == mask
30    }
31    #[inline]
32    pub fn set_bit(&mut self, index: usize, val: bool) {
33        debug_assert!(index / 8 < self.storage.as_ref().len());
34        let byte_index = index / 8;
35        let byte = &mut self.storage.as_mut()[byte_index];
36        let bit_index = if cfg!(target_endian = "big") {
37            7 - (index % 8)
38        } else {
39            index % 8
40        };
41        let mask = 1 << bit_index;
42        if val {
43            *byte |= mask;
44        } else {
45            *byte &= !mask;
46        }
47    }
48    #[inline]
49    pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 {
50        debug_assert!(bit_width <= 64);
51        debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
52        debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
53        let mut val = 0;
54        for i in 0..(bit_width as usize) {
55            if self.get_bit(i + bit_offset) {
56                let index = if cfg!(target_endian = "big") {
57                    bit_width as usize - 1 - i
58                } else {
59                    i
60                };
61                val |= 1 << index;
62            }
63        }
64        val
65    }
66    #[inline]
67    pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) {
68        debug_assert!(bit_width <= 64);
69        debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
70        debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
71        for i in 0..(bit_width as usize) {
72            let mask = 1 << i;
73            let val_bit_is_set = val & mask == mask;
74            let index = if cfg!(target_endian = "big") {
75                bit_width as usize - 1 - i
76            } else {
77                i
78            };
79            self.set_bit(index + bit_offset, val_bit_is_set);
80        }
81    }
82}
83#[repr(C)]
84#[derive(Default)]
85pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>, [T; 0]);
86impl<T> __IncompleteArrayField<T> {
87    #[inline]
88    pub const fn new() -> Self {
89        __IncompleteArrayField(::std::marker::PhantomData, [])
90    }
91    #[inline]
92    pub fn as_ptr(&self) -> *const T {
93        self as *const _ as *const T
94    }
95    #[inline]
96    pub fn as_mut_ptr(&mut self) -> *mut T {
97        self as *mut _ as *mut T
98    }
99    #[inline]
100    pub unsafe fn as_slice(&self, len: usize) -> &[T] {
101        ::std::slice::from_raw_parts(self.as_ptr(), len)
102    }
103    #[inline]
104    pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
105        ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
106    }
107}
108impl<T> ::std::fmt::Debug for __IncompleteArrayField<T> {
109    fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
110        fmt.write_str("__IncompleteArrayField")
111    }
112}
113pub type ULONG = ::std::os::raw::c_ulong;
114pub type USHORT = ::std::os::raw::c_ushort;
115pub type UCHAR = ::std::os::raw::c_uchar;
116pub type PUCHAR = *mut UCHAR;
117pub type DWORD = ::std::os::raw::c_ulong;
118pub type BOOL = ::std::os::raw::c_int;
119pub type PINT = *mut ::std::os::raw::c_int;
120pub type INT = ::std::os::raw::c_int;
121pub type UINT = ::std::os::raw::c_uint;
122pub type PUINT = *mut ::std::os::raw::c_uint;
123pub type INT_PTR = ::std::os::raw::c_longlong;
124pub type ULONG_PTR = ::std::os::raw::c_ulonglong;
125pub type PVOID = *mut ::std::os::raw::c_void;
126pub type CHAR = ::std::os::raw::c_char;
127pub type SHORT = ::std::os::raw::c_short;
128pub type HANDLE = *mut ::std::os::raw::c_void;
129#[repr(C)]
130#[derive(Debug, Default, Copy, Clone)]
131pub struct HWND__ {
132    pub unused: ::std::os::raw::c_int,
133}
134pub type HWND = *mut HWND__;
135#[repr(C)]
136#[derive(Copy, Clone)]
137pub struct _OVERLAPPED {
138    pub Internal: ULONG_PTR,
139    pub InternalHigh: ULONG_PTR,
140    pub __bindgen_anon_1: _OVERLAPPED__bindgen_ty_1,
141    pub hEvent: HANDLE,
142}
143#[repr(C)]
144#[derive(Copy, Clone)]
145pub union _OVERLAPPED__bindgen_ty_1 {
146    pub __bindgen_anon_1: _OVERLAPPED__bindgen_ty_1__bindgen_ty_1,
147    pub Pointer: PVOID,
148}
149#[repr(C)]
150#[derive(Debug, Default, Copy, Clone)]
151pub struct _OVERLAPPED__bindgen_ty_1__bindgen_ty_1 {
152    pub Offset: DWORD,
153    pub OffsetHigh: DWORD,
154}
155impl Default for _OVERLAPPED__bindgen_ty_1 {
156    fn default() -> Self {
157        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
158        unsafe {
159            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
160            s.assume_init()
161        }
162    }
163}
164impl Default for _OVERLAPPED {
165    fn default() -> Self {
166        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
167        unsafe {
168            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
169            s.assume_init()
170        }
171    }
172}
173pub type LPOVERLAPPED = *mut _OVERLAPPED;
174pub const _USBD_PIPE_TYPE_UsbdPipeTypeControl: _USBD_PIPE_TYPE = 0;
175pub const _USBD_PIPE_TYPE_UsbdPipeTypeIsochronous: _USBD_PIPE_TYPE = 1;
176pub const _USBD_PIPE_TYPE_UsbdPipeTypeBulk: _USBD_PIPE_TYPE = 2;
177pub const _USBD_PIPE_TYPE_UsbdPipeTypeInterrupt: _USBD_PIPE_TYPE = 3;
178pub type _USBD_PIPE_TYPE = ::std::os::raw::c_int;
179pub use self::_USBD_PIPE_TYPE as USBD_PIPE_TYPE;
180#[repr(C)]
181#[derive(Debug, Copy, Clone)]
182pub struct _WINUSB_PIPE_INFORMATION {
183    pub PipeType: USBD_PIPE_TYPE,
184    pub PipeId: UCHAR,
185    pub MaximumPacketSize: USHORT,
186    pub Interval: UCHAR,
187}
188impl Default for _WINUSB_PIPE_INFORMATION {
189    fn default() -> Self {
190        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
191        unsafe {
192            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
193            s.assume_init()
194        }
195    }
196}
197pub type WINUSB_PIPE_INFORMATION = _WINUSB_PIPE_INFORMATION;
198pub type PWINUSB_PIPE_INFORMATION = *mut WINUSB_PIPE_INFORMATION;
199#[repr(C)]
200#[derive(Debug, Copy, Clone)]
201pub struct _WINUSB_PIPE_INFORMATION_EX {
202    pub PipeType: USBD_PIPE_TYPE,
203    pub PipeId: UCHAR,
204    pub MaximumPacketSize: USHORT,
205    pub Interval: UCHAR,
206    pub MaximumBytesPerInterval: ULONG,
207}
208impl Default for _WINUSB_PIPE_INFORMATION_EX {
209    fn default() -> Self {
210        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
211        unsafe {
212            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
213            s.assume_init()
214        }
215    }
216}
217pub type WINUSB_PIPE_INFORMATION_EX = _WINUSB_PIPE_INFORMATION_EX;
218pub type PWINUSB_PIPE_INFORMATION_EX = *mut WINUSB_PIPE_INFORMATION_EX;
219#[repr(C, packed)]
220#[derive(Debug, Default, Copy, Clone)]
221pub struct _WINUSB_SETUP_PACKET {
222    pub RequestType: UCHAR,
223    pub Request: UCHAR,
224    pub Value: USHORT,
225    pub Index: USHORT,
226    pub Length: USHORT,
227}
228pub type WINUSB_SETUP_PACKET = _WINUSB_SETUP_PACKET;
229#[repr(C, packed)]
230#[derive(Debug, Default, Copy, Clone)]
231pub struct _KISO_PACKET {
232    pub Offset: UINT,
233    pub Length: USHORT,
234    pub Status: USHORT,
235}
236pub type KISO_PACKET = _KISO_PACKET;
237pub type PKISO_PACKET = *mut KISO_PACKET;
238pub const _KISO_FLAG_KISO_FLAG_NONE: _KISO_FLAG = 0;
239pub const _KISO_FLAG_KISO_FLAG_SET_START_FRAME: _KISO_FLAG = 1;
240pub type _KISO_FLAG = ::std::os::raw::c_int;
241pub use self::_KISO_FLAG as KISO_FLAG;
242#[repr(C, packed)]
243pub struct _KISO_CONTEXT {
244    pub Flags: KISO_FLAG,
245    pub StartFrame: UINT,
246    pub ErrorCount: SHORT,
247    pub NumberOfPackets: SHORT,
248    pub UrbHdrStatus: UINT,
249    pub IsoPackets: __IncompleteArrayField<KISO_PACKET>,
250}
251impl Default for _KISO_CONTEXT {
252    fn default() -> Self {
253        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
254        unsafe {
255            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
256            s.assume_init()
257        }
258    }
259}
260pub type KISO_CONTEXT = _KISO_CONTEXT;
261pub type PKISO_CONTEXT = *mut KISO_CONTEXT;
262#[repr(C, packed)]
263#[derive(Debug, Default, Copy, Clone)]
264pub struct _KISOCH_PACKET_INFORMATION {
265    pub PacketsPerFrame: UINT,
266    pub PollingPeriodMicroseconds: UINT,
267    pub BytesPerMillisecond: UINT,
268}
269pub type KISOCH_PACKET_INFORMATION = _KISOCH_PACKET_INFORMATION;
270pub type PKISOCH_PACKET_INFORMATION = *mut KISOCH_PACKET_INFORMATION;
271pub type KPROC = ::std::option::Option<unsafe extern "C" fn() -> INT_PTR>;
272pub type KLIB_USER_CONTEXT = INT_PTR;
273pub type KLIB_HANDLE = *mut ::std::os::raw::c_void;
274pub type KUSB_HANDLE = KLIB_HANDLE;
275pub type KLST_HANDLE = KLIB_HANDLE;
276pub type KHOT_HANDLE = KLIB_HANDLE;
277pub type KOVL_HANDLE = KLIB_HANDLE;
278pub type KOVL_POOL_HANDLE = KLIB_HANDLE;
279pub type KSTM_HANDLE = KLIB_HANDLE;
280pub type KISOCH_HANDLE = KLIB_HANDLE;
281pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_HOTK: _KLIB_HANDLE_TYPE = 0;
282pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_USBK: _KLIB_HANDLE_TYPE = 1;
283pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_USBSHAREDK: _KLIB_HANDLE_TYPE = 2;
284pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_LSTK: _KLIB_HANDLE_TYPE = 3;
285pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_LSTINFOK: _KLIB_HANDLE_TYPE = 4;
286pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_OVLK: _KLIB_HANDLE_TYPE = 5;
287pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_OVLPOOLK: _KLIB_HANDLE_TYPE = 6;
288pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_STMK: _KLIB_HANDLE_TYPE = 7;
289pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_ISOCHK: _KLIB_HANDLE_TYPE = 8;
290pub const _KLIB_HANDLE_TYPE_KLIB_HANDLE_TYPE_COUNT: _KLIB_HANDLE_TYPE = 9;
291pub type _KLIB_HANDLE_TYPE = ::std::os::raw::c_int;
292pub use self::_KLIB_HANDLE_TYPE as KLIB_HANDLE_TYPE;
293#[repr(C)]
294#[derive(Debug, Default, Copy, Clone)]
295pub struct _KLIB_VERSION {
296    pub Major: INT,
297    pub Minor: INT,
298    pub Micro: INT,
299    pub Nano: INT,
300}
301pub type KLIB_VERSION = _KLIB_VERSION;
302pub type PKLIB_VERSION = *mut KLIB_VERSION;
303pub const _KLST_SYNC_FLAG_KLST_SYNC_FLAG_NONE: _KLST_SYNC_FLAG = 0;
304pub const _KLST_SYNC_FLAG_KLST_SYNC_FLAG_UNCHANGED: _KLST_SYNC_FLAG = 1;
305pub const _KLST_SYNC_FLAG_KLST_SYNC_FLAG_ADDED: _KLST_SYNC_FLAG = 2;
306pub const _KLST_SYNC_FLAG_KLST_SYNC_FLAG_REMOVED: _KLST_SYNC_FLAG = 4;
307pub const _KLST_SYNC_FLAG_KLST_SYNC_FLAG_CONNECT_CHANGE: _KLST_SYNC_FLAG = 8;
308pub const _KLST_SYNC_FLAG_KLST_SYNC_FLAG_MASK: _KLST_SYNC_FLAG = 15;
309pub type _KLST_SYNC_FLAG = ::std::os::raw::c_int;
310pub use self::_KLST_SYNC_FLAG as KLST_SYNC_FLAG;
311#[repr(C)]
312#[derive(Debug, Copy, Clone)]
313pub struct _KLST_DEV_COMMON_INFO {
314    pub Vid: INT,
315    pub Pid: INT,
316    pub MI: INT,
317    pub InstanceID: [CHAR; 256usize],
318}
319impl Default for _KLST_DEV_COMMON_INFO {
320    fn default() -> Self {
321        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
322        unsafe {
323            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
324            s.assume_init()
325        }
326    }
327}
328pub type KLST_DEV_COMMON_INFO = _KLST_DEV_COMMON_INFO;
329#[repr(C)]
330#[derive(Debug, Copy, Clone)]
331pub struct _KLST_DEVINFO {
332    pub Common: KLST_DEV_COMMON_INFO,
333    pub DriverID: INT,
334    pub DeviceInterfaceGUID: [CHAR; 256usize],
335    pub DeviceID: [CHAR; 256usize],
336    pub ClassGUID: [CHAR; 256usize],
337    pub Mfg: [CHAR; 256usize],
338    pub DeviceDesc: [CHAR; 256usize],
339    pub Service: [CHAR; 256usize],
340    pub SymbolicLink: [CHAR; 256usize],
341    pub DevicePath: [CHAR; 256usize],
342    pub LUsb0FilterIndex: INT,
343    pub Connected: BOOL,
344    pub SyncFlags: KLST_SYNC_FLAG,
345    pub BusNumber: INT,
346    pub DeviceAddress: INT,
347    pub SerialNumber: [CHAR; 256usize],
348}
349impl Default for _KLST_DEVINFO {
350    fn default() -> Self {
351        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
352        unsafe {
353            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
354            s.assume_init()
355        }
356    }
357}
358pub type KLST_DEVINFO = _KLST_DEVINFO;
359pub type KLST_DEVINFO_HANDLE = *mut KLST_DEVINFO;
360pub const _KLST_FLAG_KLST_FLAG_NONE: _KLST_FLAG = 0;
361pub const _KLST_FLAG_KLST_FLAG_INCLUDE_RAWGUID: _KLST_FLAG = 1;
362pub const _KLST_FLAG_KLST_FLAG_INCLUDE_DISCONNECT: _KLST_FLAG = 2;
363pub type _KLST_FLAG = ::std::os::raw::c_int;
364pub use self::_KLST_FLAG as KLST_FLAG;
365#[repr(C)]
366#[derive(Debug, Copy, Clone)]
367pub struct _KLST_PATTERN_MATCH {
368    pub DeviceID: [CHAR; 256usize],
369    pub DeviceInterfaceGUID: [CHAR; 256usize],
370    pub ClassGUID: [CHAR; 256usize],
371    pub z_F_i_x_e_d: [UCHAR; 256usize],
372}
373impl Default for _KLST_PATTERN_MATCH {
374    fn default() -> Self {
375        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
376        unsafe {
377            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
378            s.assume_init()
379        }
380    }
381}
382pub type KLST_PATTERN_MATCH = _KLST_PATTERN_MATCH;
383pub type PKLST_PATTERN_MATCH = *mut KLST_PATTERN_MATCH;
384#[repr(C, packed)]
385#[derive(Debug, Default, Copy, Clone)]
386pub struct _USB_ENDPOINT_DESCRIPTOR {
387    pub bLength: UCHAR,
388    pub bDescriptorType: UCHAR,
389    pub bEndpointAddress: UCHAR,
390    pub bmAttributes: UCHAR,
391    pub wMaxPacketSize: USHORT,
392    pub bInterval: UCHAR,
393}
394pub type USB_ENDPOINT_DESCRIPTOR = _USB_ENDPOINT_DESCRIPTOR;
395#[repr(C, packed)]
396#[derive(Copy, Clone)]
397pub struct _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR {
398    pub bLength: UCHAR,
399    pub bDescriptorType: UCHAR,
400    pub bMaxBurst: UCHAR,
401    pub bmAttributes: _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1,
402    pub wBytesPerInterval: USHORT,
403}
404#[repr(C)]
405#[derive(Copy, Clone)]
406pub union _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1 {
407    pub AsUchar: UCHAR,
408    pub Bulk: _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1__bindgen_ty_1,
409    pub Isochronous: _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1__bindgen_ty_2,
410}
411#[repr(C)]
412#[derive(Debug, Default, Copy, Clone)]
413pub struct _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1__bindgen_ty_1 {
414    pub _bitfield_align_1: [u8; 0],
415    pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
416}
417impl _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1__bindgen_ty_1 {
418    #[inline]
419    pub fn MaxStreams(&self) -> UCHAR {
420        unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 5u8) as u8) }
421    }
422    #[inline]
423    pub fn set_MaxStreams(&mut self, val: UCHAR) {
424        unsafe {
425            let val: u8 = ::std::mem::transmute(val);
426            self._bitfield_1.set(0usize, 5u8, val as u64)
427        }
428    }
429    #[inline]
430    pub fn Reserved1(&self) -> UCHAR {
431        unsafe { ::std::mem::transmute(self._bitfield_1.get(5usize, 3u8) as u8) }
432    }
433    #[inline]
434    pub fn set_Reserved1(&mut self, val: UCHAR) {
435        unsafe {
436            let val: u8 = ::std::mem::transmute(val);
437            self._bitfield_1.set(5usize, 3u8, val as u64)
438        }
439    }
440    #[inline]
441    pub fn new_bitfield_1(
442        MaxStreams: UCHAR,
443        Reserved1: UCHAR,
444    ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
445        let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
446        __bindgen_bitfield_unit.set(0usize, 5u8, {
447            let MaxStreams: u8 = unsafe { ::std::mem::transmute(MaxStreams) };
448            MaxStreams as u64
449        });
450        __bindgen_bitfield_unit.set(5usize, 3u8, {
451            let Reserved1: u8 = unsafe { ::std::mem::transmute(Reserved1) };
452            Reserved1 as u64
453        });
454        __bindgen_bitfield_unit
455    }
456}
457#[repr(C)]
458#[derive(Debug, Default, Copy, Clone)]
459pub struct _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1__bindgen_ty_2 {
460    pub _bitfield_align_1: [u8; 0],
461    pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
462}
463impl _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1__bindgen_ty_2 {
464    #[inline]
465    pub fn Mult(&self) -> UCHAR {
466        unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 2u8) as u8) }
467    }
468    #[inline]
469    pub fn set_Mult(&mut self, val: UCHAR) {
470        unsafe {
471            let val: u8 = ::std::mem::transmute(val);
472            self._bitfield_1.set(0usize, 2u8, val as u64)
473        }
474    }
475    #[inline]
476    pub fn Reserved2(&self) -> UCHAR {
477        unsafe { ::std::mem::transmute(self._bitfield_1.get(2usize, 5u8) as u8) }
478    }
479    #[inline]
480    pub fn set_Reserved2(&mut self, val: UCHAR) {
481        unsafe {
482            let val: u8 = ::std::mem::transmute(val);
483            self._bitfield_1.set(2usize, 5u8, val as u64)
484        }
485    }
486    #[inline]
487    pub fn SspCompanion(&self) -> UCHAR {
488        unsafe { ::std::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u8) }
489    }
490    #[inline]
491    pub fn set_SspCompanion(&mut self, val: UCHAR) {
492        unsafe {
493            let val: u8 = ::std::mem::transmute(val);
494            self._bitfield_1.set(7usize, 1u8, val as u64)
495        }
496    }
497    #[inline]
498    pub fn new_bitfield_1(
499        Mult: UCHAR,
500        Reserved2: UCHAR,
501        SspCompanion: UCHAR,
502    ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
503        let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
504        __bindgen_bitfield_unit.set(0usize, 2u8, {
505            let Mult: u8 = unsafe { ::std::mem::transmute(Mult) };
506            Mult as u64
507        });
508        __bindgen_bitfield_unit.set(2usize, 5u8, {
509            let Reserved2: u8 = unsafe { ::std::mem::transmute(Reserved2) };
510            Reserved2 as u64
511        });
512        __bindgen_bitfield_unit.set(7usize, 1u8, {
513            let SspCompanion: u8 = unsafe { ::std::mem::transmute(SspCompanion) };
514            SspCompanion as u64
515        });
516        __bindgen_bitfield_unit
517    }
518}
519impl Default for _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR__bindgen_ty_1 {
520    fn default() -> Self {
521        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
522        unsafe {
523            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
524            s.assume_init()
525        }
526    }
527}
528impl Default for _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR {
529    fn default() -> Self {
530        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
531        unsafe {
532            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
533            s.assume_init()
534        }
535    }
536}
537pub type PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR =
538    *mut _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR;
539#[repr(C)]
540#[derive(Debug, Default, Copy, Clone)]
541pub struct _USB_INTERFACE_DESCRIPTOR {
542    pub bLength: UCHAR,
543    pub bDescriptorType: UCHAR,
544    pub bInterfaceNumber: UCHAR,
545    pub bAlternateSetting: UCHAR,
546    pub bNumEndpoints: UCHAR,
547    pub bInterfaceClass: UCHAR,
548    pub bInterfaceSubClass: UCHAR,
549    pub bInterfaceProtocol: UCHAR,
550    pub iInterface: UCHAR,
551}
552pub type USB_INTERFACE_DESCRIPTOR = _USB_INTERFACE_DESCRIPTOR;
553pub type PUSB_INTERFACE_DESCRIPTOR = *mut USB_INTERFACE_DESCRIPTOR;
554pub const _KUSB_PROPERTY_KUSB_PROPERTY_DEVICE_FILE_HANDLE: _KUSB_PROPERTY = 0;
555pub const _KUSB_PROPERTY_KUSB_PROPERTY_COUNT: _KUSB_PROPERTY = 1;
556pub type _KUSB_PROPERTY = ::std::os::raw::c_int;
557pub use self::_KUSB_PROPERTY as KUSB_PROPERTY;
558#[repr(C)]
559#[derive(Debug, Default, Copy, Clone)]
560pub struct _KUSB_DRIVER_API_INFO {
561    pub DriverID: INT,
562    pub FunctionCount: INT,
563}
564pub type KUSB_DRIVER_API_INFO = _KUSB_DRIVER_API_INFO;
565#[repr(C)]
566#[derive(Debug, Copy, Clone)]
567pub struct _KUSB_DRIVER_API {
568    pub Info: KUSB_DRIVER_API_INFO,
569    pub Init: ::std::option::Option<
570        unsafe extern "C" fn(arg1: *mut KUSB_HANDLE, arg2: KLST_DEVINFO_HANDLE) -> BOOL,
571    >,
572    pub Free: ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE) -> BOOL>,
573    pub ClaimInterface: ::std::option::Option<
574        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR, arg3: BOOL) -> BOOL,
575    >,
576    pub ReleaseInterface: ::std::option::Option<
577        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR, arg3: BOOL) -> BOOL,
578    >,
579    pub SetAltInterface: ::std::option::Option<
580        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR, arg3: BOOL, arg4: UCHAR) -> BOOL,
581    >,
582    pub GetAltInterface: ::std::option::Option<
583        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR, arg3: BOOL, arg4: PUCHAR) -> BOOL,
584    >,
585    pub GetDescriptor: ::std::option::Option<
586        unsafe extern "C" fn(
587            arg1: KUSB_HANDLE,
588            arg2: UCHAR,
589            arg3: UCHAR,
590            arg4: USHORT,
591            arg5: PUCHAR,
592            arg6: UINT,
593            arg7: PUINT,
594        ) -> BOOL,
595    >,
596    pub ControlTransfer: ::std::option::Option<
597        unsafe extern "C" fn(
598            arg1: KUSB_HANDLE,
599            arg2: WINUSB_SETUP_PACKET,
600            arg3: PUCHAR,
601            arg4: UINT,
602            arg5: PUINT,
603            arg6: LPOVERLAPPED,
604        ) -> BOOL,
605    >,
606    pub SetPowerPolicy: ::std::option::Option<
607        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UINT, arg3: UINT, arg4: PVOID) -> BOOL,
608    >,
609    pub GetPowerPolicy: ::std::option::Option<
610        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UINT, arg3: PUINT, arg4: PVOID) -> BOOL,
611    >,
612    pub SetConfiguration:
613        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR) -> BOOL>,
614    pub GetConfiguration:
615        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: PUCHAR) -> BOOL>,
616    pub ResetDevice: ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE) -> BOOL>,
617    pub Initialize:
618        ::std::option::Option<unsafe extern "C" fn(arg1: HANDLE, arg2: *mut KUSB_HANDLE) -> BOOL>,
619    pub SelectInterface: ::std::option::Option<
620        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR, arg3: BOOL) -> BOOL,
621    >,
622    pub GetAssociatedInterface: ::std::option::Option<
623        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR, arg3: *mut KUSB_HANDLE) -> BOOL,
624    >,
625    pub Clone: ::std::option::Option<
626        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: *mut KUSB_HANDLE) -> BOOL,
627    >,
628    pub QueryInterfaceSettings: ::std::option::Option<
629        unsafe extern "C" fn(
630            arg1: KUSB_HANDLE,
631            arg2: UCHAR,
632            arg3: PUSB_INTERFACE_DESCRIPTOR,
633        ) -> BOOL,
634    >,
635    pub QueryDeviceInformation: ::std::option::Option<
636        unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UINT, arg3: PUINT, arg4: PUCHAR) -> BOOL,
637    >,
638    pub SetCurrentAlternateSetting:
639        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR) -> BOOL>,
640    pub GetCurrentAlternateSetting:
641        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: PUCHAR) -> BOOL>,
642    pub QueryPipe: ::std::option::Option<
643        unsafe extern "C" fn(
644            arg1: KUSB_HANDLE,
645            arg2: UCHAR,
646            arg3: UCHAR,
647            arg4: PWINUSB_PIPE_INFORMATION,
648        ) -> BOOL,
649    >,
650    pub SetPipePolicy: ::std::option::Option<
651        unsafe extern "C" fn(
652            arg1: KUSB_HANDLE,
653            arg2: UCHAR,
654            arg3: UINT,
655            arg4: UINT,
656            arg5: PVOID,
657        ) -> BOOL,
658    >,
659    pub GetPipePolicy: ::std::option::Option<
660        unsafe extern "C" fn(
661            arg1: KUSB_HANDLE,
662            arg2: UCHAR,
663            arg3: UINT,
664            arg4: PUINT,
665            arg5: PVOID,
666        ) -> BOOL,
667    >,
668    pub ReadPipe: ::std::option::Option<
669        unsafe extern "C" fn(
670            arg1: KUSB_HANDLE,
671            arg2: UCHAR,
672            arg3: PUCHAR,
673            arg4: UINT,
674            arg5: PUINT,
675            arg6: LPOVERLAPPED,
676        ) -> BOOL,
677    >,
678    pub WritePipe: ::std::option::Option<
679        unsafe extern "C" fn(
680            arg1: KUSB_HANDLE,
681            arg2: UCHAR,
682            arg3: PUCHAR,
683            arg4: UINT,
684            arg5: PUINT,
685            arg6: LPOVERLAPPED,
686        ) -> BOOL,
687    >,
688    pub ResetPipe:
689        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR) -> BOOL>,
690    pub AbortPipe:
691        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR) -> BOOL>,
692    pub FlushPipe:
693        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: UCHAR) -> BOOL>,
694    pub IsoReadPipe: ::std::option::Option<
695        unsafe extern "C" fn(
696            arg1: KUSB_HANDLE,
697            arg2: UCHAR,
698            arg3: PUCHAR,
699            arg4: UINT,
700            arg5: LPOVERLAPPED,
701            arg6: PKISO_CONTEXT,
702        ) -> BOOL,
703    >,
704    pub IsoWritePipe: ::std::option::Option<
705        unsafe extern "C" fn(
706            arg1: KUSB_HANDLE,
707            arg2: UCHAR,
708            arg3: PUCHAR,
709            arg4: UINT,
710            arg5: LPOVERLAPPED,
711            arg6: PKISO_CONTEXT,
712        ) -> BOOL,
713    >,
714    pub GetCurrentFrameNumber:
715        ::std::option::Option<unsafe extern "C" fn(arg1: KUSB_HANDLE, arg2: PUINT) -> BOOL>,
716    pub GetOverlappedResult: ::std::option::Option<
717        unsafe extern "C" fn(
718            arg1: KUSB_HANDLE,
719            arg2: LPOVERLAPPED,
720            arg3: PUINT,
721            arg4: BOOL,
722        ) -> BOOL,
723    >,
724    pub GetProperty: ::std::option::Option<
725        unsafe extern "C" fn(
726            arg1: KUSB_HANDLE,
727            arg2: KUSB_PROPERTY,
728            arg3: PUINT,
729            arg4: PVOID,
730        ) -> BOOL,
731    >,
732    pub IsochReadPipe: ::std::option::Option<
733        unsafe extern "C" fn(
734            arg1: KISOCH_HANDLE,
735            arg2: UINT,
736            arg3: PUINT,
737            arg4: UINT,
738            arg5: LPOVERLAPPED,
739        ) -> BOOL,
740    >,
741    pub IsochWritePipe: ::std::option::Option<
742        unsafe extern "C" fn(
743            arg1: KISOCH_HANDLE,
744            arg2: UINT,
745            arg3: PUINT,
746            arg4: UINT,
747            arg5: LPOVERLAPPED,
748        ) -> BOOL,
749    >,
750    pub QueryPipeEx: ::std::option::Option<
751        unsafe extern "C" fn(
752            arg1: KUSB_HANDLE,
753            arg2: UCHAR,
754            arg3: UCHAR,
755            arg4: PWINUSB_PIPE_INFORMATION_EX,
756        ) -> BOOL,
757    >,
758    pub GetSuperSpeedPipeCompanionDescriptor: ::std::option::Option<
759        unsafe extern "C" fn(
760            arg1: KUSB_HANDLE,
761            arg2: UCHAR,
762            arg3: UCHAR,
763            arg4: PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR,
764        ) -> BOOL,
765    >,
766    pub z_F_i_x_e_d: [UCHAR; 160usize],
767    pub z_FuncSupported: [UCHAR; 40usize],
768}
769impl Default for _KUSB_DRIVER_API {
770    fn default() -> Self {
771        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
772        unsafe {
773            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
774            s.assume_init()
775        }
776    }
777}
778pub type KUSB_DRIVER_API = _KUSB_DRIVER_API;
779pub type PKUSB_DRIVER_API = *mut KUSB_DRIVER_API;
780pub const _KHOT_FLAG_KHOT_FLAG_NONE: _KHOT_FLAG = 0;
781pub const _KHOT_FLAG_KHOT_FLAG_PLUG_ALL_ON_INIT: _KHOT_FLAG = 1;
782pub const _KHOT_FLAG_KHOT_FLAG_PASS_DUPE_INSTANCE: _KHOT_FLAG = 2;
783pub const _KHOT_FLAG_KHOT_FLAG_POST_USER_MESSAGE: _KHOT_FLAG = 4;
784pub type _KHOT_FLAG = ::std::os::raw::c_int;
785pub use self::_KHOT_FLAG as KHOT_FLAG;
786#[repr(C)]
787#[derive(Debug, Copy, Clone)]
788pub struct _KHOT_PARAMS {
789    pub UserHwnd: HWND,
790    pub UserMessage: UINT,
791    pub Flags: KHOT_FLAG,
792    pub PatternMatch: KLST_PATTERN_MATCH,
793    pub OnHotPlug: ::std::option::Option<
794        unsafe extern "C" fn(arg1: KHOT_HANDLE, arg2: KLST_DEVINFO_HANDLE, arg3: KLST_SYNC_FLAG),
795    >,
796    pub OnPowerBroadcast: ::std::option::Option<
797        unsafe extern "C" fn(arg1: KHOT_HANDLE, arg2: KLST_DEVINFO_HANDLE, arg3: UINT),
798    >,
799    pub z_F_i_x_e_d: [UCHAR; 992usize],
800}
801impl Default for _KHOT_PARAMS {
802    fn default() -> Self {
803        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
804        unsafe {
805            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
806            s.assume_init()
807        }
808    }
809}
810pub type KHOT_PARAMS = _KHOT_PARAMS;
811pub type PKHOT_PARAMS = *mut KHOT_PARAMS;
812pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_NONE: _KOVL_WAIT_FLAG = 0;
813pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS: _KOVL_WAIT_FLAG = 1;
814pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_RELEASE_ON_FAIL: _KOVL_WAIT_FLAG = 2;
815pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_RELEASE_ON_SUCCESS_FAIL: _KOVL_WAIT_FLAG = 3;
816pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_CANCEL_ON_TIMEOUT: _KOVL_WAIT_FLAG = 4;
817pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_RELEASE_ON_TIMEOUT: _KOVL_WAIT_FLAG = 12;
818pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_RELEASE_ALWAYS: _KOVL_WAIT_FLAG = 15;
819pub const _KOVL_WAIT_FLAG_KOVL_WAIT_FLAG_ALERTABLE: _KOVL_WAIT_FLAG = 16;
820pub type _KOVL_WAIT_FLAG = ::std::os::raw::c_int;
821pub use self::_KOVL_WAIT_FLAG as KOVL_WAIT_FLAG;
822pub const _KOVL_POOL_FLAG_KOVL_POOL_FLAG_NONE: _KOVL_POOL_FLAG = 0;
823pub type _KOVL_POOL_FLAG = ::std::os::raw::c_int;
824pub use self::_KOVL_POOL_FLAG as KOVL_POOL_FLAG;
825pub const _KSTM_FLAG_KSTM_FLAG_NONE: _KSTM_FLAG = 0;
826pub const _KSTM_FLAG_KSTM_FLAG_NO_PARTIAL_XFERS: _KSTM_FLAG = 1048576;
827pub const _KSTM_FLAG_KSTM_FLAG_USE_TIMEOUT: _KSTM_FLAG = -2147483648;
828pub const _KSTM_FLAG_KSTM_FLAG_TIMEOUT_MASK: _KSTM_FLAG = 131071;
829pub type _KSTM_FLAG = ::std::os::raw::c_int;
830pub use self::_KSTM_FLAG as KSTM_FLAG;
831pub const _KSTM_COMPLETE_RESULT_KSTM_COMPLETE_RESULT_VALID: _KSTM_COMPLETE_RESULT = 0;
832pub const _KSTM_COMPLETE_RESULT_KSTM_COMPLETE_RESULT_INVALID: _KSTM_COMPLETE_RESULT = 1;
833pub type _KSTM_COMPLETE_RESULT = ::std::os::raw::c_int;
834pub use self::_KSTM_COMPLETE_RESULT as KSTM_COMPLETE_RESULT;
835#[repr(C)]
836#[derive(Debug, Copy, Clone)]
837pub struct _KSTM_XFER_CONTEXT {
838    pub Buffer: PUCHAR,
839    pub BufferSize: INT,
840    pub TransferLength: INT,
841    pub UserState: PVOID,
842}
843impl Default for _KSTM_XFER_CONTEXT {
844    fn default() -> Self {
845        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
846        unsafe {
847            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
848            s.assume_init()
849        }
850    }
851}
852pub type KSTM_XFER_CONTEXT = _KSTM_XFER_CONTEXT;
853pub type PKSTM_XFER_CONTEXT = *mut KSTM_XFER_CONTEXT;
854#[repr(C)]
855#[derive(Debug, Copy, Clone)]
856pub struct _KSTM_INFO {
857    pub UsbHandle: KUSB_HANDLE,
858    pub PipeID: UCHAR,
859    pub MaxPendingTransfers: INT,
860    pub MaxTransferSize: INT,
861    pub MaxPendingIO: INT,
862    pub EndpointDescriptor: USB_ENDPOINT_DESCRIPTOR,
863    pub DriverAPI: KUSB_DRIVER_API,
864    pub DeviceHandle: HANDLE,
865    pub StreamHandle: KSTM_HANDLE,
866    pub UserState: PVOID,
867}
868impl Default for _KSTM_INFO {
869    fn default() -> Self {
870        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
871        unsafe {
872            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
873            s.assume_init()
874        }
875    }
876}
877pub type KSTM_INFO = _KSTM_INFO;
878pub type PKSTM_INFO = *mut KSTM_INFO;
879#[repr(C)]
880#[derive(Debug, Default, Copy, Clone)]
881pub struct _KSTM_CALLBACK {
882    pub Error: ::std::option::Option<
883        unsafe extern "C" fn(
884            arg1: PKSTM_INFO,
885            arg2: PKSTM_XFER_CONTEXT,
886            arg3: INT,
887            arg4: INT,
888        ) -> INT,
889    >,
890    pub Submit: ::std::option::Option<
891        unsafe extern "C" fn(
892            arg1: PKSTM_INFO,
893            arg2: PKSTM_XFER_CONTEXT,
894            arg3: INT,
895            arg4: LPOVERLAPPED,
896        ) -> INT,
897    >,
898    pub Complete: ::std::option::Option<
899        unsafe extern "C" fn(
900            arg1: PKSTM_INFO,
901            arg2: PKSTM_XFER_CONTEXT,
902            arg3: INT,
903            arg4: INT,
904        ) -> INT,
905    >,
906    pub Started: ::std::option::Option<
907        unsafe extern "C" fn(arg1: PKSTM_INFO, arg2: PKSTM_XFER_CONTEXT, arg3: INT) -> INT,
908    >,
909    pub Stopped: ::std::option::Option<
910        unsafe extern "C" fn(arg1: PKSTM_INFO, arg2: PKSTM_XFER_CONTEXT, arg3: INT) -> INT,
911    >,
912    pub BeforeComplete: ::std::option::Option<
913        unsafe extern "C" fn(
914            arg1: PKSTM_INFO,
915            arg2: PKSTM_XFER_CONTEXT,
916            arg3: INT,
917            arg4: PINT,
918        ) -> KSTM_COMPLETE_RESULT,
919    >,
920    pub z_F_i_x_e_d: [UCHAR; 16usize],
921}
922pub type KSTM_CALLBACK = _KSTM_CALLBACK;
923pub type PKSTM_CALLBACK = *mut KSTM_CALLBACK;
924extern "C" {
925    pub fn LibK_GetVersion(Version: PKLIB_VERSION);
926}
927extern "C" {
928    pub fn LibK_GetContext(Handle: KLIB_HANDLE, HandleType: KLIB_HANDLE_TYPE) -> KLIB_USER_CONTEXT;
929}
930extern "C" {
931    pub fn LibK_SetContext(
932        Handle: KLIB_HANDLE,
933        HandleType: KLIB_HANDLE_TYPE,
934        ContextValue: KLIB_USER_CONTEXT,
935    ) -> BOOL;
936}
937extern "C" {
938    pub fn LibK_SetCleanupCallback(
939        Handle: KLIB_HANDLE,
940        HandleType: KLIB_HANDLE_TYPE,
941        CleanupCB: ::std::option::Option<
942            unsafe extern "C" fn(
943                arg1: KLIB_HANDLE,
944                arg2: KLIB_HANDLE_TYPE,
945                arg3: KLIB_USER_CONTEXT,
946            ) -> INT,
947        >,
948    ) -> BOOL;
949}
950extern "C" {
951    pub fn LibK_LoadDriverAPI(DriverAPI: PKUSB_DRIVER_API, DriverID: INT) -> BOOL;
952}
953extern "C" {
954    pub fn LibK_IsFunctionSupported(DriverAPI: PKUSB_DRIVER_API, FunctionID: UINT) -> BOOL;
955}
956extern "C" {
957    pub fn LibK_CopyDriverAPI(DriverAPI: PKUSB_DRIVER_API, UsbHandle: KUSB_HANDLE) -> BOOL;
958}
959extern "C" {
960    pub fn LibK_GetProcAddress(ProcAddress: *mut KPROC, DriverID: INT, FunctionID: INT) -> BOOL;
961}
962extern "C" {
963    pub fn LibK_SetDefaultContext(
964        HandleType: KLIB_HANDLE_TYPE,
965        ContextValue: KLIB_USER_CONTEXT,
966    ) -> BOOL;
967}
968extern "C" {
969    pub fn LibK_GetDefaultContext(HandleType: KLIB_HANDLE_TYPE) -> KLIB_USER_CONTEXT;
970}
971extern "C" {
972    pub fn LibK_Context_Init(Heap: HANDLE, Reserved: PVOID) -> BOOL;
973}
974extern "C" {
975    pub fn LibK_Context_Free();
976}
977extern "C" {
978    pub fn UsbK_Init(InterfaceHandle: *mut KUSB_HANDLE, DevInfo: KLST_DEVINFO_HANDLE) -> BOOL;
979}
980extern "C" {
981    pub fn UsbK_Free(InterfaceHandle: KUSB_HANDLE) -> BOOL;
982}
983extern "C" {
984    pub fn UsbK_ClaimInterface(
985        InterfaceHandle: KUSB_HANDLE,
986        NumberOrIndex: UCHAR,
987        IsIndex: BOOL,
988    ) -> BOOL;
989}
990extern "C" {
991    pub fn UsbK_ReleaseInterface(
992        InterfaceHandle: KUSB_HANDLE,
993        NumberOrIndex: UCHAR,
994        IsIndex: BOOL,
995    ) -> BOOL;
996}
997extern "C" {
998    pub fn UsbK_SetAltInterface(
999        InterfaceHandle: KUSB_HANDLE,
1000        NumberOrIndex: UCHAR,
1001        IsIndex: BOOL,
1002        AltSettingNumber: UCHAR,
1003    ) -> BOOL;
1004}
1005extern "C" {
1006    pub fn UsbK_GetAltInterface(
1007        InterfaceHandle: KUSB_HANDLE,
1008        NumberOrIndex: UCHAR,
1009        IsIndex: BOOL,
1010        AltSettingNumber: PUCHAR,
1011    ) -> BOOL;
1012}
1013extern "C" {
1014    pub fn UsbK_GetDescriptor(
1015        InterfaceHandle: KUSB_HANDLE,
1016        DescriptorType: UCHAR,
1017        Index: UCHAR,
1018        LanguageID: USHORT,
1019        Buffer: PUCHAR,
1020        BufferLength: UINT,
1021        LengthTransferred: PUINT,
1022    ) -> BOOL;
1023}
1024extern "C" {
1025    pub fn UsbK_ControlTransfer(
1026        InterfaceHandle: KUSB_HANDLE,
1027        SetupPacket: WINUSB_SETUP_PACKET,
1028        Buffer: PUCHAR,
1029        BufferLength: UINT,
1030        LengthTransferred: PUINT,
1031        Overlapped: LPOVERLAPPED,
1032    ) -> BOOL;
1033}
1034extern "C" {
1035    pub fn UsbK_SetPowerPolicy(
1036        InterfaceHandle: KUSB_HANDLE,
1037        PolicyType: UINT,
1038        ValueLength: UINT,
1039        Value: PVOID,
1040    ) -> BOOL;
1041}
1042extern "C" {
1043    pub fn UsbK_GetPowerPolicy(
1044        InterfaceHandle: KUSB_HANDLE,
1045        PolicyType: UINT,
1046        ValueLength: PUINT,
1047        Value: PVOID,
1048    ) -> BOOL;
1049}
1050extern "C" {
1051    pub fn UsbK_SetConfiguration(InterfaceHandle: KUSB_HANDLE, ConfigurationNumber: UCHAR) -> BOOL;
1052}
1053extern "C" {
1054    pub fn UsbK_GetConfiguration(InterfaceHandle: KUSB_HANDLE, ConfigurationNumber: PUCHAR)
1055        -> BOOL;
1056}
1057extern "C" {
1058    pub fn UsbK_ResetDevice(InterfaceHandle: KUSB_HANDLE) -> BOOL;
1059}
1060extern "C" {
1061    pub fn UsbK_Initialize(DeviceHandle: HANDLE, InterfaceHandle: *mut KUSB_HANDLE) -> BOOL;
1062}
1063extern "C" {
1064    pub fn UsbK_SelectInterface(
1065        InterfaceHandle: KUSB_HANDLE,
1066        NumberOrIndex: UCHAR,
1067        IsIndex: BOOL,
1068    ) -> BOOL;
1069}
1070extern "C" {
1071    pub fn UsbK_GetAssociatedInterface(
1072        InterfaceHandle: KUSB_HANDLE,
1073        AssociatedInterfaceIndex: UCHAR,
1074        AssociatedInterfaceHandle: *mut KUSB_HANDLE,
1075    ) -> BOOL;
1076}
1077extern "C" {
1078    pub fn UsbK_Clone(InterfaceHandle: KUSB_HANDLE, DstInterfaceHandle: *mut KUSB_HANDLE) -> BOOL;
1079}
1080extern "C" {
1081    pub fn UsbK_QueryInterfaceSettings(
1082        InterfaceHandle: KUSB_HANDLE,
1083        AltSettingIndex: UCHAR,
1084        UsbAltInterfaceDescriptor: PUSB_INTERFACE_DESCRIPTOR,
1085    ) -> BOOL;
1086}
1087extern "C" {
1088    pub fn UsbK_QueryDeviceInformation(
1089        InterfaceHandle: KUSB_HANDLE,
1090        InformationType: UINT,
1091        BufferLength: PUINT,
1092        Buffer: PUCHAR,
1093    ) -> BOOL;
1094}
1095extern "C" {
1096    pub fn UsbK_SetCurrentAlternateSetting(
1097        InterfaceHandle: KUSB_HANDLE,
1098        AltSettingNumber: UCHAR,
1099    ) -> BOOL;
1100}
1101extern "C" {
1102    pub fn UsbK_GetCurrentAlternateSetting(
1103        InterfaceHandle: KUSB_HANDLE,
1104        AltSettingNumber: PUCHAR,
1105    ) -> BOOL;
1106}
1107extern "C" {
1108    pub fn UsbK_QueryPipe(
1109        InterfaceHandle: KUSB_HANDLE,
1110        AltSettingNumber: UCHAR,
1111        PipeIndex: UCHAR,
1112        PipeInformation: PWINUSB_PIPE_INFORMATION,
1113    ) -> BOOL;
1114}
1115extern "C" {
1116    pub fn UsbK_QueryPipeEx(
1117        InterfaceHandle: KUSB_HANDLE,
1118        AltSettingNumber: UCHAR,
1119        PipeIndex: UCHAR,
1120        PipeInformationEx: PWINUSB_PIPE_INFORMATION_EX,
1121    ) -> BOOL;
1122}
1123extern "C" {
1124    pub fn UsbK_GetSuperSpeedPipeCompanionDescriptor(
1125        InterfaceHandle: KUSB_HANDLE,
1126        AltSettingNumber: UCHAR,
1127        PipeIndex: UCHAR,
1128        PipeCompanionDescriptor: PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR,
1129    ) -> BOOL;
1130}
1131extern "C" {
1132    pub fn UsbK_SetPipePolicy(
1133        InterfaceHandle: KUSB_HANDLE,
1134        PipeID: UCHAR,
1135        PolicyType: UINT,
1136        ValueLength: UINT,
1137        Value: PVOID,
1138    ) -> BOOL;
1139}
1140extern "C" {
1141    pub fn UsbK_GetPipePolicy(
1142        InterfaceHandle: KUSB_HANDLE,
1143        PipeID: UCHAR,
1144        PolicyType: UINT,
1145        ValueLength: PUINT,
1146        Value: PVOID,
1147    ) -> BOOL;
1148}
1149extern "C" {
1150    pub fn UsbK_ReadPipe(
1151        InterfaceHandle: KUSB_HANDLE,
1152        PipeID: UCHAR,
1153        Buffer: PUCHAR,
1154        BufferLength: UINT,
1155        LengthTransferred: PUINT,
1156        Overlapped: LPOVERLAPPED,
1157    ) -> BOOL;
1158}
1159extern "C" {
1160    pub fn UsbK_WritePipe(
1161        InterfaceHandle: KUSB_HANDLE,
1162        PipeID: UCHAR,
1163        Buffer: PUCHAR,
1164        BufferLength: UINT,
1165        LengthTransferred: PUINT,
1166        Overlapped: LPOVERLAPPED,
1167    ) -> BOOL;
1168}
1169extern "C" {
1170    pub fn UsbK_ResetPipe(InterfaceHandle: KUSB_HANDLE, PipeID: UCHAR) -> BOOL;
1171}
1172extern "C" {
1173    pub fn UsbK_AbortPipe(InterfaceHandle: KUSB_HANDLE, PipeID: UCHAR) -> BOOL;
1174}
1175extern "C" {
1176    pub fn UsbK_FlushPipe(InterfaceHandle: KUSB_HANDLE, PipeID: UCHAR) -> BOOL;
1177}
1178extern "C" {
1179    pub fn UsbK_IsoReadPipe(
1180        InterfaceHandle: KUSB_HANDLE,
1181        PipeID: UCHAR,
1182        Buffer: PUCHAR,
1183        BufferLength: UINT,
1184        Overlapped: LPOVERLAPPED,
1185        IsoContext: PKISO_CONTEXT,
1186    ) -> BOOL;
1187}
1188extern "C" {
1189    pub fn UsbK_IsoWritePipe(
1190        InterfaceHandle: KUSB_HANDLE,
1191        PipeID: UCHAR,
1192        Buffer: PUCHAR,
1193        BufferLength: UINT,
1194        Overlapped: LPOVERLAPPED,
1195        IsoContext: PKISO_CONTEXT,
1196    ) -> BOOL;
1197}
1198extern "C" {
1199    pub fn UsbK_GetCurrentFrameNumber(InterfaceHandle: KUSB_HANDLE, FrameNumber: PUINT) -> BOOL;
1200}
1201extern "C" {
1202    pub fn UsbK_IsochReadPipe(
1203        IsochHandle: KISOCH_HANDLE,
1204        DataLength: UINT,
1205        FrameNumber: PUINT,
1206        NumberOfPackets: UINT,
1207        Overlapped: LPOVERLAPPED,
1208    ) -> BOOL;
1209}
1210extern "C" {
1211    pub fn UsbK_IsochWritePipe(
1212        IsochHandle: KISOCH_HANDLE,
1213        DataLength: UINT,
1214        FrameNumber: PUINT,
1215        NumberOfPackets: UINT,
1216        Overlapped: LPOVERLAPPED,
1217    ) -> BOOL;
1218}
1219extern "C" {
1220    pub fn UsbK_GetOverlappedResult(
1221        InterfaceHandle: KUSB_HANDLE,
1222        Overlapped: LPOVERLAPPED,
1223        lpNumberOfBytesTransferred: PUINT,
1224        bWait: BOOL,
1225    ) -> BOOL;
1226}
1227extern "C" {
1228    pub fn UsbK_GetProperty(
1229        InterfaceHandle: KUSB_HANDLE,
1230        PropertyType: KUSB_PROPERTY,
1231        PropertySize: PUINT,
1232        Value: PVOID,
1233    ) -> BOOL;
1234}
1235extern "C" {
1236    pub fn LstK_Init(DeviceList: *mut KLST_HANDLE, Flags: KLST_FLAG) -> BOOL;
1237}
1238extern "C" {
1239    pub fn LstK_InitEx(
1240        DeviceList: *mut KLST_HANDLE,
1241        Flags: KLST_FLAG,
1242        PatternMatch: PKLST_PATTERN_MATCH,
1243    ) -> BOOL;
1244}
1245extern "C" {
1246    pub fn LstK_Free(DeviceList: KLST_HANDLE) -> BOOL;
1247}
1248extern "C" {
1249    pub fn LstK_Enumerate(
1250        DeviceList: KLST_HANDLE,
1251        EnumDevListCB: ::std::option::Option<
1252            unsafe extern "C" fn(arg1: KLST_HANDLE, arg2: KLST_DEVINFO_HANDLE, arg3: PVOID) -> BOOL,
1253        >,
1254        Context: PVOID,
1255    ) -> BOOL;
1256}
1257extern "C" {
1258    pub fn LstK_Current(DeviceList: KLST_HANDLE, DeviceInfo: *mut KLST_DEVINFO_HANDLE) -> BOOL;
1259}
1260extern "C" {
1261    pub fn LstK_MoveNext(DeviceList: KLST_HANDLE, DeviceInfo: *mut KLST_DEVINFO_HANDLE) -> BOOL;
1262}
1263extern "C" {
1264    pub fn LstK_MoveReset(DeviceList: KLST_HANDLE);
1265}
1266extern "C" {
1267    pub fn LstK_FindByVidPid(
1268        DeviceList: KLST_HANDLE,
1269        Vid: INT,
1270        Pid: INT,
1271        DeviceInfo: *mut KLST_DEVINFO_HANDLE,
1272    ) -> BOOL;
1273}
1274extern "C" {
1275    pub fn LstK_Count(DeviceList: KLST_HANDLE, Count: PUINT) -> BOOL;
1276}
1277extern "C" {
1278    pub fn HotK_Init(Handle: *mut KHOT_HANDLE, InitParams: PKHOT_PARAMS) -> BOOL;
1279}
1280extern "C" {
1281    pub fn HotK_Free(Handle: KHOT_HANDLE) -> BOOL;
1282}
1283extern "C" {
1284    pub fn HotK_FreeAll();
1285}
1286extern "C" {
1287    pub fn OvlK_Acquire(OverlappedK: *mut KOVL_HANDLE, PoolHandle: KOVL_POOL_HANDLE) -> BOOL;
1288}
1289extern "C" {
1290    pub fn OvlK_Release(OverlappedK: KOVL_HANDLE) -> BOOL;
1291}
1292extern "C" {
1293    pub fn OvlK_Init(
1294        PoolHandle: *mut KOVL_POOL_HANDLE,
1295        UsbHandle: KUSB_HANDLE,
1296        MaxOverlappedCount: INT,
1297        Flags: KOVL_POOL_FLAG,
1298    ) -> BOOL;
1299}
1300extern "C" {
1301    pub fn OvlK_Free(PoolHandle: KOVL_POOL_HANDLE) -> BOOL;
1302}
1303extern "C" {
1304    pub fn OvlK_GetEventHandle(OverlappedK: KOVL_HANDLE) -> HANDLE;
1305}
1306extern "C" {
1307    pub fn OvlK_Wait(
1308        OverlappedK: KOVL_HANDLE,
1309        TimeoutMS: INT,
1310        WaitFlags: KOVL_WAIT_FLAG,
1311        TransferredLength: PUINT,
1312    ) -> BOOL;
1313}
1314extern "C" {
1315    pub fn OvlK_WaitOldest(
1316        PoolHandle: KOVL_POOL_HANDLE,
1317        OverlappedK: *mut KOVL_HANDLE,
1318        TimeoutMS: INT,
1319        WaitFlags: KOVL_WAIT_FLAG,
1320        TransferredLength: PUINT,
1321    ) -> BOOL;
1322}
1323extern "C" {
1324    pub fn OvlK_WaitOrCancel(
1325        OverlappedK: KOVL_HANDLE,
1326        TimeoutMS: INT,
1327        TransferredLength: PUINT,
1328    ) -> BOOL;
1329}
1330extern "C" {
1331    pub fn OvlK_WaitAndRelease(
1332        OverlappedK: KOVL_HANDLE,
1333        TimeoutMS: INT,
1334        TransferredLength: PUINT,
1335    ) -> BOOL;
1336}
1337extern "C" {
1338    pub fn OvlK_IsComplete(OverlappedK: KOVL_HANDLE) -> BOOL;
1339}
1340extern "C" {
1341    pub fn OvlK_ReUse(OverlappedK: KOVL_HANDLE) -> BOOL;
1342}
1343extern "C" {
1344    pub fn StmK_Init(
1345        StreamHandle: *mut KSTM_HANDLE,
1346        UsbHandle: KUSB_HANDLE,
1347        PipeID: UCHAR,
1348        MaxTransferSize: INT,
1349        MaxPendingTransfers: INT,
1350        MaxPendingIO: INT,
1351        Callbacks: PKSTM_CALLBACK,
1352        Flags: KSTM_FLAG,
1353    ) -> BOOL;
1354}
1355extern "C" {
1356    pub fn StmK_Free(StreamHandle: KSTM_HANDLE) -> BOOL;
1357}
1358extern "C" {
1359    pub fn StmK_Start(StreamHandle: KSTM_HANDLE) -> BOOL;
1360}
1361extern "C" {
1362    pub fn StmK_Stop(StreamHandle: KSTM_HANDLE, TimeoutCancelMS: INT) -> BOOL;
1363}
1364extern "C" {
1365    pub fn StmK_Read(
1366        StreamHandle: KSTM_HANDLE,
1367        Buffer: PUCHAR,
1368        Offset: INT,
1369        Length: INT,
1370        TransferredLength: PUINT,
1371    ) -> BOOL;
1372}
1373extern "C" {
1374    pub fn StmK_Write(
1375        StreamHandle: KSTM_HANDLE,
1376        Buffer: PUCHAR,
1377        Offset: INT,
1378        Length: INT,
1379        TransferredLength: PUINT,
1380    ) -> BOOL;
1381}
1382extern "C" {
1383    pub fn IsoK_Init(IsoContext: *mut PKISO_CONTEXT, NumberOfPackets: INT, StartFrame: INT)
1384        -> BOOL;
1385}
1386extern "C" {
1387    pub fn IsoK_Free(IsoContext: PKISO_CONTEXT) -> BOOL;
1388}
1389extern "C" {
1390    pub fn IsoK_SetPackets(IsoContext: PKISO_CONTEXT, PacketSize: INT) -> BOOL;
1391}
1392extern "C" {
1393    pub fn IsoK_SetPacket(
1394        IsoContext: PKISO_CONTEXT,
1395        PacketIndex: INT,
1396        IsoPacket: PKISO_PACKET,
1397    ) -> BOOL;
1398}
1399extern "C" {
1400    pub fn IsoK_GetPacket(
1401        IsoContext: PKISO_CONTEXT,
1402        PacketIndex: INT,
1403        IsoPacket: PKISO_PACKET,
1404    ) -> BOOL;
1405}
1406extern "C" {
1407    pub fn IsoK_EnumPackets(
1408        IsoContext: PKISO_CONTEXT,
1409        EnumPackets: ::std::option::Option<
1410            unsafe extern "C" fn(arg1: UINT, arg2: PKISO_PACKET, arg3: PVOID) -> BOOL,
1411        >,
1412        StartPacketIndex: INT,
1413        UserState: PVOID,
1414    ) -> BOOL;
1415}
1416extern "C" {
1417    pub fn IsoK_ReUse(IsoContext: PKISO_CONTEXT) -> BOOL;
1418}
1419extern "C" {
1420    pub fn IsochK_Init(
1421        IsochHandle: *mut KISOCH_HANDLE,
1422        InterfaceHandle: KUSB_HANDLE,
1423        PipeId: UCHAR,
1424        MaxNumberOfPackets: UINT,
1425        TransferBuffer: PUCHAR,
1426        TransferBufferSize: UINT,
1427    ) -> BOOL;
1428}
1429extern "C" {
1430    pub fn IsochK_Free(IsochHandle: KISOCH_HANDLE) -> BOOL;
1431}
1432extern "C" {
1433    pub fn IsochK_SetPacketOffsets(IsochHandle: KISOCH_HANDLE, PacketSize: UINT) -> BOOL;
1434}
1435extern "C" {
1436    pub fn IsochK_SetPacket(
1437        IsochHandle: KISOCH_HANDLE,
1438        PacketIndex: UINT,
1439        Offset: UINT,
1440        Length: UINT,
1441        Status: UINT,
1442    ) -> BOOL;
1443}
1444extern "C" {
1445    pub fn IsochK_GetPacket(
1446        IsochHandle: KISOCH_HANDLE,
1447        PacketIndex: UINT,
1448        Offset: PUINT,
1449        Length: PUINT,
1450        Status: PUINT,
1451    ) -> BOOL;
1452}
1453extern "C" {
1454    pub fn IsochK_EnumPackets(
1455        IsochHandle: KISOCH_HANDLE,
1456        EnumPackets: ::std::option::Option<
1457            unsafe extern "C" fn(
1458                arg1: UINT,
1459                arg2: PUINT,
1460                arg3: PUINT,
1461                arg4: PUINT,
1462                arg5: PVOID,
1463            ) -> BOOL,
1464        >,
1465        StartPacketIndex: UINT,
1466        UserState: PVOID,
1467    ) -> BOOL;
1468}
1469extern "C" {
1470    pub fn IsochK_CalcPacketInformation(
1471        IsHighSpeed: BOOL,
1472        PipeInformationEx: PWINUSB_PIPE_INFORMATION_EX,
1473        PacketInformation: PKISOCH_PACKET_INFORMATION,
1474    ) -> BOOL;
1475}
1476extern "C" {
1477    pub fn IsochK_GetNumberOfPackets(IsochHandle: KISOCH_HANDLE, NumberOfPackets: PUINT) -> BOOL;
1478}
1479extern "C" {
1480    pub fn IsochK_SetNumberOfPackets(IsochHandle: KISOCH_HANDLE, NumberOfPackets: UINT) -> BOOL;
1481}
1482extern "C" {
1483    pub fn LUsb0_ControlTransfer(
1484        InterfaceHandle: KUSB_HANDLE,
1485        SetupPacket: WINUSB_SETUP_PACKET,
1486        Buffer: PUCHAR,
1487        BufferLength: UINT,
1488        LengthTransferred: PUINT,
1489        Overlapped: LPOVERLAPPED,
1490    ) -> BOOL;
1491}
1492extern "C" {
1493    pub fn LUsb0_SetConfiguration(InterfaceHandle: KUSB_HANDLE, ConfigurationNumber: UCHAR)
1494        -> BOOL;
1495}