diff --git a/src/AnalyzeView/MAVLinkInspectorController.cc b/src/AnalyzeView/MAVLinkInspectorController.cc index 8c6706c43bfd3efdce46ea402664c91d5e6ee7bc..93107db277b6db88f15acd0d6f4a9fa3d45d5562 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.cc +++ b/src/AnalyzeView/MAVLinkInspectorController.cc @@ -156,7 +156,7 @@ QGCMAVLinkMessage::QGCMAVLinkMessage(QObject *parent, mavlink_message_t* message _message = *message; const mavlink_message_info_t* msgInfo = mavlink_get_message_info(message); if (!msgInfo) { - qWarning() << QStringLiteral("QGCMAVLinkMessage NULL msgInfo msgid(%1)").arg(message->msgid); + qCWarning(MAVLinkInspectorLog) << QStringLiteral("QGCMAVLinkMessage NULL msgInfo msgid(%1)").arg(message->msgid); return; } _name = QString(msgInfo->name); @@ -179,7 +179,6 @@ QGCMAVLinkMessage::QGCMAVLinkMessage(QObject *parent, mavlink_message_t* message QGCMAVLinkMessageField* f = new QGCMAVLinkMessageField(this, msgInfo->fields[i].name, type); _fields.append(f); } - update(message); } //----------------------------------------------------------------------------- @@ -218,23 +217,41 @@ QGCMAVLinkMessage::updateFreq() emit freqChanged(); } +void QGCMAVLinkMessage::setSelected(bool sel) +{ + if (_selected != sel) { + _selected = sel; + _updateFields(); + emit selectedChanged(); + } +} + //----------------------------------------------------------------------------- void QGCMAVLinkMessage::update(mavlink_message_t* message) { _count++; - _message = *message; - const mavlink_message_info_t* msgInfo = mavlink_get_message_info(message); + + if (_selected) { + // Don't update field info unless selected to reduce perf hit of message processing + _updateFields(); + } + emit countChanged(); +} + +void QGCMAVLinkMessage::_updateFields(void) +{ + const mavlink_message_info_t* msgInfo = mavlink_get_message_info(&_message); if (!msgInfo) { - qWarning() << QStringLiteral("QGCMAVLinkMessage::update NULL msgInfo msgid(%1)").arg(message->msgid); + qWarning() << QStringLiteral("QGCMAVLinkMessage::update NULL msgInfo msgid(%1)").arg(_message.msgid); return; } if(_fields.count() != static_cast(msgInfo->num_fields)) { - qWarning() << QStringLiteral("QGCMAVLinkMessage::update msgInfo field count mismatch msgid(%1)").arg(message->msgid); + qWarning() << QStringLiteral("QGCMAVLinkMessage::update msgInfo field count mismatch msgid(%1)").arg(_message.msgid); return; } - uint8_t* m = reinterpret_cast(&message->payload64[0]); + uint8_t* m = reinterpret_cast(&_message.payload64[0]); for (unsigned int i = 0; i < msgInfo->num_fields; ++i) { QGCMAVLinkMessageField* f = qobject_cast(_fields.get(static_cast(i))); if(f) { @@ -448,7 +465,6 @@ QGCMAVLinkMessage::update(mavlink_message_t* message) } } } - emit messageChanged(); } //----------------------------------------------------------------------------- @@ -547,17 +563,12 @@ QGCMAVLinkSystem::append(QGCMAVLinkMessage* message) } _messages.append(message); //-- Sort messages by id and then cid - if(_messages.count() > 0) { + if (_messages.count() > 0) { + _messages.beginReset(); std::sort(_messages.objectList()->begin(), _messages.objectList()->end(), messages_sort); - for(int i = 0; i < _messages.count(); i++) { - QGCMAVLinkMessage* m = qobject_cast(_messages.get(i)); - if(m) { - emit m->indexChanged(); - } - } + _messages.endReset(); _checkCompID(message); } - emit messagesChanged(); //-- Remember selected message if(selectedMsg) { int idx = findMessage(selectedMsg); @@ -829,7 +840,6 @@ MAVLinkInspectorController::_vehicleAdded(Vehicle* vehicle) QGCMAVLinkSystem* v = _findVehicle(static_cast(vehicle->id())); if(v) { v->messages()->clearAndDeleteContents(); - emit v->messagesChanged(); } else { v = new QGCMAVLinkSystem(this, static_cast(vehicle->id())); _systems.append(v); diff --git a/src/AnalyzeView/MAVLinkInspectorController.h b/src/AnalyzeView/MAVLinkInspectorController.h index db5ad853b0bb991e13fa738315d04b050df84380..978aa507ad2a5e8066b90d6f51483ba83d9fb774 100644 --- a/src/AnalyzeView/MAVLinkInspectorController.h +++ b/src/AnalyzeView/MAVLinkInspectorController.h @@ -90,12 +90,12 @@ private: class QGCMAVLinkMessage : public QObject { Q_OBJECT public: - Q_PROPERTY(quint32 id READ id NOTIFY indexChanged) - Q_PROPERTY(quint32 cid READ cid NOTIFY indexChanged) - Q_PROPERTY(QString name READ name NOTIFY indexChanged) + Q_PROPERTY(quint32 id READ id CONSTANT) + Q_PROPERTY(quint32 cid READ cid CONSTANT) + Q_PROPERTY(QString name READ name CONSTANT) Q_PROPERTY(qreal messageHz READ messageHz NOTIFY freqChanged) - Q_PROPERTY(quint64 count READ count NOTIFY messageChanged) - Q_PROPERTY(QmlObjectListModel* fields READ fields NOTIFY indexChanged) + Q_PROPERTY(quint64 count READ count NOTIFY countChanged) + Q_PROPERTY(QmlObjectListModel* fields READ fields CONSTANT) Q_PROPERTY(bool fieldSelected READ fieldSelected NOTIFY fieldSelectedChanged) Q_PROPERTY(bool selected READ selected NOTIFY selectedChanged) @@ -115,24 +115,25 @@ public: void updateFieldSelection(); void update (mavlink_message_t* message); void updateFreq (); - void setSelected (bool sel) { _selected = sel; } + void setSelected (bool sel); signals: - void messageChanged (); + void countChanged (); void freqChanged (); - void indexChanged (); void fieldSelectedChanged (); void selectedChanged (); private: + void _updateFields(void); + QmlObjectListModel _fields; QString _name; - qreal _messageHz = 0.0; - uint64_t _count = 0; - uint64_t _lastCount = 0; - mavlink_message_t _message; //-- List of QGCMAVLinkMessageField - bool _fieldSelected = false; - bool _selected = false; + qreal _messageHz = 0.0; + uint64_t _count = 1; + uint64_t _lastCount = 0; + mavlink_message_t _message; + bool _fieldSelected = false; + bool _selected = false; }; //----------------------------------------------------------------------------- @@ -140,11 +141,10 @@ private: class QGCMAVLinkSystem : public QObject { Q_OBJECT public: - 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) - + Q_PROPERTY(quint8 id READ id CONSTANT) + Q_PROPERTY(QmlObjectListModel* messages READ messages CONSTANT) + Q_PROPERTY(QList compIDs READ compIDs NOTIFY compIDsChanged) + Q_PROPERTY(QStringList compIDsStr READ compIDsStr NOTIFY compIDsChanged) Q_PROPERTY(int selected READ selected WRITE setSelected NOTIFY selectedChanged) QGCMAVLinkSystem (QObject* parent, quint8 id); @@ -162,7 +162,6 @@ public: void append (QGCMAVLinkMessage* message); signals: - void messagesChanged (); void compIDsChanged (); void selectedChanged ();