From 60a6cd1629372d7db64f66d86fdb679675e5d39d Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 28 Apr 2026 05:23:27 -0300 Subject: [PATCH] fix(sync): build valid uvc control descriptors --- Cargo.lock | 6 +++--- client/Cargo.toml | 2 +- common/Cargo.toml | 2 +- scripts/daemon/lesavka-core.sh | 14 ++++++-------- server/Cargo.toml | 2 +- testing/tests/server_core_script_contract.rs | 18 ++++++++++++++++++ 6 files changed, 30 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ec9cf3c..e8cb121 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1642,7 +1642,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lesavka_client" -version = "0.14.40" +version = "0.14.41" dependencies = [ "anyhow", "async-stream", @@ -1676,7 +1676,7 @@ dependencies = [ [[package]] name = "lesavka_common" -version = "0.14.40" +version = "0.14.41" dependencies = [ "anyhow", "base64", @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "lesavka_server" -version = "0.14.40" +version = "0.14.41" dependencies = [ "anyhow", "base64", diff --git a/client/Cargo.toml b/client/Cargo.toml index c9bcd8c..8101de5 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -4,7 +4,7 @@ path = "src/main.rs" [package] name = "lesavka_client" -version = "0.14.40" +version = "0.14.41" edition = "2024" [dependencies] diff --git a/common/Cargo.toml b/common/Cargo.toml index dfa7c51..bc820e4 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lesavka_common" -version = "0.14.40" +version = "0.14.41" edition = "2024" build = "build.rs" diff --git a/scripts/daemon/lesavka-core.sh b/scripts/daemon/lesavka-core.sh index 8647278..386fb5d 100755 --- a/scripts/daemon/lesavka-core.sh +++ b/scripts/daemon/lesavka-core.sh @@ -514,14 +514,12 @@ EOF # ── 4. Video‑Control interface ───────────────────────────────────── mkdir -p "$F/control/header/h" - set +e - for s in fs hs ss; do - mkdir -p "$F/control/class/$s" 2>/dev/null || continue - pushd "$F/control/class/$s" >/dev/null - ln -s ../../header/h h 2>/dev/null || true - popd >/dev/null - done - set -e + # The kernel UVC gadget docs require direct symlinks at control/class/fs and + # control/class/ss. High-speed control descriptors are not exposed here. + pushd "$F/control" >/dev/null + ln -s header/h class/fs 2>/dev/null || true + ln -s header/h class/ss 2>/dev/null || true + popd >/dev/null if [[ -n $UVC_DISABLE_IRQ ]]; then echo 0 >"$F/control/enable_interrupt_ep" 2>/dev/null || true diff --git a/server/Cargo.toml b/server/Cargo.toml index 28b0735..c40975d 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -10,7 +10,7 @@ bench = false [package] name = "lesavka_server" -version = "0.14.40" +version = "0.14.41" edition = "2024" autobins = false diff --git a/testing/tests/server_core_script_contract.rs b/testing/tests/server_core_script_contract.rs index 2ba10c2..6e1de34 100644 --- a/testing/tests/server_core_script_contract.rs +++ b/testing/tests/server_core_script_contract.rs @@ -38,3 +38,21 @@ fn core_script_skips_soft_connect_for_dwc2() { ); } } + +#[test] +fn core_script_uses_kernel_doc_control_header_links() { + for expected in [ + "pushd \"$F/control\" >/dev/null", + "ln -s header/h class/fs", + "ln -s header/h class/ss", + ] { + assert!( + CORE_SCRIPT.contains(expected), + "lesavka-core control-header guard missing: {expected}" + ); + } + assert!( + !CORE_SCRIPT.contains("mkdir -p \"$F/control/class/$s\""), + "lesavka-core should not build the UVC control class as nested directories" + ); +}