diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000000000000000000000000000000000..48706ce9f1752d16ad4942f7bbc7d1bf37d0fb61 --- /dev/null +++ b/.clang-format @@ -0,0 +1,13 @@ +{ + BasedOnStyle: Google, + AccessModifierOffset: -4, + AlignConsecutiveAssignments: true, + AllowShortIfStatementsOnASingleLine: false, + AllowShortLoopsOnASingleLine: false, + BreakBeforeBraces: Allman, + ColumnLimit: 160, + ConstructorInitializerAllOnOneLineOrOnePerLine: false, + IndentCaseLabels: true, + IndentWidth: 4, + KeepEmptyLinesAtTheStartOfBlocks: true, +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..c067a4b2f2fac4b04bab233e7cf05ed1e13d6fce --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "mavlink" + ] +} \ No newline at end of file diff --git a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp index b53795708eb59dd3d56ff5832bd90b9f35e8d174..fff1a46a1ae145a2d0fcfa8b299d350373a3827e 100644 --- a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp +++ b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp @@ -1,70 +1,78 @@ #include "outcomingmessagesviewermodule.h" -#include "ui_outcomingmessagesviewermodule.h" + +#include <QTableWidgetItem> #include "Core/modulemessagesbroker.h" #include "Modules/skywardhubstrings.h" -#include <QTableWidgetItem> +#include "ui_outcomingmessagesviewermodule.h" -OutcomingMessagesViewerModule::OutcomingMessagesViewerModule(QWidget* parent) : DefaultModule(parent), ui(new Ui::OutcomingMessagesViewerModule) { +OutcomingMessagesViewerModule::OutcomingMessagesViewerModule(QWidget* parent) : DefaultModule(parent), ui(new Ui::OutcomingMessagesViewerModule) +{ ui->setupUi(this); defaultContextMenuSetup(); - getCore()->getModuleMessagesBroker()->subscribe({SkywardHubStrings::logCommandsTopic}, this, [this](const ModuleMessage & msg) { - addMsgSent(msg); - }); + getCore()->getModuleMessagesBroker()->subscribe({SkywardHubStrings::logCommandsTopic}, this, [this](const ModuleMessage& msg) { addMsgSent(msg); }); - getCore()->getModuleMessagesBroker()->subscribe(ackTopic, this, [this](const ModuleMessage & msg) { - handleAck(msg); - }); + getCore()->getModuleMessagesBroker()->subscribe(SkywardHubStrings::mavlink_received_msg_ACK_topic, this, + [this](const ModuleMessage& msg) { handleAck(msg); }); + getCore()->getModuleMessagesBroker()->subscribe(SkywardHubStrings::mavlink_received_msg_NACK_topic, this, + [this](const ModuleMessage& msg) { handleNack(msg); }); } -OutcomingMessagesViewerModule::~OutcomingMessagesViewerModule() { - delete ui; -} +OutcomingMessagesViewerModule::~OutcomingMessagesViewerModule() { delete ui; } -QWidget* OutcomingMessagesViewerModule::toWidget() { - return this; -} +QWidget* OutcomingMessagesViewerModule::toWidget() { return this; } -XmlObject OutcomingMessagesViewerModule::toXmlObject() { - return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER)); -} +XmlObject OutcomingMessagesViewerModule::toXmlObject() { return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER)); } -void OutcomingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject) { - Q_UNUSED(xmlObject); -} +void OutcomingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject) { Q_UNUSED(xmlObject); } -void OutcomingMessagesViewerModule::addMsgSent(const ModuleMessage& msg) { - int row = updateVerticalHeaders(msg); +void OutcomingMessagesViewerModule::addMsgSent(const ModuleMessage& msg) +{ + int row = updateVerticalHeaders(msg); int column = 0; - QString msgName = computeMsgName(msg); + QString msgName = computeMsgName(msg); QTableWidgetItem* newItem = new QTableWidgetItem(msgName); - newItem->setBackground(QBrush(QColor(255, 153, 51))); + newItem->setBackground(QBrush(QColor(80, 80, 80))); newItem->setForeground(QBrush(QColor(0, 0, 0))); ui->tableWidget->setItem(row, column, newItem); registerMessage(newItem, msg); } -QString OutcomingMessagesViewerModule::computeMsgName(const ModuleMessage& msg) { - return msg.getField("name").getString(); +QString OutcomingMessagesViewerModule::computeMsgName(const ModuleMessage& msg) { return msg.getField("name").getString(); } + +void OutcomingMessagesViewerModule::handleAck(const ModuleMessage& ack) +{ + for (int i = 0; i < messages.count(); i++) + { + ModuleMessage msg = messages[i].getMsg(); + + // Color the message the ack is for by checking the message is and + // sequence number + if (msg.getField("message_id") == ack.getField("recv_msgid")) + if (msg.getField("sequence_number") == ack.getField("seq_ack")) + messages[i].getItem()->setBackground(QBrush(QColor(0, 255, 0))); + } } -void OutcomingMessagesViewerModule::handleAck(const ModuleMessage& ack) { - for(int i = 0; i < messages.count(); i++) { +void OutcomingMessagesViewerModule::handleNack(const ModuleMessage& nack) +{ + for (int i = 0; i < messages.count(); i++) + { ModuleMessage msg = messages[i].getMsg(); - // If the two messages have the same ack and sequence number - if(msg.getField("message_id") == ack.getField("recv_msgid")) { - if(msg.getField("sequence_number") == ack.getField("seq_ack")) { - messages[i].getItem()->setBackground(QBrush(QColor(0, 255, 255))); - } - } + // Color the message the nack is for by checking the message is and + // sequence number + if (msg.getField("message_id") == nack.getField("recv_msgid")) + if (msg.getField("sequence_number") == nack.getField("seq_ack")) + messages[i].getItem()->setBackground(QBrush(QColor(255, 0, 0))); } } -int OutcomingMessagesViewerModule::updateVerticalHeaders(const ModuleMessage& msg) { - int row = 0; // Insert on top +int OutcomingMessagesViewerModule::updateVerticalHeaders(const ModuleMessage& msg) +{ + int row = 0; // Insert on top QTime time(0, 0, 0, 0); time = time.addMSecs(msg.getField("timestamp").getInteger(0)); @@ -74,41 +82,35 @@ int OutcomingMessagesViewerModule::updateVerticalHeaders(const ModuleMessage& ms ui->tableWidget->setVerticalHeaderItem(row, header); int rowCount = ui->tableWidget->rowCount(); - if( rowCount > maxSize && rowCount > 0) { + if (rowCount > maxSize && rowCount > 0) + { ui->tableWidget->removeRow(rowCount - 1); } return row; } -void OutcomingMessagesViewerModule::registerMessage(QTableWidgetItem* item, const ModuleMessage& msg) { +void OutcomingMessagesViewerModule::registerMessage(QTableWidgetItem* item, const ModuleMessage& msg) +{ messages.prepend(MessageLog(item, msg)); - if(messages.count() > maxSize) { + if (messages.count() > maxSize) + { messages.removeLast(); } } - - // ____________________ MESSAGE LOG CLASS _______________________________ -MessageLog::MessageLog(QTableWidgetItem* item, const ModuleMessage& msg) { +MessageLog::MessageLog(QTableWidgetItem* item, const ModuleMessage& msg) +{ setItem(item); setMsg(msg); } -QTableWidgetItem* MessageLog::getItem() const { - return item; -} +QTableWidgetItem* MessageLog::getItem() const { return item; } -void MessageLog::setItem(QTableWidgetItem* value) { - item = value; -} +void MessageLog::setItem(QTableWidgetItem* value) { item = value; } -ModuleMessage MessageLog::getMsg() const { - return msg; -} +ModuleMessage MessageLog::getMsg() const { return msg; } -void MessageLog::setMsg(const ModuleMessage& value) { - msg = value; -} +void MessageLog::setMsg(const ModuleMessage& value) { msg = value; } diff --git a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h index 92966fa2c740e659a603188a01a0d3253228c4a3..c74768ad389b15f945e7f20aeaaa3fcbade1f0bc 100644 --- a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h +++ b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h @@ -2,15 +2,17 @@ #define OUTCOMINGMESSAGESVIEWERMODULE_H #include <QWidget> -#include "Core/module.h" + #include "Core/Message/modulemessage.h" +#include "Core/module.h" #include "Modules/DefaultModule/defaultmodule.h" class QTableWidgetItem; -class MessageLog { +class MessageLog +{ - public: +public: explicit MessageLog(QTableWidgetItem* item, const ModuleMessage& msg); QTableWidgetItem* getItem() const; @@ -19,20 +21,21 @@ class MessageLog { ModuleMessage getMsg() const; void setMsg(const ModuleMessage& value); - private: +private: QTableWidgetItem* item = nullptr; ModuleMessage msg; }; - -namespace Ui { +namespace Ui +{ class OutcomingMessagesViewerModule; } -class OutcomingMessagesViewerModule : public DefaultModule { +class OutcomingMessagesViewerModule : public DefaultModule +{ Q_OBJECT - public: +public: explicit OutcomingMessagesViewerModule(QWidget* parent = nullptr); ~OutcomingMessagesViewerModule(); @@ -43,17 +46,17 @@ class OutcomingMessagesViewerModule : public DefaultModule { void addMsgSent(const ModuleMessage& msg); void handleAck(const ModuleMessage& ack); + void handleNack(const ModuleMessage& nack); - protected: +protected: int updateVerticalHeaders(const ModuleMessage& msg); void registerMessage(QTableWidgetItem* item, const ModuleMessage& msg); QString computeMsgName(const ModuleMessage& msg); - private: +private: Ui::OutcomingMessagesViewerModule* ui; QList<MessageLog> messages; - QString ackTopic = SkywardHubStrings::mavlink_received_msg_ACK_topic; int maxSize = 10; }; -#endif // OUTCOMINGMESSAGESVIEWERMODULE_H +#endif // OUTCOMINGMESSAGESVIEWERMODULE_H diff --git a/Modules/skywardhubstrings.cpp b/Modules/skywardhubstrings.cpp deleted file mode 100644 index 046d45c47046074c1340b93209ebf1599a7a1543..0000000000000000000000000000000000000000 --- a/Modules/skywardhubstrings.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "skywardhubstrings.h" - - - -const QString SkywardHubStrings::defaultConfigurationFolder = "SkywardHubConfig"; -const QString SkywardHubStrings::defaultSettingsFilePath = defaultConfigurationFolder + "/" + "settings.xml"; -const QString SkywardHubStrings::defaultPrefabsFolderName = "Prefabs"; -const QString SkywardHubStrings::defaultLogsFolder = defaultConfigurationFolder + "/" + "Logs"; -const QString SkywardHubStrings::defaultStreamFile = defaultConfigurationFolder + "/" + "StreamFile.txt"; -const QString SkywardHubStrings::defaultPrefabsFolder = defaultConfigurationFolder + "/" + defaultPrefabsFolderName + "/"; -const QString SkywardHubStrings::defaultConfigurationFileName = "default.xml"; -const QString SkywardHubStrings::defaultConfigurationIconPath = defaultConfigurationFolder + "/" + "defaultConfigIcon.svg"; - - -// Xml Tags Name -const QString SkywardHubStrings::skywardHubInitFileTag = "LoadOnLaunch"; -const QString SkywardHubStrings::settingsObjectName = "Settings"; -const QString SkywardHubStrings::configurationNameAttribute = "name"; -const QString SkywardHubStrings::configurationNameValue = "Configuration"; -const QString SkywardHubStrings::configurationIconPathAttribute = "ConfigurationIcon"; -const QString SkywardHubStrings::configurationDescriptionAttribute = "Description"; - -// Output Messages -const QString SkywardHubStrings::settingsSavedCorrectlyMsg = "Settings saved"; -const QString SkywardHubStrings::serialPortClosedErrorMsg = "Mavlink >> Error, Serial port closed, impossible to write msg"; -const QString SkywardHubStrings::imageViewerInfo = "Dobule click on a label to open the settings panel"; - - -// Topics -const QString SkywardHubStrings::commandsTopic = "TelemetryCommand"; -const QString SkywardHubStrings::treeViewerReceivingBaseTopic = "TreeViewer"; - -const QString SkywardHubStrings::logCommandsTopic = "LogCommands"; -const QString SkywardHubStrings::raw_event_id = "event_id"; -const QString SkywardHubStrings::raw_event_topic_id = "topic_id"; -const QString SkywardHubStrings::mavlink_orientation_tc_yaw_name = "yaw"; -const QString SkywardHubStrings::mavlink_orientation_tc_pitch_name = "pitch"; -const QString SkywardHubStrings::mavlink_orientation_tc_roll_name = "roll"; -const QString SkywardHubStrings::mavlink_quality_link_topic = "MavlinkLinkQuality"; -const QString SkywardHubStrings::mavlink_received_msg_topic = "Mav"; -const QString SkywardHubStrings::mavlink_initial_coordinates_tc_latitude_name = "latitude"; -const QString SkywardHubStrings::mavlink_initial_coordinates_tc_longitude_name = "longitude"; - -const QString SkywardHubStrings::mavlink_received_msg_ACK_topic = mavlink_received_msg_topic + "/ACK_TM"; - - -SkywardHubStrings::SkywardHubStrings() { - -} diff --git a/Modules/skywardhubstrings.h b/Modules/skywardhubstrings.h index 645af418da016b396577deefee2710256357b94c..d4270ebe3cfa52e1ede46f49daccdebe0592e309 100644 --- a/Modules/skywardhubstrings.h +++ b/Modules/skywardhubstrings.h @@ -3,56 +3,49 @@ #include <QString> -class SkywardHubStrings { - public: - SkywardHubStrings(); - - static const QString defaultConfigurationFolder; - static const QString defaultSettingsFilePath; - static const QString defaultPrefabsFolderName; - static const QString defaultPrefabsFolder; - static const QString defaultConfigurationFileName; - static const QString defaultConfigurationIconPath; - static const QString defaultLogsFolder; - static const QString defaultStreamFile; - - // Xml Tags Name - static const QString settingsObjectName; - static const QString skywardHubInitFileTag; - static const QString configurationNameAttribute; - static const QString configurationIconPathAttribute; - static const QString configurationDescriptionAttribute; - static const QString configurationNameValue; - - - // Output Messages & UI text - static const QString settingsSavedCorrectlyMsg; - static const QString serialPortClosedErrorMsg; - static const QString imageViewerInfo; - - - // Topics - static const QString commandsTopic; - static const QString sentCommandsTopic; - static const QString treeViewerReceivingBaseTopic; - - static const QString logCommandsTopic; - static const QString raw_event_id; - static const QString raw_event_topic_id; - static const QString mavlink_orientation_tc_yaw_name; - static const QString mavlink_orientation_tc_pitch_name; - static const QString mavlink_orientation_tc_roll_name; - static const QString mavlink_initial_coordinates_tc_latitude_name; - static const QString mavlink_initial_coordinates_tc_longitude_name; - - static const QString msgIdField; - static const QString msgSequenceNumberField; - - static const QString mavlink_quality_link_topic; - static const QString mavlink_received_msg_topic; - static const QString mavlink_received_msg_ACK_topic; -}; - - - -#endif // SKYWARDHUBSTRINGS_H +namespace SkywardHubStrings +{ + +static const QString defaultConfigurationFolder = "SkywardHubConfig"; +static const QString defaultSettingsFilePath = defaultConfigurationFolder + "/" + "settings.xml"; +static const QString defaultPrefabsFolderName = "Prefabs"; +static const QString defaultLogsFolder = defaultConfigurationFolder + "/" + "Logs"; +static const QString defaultStreamFile = defaultConfigurationFolder + "/" + "StreamFile.txt"; +static const QString defaultPrefabsFolder = defaultConfigurationFolder + "/" + defaultPrefabsFolderName + "/"; +static const QString defaultConfigurationFileName = "default.xml"; +static const QString defaultConfigurationIconPath = defaultConfigurationFolder + "/" + "defaultConfigIcon.svg"; + +// Xml Tags Name +static const QString skywardHubInitFileTag = "LoadOnLaunch"; +static const QString settingsObjectName = "Settings"; +static const QString configurationNameAttribute = "name"; +static const QString configurationNameValue = "Configuration"; +static const QString configurationIconPathAttribute = "ConfigurationIcon"; +static const QString configurationDescriptionAttribute = "Description"; + +// Output Messages +static const QString settingsSavedCorrectlyMsg = "Settings saved"; +static const QString serialPortClosedErrorMsg = "Mavlink >> Error, Serial port closed, impossible to write msg"; +static const QString imageViewerInfo = "Double click on a label to open the settings panel"; + +// Topics +static const QString commandsTopic = "TelemetryCommand"; +static const QString treeViewerReceivingBaseTopic = "TreeViewer"; + +static const QString logCommandsTopic = "LogCommands"; +static const QString raw_event_id = "event_id"; +static const QString raw_event_topic_id = "topic_id"; +static const QString mavlink_orientation_tc_yaw_name = "yaw"; +static const QString mavlink_orientation_tc_pitch_name = "pitch"; +static const QString mavlink_orientation_tc_roll_name = "roll"; +static const QString mavlink_quality_link_topic = "MavlinkLinkQuality"; +static const QString mavlink_received_msg_topic = "Mav"; +static const QString mavlink_initial_coordinates_tc_latitude_name = "latitude"; +static const QString mavlink_initial_coordinates_tc_longitude_name = "longitude"; + +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"; + +}; // namespace SkywardHubStrings + +#endif // SKYWARDHUBSTRINGS_H diff --git a/SkywardHub.pro b/SkywardHub.pro index 5da85fcea1fbc739d3a33d161dddc4de5b4c617d..b29d5c9e2f6a5ff944084187f362f4827f9afe14 100644 --- a/SkywardHub.pro +++ b/SkywardHub.pro @@ -59,7 +59,6 @@ SOURCES += \ Modules/ValuesConverterViewer/valuesviewerconfigpanel.cpp \ Modules/moduleinfo.cpp \ Modules/moduleslist.cpp \ - Modules/skywardhubstrings.cpp \ main.cpp HEADERS += \