From 1b9a0f7ee225b14ac3bd5a3a09f4da6fb9ae7a40 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Wed, 7 Jan 2026 02:56:27 -0300 Subject: [PATCH] uvc: send SET_CUR response after data --- server/src/bin/lesavka-uvc.rs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/server/src/bin/lesavka-uvc.rs b/server/src/bin/lesavka-uvc.rs index f7562f4..e53e863 100644 --- a/server/src/bin/lesavka-uvc.rs +++ b/server/src/bin/lesavka-uvc.rs @@ -215,7 +215,15 @@ fn main() -> Result<()> { data.length ); } - handle_data(&mut state, &mut pending, interfaces, data, debug); + handle_data( + fd, + uvc_send_response, + &mut state, + &mut pending, + interfaces, + data, + debug, + ); } _ => { if debug { @@ -370,18 +378,15 @@ fn handle_setup( } let interface = map_interface(interface_raw, selector, interfaces, debug); - if !is_in && req.b_request == UVC_SET_CUR { - if interface != interfaces.streaming { - let _ = send_stall(fd, uvc_send_response); - return; - } - *pending = Some(PendingRequest { interface, selector }); - let len = req.w_length as usize; - let payload = vec![0u8; len.min(UVC_DATA_SIZE)]; - let _ = send_response(fd, uvc_send_response, &payload); - if debug { - eprintln!( - "[lesavka-uvc] SET_CUR queued len={} iface={} sel={}", + if !is_in && req.b_request == UVC_SET_CUR { + if interface != interfaces.streaming { + let _ = send_stall(fd, uvc_send_response); + return; + } + *pending = Some(PendingRequest { interface, selector }); + if debug { + eprintln!( + "[lesavka-uvc] SET_CUR queued len={} iface={} sel={}", req.w_length, interface, selector ); } @@ -452,6 +457,8 @@ fn maybe_update_ctrl_len(state: &mut UvcState, w_length: u16, debug: bool) { } fn handle_data( + fd: i32, + uvc_send_response: libc::c_ulong, state: &mut UvcState, pending: &mut Option, interfaces: UvcInterfaces, @@ -507,6 +514,7 @@ fn handle_data( ); } } + let _ = send_response(fd, uvc_send_response, &[]); } }