From 8a7fc296a698dc964703bc882fbb49b557111e10 Mon Sep 17 00:00:00 2001 From: Davide Mor <davide.mor@skywarder.eu> Date: Sun, 17 Sep 2023 07:18:31 +0000 Subject: [PATCH] [mavlink] Updated mavlink module with minor improvements --- scripts/udp_gs_tester.py | 2 +- .../FilterSelector/FilterSelector.cpp | 4 ++++ .../Modules/Mavlink/BaseMavlinkModule.cpp | 20 +++++++++++++++---- .../Modules/Mavlink/BaseMavlinkModule.h | 2 ++ src/shared/Modules/Mavlink/MavlinkCodec.cpp | 6 ++++++ src/shared/Modules/SkywardHubStrings.h | 3 +++ 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/scripts/udp_gs_tester.py b/scripts/udp_gs_tester.py index f7b069d7..68c9afe0 100755 --- a/scripts/udp_gs_tester.py +++ b/scripts/udp_gs_tester.py @@ -128,7 +128,7 @@ def send_loop(sock, mavlink, acks): def main(): acks = [] - mavlink = MAVLink(None) + mavlink = MAVLink(None, srcSystem=1, srcComponent=0) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(("", RECV_PORT)) diff --git a/src/shared/Components/FilterSelector/FilterSelector.cpp b/src/shared/Components/FilterSelector/FilterSelector.cpp index 37206b8a..ef6b2511 100644 --- a/src/shared/Components/FilterSelector/FilterSelector.cpp +++ b/src/shared/Components/FilterSelector/FilterSelector.cpp @@ -19,6 +19,7 @@ #include "FilterSelector.h" #include <Modules/Mavlink/MavlinkVersionHeader.h> +#include <Modules/SkywardHubStrings.h> #include <QLabel> #include <QPushButton> @@ -116,6 +117,9 @@ void FilterSelector::parseMessagesList() for (unsigned int ii = 0; ii < messagesList[i].num_fields; ii++) fields.append(messagesList[i].fields[ii].name); + fields.append(SkywardHubStrings::mavlink_component_id_name); + fields.append(SkywardHubStrings::mavlink_system_id_name); + messages[QString("Mav/") + messagesList[i].name] = fields; } } diff --git a/src/shared/Modules/Mavlink/BaseMavlinkModule.cpp b/src/shared/Modules/Mavlink/BaseMavlinkModule.cpp index 2dc7c52a..0c5b4b28 100644 --- a/src/shared/Modules/Mavlink/BaseMavlinkModule.cpp +++ b/src/shared/Modules/Mavlink/BaseMavlinkModule.cpp @@ -20,6 +20,8 @@ #include <Modules/SkywardHubStrings.h> +int BaseMavlinkModule::ACTIVE_MAVLINK_MODULES = 0; + BaseMavlinkModule::BaseMavlinkModule(MavlinkPort *port, QWidget *parent) : DefaultModule(parent), port(port), mavlinkCodec(port, this) { @@ -90,6 +92,9 @@ void BaseMavlinkModule::onStartClicked() { if (open()) { + // Keep track of all active and listening mavlink modules + ACTIVE_MAVLINK_MODULES++; + disableControls(); linkQualityTimer.start(linkQualityPeriod); @@ -111,6 +116,9 @@ void BaseMavlinkModule::onStopClicked() stop(); port->close(); enableControls(); + + // Keep track of all active and listening mavlink modules + ACTIVE_MAVLINK_MODULES--; } void BaseMavlinkModule::onCommandReceived(const Message &msg) @@ -127,9 +135,15 @@ void BaseMavlinkModule::onCommandReceived(const Message &msg) return; } - if (!port->isOpen()) + // If we are not active, don't process this message + if (!startToggleButton->state()) { - error(tr("Mavlink"), tr("Cannot send message: port is closed.")); + // Only show this error if there are no other active modules + if (ACTIVE_MAVLINK_MODULES == 0) + { + error(tr("Mavlink"), tr("Cannot send message: port is closed.")); + } + return; } @@ -168,14 +182,12 @@ void BaseMavlinkModule::onOpenLogFolderClick() void BaseMavlinkModule::enableControls() { - sysIdComboBox->setEnabled(true); logCheckBox->setEnabled(true); childEnableControls(); } void BaseMavlinkModule::disableControls() { - sysIdComboBox->setEnabled(false); logCheckBox->setEnabled(false); childDisableControls(); } diff --git a/src/shared/Modules/Mavlink/BaseMavlinkModule.h b/src/shared/Modules/Mavlink/BaseMavlinkModule.h index 8438fd31..3cf58309 100644 --- a/src/shared/Modules/Mavlink/BaseMavlinkModule.h +++ b/src/shared/Modules/Mavlink/BaseMavlinkModule.h @@ -87,4 +87,6 @@ private: QTimer linkQualityTimer; const int linkQualityPeriod = 2000; // [ms] int msgArrived = 0; + + static int ACTIVE_MAVLINK_MODULES; }; \ No newline at end of file diff --git a/src/shared/Modules/Mavlink/MavlinkCodec.cpp b/src/shared/Modules/Mavlink/MavlinkCodec.cpp index 1e8648bc..37daea18 100644 --- a/src/shared/Modules/Mavlink/MavlinkCodec.cpp +++ b/src/shared/Modules/Mavlink/MavlinkCodec.cpp @@ -132,6 +132,12 @@ Message MavlinkCodec::decodeMessage(const mavlink_message_t& msg) for (unsigned i = 0; i < info.num_fields; i++) fields[QString(info.fields[i].name)] = decodeField(msg, info.fields[i]); + // Also embed system/component informations + fields[SkywardHubStrings::mavlink_system_id_name] = + Field(static_cast<uint64_t>(msg.sysid)); + fields[SkywardHubStrings::mavlink_component_id_name] = + Field(static_cast<uint64_t>(msg.compid)); + Message output; output.setTopic( Topic(SkywardHubStrings::mavlink_received_msg_topic + "/" + info.name)); diff --git a/src/shared/Modules/SkywardHubStrings.h b/src/shared/Modules/SkywardHubStrings.h index 8a43f0e7..4c8ff5b1 100644 --- a/src/shared/Modules/SkywardHubStrings.h +++ b/src/shared/Modules/SkywardHubStrings.h @@ -76,4 +76,7 @@ static const QString mavlink_received_msg_ACK_topic = static const QString mavlink_received_msg_NACK_topic = mavlink_received_msg_topic + "/NACK_TM"; +static const QString mavlink_system_id_name = "system_id"; +static const QString mavlink_component_id_name = "component_id"; + }; // namespace SkywardHubStrings -- GitLab