diff --git a/scripts/udp_gs_tester.py b/scripts/udp_gs_tester.py index f7b069d792e1ac33b41893f4b93f60d46b935085..68c9afe0b1734ba2d13559e954523d270d8117f5 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 37206b8a88c3e404757fa7416998ae0a19c25bde..ef6b251167cd0d6bf6b4db4aa41a495309193404 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 2dc7c52a7f8d3289b92149b81a45984b0ebea139..0c5b4b286932385db441e9e8c6301c8e80b5e622 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 8438fd312669b757f46a591b1d11fada3a71561d..3cf583097ce6b68b9f8c330b0bcdcc5e87a87b75 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 1e8648bc5b3096c44739cedc2ca03caddff9e32f..37daea184d8ac5a115df1962a0184fc27276f967 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 8a43f0e7634645db2a7e1e6db252634f0db731b6..4c8ff5b1348a80ef4d853dd8e4ae8f3449a92c32 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