HID reset modified

This commit is contained in:
Brad Stein 2025-06-26 21:49:29 -05:00
parent e8243e5c1c
commit 4157bd68d3

View File

@ -121,8 +121,12 @@ impl Handler {
gadget.cycle()?; gadget.cycle()?;
let ctrl = UsbGadget::find_controller()?; let ctrl = UsbGadget::find_controller()?;
wait_configured(&ctrl, 10_000).await let configured = wait_configured(&ctrl, 10_000).await.is_ok();
.context("waiting for host to configure")?; if configured {
info!("✅ host enumerated (configured)");
} else {
warn!("⚠️ host absent queuing HID traffic");
}
let state = UsbGadget::wait_state_any(&ctrl, 5_000)?; let state = UsbGadget::wait_state_any(&ctrl, 5_000)?;
match state.as_str() { match state.as_str() {
"configured" => info!("✅ host enumerated (configured)"), "configured" => info!("✅ host enumerated (configured)"),
@ -144,6 +148,20 @@ impl Handler {
did_cycle: AtomicBool::new(true), did_cycle: AtomicBool::new(true),
}) })
} }
async fn degraded(gadget: UsbGadget) -> anyhow::Result<Self> {
info!("🛠️ Handler::degraded - opening HID endpoints ...");
let kb = open_with_retry("/dev/hidg0").await?;
let ms = open_with_retry("/dev/hidg1").await?;
info!("✅ HID endpoints ready");
Ok(Self {
kb: Arc::new(Mutex::new(kb)),
ms: Arc::new(Mutex::new(ms)),
gadget,
did_cycle: AtomicBool::new(false),
})
}
} }
#[tonic::async_trait] #[tonic::async_trait]
@ -288,24 +306,11 @@ async fn main() -> anyhow::Result<()> {
let handler = match Handler::make(gadget.clone()).await { let handler = match Handler::make(gadget.clone()).await {
Ok(h) => h, Ok(h) => h,
Err(e) => { Err(e) => {
error!("💥 failed to create Handler: {e:#}"); error!("💥 handler degraded (host offline): {e:#}");
std::process::exit(1); Handler::degraded(gadget.clone()).await?
} }
}; };
// tokio::spawn({
// let gadget = gadget.clone();
// async move {
// loop {
// tokio::time::sleep(Duration::from_secs(4)).await;
// if LAST_HID_WRITE.elapsed().as_secs() > 3 {
// warn!("no HID traffic in 3 s - cycling UDC");
// let _ = gadget.cycle();
// }
// }
// }
// });
info!("🌐 lesavkaserver listening on 0.0.0.0:50051"); info!("🌐 lesavkaserver listening on 0.0.0.0:50051");
if let Err(e) = Server::builder() if let Err(e) = Server::builder()