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(); + } } } }