# Rusb This crate provides a safe wrapper around the native `libusb` library. It applies the RAII pattern and Rust lifetimes to ensure safe usage of all `libusb` functionality. The RAII pattern ensures that all acquired resources are released when they're no longer needed, and Rust lifetimes ensure that resources are released in a proper order. * [Documentation](https://docs.rs/rusb) ## Dependencies To use rusb no extra setup is required as rusb will automatically download the source for libusb and build it. However if building libusb fails you can also try setting up the native `libusb` library where it can be found by `pkg-config` or `vcpkg`. All systems supported by the native `libusb` library are also supported by the `libusb` crate. It's been tested on Linux, OS X, and Windows. ### Cross-Compiling The `rusb` crate can be used when cross-compiling to a foreign target. Details on how to cross-compile `rusb` are explained in the [`libusb1-sys` crate's README](libusb1-sys/README.md#cross-compiling). ## Usage Add `rusb` as a dependency in `Cargo.toml`: ```toml [dependencies] rusb = "0.9" ``` Import the `rusb` crate. The starting point for nearly all `rusb` functionality is to create a context object. With a context object, you can list devices, read their descriptors, open them, and communicate with their endpoints: ```rust fn main() { for device in rusb::devices().unwrap().iter() { let device_desc = device.device_descriptor().unwrap(); println!("Bus {:03} Device {:03} ID {:04x}:{:04x}", device.bus_number(), device.address(), device_desc.vendor_id(), device_desc.product_id()); } } ``` ## License Distributed under the [MIT License](LICENSE). ### License note. If you link native `libusb` (by example using `vendored` features) library statically then you must follow [GNU LGPL](https://github.com/libusb/libusb/blob/master/COPYING) from libusb.