@@ -345,18 +345,28 @@ void MavsdkImpl::forward_message(mavlink_message_t& message, Connection* connect
345345 }
346346 }
347347 if (successful_emissions == 0 ) {
348- LogErr () << " Message forwarding failed" ;
348+ if (_system_debugging) {
349+ LogErr () << " Message forwarding failed" ;
350+ }
349351 }
350352 }
351353}
352354
353- void MavsdkImpl::receive_message (mavlink_message_t & message, Connection* connection)
355+ void MavsdkImpl::receive_message (
356+ MavlinkReceiver::ParseResult result, mavlink_message_t & message, Connection* connection)
354357{
355- {
356- std::lock_guard lock (_received_messages_mutex);
357- _received_messages.emplace (ReceivedMessage{std::move (message), connection});
358+ if (result == MavlinkReceiver::ParseResult::MessageParsed) {
359+ // Valid message: queue for full processing (which includes forwarding)
360+ {
361+ std::lock_guard lock (_received_messages_mutex);
362+ _received_messages.emplace (ReceivedMessage{std::move (message), connection});
363+ }
364+ _received_messages_cv.notify_one ();
365+
366+ } else if (result == MavlinkReceiver::ParseResult::BadCrc) {
367+ // Unknown message: forward only, don't process locally
368+ forward_message (message, connection);
358369 }
359- _received_messages_cv.notify_one ();
360370}
361371
362372void MavsdkImpl::receive_libmav_message (
@@ -802,9 +812,10 @@ std::pair<ConnectionResult, Mavsdk::ConnectionHandle>
802812MavsdkImpl::add_udp_connection (const CliArg::Udp& udp, ForwardingOption forwarding_option)
803813{
804814 auto new_conn = std::make_unique<UdpConnection>(
805- [this ](mavlink_message_t & message, Connection* connection) {
806- receive_message (message, connection);
807- },
815+ [this ](
816+ MavlinkReceiver::ParseResult result,
817+ mavlink_message_t & message,
818+ Connection* connection) { receive_message (result, message, connection); },
808819 [this ](const Mavsdk::MavlinkMessage& message, Connection* connection) {
809820 receive_libmav_message (message, connection);
810821 },
@@ -851,9 +862,10 @@ MavsdkImpl::add_tcp_connection(const CliArg::Tcp& tcp, ForwardingOption forwardi
851862{
852863 if (tcp.mode == CliArg::Tcp::Mode::Out) {
853864 auto new_conn = std::make_unique<TcpClientConnection>(
854- [this ](mavlink_message_t & message, Connection* connection) {
855- receive_message (message, connection);
856- },
865+ [this ](
866+ MavlinkReceiver::ParseResult result,
867+ mavlink_message_t & message,
868+ Connection* connection) { receive_message (result, message, connection); },
857869 [this ](const Mavsdk::MavlinkMessage& message, Connection* connection) {
858870 receive_libmav_message (message, connection);
859871 },
@@ -872,9 +884,10 @@ MavsdkImpl::add_tcp_connection(const CliArg::Tcp& tcp, ForwardingOption forwardi
872884 }
873885 } else {
874886 auto new_conn = std::make_unique<TcpServerConnection>(
875- [this ](mavlink_message_t & message, Connection* connection) {
876- receive_message (message, connection);
877- },
887+ [this ](
888+ MavlinkReceiver::ParseResult result,
889+ mavlink_message_t & message,
890+ Connection* connection) { receive_message (result, message, connection); },
878891 [this ](const Mavsdk::MavlinkMessage& message, Connection* connection) {
879892 receive_libmav_message (message, connection);
880893 },
@@ -901,9 +914,10 @@ std::pair<ConnectionResult, Mavsdk::ConnectionHandle> MavsdkImpl::add_serial_con
901914 ForwardingOption forwarding_option)
902915{
903916 auto new_conn = std::make_unique<SerialConnection>(
904- [this ](mavlink_message_t & message, Connection* connection) {
905- receive_message (message, connection);
906- },
917+ [this ](
918+ MavlinkReceiver::ParseResult result,
919+ mavlink_message_t & message,
920+ Connection* connection) { receive_message (result, message, connection); },
907921 [this ](const Mavsdk::MavlinkMessage& message, Connection* connection) {
908922 receive_libmav_message (message, connection);
909923 },
@@ -944,9 +958,10 @@ MavsdkImpl::add_raw_connection(ForwardingOption forwarding_option)
944958 }
945959
946960 auto new_conn = std::make_unique<RawConnection>(
947- [this ](mavlink_message_t & message, Connection* connection) {
948- receive_message (message, connection);
949- },
961+ [this ](
962+ MavlinkReceiver::ParseResult result,
963+ mavlink_message_t & message,
964+ Connection* connection) { receive_message (result, message, connection); },
950965 [this ](const Mavsdk::MavlinkMessage& message, Connection* connection) {
951966 receive_libmav_message (message, connection);
952967 },
0 commit comments