diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml index 7c83def6c5c6b65400aba982fbe7c6898150d1bc..a706306e567c81ef7b0b1be8063d7e1d82dd9c2d 100644 --- a/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml +++ b/src/AutoPilotPlugins/APM/APMSafetyComponentCopter.qml @@ -58,6 +58,8 @@ QGCView { property Fact _rtlLoitTimeFact: controller.getParameterFact(-1, "RTL_LOIT_TIME") property Fact _rtlAltFinalFact: controller.getParameterFact(-1, "RTL_ALT_FINAL") + property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK") + property real _margins: ScreenTools.defaultFontPixelHeight ExclusiveGroup { id: fenceActionRadioGroup } @@ -71,9 +73,8 @@ QGCView { Flickable { clip: true anchors.fill: parent - boundsBehavior: Flickable.StopAtBounds - contentHeight: rtlSettings.y + rtlSettings.height - flickableDirection: Flickable.VerticalFlick + contentHeight: armingCheckSettings.y + armingCheckSettings.height + contentWidth: armingCheckSettings.x + armingCheckSettings.width QGCLabel { id: failsafeLabel @@ -447,6 +448,33 @@ QGCView { showUnits: true } } // Rectangle - RTL Settings + + QGCLabel { + id: armingCheckLabel + anchors.topMargin: _margins + anchors.left: parent.left + anchors.top: rtlSettings.bottom + text: "Arming Checks" + font.weight: Font.DemiBold + } + + Rectangle { + id: armingCheckSettings + anchors.topMargin: _margins / 2 + anchors.left: parent.left + anchors.top: armingCheckLabel.bottom + width: armingCheckColumn.x + armingCheckColumn.width + _margins + height: armingCheckColumn.y + armingCheckColumn.height + _margins + color: palette.windowShade + + Column { + id: armingCheckColumn + spacing: _margins + + QGCLabel { text: "Be very careful when turning off arming checks. Could lead to loss of Vehicle control." } + FactBitmask { fact: _armingCheck } + } + } } // Flickable } // QGCViewPanel } // QGCView diff --git a/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml index 0d2328082b3f05d4ae42c94feb2ec67caf8d0975..f61947789df05ee50b96072da598733a660d87d4 100644 --- a/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml +++ b/src/AutoPilotPlugins/APM/APMSafetyComponentSummaryCopter.qml @@ -26,6 +26,8 @@ FactPanel { property Fact _rtlAltFinalFact: controller.getParameterFact(-1, "RTL_ALT_FINAL") property Fact _landSpeedFact: controller.getParameterFact(-1, "LAND_SPEED") + property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK") + property string _failsafeBattEnableText property string _failsafeThrEnableText @@ -85,6 +87,11 @@ FactPanel { anchors.fill: parent anchors.margins: 8 + VehicleSummaryRow { + labelText: "Arming Checks:" + valueText: _armingCheck.value & 1 ? "Enabled" : "Some disabled" + } + VehicleSummaryRow { labelText: "Throttle failsafe:" valueText: _failsafeThrEnableText diff --git a/src/FirmwarePlugin/APM/APMParameterMetaData.cc b/src/FirmwarePlugin/APM/APMParameterMetaData.cc index 7857ba4a9fe06c97a1fa5a72ed29ca511329ff37..6397f11041c817afbd5b19a18c7bc3efdc84afa2 100644 --- a/src/FirmwarePlugin/APM/APMParameterMetaData.cc +++ b/src/FirmwarePlugin/APM/APMParameterMetaData.cc @@ -523,21 +523,51 @@ void APMParameterMetaData::addMetaDataToFact(Fact* fact, MAV_TYPE vehicleType) bool ok = false; unsigned int bitSet = bitmaskPair.first.toUInt(&ok); bitSet = 1 << bitSet; + + QVariant typedBitSet; + + switch (fact->type()) { + case FactMetaData::valueTypeInt8: + typedBitSet = QVariant((signed char)bitSet); + break; + + case FactMetaData::valueTypeInt16: + typedBitSet = QVariant((short int)bitSet); + break; + + case FactMetaData::valueTypeInt32: + typedBitSet = QVariant((int)bitSet); + break; + + case FactMetaData::valueTypeUint8: + case FactMetaData::valueTypeUint16: + case FactMetaData::valueTypeUint32: + typedBitSet = QVariant(bitSet); + break; + + default: + break; + } + if (typedBitSet.isNull()) { + qCDebug(APMParameterMetaDataLog) << "Invalid type for bitmask, name:" << metaData->name() + << " type:" << metaData->type(); + } + if (!ok) { qCDebug(APMParameterMetaDataLog) << "Invalid bitmask value, name:" << metaData->name() - << " type:" << metaData->type() << " value:" << bitmaskPair.first - << " error:" << errorString; + << " type:" << metaData->type() << " value:" << bitSet + << " error: toUInt failed"; bitmaskStrings.clear(); bitmaskValues.clear(); break; } - if (metaData->convertAndValidateRaw(bitSet, false /* validate */, bitmaskValue, errorString)) { + if (metaData->convertAndValidateRaw(typedBitSet, false /* validate */, bitmaskValue, errorString)) { bitmaskValues << bitmaskValue; bitmaskStrings << bitmaskPair.second; } else { qCDebug(APMParameterMetaDataLog) << "Invalid bitmask value, name:" << metaData->name() - << " type:" << metaData->type() << " value:" << bitmaskPair.first + << " type:" << metaData->type() << " value:" << typedBitSet << " error:" << errorString; bitmaskStrings.clear(); bitmaskValues.clear();