Commit eccfcb0a authored by tstellanova's avatar tstellanova
Browse files

workaround for QVariants incoming as QString meta type

parent 42c62368
...@@ -80,11 +80,8 @@ void UASParameterDataModel::setPendingParam(int compId, const QString& key, con ...@@ -80,11 +80,8 @@ void UASParameterDataModel::setPendingParam(int compId, const QString& key, con
{ {
//ensure we have a placeholder map for this component //ensure we have a placeholder map for this component
addComponent(compId); addComponent(compId);
QMap<QString, QVariant> *pendParams = getPendingParamsForComponent(compId); setParamWithTypeInMap(compId,key,value,pendingParameters);
if (pendParams) { emit pendingParamUpdate(compId, key, value, true);
pendParams->insert(key,value);
emit pendingParamUpdate(compId, key, value, true);
}
} }
void UASParameterDataModel::removePendingParam(int compId, const QString& key) void UASParameterDataModel::removePendingParam(int compId, const QString& key)
...@@ -105,11 +102,12 @@ void UASParameterDataModel::setOnboardParam(int compId, const QString &key, con ...@@ -105,11 +102,12 @@ void UASParameterDataModel::setOnboardParam(int compId, const QString &key, con
{ {
//ensure we have a placeholder map for this component //ensure we have a placeholder map for this component
addComponent(compId); addComponent(compId);
//TODO use setParamWithTypeInMap instead and verify
QMap<QString, QVariant> *params = getOnboardParamsForComponent(compId); QMap<QString, QVariant> *params = getOnboardParamsForComponent(compId);
params->insert(key,value); params->insert(key,value);
} }
void UASParameterDataModel::setOnboardParamWithType(int compId, const QString& key, const QVariant &value) void UASParameterDataModel::setParamWithTypeInMap(int compId, const QString& key, const QVariant &value, QMap<int, QMap<QString, QVariant>* >& map)
{ {
switch ((int)value.type()) switch ((int)value.type())
...@@ -117,25 +115,35 @@ void UASParameterDataModel::setOnboardParamWithType(int compId, const QString& k ...@@ -117,25 +115,35 @@ void UASParameterDataModel::setOnboardParamWithType(int compId, const QString& k
case QVariant::Int: case QVariant::Int:
{ {
QVariant fixedValue(value.toInt()); QVariant fixedValue(value.toInt());
onboardParameters.value(compId)->insert(key, fixedValue); map.value(compId)->insert(key, fixedValue);
} }
break; break;
case QVariant::UInt: case QVariant::UInt:
{ {
QVariant fixedValue(value.toUInt()); QVariant fixedValue(value.toUInt());
onboardParameters.value(compId)->insert(key, fixedValue); map.value(compId)->insert(key, fixedValue);
} }
break; break;
case QMetaType::Float: case QMetaType::Float:
{ {
QVariant fixedValue(value.toFloat()); QVariant fixedValue(value.toFloat());
onboardParameters.value(compId)->insert(key, fixedValue); map.value(compId)->insert(key, fixedValue);
} }
break; break;
case QMetaType::QChar: case QMetaType::QChar:
{ {
QVariant fixedValue(QChar((unsigned char)value.toUInt())); QVariant fixedValue(QChar((unsigned char)value.toUInt()));
onboardParameters.value(compId)->insert(key, fixedValue); map.value(compId)->insert(key, fixedValue);
}
break;
case QMetaType::QString:
{
QString strVal = value.toString();
float floatVal = strVal.toFloat();
QVariant fixedValue( floatVal );
//TODO track down WHY we're getting unexpected QString values here...this is a workaround
qDebug() << "Unexpected string QVariant:" << key << " val:" << value << "fixedVal:" << fixedValue;
map.value(compId)->insert(key, fixedValue);
} }
break; break;
default: default:
...@@ -165,8 +173,7 @@ void UASParameterDataModel::handleParamUpdate(int compId, const QString &paramNa ...@@ -165,8 +173,7 @@ void UASParameterDataModel::handleParamUpdate(int compId, const QString &paramNa
QVariant reqVal = pendingParams->value(paramName); QVariant reqVal = pendingParams->value(paramName);
if (reqVal == value) { if (reqVal == value) {
//notify everyone that this item is being removed from the pending parameters list since it's now confirmed //notify everyone that this item is being removed from the pending parameters list since it's now confirmed
emit pendingParamUpdate(compId, paramName, value, false); removePendingParam(compId,paramName);
pendingParams->remove(paramName);
} }
else { else {
qDebug() << "Pending commit for " << paramName << " want: " << reqVal << " got: " << value; qDebug() << "Pending commit for " << paramName << " want: " << reqVal << " got: " << value;
......
...@@ -41,8 +41,6 @@ public: ...@@ -41,8 +41,6 @@ public:
*/ */
virtual QList<int> getComponentForOnboardParam(const QString& parameter) const; virtual QList<int> getComponentForOnboardParam(const QString& parameter) const;
/** @brief Save the onboard parameter with a the type specified in the QVariant as fixed */
virtual void setOnboardParamWithType(int componentId, const QString &key, const QVariant& value);
/** @brief clears every parameter for every loaded component */ /** @brief clears every parameter for every loaded component */
virtual void forgetAllOnboardParams(); virtual void forgetAllOnboardParams();
...@@ -91,6 +89,9 @@ protected: ...@@ -91,6 +89,9 @@ protected:
/** @brief set the confirmed value of a parameter in the onboard params list */ /** @brief set the confirmed value of a parameter in the onboard params list */
virtual void setOnboardParam(int componentId, const QString& key, const QVariant& value); virtual void setOnboardParam(int componentId, const QString& key, const QVariant& value);
/** @brief Save the parameter with a the type specified in the QVariant as fixed */
void setParamWithTypeInMap(int compId, const QString& key, const QVariant &value, QMap<int, QMap<QString, QVariant>* >& map);
/** @brief Write a new pending parameter value that may be eventually sent to the UAS */ /** @brief Write a new pending parameter value that may be eventually sent to the UAS */
virtual void setPendingParam(int componentId, const QString &key, const QVariant& value); virtual void setPendingParam(int componentId, const QString &key, const QVariant& value);
/** @brief remove a parameter from the pending list */ /** @brief remove a parameter from the pending list */
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment