diff --git a/src/uas/UASParameterDataModel.cc b/src/uas/UASParameterDataModel.cc index 8effd14..8396594 100644 --- a/src/uas/UASParameterDataModel.cc +++ b/src/uas/UASParameterDataModel.cc @@ -7,20 +7,44 @@ UASParameterDataModel::UASParameterDataModel(QObject *parent) : { +} +void UASParameterDataModel::addPendingIfParameterChanged(int componentId, QString& key, QVariant &value) +{ + addComponent(componentId); + QMap<QString, QVariant> *existParams = getOnbardParametersForComponent(componentId); + QMap<QString, QVariant> *pendParams = getPendingParametersForComponent(componentId); + + QVariant existValue = existParams->value(key); + QVariant pendValue = pendParams->value(key); + if (!(existValue == pendValue)) { + setPendingParameter(componentId,key,value); + } +} +void UASParameterDataModel::setPendingParameter(int componentId, QString& key, QVariant &value) +{ + //ensure we have a placeholder map for this component + addComponent(componentId); + QMap<QString, QVariant> *params = getPendingParametersForComponent(componentId); + params->insert(key,value); } +void UASParameterDataModel::setOnboardParameter(int componentId, QString& key, QVariant &value) +{ + //ensure we have a placeholder map for this component + addComponent(componentId); + QMap<QString, QVariant> *params = getOnbardParametersForComponent(componentId); + params->insert(key,value); +} -void UASParameterDataModel::setPendingParameter(int componentId, QString& key, QVariant &value) +void UASParameterDataModel::addComponent(int componentId) { - QMap<QString, QVariant> *compPendingParams = pendingParameters.value(componentId); - //TODO insert blank map if necessary - if (NULL == compPendingParams) { - pendingParameters.insert(componentId,new QMap<QString, QVariant>()); - compPendingParams = pendingParameters.value(componentId); + if (!onboardParameters.contains(componentId)) { + onboardParameters.insert(componentId, new QMap<QString, QVariant>()); + } + if (!pendingParameters.contains(componentId)) { + pendingParameters.insert(componentId, new QMap<QString, QVariant>()); } - - compPendingParams->insert(key,value); } diff --git a/src/uas/UASParameterDataModel.h b/src/uas/UASParameterDataModel.h index 60bfbbf..7122d52 100644 --- a/src/uas/UASParameterDataModel.h +++ b/src/uas/UASParameterDataModel.h @@ -12,8 +12,23 @@ public: explicit UASParameterDataModel(QObject *parent = 0); + virtual void addComponent(int componentId); + /** @brief Write a new pending parameter value that may be eventually sent to the UAS */ virtual void setPendingParameter(int componentId, QString& paramKey, QVariant& paramValue); + virtual void setOnboardParameter(int componentId, QString& key, QVariant &value); + + /** @brief add this parameter to pending list iff it has changed from onboard value */ + virtual void addPendingIfParameterChanged(int componentId, QString& key, QVariant &value); + + + QMap<QString , QVariant>* getPendingParametersForComponent(int componentId) { + return pendingParameters.value(componentId); + } + + QMap<QString , QVariant>* getOnbardParametersForComponent(int componentId) { + return onboardParameters.value(componentId); + } QMap<int, QMap<QString, QVariant>* > getPendingParameters() { return pendingParameters;