HID reset modified
This commit is contained in:
parent
e8243e5c1c
commit
4157bd68d3
@ -121,8 +121,12 @@ impl Handler {
|
||||
gadget.cycle()?;
|
||||
|
||||
let ctrl = UsbGadget::find_controller()?;
|
||||
wait_configured(&ctrl, 10_000).await
|
||||
.context("waiting for host to configure")?;
|
||||
let configured = wait_configured(&ctrl, 10_000).await.is_ok();
|
||||
if configured {
|
||||
info!("✅ host enumerated (configured)");
|
||||
} else {
|
||||
warn!("⚠️ host absent – queuing HID traffic");
|
||||
}
|
||||
let state = UsbGadget::wait_state_any(&ctrl, 5_000)?;
|
||||
match state.as_str() {
|
||||
"configured" => info!("✅ host enumerated (configured)"),
|
||||
@ -144,6 +148,20 @@ impl Handler {
|
||||
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]
|
||||
@ -288,24 +306,11 @@ async fn main() -> anyhow::Result<()> {
|
||||
let handler = match Handler::make(gadget.clone()).await {
|
||||
Ok(h) => h,
|
||||
Err(e) => {
|
||||
error!("💥 failed to create Handler: {e:#}");
|
||||
std::process::exit(1);
|
||||
error!("💥 handler degraded (host offline): {e:#}");
|
||||
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!("🌐 lesavka‑server listening on 0.0.0.0:50051");
|
||||
|
||||
if let Err(e) = Server::builder()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user