diff --git a/qupgrade.pro b/qupgrade.pro index 728a67558e795cb6749036c0bf56a99ef9373413..296785ff828bb8573c200ed9b91a864db425207c 100644 --- a/qupgrade.pro +++ b/qupgrade.pro @@ -223,6 +223,8 @@ win32-msvc2008|win32-msvc2010 { QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtWebKitd4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtXmld4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtXmlPatternsd4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) + QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtDeclaratived4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) + QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtScriptd4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) } CONFIG(release, debug|release) { @@ -242,6 +244,8 @@ win32-msvc2008|win32-msvc2010 { QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtWebKit4.dll" "$$TARGETDIR_WIN\\release"$$escape_expand(\\n)) QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtXml4.dll" "$$TARGETDIR_WIN\\release"$$escape_expand(\\n)) QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtXmlPatterns4.dll" "$$TARGETDIR_WIN\\release"$$escape_expand(\\n)) + QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtDeclarative4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) + QMAKE_POST_LINK += $$quote(xcopy /D /Y "$$(QTDIR)\\bin\\QtScript4.dll" "$$TARGETDIR_WIN\\debug"$$escape_expand(\\n)) QMAKE_POST_LINK += $$quote(del /F "$$TARGETDIR_WIN\\release\\qupgrade.exp"$$escape_expand(\\n)) QMAKE_POST_LINK += $$quote(del /F "$$TARGETDIR_WIN\\release\\qupgrade.lib"$$escape_expand(\\n)) diff --git a/src/uas/QGCUASParamManager.cc b/src/uas/QGCUASParamManager.cc index c4d81c77617f0a64ff473af6b22fe5ce2f427044..5a3442b5ab22f799c77d1a4800a3b70eeaa8264c 100644 --- a/src/uas/QGCUASParamManager.cc +++ b/src/uas/QGCUASParamManager.cc @@ -124,21 +124,21 @@ void QGCUASParamManager::setParameter(int compId, QString paramName, QVariant va paramDataModel.updatePendingParamWithValue(compId,paramName,value); } -void QGCUASParamManager::sendPendingParameters(bool persistAfterSend) +void QGCUASParamManager::sendPendingParameters(bool persistAfterSend, bool forceSend) { - paramCommsMgr->sendPendingParameters(persistAfterSend); + paramCommsMgr->sendPendingParameters(persistAfterSend, forceSend); } -void QGCUASParamManager::setPendingParam(int compId, const QString& paramName, const QVariant& value) +void QGCUASParamManager::setPendingParam(int compId, const QString& paramName, const QVariant& value, bool forceSend) { if ((0 == compId) || (-1 == compId)) { //attempt to get an actual component ID compId = paramDataModel.getDefaultComponentId(); } - paramDataModel.updatePendingParamWithValue(compId,paramName,value); + paramDataModel.updatePendingParamWithValue(compId,paramName,value, forceSend); } diff --git a/src/uas/QGCUASParamManager.h b/src/uas/QGCUASParamManager.h index 84efadfeed3a377e298878fd335ba5352725f2ce..4fd05aa3411298d112be7931ac7c6a3af6bd89a5 100644 --- a/src/uas/QGCUASParamManager.h +++ b/src/uas/QGCUASParamManager.h @@ -90,7 +90,7 @@ public slots: /** @brief Send all pending parameters to the MAV, for storage in transient (RAM) memory * @param persistAfterSend If true, all parameters will be written to persistent storage as well */ - virtual void sendPendingParameters(bool persistAfterSend = false); + virtual void sendPendingParameters(bool persistAfterSend = false, bool forceSend = false); /** @brief Request list of parameters from MAV */ @@ -100,7 +100,7 @@ public slots: virtual void requestParameterListIfEmpty(); /** @brief queue a pending parameter for sending to the MAV */ - virtual void setPendingParam(int componentId, const QString& key, const QVariant& value); + virtual void setPendingParam(int componentId, const QString& key, const QVariant& value, bool forceSend = false); /** @brief remove all params from the pending list */ virtual void clearAllPendingParams(); diff --git a/src/uas/UASParameterCommsMgr.cc b/src/uas/UASParameterCommsMgr.cc index 8110651a8b1c9b4fe63f6d9a16425a88548f1b4e..cbc0bb20826ce65ded12d63d05abc5984d17b9aa 100644 --- a/src/uas/UASParameterCommsMgr.cc +++ b/src/uas/UASParameterCommsMgr.cc @@ -307,7 +307,7 @@ void UASParameterCommsMgr::requestRcCalibrationParamsUpdate() * @param parameterName name of the parameter, as delivered by the system * @param value value of the parameter */ -void UASParameterCommsMgr::setParameter(int compId, QString paramName, QVariant value) +void UASParameterCommsMgr::setParameter(int compId, QString paramName, QVariant value, bool forceSend) { if (paramName.isEmpty()) { return; @@ -328,14 +328,16 @@ void UASParameterCommsMgr::setParameter(int compId, QString paramName, QVariant return; } - QVariant onboardVal; - paramDataModel->getOnboardParamValue(compId,paramName,onboardVal); - if (onboardVal == value) { - setParameterStatusMsg(tr("REJ. %1 already %2").arg(paramName).arg(dblValue), - ParamCommsStatusLevel_Warning - ); - return; - } + if (!forceSend) { + QVariant onboardVal; + paramDataModel->getOnboardParamValue(compId,paramName,onboardVal); + if (onboardVal == value) { + setParameterStatusMsg(tr("REJ. %1 already %2").arg(paramName).arg(dblValue), + ParamCommsStatusLevel_Warning + ); + return; + } + } emitPendingParameterCommit(compId, paramName, value); @@ -501,7 +503,7 @@ void UASParameterCommsMgr::writeParamsToPersistentStorage() } -void UASParameterCommsMgr::sendPendingParameters(bool copyToPersistent) +void UASParameterCommsMgr::sendPendingParameters(bool copyToPersistent, bool forceSend) { persistParamsAfterSend |= copyToPersistent; @@ -517,7 +519,7 @@ void UASParameterCommsMgr::sendPendingParameters(bool copyToPersistent) setParameterStatusMsg(tr("%1 pending params for component %2").arg(paramList->count()).arg(compId)); for (j = paramList->begin(); j != paramList->end(); ++j) { - setParameter(compId, j.key(), j.value()); + setParameter(compId, j.key(), j.value(), forceSend); parametersSent++; } } diff --git a/src/uas/UASParameterCommsMgr.h b/src/uas/UASParameterCommsMgr.h index 0f240c5e173b2c31e4e1fd8449b3f18f2350371a..ef313761547352399e0fb23dce851994df8a25f4 100644 --- a/src/uas/UASParameterCommsMgr.h +++ b/src/uas/UASParameterCommsMgr.h @@ -71,13 +71,13 @@ signals: public slots: /** @brief Iterate through all components, through all pending parameters and send them to UAS */ - virtual void sendPendingParameters(bool copyToPersistent = false); + virtual void sendPendingParameters(bool copyToPersistent = false, bool forceSend = false); /** @brief Write the current onboard parameters from transient RAM into persistent storage, e.g. EEPROM or harddisk */ virtual void writeParamsToPersistentStorage(); /** @brief Write one parameter to the MAV */ - virtual void setParameter(int component, QString parameterName, QVariant value); + virtual void setParameter(int component, QString parameterName, QVariant value, bool forceSend = false); /** @brief Request list of parameters from MAV */ virtual void requestParameterList(); diff --git a/src/uas/UASParameterDataModel.cc b/src/uas/UASParameterDataModel.cc index 80b7f70a7c72dc0a26779268904378c3ad59c85f..b4f916dd64d572ca2470ba61f9063b6f7f3e96b9 100644 --- a/src/uas/UASParameterDataModel.cc +++ b/src/uas/UASParameterDataModel.cc @@ -46,19 +46,21 @@ int UASParameterDataModel::countOnboardParams() } -bool UASParameterDataModel::updatePendingParamWithValue(int compId, const QString& key, const QVariant& value) +bool UASParameterDataModel::updatePendingParamWithValue(int compId, const QString& key, const QVariant& value, bool forceSend) { bool pending = true; //ensure we have this component in our onboard and pending lists already addComponent(compId); - QMap* existParams = getOnboardParamsForComponent(compId); - if (existParams->contains(key)) { - QVariant existValue = existParams->value(key); - if (existValue == value) { - pending = false; - } - } + if (!forceSend) { + QMap* existParams = getOnboardParamsForComponent(compId); + if (existParams->contains(key)) { + QVariant existValue = existParams->value(key); + if (existValue == value) { + pending = false; + } + } + } if (pending) { setPendingParam(compId,key,value); diff --git a/src/uas/UASParameterDataModel.h b/src/uas/UASParameterDataModel.h index 501f488e85424e341641b5ee8ca3c90dd56a0c96..c0b5b76379ce2185252310ae74b761c834dac60e 100644 --- a/src/uas/UASParameterDataModel.h +++ b/src/uas/UASParameterDataModel.h @@ -53,7 +53,7 @@ public: /** @brief add this parameter to pending list iff it has changed from onboard value * @return true if the parameter is now pending */ - virtual bool updatePendingParamWithValue(int componentId, const QString &key, const QVariant &value); + virtual bool updatePendingParamWithValue(int componentId, const QString &key, const QVariant &value, bool forceSend = false); virtual void handleParamUpdate(int componentId, const QString& key, const QVariant& value); virtual bool getOnboardParamValue(int componentId, const QString& key, QVariant& value) const; diff --git a/src/ui/QGCPX4VehicleConfig.cc b/src/ui/QGCPX4VehicleConfig.cc index 0176aa6598f228b8b58c4c9f38472cb0de604282..c06fdd54ee4b4a05510cf0bee9772f6e3758c834 100644 --- a/src/ui/QGCPX4VehicleConfig.cc +++ b/src/ui/QGCPX4VehicleConfig.cc @@ -156,7 +156,7 @@ QGCPX4VehicleConfig::QGCPX4VehicleConfig(QWidget *parent) : ui->rcCalibrationButton->setCheckable(true); ui->rcCalibrationButton->setEnabled(false); connect(ui->rcCalibrationButton, SIGNAL(clicked(bool)), this, SLOT(toggleCalibrationRC(bool))); - ui->spektrumPairButton->setCheckable(true); + ui->spektrumPairButton->setCheckable(false); ui->spektrumPairButton->setEnabled(false); connect(ui->spektrumPairButton, SIGNAL(clicked(bool)), this, SLOT(toggleSpektrumPairing(bool))); @@ -345,22 +345,13 @@ void QGCPX4VehicleConfig::toggleSpektrumPairing(bool enabled) (void)warnMsgBox.exec(); } - if (enabled) - { - int mode = 1; // DSM2 - if (ui->dsmxRadioButton->isChecked()) - mode = 2; // DSMX + int mode = 1; // DSM2 + if (ui->dsmxRadioButton->isChecked()) + mode = 2; // DSMX - mav->getParamManager()->setPendingParam(0, "RC_DSM_BIND", mode); - // Do not save this parameter, just set in RAM - mav->getParamManager()->sendPendingParameters(); - } - else - { - mav->getParamManager()->setPendingParam(0, "RC_DSM_BIND", (int)0); - // Do not save this parameter, just set in RAM - mav->getParamManager()->sendPendingParameters(); - } + mav->getParamManager()->setPendingParam(0, "RC_DSM_BIND", mode, true); + // Do not save this parameter, just set in RAM + mav->getParamManager()->sendPendingParameters(false, true); } void QGCPX4VehicleConfig::setTrimPositions()