From b547dda8e70563d2a4592f1caffb224c139897b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Ant=C3=B4nio=20Cardoso?= Date: Mon, 11 Mar 2024 19:26:38 -0300 Subject: [PATCH] grc: mavlink: Fix mavlink camera compoenent never answering QGC The problem is that the added delay was causing the subscription to be always late. --- src/mavlink/mavlink_camera.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/mavlink/mavlink_camera.rs b/src/mavlink/mavlink_camera.rs index d3b58162..a4eacdb5 100644 --- a/src/mavlink/mavlink_camera.rs +++ b/src/mavlink/mavlink_camera.rs @@ -173,12 +173,18 @@ impl MavlinkCameraInner { use crate::mavlink::mavlink_camera::Message::Received; loop { - tokio::time::sleep(tokio::time::Duration::from_millis(100)).await; + match receiver.recv().await { + Ok(Received((header, message))) => { + trace!("Message received: {header:?}, {message:?}"); - if let Ok(Received((header, message))) = receiver.recv().await { - trace!("Message received: {header:?}, {message:?}"); + Self::handle_message(camera.clone(), sender.clone(), header, message).await; + } + Ok(Message::ToBeSent(_)) => (), + Err(error) => { + error!("Failed receiving from broadcast channel: {error:#?}. Resubscribing to the channel..."); - Self::handle_message(camera.clone(), sender.clone(), header, message).await; + receiver = receiver.resubscribe(); + } } } }