From ab82e274fd6a6ed7b4ec82fc3ed49d40d37b5351 Mon Sep 17 00:00:00 2001
From: pv42 <pv42.97@gmail.com>
Date: Wed, 7 Aug 2024 23:57:47 +0200
Subject: [PATCH] feat: Add incompat flag field to MavHeader

---
 mavlink-core/src/connection/direct_serial.rs     | 1 +
 mavlink-core/src/connection/tcp.rs               | 1 +
 mavlink-core/src/connection/udp.rs               | 1 +
 mavlink-core/src/lib.rs                          | 5 ++++-
 mavlink/examples/embedded-async-read/src/main.rs | 1 +
 mavlink/examples/embedded/src/main.rs            | 1 +
 mavlink/tests/mav_frame_tests.rs                 | 1 +
 mavlink/tests/test_shared/mod.rs                 | 1 +
 8 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/mavlink-core/src/connection/direct_serial.rs b/mavlink-core/src/connection/direct_serial.rs
index a3a33a0..2e31bda 100644
--- a/mavlink-core/src/connection/direct_serial.rs
+++ b/mavlink-core/src/connection/direct_serial.rs
@@ -77,6 +77,7 @@ impl<M: Message> MavConnection<M> for SerialConnection {
         let mut sequence = self.sequence.lock().unwrap();
 
         let header = MavHeader {
+            incompat_flags: 0,
             sequence: *sequence,
             system_id: header.system_id,
             component_id: header.component_id,
diff --git a/mavlink-core/src/connection/tcp.rs b/mavlink-core/src/connection/tcp.rs
index 35b7f09..73d456a 100644
--- a/mavlink-core/src/connection/tcp.rs
+++ b/mavlink-core/src/connection/tcp.rs
@@ -95,6 +95,7 @@ impl<M: Message> MavConnection<M> for TcpConnection {
         let mut lock = self.writer.lock().unwrap();
 
         let header = MavHeader {
+            incompat_flags: 0,
             sequence: lock.sequence,
             system_id: header.system_id,
             component_id: header.component_id,
diff --git a/mavlink-core/src/connection/udp.rs b/mavlink-core/src/connection/udp.rs
index 3ec739d..91bbfae 100644
--- a/mavlink-core/src/connection/udp.rs
+++ b/mavlink-core/src/connection/udp.rs
@@ -134,6 +134,7 @@ impl<M: Message> MavConnection<M> for UdpConnection {
         let state = &mut *guard;
 
         let header = MavHeader {
+            incompat_flags: 0,
             sequence: state.sequence,
             system_id: header.system_id,
             component_id: header.component_id,
diff --git a/mavlink-core/src/lib.rs b/mavlink-core/src/lib.rs
index e6e7aec..fa6bea9 100644
--- a/mavlink-core/src/lib.rs
+++ b/mavlink-core/src/lib.rs
@@ -93,6 +93,7 @@ pub trait MessageData: Sized {
 #[derive(Debug, Copy, Clone, PartialEq, Eq)]
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 pub struct MavHeader {
+pub incompat_flags: u8,
     pub system_id: u8,
     pub component_id: u8,
     pub sequence: u8,
@@ -118,6 +119,7 @@ pub const MAV_STX_V2: u8 = 0xFD;
 impl Default for MavHeader {
     fn default() -> Self {
         Self {
+            incompat_flags: 0,
             system_id: 255,
             component_id: 0,
             sequence: 0,
@@ -211,6 +213,7 @@ impl<M: Message> MavFrame<M> {
         let system_id = buf.get_u8();
         let component_id = buf.get_u8();
         let header = MavHeader {
+            incompat_flags: 0,
             system_id,
             component_id,
             sequence,
@@ -639,7 +642,7 @@ impl MAVLinkV2MessageRaw {
         let header_buf = self.mut_header();
         header_buf.copy_from_slice(&[
             payload_length as u8,
-            0, //incompat_flags
+            header.incompat_flags,
             0, //compat_flags
             header.sequence,
             header.system_id,
diff --git a/mavlink/examples/embedded-async-read/src/main.rs b/mavlink/examples/embedded-async-read/src/main.rs
index 7f53335..6b4e5c1 100644
--- a/mavlink/examples/embedded-async-read/src/main.rs
+++ b/mavlink/examples/embedded-async-read/src/main.rs
@@ -39,6 +39,7 @@ async fn main(spawner: Spawner) {
 
     // Create our mavlink header and heartbeat message
     let header = mavlink::MavHeader {
+        incompat_flags: 0,
         system_id: 1,
         component_id: 1,
         sequence: 42,
diff --git a/mavlink/examples/embedded/src/main.rs b/mavlink/examples/embedded/src/main.rs
index 4a71ca8..21b7039 100644
--- a/mavlink/examples/embedded/src/main.rs
+++ b/mavlink/examples/embedded/src/main.rs
@@ -82,6 +82,7 @@ fn main() -> ! {
 
 fn mavlink_header() -> mavlink::MavHeader {
     mavlink::MavHeader {
+        incompat_flags: 0,
         system_id: 1,
         component_id: 1,
         sequence: 42,
diff --git a/mavlink/tests/mav_frame_tests.rs b/mavlink/tests/mav_frame_tests.rs
index 1c225ef..5472dbb 100644
--- a/mavlink/tests/mav_frame_tests.rs
+++ b/mavlink/tests/mav_frame_tests.rs
@@ -96,6 +96,7 @@ mod mav_frame_tests {
     fn new(msg: MavMessage) -> MavFrame<MavMessage> {
         MavFrame {
             header: MavHeader {
+                incompat_flags: 0,
                 system_id: 1,
                 component_id: 2,
                 sequence: 84,
diff --git a/mavlink/tests/test_shared/mod.rs b/mavlink/tests/test_shared/mod.rs
index 4cba469..332e9a1 100644
--- a/mavlink/tests/test_shared/mod.rs
+++ b/mavlink/tests/test_shared/mod.rs
@@ -1,6 +1,7 @@
 #![allow(unused)]
 
 pub const COMMON_MSG_HEADER: mavlink::MavHeader = mavlink::MavHeader {
+    incompat_flags: 0,
     sequence: 239,
     system_id: 1,
     component_id: 2,
-- 
GitLab