# Libusb
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](http://dcuddeback.github.io/libusb-rs/libusb/)
## Dependencies
In order to use the `libusb` crate, you must have the native `libusb` library installed where it can
be found by `pkg-config`.
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 `libusb` crate can be used when cross-compiling to a foreign target. Details on how to
cross-compile `libusb` are explained in the [`libusb-sys` crate's
README](https://github.com/dcuddeback/libusb-sys#cross-compiling).
## Usage
Add `libusb` as a dependency in `Cargo.toml`:
```toml
[dependencies]
libusb = "0.2"
```
Import the `libusb` crate. The starting point for nearly all `libusb` 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
extern crate libusb;
fn main() {
let mut context = libusb::Context::new().unwrap();
for mut device in context.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());
}
}
```
## Contributors
* [dcuddeback](https://github.com/dcuddeback)
* [nibua-r](https://github.com/nibua-r)
## License
Copyright © 2015 David Cuddeback
Distributed under the [MIT License](LICENSE).