HID reset modified
This commit is contained in:
parent
e8243e5c1c
commit
4157bd68d3
@ -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!("🌐 lesavka‑server listening on 0.0.0.0:50051");
|
info!("🌐 lesavka‑server listening on 0.0.0.0:50051");
|
||||||
|
|
||||||
if let Err(e) = Server::builder()
|
if let Err(e) = Server::builder()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user