#ifndef MAVLINKINSPECTOR_H #define MAVLINKINSPECTOR_H #define MAVLINK_USE_MESSAGE_INFO #include #include #include "QDateTime" #include "QWidget" #include "mavlink.h" #include "mavlink_get_info.h" #include "Scope.h" #ifdef QtMavlinkInspector #include namespace Ui { class MAVLinkInspector; } class MAVLINKINSPECTORSHARED_EXPORT QTreeWidgetItem; class MAVLINKINSPECTORSHARED_EXPORT UASInterface; class MAVLINKINSPECTORSHARED_EXPORT MAVLinkInspector : public QWidget{ #else namespace Ui { class MAVLinkInspector; } class QTreeWidgetItem; class UASInterface; class MAVLinkInspector : public QWidget { #endif Q_OBJECT public: explicit MAVLinkInspector(const QString& title, QAction* action, QWidget *parent = nullptr); ~MAVLinkInspector(); public slots: void receiveMessage(mavlink_message_t message); /** @brief Clear all messages */ void clearView(); /** @brief Update view */ void refreshView(); /** @brief Add component to the list */ void addComponent(int uas, int component, const QString& name); /** @Brief Select a system through the drop down menu */ void selectDropDownMenuSystem(int dropdownid); /** @Brief Select a component through the drop down menu */ void selectDropDownMenuComponent(int dropdownid); protected: //MAVLinkProtocol *_protocol; ///< MAVLink instance int selectedSystemID; ///< Currently selected system int selectedComponentID; ///< Currently selected component QMap systems; ///< Already observed systems QMap components; ///< Already observed components QMap onboardMessageInterval; ///< Stores the onboard selected data rate QTimer updateTimer; ///< Only update at 1 Hz to not overload the GUI QMap uasTreeWidgetItems; ///< Tree of available uas with their widget QMap* > uasMsgTreeItems; ///< Stores the widget of the received message for each UAS QMap uasMessageStorage; ///< Stores the messages for every UAS QMap* > uasMessageHz; ///< Stores the frequency of each message of each UAS QMap* > uasMessageCount; ///< Stores the message count of each message of each UAS QMap* > uasLastMessageUpdate; ///< Stores the time of the last message for each message of each UAS /* @brief Update one message field */ void updateField(mavlink_message_t* msg, const mavlink_message_info_t* msgInfo, int fieldid, QTreeWidgetItem* item); /** @brief Rebuild the list of components */ void rebuildComponentList(); /* @brief Create a new tree for a new UAS */ void addUAStoTree(int sysId); static const unsigned int updateInterval; ///< The update interval of the refresh function static const float updateHzLowpass; ///< The low-pass filter value for the frequency of each message private slots: void ScopeClose(void); void ScopeClearall(void); void _vehicleAdded(quint32 id); void on_pushButton_system_clicked(); void on_treeWidget_itemClicked(QTreeWidgetItem *item, int column); void on_treeWidget_itemChanged(QTreeWidgetItem *item, int column); void updateParentItem(QTreeWidgetItem *item); private: Ui::MAVLinkInspector *ui; Scope *scope = nullptr; }; #endif // QGCMAVLINKINSPECTOR_H