Test for retry of driver detach and interface claim

This commit is contained in:
Luke
2020-07-07 14:50:18 +12:00
parent 229fa93bc7
commit c6c934bf40

View File

@@ -65,31 +65,35 @@ impl RogCore {
} }
} }
dev_handle if let Err(err) = dev_handle.set_auto_detach_kernel_driver(true) {
.set_auto_detach_kernel_driver(true) warn!("Auto-detach kernel driver failed: {:?}", err);
.map_err(|err| { let mut fail_count = 10;
error!("Auto-detach kernel driver failed: {:?}", err); while fail_count > 0 {
err warn!("Trying device reset");
})?; fail_count -= 1;
dev_handle.reset()?;
std::thread::sleep(std::time::Duration::from_millis(500));
dev_handle
.set_auto_detach_kernel_driver(true)
.map_err(|err| {
error!("Auto-detach kernel driver failed: {:?}", err);
err
})?;
}
}
if let Err(err) = dev_handle.claim_interface(interface) { if let Err(err) = dev_handle.claim_interface(interface) {
warn!("Could not claim keyboard device interface: {:?}", err); warn!("Could not claim keyboard device interface: {:?}", err);
warn!("Trying to detach kernel driver then retry"); let mut fail_count = 10;
if let Ok(active) = dev_handle.kernel_driver_active(interface) { while fail_count > 0 {
if active { warn!("Sleeping");
dev_handle.reset()?; fail_count -= 1;
dev_handle.detach_kernel_driver(interface).map_err(|err| { std::thread::sleep(std::time::Duration::from_millis(500));
warn!("Could not detach kernel driver: {:?}", err); dev_handle.claim_interface(interface).map_err(|err| {
err error!("Could not claim keyboard device interface: {:?}", err);
})?; err
} else { })?;
warn!("Kernel driver not active, continue");
}
} }
dev_handle.claim_interface(interface).map_err(|err| {
error!("Could not claim keyboard device interface: {:?}", err);
err
})?;
} }
Ok(RogCore { Ok(RogCore {