From 70b92823146a2d0b89dd0f8ffcf33db63b415412 Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Thu, 7 Nov 2019 15:20:20 -0500 Subject: [PATCH] Filter mavlink messages by component ID --- src/AnalyzeView/MAVLinkInspectorController.cc | 20 ++++++-- src/AnalyzeView/MAVLinkInspectorController.h | 12 ++++- src/AnalyzeView/MAVLinkInspectorPage.qml | 48 +++++++++++++++---- src/QmlControls/MAVLinkMessageButton.qml | 8 +++- 4 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/AnalyzeView/MAVLinkInspectorController.cc b/src/AnalyzeView/MAVLinkInspectorController.cc index f064a4784..0c4188436 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.cc +++ b/src/AnalyzeView/MAVLinkInspectorController.cc @@ -324,10 +324,26 @@ QGCMAVLinkVehicle::append(QGCMAVLinkMessage* message) emit m->indexChanged(); } } + _checkCompID(message); } emit messagesChanged(); } +//----------------------------------------------------------------------------- +void +QGCMAVLinkVehicle::_checkCompID(QGCMAVLinkMessage* message) +{ + if(_compIDsStr.isEmpty()) { + _compIDsStr << tr("All"); + } + if(!_compIDs.contains(static_cast(message->cid()))) { + int cid = static_cast(message->cid()); + _compIDs.append(cid); + _compIDsStr << QString::number(cid); + emit compIDsChanged(); + } +} + //----------------------------------------------------------------------------- MAVLinkInspectorController::MAVLinkInspectorController() { @@ -430,9 +446,8 @@ MAVLinkInspectorController::_vehicleRemoved(Vehicle* vehicle) //----------------------------------------------------------------------------- void -MAVLinkInspectorController::_receiveMessage(LinkInterface* link, mavlink_message_t message) +MAVLinkInspectorController::_receiveMessage(LinkInterface*, mavlink_message_t message) { - Q_UNUSED(link); QGCMAVLinkMessage* m = nullptr; QGCMAVLinkVehicle* v = _findVehicle(message.sysid); if(!v) { @@ -453,7 +468,6 @@ MAVLinkInspectorController::_receiveMessage(LinkInterface* link, mavlink_message } else { m->update(&message); } - } //----------------------------------------------------------------------------- diff --git a/src/AnalyzeView/MAVLinkInspectorController.h b/src/AnalyzeView/MAVLinkInspectorController.h index 1969a2ccd..e1dfa3103 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.h +++ b/src/AnalyzeView/MAVLinkInspectorController.h @@ -87,22 +87,32 @@ class QGCMAVLinkVehicle : public QObject { Q_OBJECT Q_PROPERTY(quint8 id READ id CONSTANT) Q_PROPERTY(QmlObjectListModel* messages READ messages NOTIFY messagesChanged) + Q_PROPERTY(QList compIDs READ compIDs NOTIFY compIDsChanged) + Q_PROPERTY(QStringList compIDsStr READ compIDsStr NOTIFY compIDsChanged) public: QGCMAVLinkVehicle(QObject* parent, quint8 id); quint8 id () { return _id; } QmlObjectListModel* messages () { return &_messages; } + QList compIDs () { return _compIDs; } + QStringList compIDsStr () { return _compIDsStr; } QGCMAVLinkMessage* findMessage (uint32_t id, uint8_t cid); void append (QGCMAVLinkMessage* message); signals: void messagesChanged (); + void compIDsChanged (); + +private: + void _checkCompID (QGCMAVLinkMessage *message); private: quint8 _id; - QmlObjectListModel _messages; //-- List of QGCMAVLinkMessage + QList _compIDs; + QStringList _compIDsStr; + QmlObjectListModel _messages; //-- List of QGCMAVLinkMessage }; //----------------------------------------------------------------------------- diff --git a/src/AnalyzeView/MAVLinkInspectorPage.qml b/src/AnalyzeView/MAVLinkInspectorPage.qml index 8f9a7c6d6..c43dabafa 100644 --- a/src/AnalyzeView/MAVLinkInspectorPage.qml +++ b/src/AnalyzeView/MAVLinkInspectorPage.qml @@ -22,9 +22,11 @@ Item { anchors.fill: parent anchors.margins: ScreenTools.defaultFontPixelWidth - property var curVehicle: controller ? controller.activeVehicle : null - property int curMessageIndex: 0 - property var curMessage: curVehicle && curVehicle.messages.count ? curVehicle.messages.get(curMessageIndex) : null + property var curVehicle: controller ? controller.activeVehicle : null + property int curMessageIndex:0 + property var curMessage: curVehicle && curVehicle.messages.count ? curVehicle.messages.get(curMessageIndex) : null + property int curCompID: 0 + property bool selectionValid: false MAVLinkInspectorController { id: controller @@ -35,11 +37,36 @@ Item { } //-- Header - QGCLabel { + RowLayout { id: header - text: qsTr("Inspect real time MAVLink messages.") anchors.top: parent.top anchors.left: parent.left + anchors.right: parent.right + QGCLabel { + text: qsTr("Inspect real time MAVLink messages.") + } + RowLayout { + Layout.alignment: Qt.AlignRight + visible: curVehicle ? curVehicle.compIDsStr.length > 2 : false + QGCLabel { + text: qsTr("Component ID:") + } + QGCComboBox { + id: cidCombo + model: curVehicle ? curVehicle.compIDsStr : [] + Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 10 + currentIndex: 0 + onActivated: { + if(curVehicle && curVehicle.compIDsStr.length > 1) { + selectionValid = false + if(index < 1) + curCompID = 0 + else + curCompID = curVehicle.compIDs[index - 1] + } + } + } + } } //-- Messages (Buttons) @@ -59,10 +86,15 @@ Item { model: curVehicle ? curVehicle.messages : [] delegate: MAVLinkMessageButton { text: object.name + compID: object.cid checked: curMessageIndex === index messageHz: object.messageHz - onClicked: curMessageIndex = index - Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 36 + visible: curCompID === 0 || curCompID === compID + onClicked: { + selectionValid = true + curMessageIndex = index + } + Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 40 } } } @@ -70,7 +102,7 @@ Item { //-- Message Data QGCFlickable { id: messageGrid - visible: curMessage !== null + visible: curMessage !== null && selectionValid anchors.top: buttonGrid.top anchors.bottom: parent.bottom anchors.left: buttonGrid.right diff --git a/src/QmlControls/MAVLinkMessageButton.qml b/src/QmlControls/MAVLinkMessageButton.qml index 2ed3fc700..9ae7d1eff 100644 --- a/src/QmlControls/MAVLinkMessageButton.qml +++ b/src/QmlControls/MAVLinkMessageButton.qml @@ -25,12 +25,18 @@ Button { } property double messageHz: 0 + property int compID: 0 contentItem: RowLayout { + QGCLabel { + text: control.compID + color: checked ? qgcPal.buttonHighlightText : qgcPal.buttonText + Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 3 + } QGCLabel { text: control.text color: checked ? qgcPal.buttonHighlightText : qgcPal.buttonText - Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 26 + Layout.minimumWidth: ScreenTools.defaultFontPixelWidth * 28 } QGCLabel { color: checked ? qgcPal.buttonHighlightText : qgcPal.buttonText -- 2.22.0