1#[macro_use]
2extern crate nix;
3
4mod constants;
5mod error;
6mod ioctl;
7mod types;
8
9pub use constants::*;
10pub use error::*;
11
12pub use types::cap::UsbfsCap;
13pub use types::connect_info::UsbfsConnectInfo;
14pub use types::ctrl_transfer::UsbfsCtrlTransfer;
15pub use types::disconnect_claim::{UsbfsDisconnectClaim, UsbfsDisconnectClaimFlag};
16pub use types::driver::{DriverName, UsbfsGetDriver};
17pub use types::interface::UsbfsSetInterface;
18pub use types::ioctl::{UsbfsIoctl, UsbfsIoctlData};
19pub use types::iso_packet_desc::UsbfsIsoPacketDesc;
20pub use types::speed::UsbfsSpeed;
21pub use types::streams::UsbfsStreams;
22pub use types::urb::{TransferInfo, Urb, UrbUserContext};
23
24use types::{UrbFfi, UsbfsCtrlTransferFfi, UsbfsIoctlFfi, UsbfsStreamsFfi};
25
26pub fn usbfs_control(fd: i32, ctrl: &mut UsbfsCtrlTransfer) -> Result<()> {
30 let mut ctrl = UsbfsCtrlTransferFfi::from(ctrl);
31 unsafe {
32 ioctl::usbfs_control(fd, &mut ctrl)?;
33 }
34 Ok(())
35}
36
37pub fn usbfs_set_interface(fd: i32, set_interface: &mut UsbfsSetInterface) -> Result<()> {
41 unsafe {
42 ioctl::usbfs_setinterface(fd, set_interface)?;
43 }
44 Ok(())
45}
46
47pub fn usbfs_set_configuration(fd: i32, config: &mut u32) -> Result<()> {
49 unsafe {
50 ioctl::usbfs_setconfiguration(fd, config)?;
51 }
52 Ok(())
53}
54
55pub fn usbfs_get_driver(fd: i32, get_driver: &mut UsbfsGetDriver) -> Result<()> {
59 unsafe {
60 ioctl::usbfs_getdriver(fd, get_driver)?;
61 }
62 Ok(())
63}
64
65pub fn usbfs_submit_urb(fd: i32, urb: &mut Urb) -> Result<()> {
69 let mut urb_ffi = UrbFfi::from(urb);
70 unsafe {
71 ioctl::usbfs_submiturb(fd, &mut urb_ffi)?;
72 }
73 Ok(())
74}
75
76pub fn usbfs_discard_urb(fd: i32) -> Result<()> {
78 unsafe {
79 ioctl::usbfs_discardurb(fd)?;
80 }
81 Ok(())
82}
83
84pub fn usbfs_reap_urb_ndelay(fd: i32, urb: &mut Urb) -> Result<()> {
88 let urb_ffi = UrbFfi::from(urb);
89 unsafe {
90 ioctl::usbfs_reapurbndelay(fd, &urb_ffi)?;
91 }
92 Ok(())
93}
94
95pub fn usbfs_claim_interface(fd: i32, iface: &mut u32) -> Result<()> {
97 unsafe {
98 ioctl::usbfs_claiminterface(fd, iface)?;
99 }
100 Ok(())
101}
102
103pub fn usbfs_release_interface(fd: i32, iface: &mut u32) -> Result<()> {
105 unsafe {
106 ioctl::usbfs_releaseinterface(fd, iface)?;
107 }
108 Ok(())
109}
110
111pub fn usbfs_connect_info(fd: i32, info: &mut UsbfsConnectInfo) -> Result<()> {
115 unsafe {
116 ioctl::usbfs_connectinfo(fd, info)?;
117 }
118 Ok(())
119}
120
121pub fn usbfs_ioctl(fd: i32, ioctl: &mut UsbfsIoctl) -> Result<()> {
125 let mut ioctl_ffi = UsbfsIoctlFfi::from(ioctl);
126 unsafe {
127 ioctl::usbfs_ioctl(fd, &mut ioctl_ffi)?;
128 }
129 Ok(())
130}
131
132pub fn usbfs_reset(fd: i32) -> Result<()> {
134 unsafe {
135 ioctl::usbfs_reset(fd)?;
136 }
137 Ok(())
138}
139
140pub fn usbfs_clear_halt(fd: i32, iface: &mut u32) -> Result<()> {
142 unsafe {
143 ioctl::usbfs_clear_halt(fd, iface)?;
144 }
145 Ok(())
146}
147
148pub fn usbfs_disconnect(fd: i32) -> Result<()> {
150 unsafe {
151 ioctl::usbfs_disconnect(fd)?;
152 }
153 Ok(())
154}
155
156pub fn usbfs_connect(fd: i32) -> Result<()> {
158 unsafe {
159 ioctl::usbfs_connect(fd)?;
160 }
161 Ok(())
162}
163
164pub fn usbfs_get_capabilities(fd: i32, iface: &mut u32) -> Result<()> {
166 unsafe {
167 ioctl::usbfs_get_capabilities(fd, iface)?;
168 }
169 Ok(())
170}
171
172pub fn usbfs_disconnect_claim(fd: i32, claim: &mut UsbfsDisconnectClaim) -> Result<()> {
176 unsafe {
177 ioctl::usbfs_disconnect_claim(fd, claim)?;
178 }
179 Ok(())
180}
181
182pub fn usbfs_alloc_streams(fd: i32, streams: &mut UsbfsStreams) -> Result<()> {
188 let mut streams_ffi = UsbfsStreamsFfi::from(streams);
189 unsafe {
190 ioctl::usbfs_alloc_streams(fd, &mut streams_ffi)?;
191 }
192 Ok(())
193}
194
195pub fn usbfs_free_streams(fd: i32, streams: &mut UsbfsStreams) -> Result<()> {
201 let mut streams_ffi = UsbfsStreamsFfi::from(streams);
202 unsafe {
203 ioctl::usbfs_free_streams(fd, &mut streams_ffi)?;
204 }
205 Ok(())
206}
207
208pub fn usbfs_drop_privileges(fd: i32, privileges: u64) -> Result<()> {
210 unsafe {
211 ioctl::usbfs_drop_privileges(fd, privileges)?;
212 }
213 Ok(())
214}
215
216pub fn usbfs_get_speed(fd: i32) -> Result<()> {
218 unsafe {
219 ioctl::usbfs_get_speed(fd)?;
220 }
221 Ok(())
222}