Commit f7a96555 authored by DonLakeFlyer's avatar DonLakeFlyer

User facing gimbal pitch from 0<->90 degrees

parent 13ca238f
...@@ -36,6 +36,7 @@ const qreal FactMetaData::UnitConsts_s::inchesToCentimeters = 2.54; ...@@ -36,6 +36,7 @@ const qreal FactMetaData::UnitConsts_s::inchesToCentimeters = 2.54;
const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[] = { const FactMetaData::BuiltInTranslation_s FactMetaData::_rgBuiltInTranslations[] = {
{ "centi-degrees", "deg", FactMetaData::_centiDegreesToDegrees, FactMetaData::_degreesToCentiDegrees }, { "centi-degrees", "deg", FactMetaData::_centiDegreesToDegrees, FactMetaData::_degreesToCentiDegrees },
{ "radians", "deg", FactMetaData::_radiansToDegrees, FactMetaData::_degreesToRadians }, { "radians", "deg", FactMetaData::_radiansToDegrees, FactMetaData::_degreesToRadians },
{ "gimbal-degrees", "deg", FactMetaData::_mavlinkGimbalDegreesToUserGimbalDegrees, FactMetaData::_userGimbalDegreesToMavlinkGimbalDegrees },
{ "norm", "%", FactMetaData::_normToPercent, FactMetaData::_percentToNorm }, { "norm", "%", FactMetaData::_normToPercent, FactMetaData::_percentToNorm },
}; };
...@@ -256,7 +257,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO ...@@ -256,7 +257,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
case FactMetaData::valueTypeInt32: case FactMetaData::valueTypeInt32:
typedValue = QVariant(rawValue.toInt(&convertOk)); typedValue = QVariant(rawValue.toInt(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
if (rawMin() > typedValue || typedValue > rawMax()) { if (typedValue < rawMin() || typedValue > rawMax()) {
errorString = QString("Value must be within %1 and %2").arg(cookedMin().toInt()).arg(cookedMax().toInt()); errorString = QString("Value must be within %1 and %2").arg(cookedMin().toInt()).arg(cookedMax().toInt());
} }
} }
...@@ -267,7 +268,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO ...@@ -267,7 +268,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
case FactMetaData::valueTypeUint32: case FactMetaData::valueTypeUint32:
typedValue = QVariant(rawValue.toUInt(&convertOk)); typedValue = QVariant(rawValue.toUInt(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
if (rawMin() > typedValue || typedValue > rawMax()) { if (typedValue < rawMin() || typedValue > rawMax()) {
errorString = QString("Value must be within %1 and %2").arg(cookedMin().toUInt()).arg(cookedMax().toUInt()); errorString = QString("Value must be within %1 and %2").arg(cookedMin().toUInt()).arg(cookedMax().toUInt());
} }
} }
...@@ -276,7 +277,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO ...@@ -276,7 +277,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
case FactMetaData::valueTypeFloat: case FactMetaData::valueTypeFloat:
typedValue = QVariant(rawValue.toFloat(&convertOk)); typedValue = QVariant(rawValue.toFloat(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
if (rawMin() > typedValue || typedValue > rawMax()) { if (typedValue < rawMin() || typedValue > rawMax()) {
errorString = QString("Value must be within %1 and %2").arg(cookedMin().toFloat()).arg(cookedMax().toFloat()); errorString = QString("Value must be within %1 and %2").arg(cookedMin().toFloat()).arg(cookedMax().toFloat());
} }
} }
...@@ -285,7 +286,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO ...@@ -285,7 +286,7 @@ bool FactMetaData::convertAndValidateRaw(const QVariant& rawValue, bool convertO
case FactMetaData::valueTypeDouble: case FactMetaData::valueTypeDouble:
typedValue = QVariant(rawValue.toDouble(&convertOk)); typedValue = QVariant(rawValue.toDouble(&convertOk));
if (!convertOnly && convertOk) { if (!convertOnly && convertOk) {
if (rawMin() > typedValue || typedValue > rawMax()) { if (typedValue < rawMin() || typedValue > rawMax()) {
errorString = QString("Value must be within %1 and %2").arg(cookedMin().toDouble()).arg(cookedMax().toDouble()); errorString = QString("Value must be within %1 and %2").arg(cookedMin().toDouble()).arg(cookedMax().toDouble());
} }
} }
...@@ -455,6 +456,20 @@ QVariant FactMetaData::_degreesToCentiDegrees(const QVariant& degrees) ...@@ -455,6 +456,20 @@ QVariant FactMetaData::_degreesToCentiDegrees(const QVariant& degrees)
return QVariant(qRound(degrees.toReal() * 100.0)); return QVariant(qRound(degrees.toReal() * 100.0));
} }
QVariant FactMetaData::_userGimbalDegreesToMavlinkGimbalDegrees(const QVariant& userGimbalDegrees)
{
// User facing gimbal degree values are from 0 (level) to 90 (straight down)
// Mavlink gimbal degree values are from 0 (level) to -90 (straight down)
return userGimbalDegrees.toDouble() * -1.0;
}
QVariant FactMetaData::_mavlinkGimbalDegreesToUserGimbalDegrees(const QVariant& mavlinkGimbalDegrees)
{
// User facing gimbal degree values are from 0 (level) to 90 (straight down)
// Mavlink gimbal degree values are from 0 (level) to -90 (straight down)
return mavlinkGimbalDegrees.toDouble() * -1.0;
}
QVariant FactMetaData::_metersToFeet(const QVariant& meters) QVariant FactMetaData::_metersToFeet(const QVariant& meters)
{ {
return QVariant(meters.toDouble() * 1.0/constants.feetToMeters); return QVariant(meters.toDouble() * 1.0/constants.feetToMeters);
...@@ -908,3 +923,29 @@ QMap<QString, FactMetaData*> FactMetaData::createMapFromJsonFile(const QString& ...@@ -908,3 +923,29 @@ QMap<QString, FactMetaData*> FactMetaData::createMapFromJsonFile(const QString&
return metaDataMap; return metaDataMap;
} }
QVariant FactMetaData::cookedMax(void) const
{
// We have to be careful with cooked min/max. Running the raw values through the translator could flip min and max.
QVariant cookedMax = _rawTranslator(_rawMax);
QVariant cookedMin = _rawTranslator(_rawMin);
if (cookedMax < cookedMin) {
// We need to flip
return cookedMin;
} else {
return cookedMax;
}
}
QVariant FactMetaData::cookedMin(void) const
{
// We have to be careful with cooked min/max. Running the raw values through the translator could flip min and max.
QVariant cookedMax = _rawTranslator(_rawMax);
QVariant cookedMin = _rawTranslator(_rawMin);
if (cookedMax < cookedMin) {
// We need to flip
return cookedMax;
} else {
return cookedMin;
}
}
...@@ -83,10 +83,10 @@ public: ...@@ -83,10 +83,10 @@ public:
QString group (void) const { return _group; } QString group (void) const { return _group; }
QString longDescription (void) const { return _longDescription;} QString longDescription (void) const { return _longDescription;}
QVariant rawMax (void) const { return _rawMax; } QVariant rawMax (void) const { return _rawMax; }
QVariant cookedMax (void) const { return _rawTranslator(_rawMax); } QVariant cookedMax (void) const;
bool maxIsDefaultForType (void) const { return _maxIsDefaultForType; } bool maxIsDefaultForType (void) const { return _maxIsDefaultForType; }
QVariant rawMin (void) const { return _rawMin; } QVariant rawMin (void) const { return _rawMin; }
QVariant cookedMin (void) const { return _rawTranslator(_rawMin); } QVariant cookedMin (void) const;
bool minIsDefaultForType (void) const { return _minIsDefaultForType; } bool minIsDefaultForType (void) const { return _minIsDefaultForType; }
QString name (void) const { return _name; } QString name (void) const { return _name; }
QString shortDescription (void) const { return _shortDescription; } QString shortDescription (void) const { return _shortDescription; }
...@@ -155,6 +155,8 @@ private: ...@@ -155,6 +155,8 @@ private:
static QVariant _radiansToDegrees(const QVariant& radians); static QVariant _radiansToDegrees(const QVariant& radians);
static QVariant _centiDegreesToDegrees(const QVariant& centiDegrees); static QVariant _centiDegreesToDegrees(const QVariant& centiDegrees);
static QVariant _degreesToCentiDegrees(const QVariant& degrees); static QVariant _degreesToCentiDegrees(const QVariant& degrees);
static QVariant _userGimbalDegreesToMavlinkGimbalDegrees(const QVariant& userGimbalDegrees);
static QVariant _mavlinkGimbalDegreesToUserGimbalDegrees(const QVariant& mavlinkGimbalDegrees);
static QVariant _metersToFeet(const QVariant& meters); static QVariant _metersToFeet(const QVariant& meters);
static QVariant _feetToMeters(const QVariant& feet); static QVariant _feetToMeters(const QVariant& feet);
static QVariant _squareMetersToSquareKilometers(const QVariant& squareMeters); static QVariant _squareMetersToSquareKilometers(const QVariant& squareMeters);
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
"name": "GimbalPitch", "name": "GimbalPitch",
"shortDescription": "Gimbal pitch rotation.", "shortDescription": "Gimbal pitch rotation.",
"type": "double", "type": "double",
"units": "deg", "units": "gimbal-degrees",
"min": -90, "min": -90,
"max": 0, "max": 0,
"decimalPlaces": 0, "decimalPlaces": 0,
......
Markdown is supported
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