From 851a965a962bb7a1d393331ed5170e46ff083165 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niccol=C3=B2=20Betto?= <niccolo.betto@skywarder.eu>
Date: Wed, 31 Jul 2024 20:58:50 +0200
Subject: [PATCH] [Mavlink] Handle WACK messages

OutgoingMessagessViewer now paints messages that received a WACK reply as white.
---
 .../OutgoingMessagesViewerModule.cpp          | 24 +++++++++++++++++--
 .../OutgoingMessagesViewerModule.h            |  1 +
 src/shared/Modules/SkywardHubStrings.h        |  2 ++
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
index 28a67fd8..7be4f30f 100644
--- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
+++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
@@ -46,6 +46,11 @@ OutgoingMessagesViewerModule::OutgoingMessagesViewerModule()
         this,
         [this](const Message& message, const Filter& filter)
         { handleNack(message); });
+    MessageBroker::getInstance().subscribe(
+        Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic),
+        this,
+        [this](const Message& message, const Filter& filter)
+        { handleWack(message); });
 }
 
 OutgoingMessagesViewerModule::~OutgoingMessagesViewerModule() { delete ui; }
@@ -74,7 +79,7 @@ void OutgoingMessagesViewerModule::handleAck(const Message& ack)
     {
         Message msg = messages[i].getMsg();
 
-        // Color the message the ack is for by checking the message is and
+        // Color the message the ack is for by checking the message id and
         // sequence number
         if (msg.getField("message_id") == ack.getField("recv_msgid"))
             if (msg.getField("sequence_number") == ack.getField("seq_ack"))
@@ -88,7 +93,7 @@ void OutgoingMessagesViewerModule::handleNack(const Message& nack)
     {
         Message msg = messages[i].getMsg();
 
-        // Color the message the nack is for by checking the message is and
+        // Color the message the nack is for by checking the message id and
         // sequence number
         if (msg.getField("message_id") == nack.getField("recv_msgid"))
             if (msg.getField("sequence_number") == nack.getField("seq_ack"))
@@ -96,6 +101,21 @@ void OutgoingMessagesViewerModule::handleNack(const Message& nack)
     }
 }
 
+void OutgoingMessagesViewerModule::handleWack(const Message& wack)
+{
+    for (int i = 0; i < messages.count(); i++)
+    {
+        Message msg = messages[i].getMsg();
+
+        // Color the message the wack is for by checking the message id and
+        // sequence number
+        if (msg.getField("message_id") == wack.getField("recv_msgid"))
+            if (msg.getField("sequence_number") == wack.getField("seq_ack"))
+                messages[i].getItem()->setBackground(
+                    QBrush(QColor(255, 255, 255)));
+    }
+}
+
 int OutgoingMessagesViewerModule::updateVerticalHeaders(const Message& msg)
 {
     int row = 0;  // Insert on top
diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h
index c5159212..4fccc266 100644
--- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h
+++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h
@@ -58,6 +58,7 @@ public:
     void addMsgSent(const Message& msg);
     void handleAck(const Message& ack);
     void handleNack(const Message& nack);
+    void handleWack(const Message& wack);
 
 protected:
     int updateVerticalHeaders(const Message& msg);
diff --git a/src/shared/Modules/SkywardHubStrings.h b/src/shared/Modules/SkywardHubStrings.h
index 3fe3e14c..1742e907 100644
--- a/src/shared/Modules/SkywardHubStrings.h
+++ b/src/shared/Modules/SkywardHubStrings.h
@@ -74,6 +74,8 @@ static const QString mavlink_received_msg_ACK_topic =
     mavlink_received_msg_topic + "/ACK_TM";
 static const QString mavlink_received_msg_NACK_topic =
     mavlink_received_msg_topic + "/NACK_TM";
+static const QString mavlink_received_msg_WACK_topic =
+    mavlink_received_msg_topic + "/WACK_TM";
 
 static const QString mavlink_system_id_name    = "system_id";
 static const QString mavlink_component_id_name = "component_id";
-- 
GitLab