usbfs/
lib.rs

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
26/// USBFS Control transfer.
27///
28/// The user is responsible for setting all the relevant [UsbfsCtrlTransfer] fields.
29pub 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
37/// USBFS Set Interface
38///
39/// The user is responsible for setting all the relevant [UsbfsSetInterface] fields.
40pub 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
47/// USBFS Set Configuration
48pub fn usbfs_set_configuration(fd: i32, config: &mut u32) -> Result<()> {
49    unsafe {
50        ioctl::usbfs_setconfiguration(fd, config)?;
51    }
52    Ok(())
53}
54
55/// USBFS Get Driver
56///
57/// The user is responsible for setting all the relevant [UsbfsGetDriver] fields.
58pub 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
65/// USBFS Submit URB
66///
67/// The user is responsible for setting all the relevant [Urb] fields.
68pub 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
76/// USBFS Discard URB
77pub fn usbfs_discard_urb(fd: i32) -> Result<()> {
78    unsafe {
79        ioctl::usbfs_discardurb(fd)?;
80    }
81    Ok(())
82}
83
84/// USBFS Reap URB N_Delay
85///
86/// The user is responsible for setting all the relevant [Urb] fields.
87pub 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
95/// USBFS Claim Interface
96pub fn usbfs_claim_interface(fd: i32, iface: &mut u32) -> Result<()> {
97    unsafe {
98        ioctl::usbfs_claiminterface(fd, iface)?;
99    }
100    Ok(())
101}
102
103/// USBFS Release Interface
104pub fn usbfs_release_interface(fd: i32, iface: &mut u32) -> Result<()> {
105    unsafe {
106        ioctl::usbfs_releaseinterface(fd, iface)?;
107    }
108    Ok(())
109}
110
111/// USBFS Connect Info
112///
113/// The user is responsible for setting all the relevant [UsbfsConnectInfo] fields.
114pub fn usbfs_connect_info(fd: i32, info: &mut UsbfsConnectInfo) -> Result<()> {
115    unsafe {
116        ioctl::usbfs_connectinfo(fd, info)?;
117    }
118    Ok(())
119}
120
121/// USBFS IOCTL
122///
123/// The user is responsible for setting all the relevant [UsbfsIoctl] fields.
124pub 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
132/// USBFS Reset
133pub fn usbfs_reset(fd: i32) -> Result<()> {
134    unsafe {
135        ioctl::usbfs_reset(fd)?;
136    }
137    Ok(())
138}
139
140/// USBFS Clear Halt
141pub fn usbfs_clear_halt(fd: i32, iface: &mut u32) -> Result<()> {
142    unsafe {
143        ioctl::usbfs_clear_halt(fd, iface)?;
144    }
145    Ok(())
146}
147
148/// USBFS Disconnect
149pub fn usbfs_disconnect(fd: i32) -> Result<()> {
150    unsafe {
151        ioctl::usbfs_disconnect(fd)?;
152    }
153    Ok(())
154}
155
156/// USBFS Connect
157pub fn usbfs_connect(fd: i32) -> Result<()> {
158    unsafe {
159        ioctl::usbfs_connect(fd)?;
160    }
161    Ok(())
162}
163
164/// USBFS Get Capabilities
165pub fn usbfs_get_capabilities(fd: i32, iface: &mut u32) -> Result<()> {
166    unsafe {
167        ioctl::usbfs_get_capabilities(fd, iface)?;
168    }
169    Ok(())
170}
171
172/// USBFS Disconnect Claim
173///
174/// The user is responsible for setting all the relevant [UsbfsDisconnectClaim] fields.
175pub fn usbfs_disconnect_claim(fd: i32, claim: &mut UsbfsDisconnectClaim) -> Result<()> {
176    unsafe {
177        ioctl::usbfs_disconnect_claim(fd, claim)?;
178    }
179    Ok(())
180}
181
182/// USBFS Alloc Streams
183///
184/// Requests the kernel to allocate `num_streams` of USB packet streams.
185///
186/// The user is responsible for setting all the relevant [UsbfsStreams] fields.
187pub 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
195/// USBFS Free Streams
196///
197/// Requests the kernel to free `num_streams` of USB packet streams.
198///
199/// The user is responsible for setting all the relevant [UsbfsStreams] fields.
200pub 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
208/// USBFS Drop Privileges
209pub fn usbfs_drop_privileges(fd: i32, privileges: u64) -> Result<()> {
210    unsafe {
211        ioctl::usbfs_drop_privileges(fd, privileges)?;
212    }
213    Ok(())
214}
215
216/// USBFS Get Speed
217pub fn usbfs_get_speed(fd: i32) -> Result<()> {
218    unsafe {
219        ioctl::usbfs_get_speed(fd)?;
220    }
221    Ok(())
222}