From 3aca2284989640e6f744494921efadf17240a3f8 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Sat, 5 Jul 2025 12:45:08 -0500 Subject: [PATCH] install features - usb fix --- scripts/daemon/lesavka-core.sh | 3 +++ server/src/main.rs | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/scripts/daemon/lesavka-core.sh b/scripts/daemon/lesavka-core.sh index cb9e9f5..fe71914 100644 --- a/scripts/daemon/lesavka-core.sh +++ b/scripts/daemon/lesavka-core.sh @@ -163,6 +163,9 @@ mkdir -p "$F/control/header" # ln -sf "$header_h" "$F/control/class/$s/h" # done +echo 0x0 >"$F/control/terminal/camera/default/bmControls" 2>/dev/null || true +echo 0x0 >"$F/control/processing/default/bmControls" 2>/dev/null || true + # friendly label # mkdir -p "$F/control/header/strings/0x409" # echo "Lesavka UVC" >"$F/control/header/strings/0x409/label" diff --git a/server/src/main.rs b/server/src/main.rs index 9f3376f..b4c2f15 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -124,6 +124,14 @@ impl Handler { did_cycle: AtomicBool::new(false), }) } + + async fn reopen_hid(&self) -> anyhow::Result<()> { + let kb_new = open_with_retry("/dev/hidg0").await?; + let ms_new = open_with_retry("/dev/hidg1").await?; + *self.kb.lock().await = kb_new; + *self.ms.lock().await = ms_new; + Ok(()) + } } /*──────────────── gRPC service ─────────────*/ @@ -280,7 +288,13 @@ impl Relay for Handler { ) -> Result, Status> { info!("🔴 explicit ResetUsb() called"); match self.gadget.cycle() { - Ok(_) => Ok(Response::new(ResetUsbReply { ok: true })), + Ok(_) => { + if let Err(e) = self.reopen_hid().await { + error!("💥 reopen HID failed: {e:#}"); + return Err(Status::internal(e.to_string())); + } + Ok(Response::new(ResetUsbReply { ok: true })) + } Err(e) => { error!("💥 cycle failed: {e:#}"); Err(Status::internal(e.to_string()))