fix(sync): match uvc descriptors to gadget speed

This commit is contained in:
Brad Stein 2026-04-28 11:04:28 -03:00
parent 60a6cd1629
commit fb9c7b9813
2 changed files with 41 additions and 7 deletions

View File

@ -505,7 +505,19 @@ EOF
fi
popd >/dev/null
for s in fs hs ss; do
streaming_class_speeds=(fs)
control_class_speeds=(fs)
case "$MAX_SPEED" in
super-speed|super-speed-plus)
streaming_class_speeds+=(hs ss)
control_class_speeds+=(ss)
;;
high-speed)
streaming_class_speeds+=(hs)
;;
esac
for s in "${streaming_class_speeds[@]}"; do
mkdir -p "$F/streaming/class/$s"
pushd "$F/streaming/class/$s" >/dev/null
ln -s ../../header/h h
@ -514,11 +526,12 @@ EOF
# ── 4. VideoControl interface ─────────────────────────────────────
mkdir -p "$F/control/header/h"
# The kernel UVC gadget docs require direct symlinks at control/class/fs and
# control/class/ss. High-speed control descriptors are not exposed here.
# The kernel UVC gadget docs make the control-speed links optional; only
# advertise the descriptor sets that match the configured gadget speed.
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
for s in "${control_class_speeds[@]}"; do
ln -s header/h "class/$s" 2>/dev/null || true
done
popd >/dev/null
if [[ -n $UVC_DISABLE_IRQ ]]; then

View File

@ -43,8 +43,9 @@ fn core_script_skips_soft_connect_for_dwc2() {
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",
"ln -s header/h \"class/$s\"",
"control_class_speeds=(fs)",
"for s in \"${control_class_speeds[@]}\"; do",
] {
assert!(
CORE_SCRIPT.contains(expected),
@ -56,3 +57,23 @@ fn core_script_uses_kernel_doc_control_header_links() {
"lesavka-core should not build the UVC control class as nested directories"
);
}
#[test]
fn core_script_matches_uvc_descriptor_speeds_to_max_speed() {
for expected in [
"streaming_class_speeds=(fs)",
"control_class_speeds=(fs)",
"case \"$MAX_SPEED\" in",
"super-speed|super-speed-plus)",
"streaming_class_speeds+=(hs ss)",
"control_class_speeds+=(ss)",
"high-speed)",
"streaming_class_speeds+=(hs)",
"for s in \"${streaming_class_speeds[@]}\"; do",
] {
assert!(
CORE_SCRIPT.contains(expected),
"lesavka-core speed guard missing: {expected}"
);
}
}