From 9c6775fbf5c4a66751cbf17e86c860f51be8e87f Mon Sep 17 00:00:00 2001 From: lm Date: Sun, 13 Feb 2011 11:54:24 +0100 Subject: [PATCH] Added setting for action retransmission, implementation of actual retransmission pending --- src/comm/MAVLinkProtocol.cc | 20 +++++++++++++++ src/comm/MAVLinkProtocol.h | 24 +++++++++++++++--- src/ui/MAVLinkSettingsWidget.cc | 17 +++++++++++-- src/ui/MAVLinkSettingsWidget.ui | 45 ++++++++++++++++++++++++++++++++- 4 files changed, 99 insertions(+), 7 deletions(-) diff --git a/src/comm/MAVLinkProtocol.cc b/src/comm/MAVLinkProtocol.cc index d1d45497f..5d088cc7a 100644 --- a/src/comm/MAVLinkProtocol.cc +++ b/src/comm/MAVLinkProtocol.cc @@ -47,6 +47,8 @@ MAVLinkProtocol::MAVLinkProtocol() : m_paramRetransmissionTimeout(350), m_paramRewriteTimeout(500), m_paramGuardEnabled(true), + m_actionGuardEnabled(false), + m_actionRetransmissionTimeout(100), versionMismatchIgnore(false), systemId(QGC::defaultSystemId) { @@ -442,6 +444,15 @@ void MAVLinkProtocol::enableParamGuard(bool enabled) } } +void MAVLinkProtocol::enableActionGuard(bool enabled) +{ + if (enabled != m_actionGuardEnabled) + { + m_actionGuardEnabled = enabled; + emit actionGuardChanged(m_actionGuardEnabled); + } +} + void MAVLinkProtocol::setParamRetransmissionTimeout(int ms) { if (ms != m_paramRetransmissionTimeout) @@ -460,6 +471,15 @@ void MAVLinkProtocol::setParamRewriteTimeout(int ms) } } +void MAVLinkProtocol::setActionRetransmissionTimeout(int ms) +{ + if (ms != m_actionRetransmissionTimeout) + { + m_actionRetransmissionTimeout = ms; + emit actionRetransmissionTimeoutChanged(m_actionRetransmissionTimeout); + } +} + void MAVLinkProtocol::enableLogging(bool enabled) { bool changed = false; diff --git a/src/comm/MAVLinkProtocol.h b/src/comm/MAVLinkProtocol.h index fc6e1d923..f23cbf35b 100644 --- a/src/comm/MAVLinkProtocol.h +++ b/src/comm/MAVLinkProtocol.h @@ -77,12 +77,16 @@ public: int getVersion() { return MAVLINK_VERSION; } /** @brief Get the name of the packet log file */ QString getLogfileName(); - /** @brief Enable / disable parameter retransmission */ + /** @brief Get state of parameter retransmission */ bool paramGuardEnabled() { return m_paramGuardEnabled; } - /** @brief Set parameter read timeout */ + /** @brief Get parameter read timeout */ int getParamRetransmissionTimeout() { return m_paramRetransmissionTimeout; } - /** @brief Set parameter wrtie timeout */ + /** @brief Get parameter write timeout */ int getParamRewriteTimeout() { return m_paramRewriteTimeout; } + /** @brief Get state of action retransmission */ + bool actionGuardEnabled() { return m_actionGuardEnabled; } + /** @brief Get parameter read timeout */ + int getActionRetransmissionTimeout() { return m_actionRetransmissionTimeout; } public slots: /** @brief Receive bytes from a communication interface */ @@ -108,12 +112,18 @@ public slots: /** @brief Enable / disable parameter retransmission */ void enableParamGuard(bool enabled); + /** @brief Enable / disable action retransmission */ + void enableActionGuard(bool enabled); + /** @brief Set parameter read timeout */ void setParamRetransmissionTimeout(int ms); /** @brief Set parameter write timeout */ void setParamRewriteTimeout(int ms); + /** @brief Set parameter read timeout */ + void setActionRetransmissionTimeout(int ms); + /** @brief Set log file name */ void setLogfileName(const QString& filename); @@ -138,7 +148,9 @@ protected: bool m_enable_version_check; ///< Enable checking of version match of MAV and QGC int m_paramRetransmissionTimeout; ///< Timeout for parameter retransmission int m_paramRewriteTimeout; ///< Timeout for sending re-write request - bool m_paramGuardEnabled; ///< Retransmission/rewrite enabled + bool m_paramGuardEnabled; ///< Parameter retransmission/rewrite enabled + bool m_actionGuardEnabled; ///< Action request retransmission enabled + int m_actionRetransmissionTimeout; ///< Timeout for parameter retransmission QMutex receiveMutex; ///< Mutex to protect receiveBytes function int lastIndex[256][256]; int totalReceiveCounter; @@ -169,6 +181,10 @@ signals: void paramRetransmissionTimeoutChanged(int ms); /** @brief Emitted if param write timeout changed */ void paramRewriteTimeoutChanged(int ms); + /** @brief Emitted if action guard status changed */ + void actionGuardChanged(bool enabled); + /** @brief Emitted if actiion request timeout changed */ + void actionRetransmissionTimeoutChanged(int ms); }; #endif // MAVLINKPROTOCOL_H_ diff --git a/src/ui/MAVLinkSettingsWidget.cc b/src/ui/MAVLinkSettingsWidget.cc index ebea16af0..ae2fdceb5 100644 --- a/src/ui/MAVLinkSettingsWidget.cc +++ b/src/ui/MAVLinkSettingsWidget.cc @@ -50,10 +50,14 @@ MAVLinkSettingsWidget::MAVLinkSettingsWidget(MAVLinkProtocol* protocol, QWidget m_ui->versionCheckBox->setChecked(protocol->versionCheckEnabled()); m_ui->multiplexingCheckBox->setChecked(protocol->multiplexingEnabled()); m_ui->systemIdSpinBox->setValue(protocol->getSystemId()); + m_ui->paramGuardCheckBox->setChecked(protocol->paramGuardEnabled()); m_ui->paramRetransmissionSpinBox->setValue(protocol->getParamRetransmissionTimeout()); m_ui->paramRewriteSpinBox->setValue(protocol->getParamRewriteTimeout()); + m_ui->actionGuardCheckBox->setChecked(protocol->actionGuardEnabled()); + m_ui->actionRetransmissionSpinBox->setValue(protocol->getActionRetransmissionTimeout()); + // Connect actions // Heartbeat connect(protocol, SIGNAL(heartbeatChanged(bool)), m_ui->heartbeatCheckBox, SLOT(setChecked(bool))); @@ -79,6 +83,12 @@ MAVLinkSettingsWidget::MAVLinkSettingsWidget(MAVLinkProtocol* protocol, QWidget connect(m_ui->paramRetransmissionSpinBox, SIGNAL(valueChanged(int)), protocol, SLOT(setParamRetransmissionTimeout(int))); connect(protocol, SIGNAL(paramRewriteTimeoutChanged(int)), m_ui->paramRewriteSpinBox, SLOT(setValue(int))); connect(m_ui->paramRewriteSpinBox, SIGNAL(valueChanged(int)), protocol, SLOT(setParamRewriteTimeout(int))); + // Action guard + connect(protocol, SIGNAL(actionGuardChanged(bool)), m_ui->actionGuardCheckBox, SLOT(setChecked(bool))); + connect(m_ui->actionGuardCheckBox, SIGNAL(toggled(bool)), protocol, SLOT(enableActionGuard(bool))); + connect(protocol, SIGNAL(actionRetransmissionTimeoutChanged(int)), m_ui->actionRetransmissionSpinBox, SLOT(setValue(int))); + connect(m_ui->actionRetransmissionSpinBox, SIGNAL(valueChanged(int)), protocol, SLOT(setActionRetransmissionTimeout(int))); + // Update values m_ui->versionLabel->setText(tr("MAVLINK_VERSION: %1").arg(protocol->getVersion())); @@ -87,8 +97,6 @@ MAVLinkSettingsWidget::MAVLinkSettingsWidget(MAVLinkProtocol* protocol, QWidget // Connect visibility updates connect(protocol, SIGNAL(versionCheckChanged(bool)), m_ui->versionLabel, SLOT(setVisible(bool))); m_ui->versionLabel->setVisible(protocol->versionCheckEnabled()); - //connect(m_ui->versionCheckBox, SIGNAL(toggled(bool)), m_ui->versionSpacer, SLOT(setVisible(bool))); - //connect(m_ui->loggingCheckBox, SIGNAL(toggled(bool)), m_ui->logFileSpacer, SLOT(setVisible(bool))); // Logging visibility connect(protocol, SIGNAL(loggingChanged(bool)), m_ui->logFileLabel, SLOT(setVisible(bool))); m_ui->logFileLabel->setVisible(protocol->loggingEnabled()); @@ -108,6 +116,11 @@ MAVLinkSettingsWidget::MAVLinkSettingsWidget(MAVLinkProtocol* protocol, QWidget m_ui->paramRewriteSpinBox->setVisible(protocol->paramGuardEnabled()); connect(protocol, SIGNAL(paramGuardChanged(bool)), m_ui->paramRewriteLabel, SLOT(setVisible(bool))); m_ui->paramRewriteLabel->setVisible(protocol->paramGuardEnabled()); + // Action guard visibility + connect(protocol, SIGNAL(actionGuardChanged(bool)), m_ui->actionRetransmissionSpinBox, SLOT(setVisible(bool))); + m_ui->actionRetransmissionSpinBox->setVisible(protocol->actionGuardEnabled()); + connect(protocol, SIGNAL(actionGuardChanged(bool)), m_ui->actionRetransmissionLabel, SLOT(setVisible(bool))); + m_ui->actionRetransmissionLabel->setVisible(protocol->actionGuardEnabled()); // TODO implement filtering // and then remove these two lines diff --git a/src/ui/MAVLinkSettingsWidget.ui b/src/ui/MAVLinkSettingsWidget.ui index 665a21575..c3e023b78 100644 --- a/src/ui/MAVLinkSettingsWidget.ui +++ b/src/ui/MAVLinkSettingsWidget.ui @@ -7,7 +7,7 @@ 0 0 431 - 349 + 387 @@ -245,6 +245,49 @@ + + + + Enable retransmission of actions / commands + + + + + + + Qt::Horizontal + + + + 8 + 0 + + + + + + + + Action request retransmission timeout + + + + + + + ms + + + 20 + + + 1000 + + + 10 + + + -- 2.22.0