1 use rusb::{Context, Device, HotplugBuilder, UsbContext};
2
3 struct HotPlugHandler;
4
5 impl<T: UsbContext> rusb::Hotplug<T> for HotPlugHandler {
device_arrived(&mut self, device: Device<T>)6 fn device_arrived(&mut self, device: Device<T>) {
7 println!("device arrived {:?}", device);
8 }
9
device_left(&mut self, device: Device<T>)10 fn device_left(&mut self, device: Device<T>) {
11 println!("device left {:?}", device);
12 }
13 }
14
15 impl Drop for HotPlugHandler {
drop(&mut self)16 fn drop(&mut self) {
17 println!("HotPlugHandler dropped");
18 }
19 }
20
main() -> rusb::Result<()>21 fn main() -> rusb::Result<()> {
22 if rusb::has_hotplug() {
23 let context = Context::new()?;
24
25 let mut reg = Some(
26 HotplugBuilder::new()
27 .enumerate(true)
28 .register(&context, Box::new(HotPlugHandler {}))?,
29 );
30
31 loop {
32 context.handle_events(None).unwrap();
33 if let Some(reg) = reg.take() {
34 context.unregister_callback(reg);
35 break;
36 }
37 }
38 Ok(())
39 } else {
40 eprint!("libusb hotplug api unsupported");
41 Ok(())
42 }
43 }
44