Browse Source

Rework Sub Safety setup

QGC4.4
Jacob Walser 8 years ago
parent
commit
c808cb975d
  1. 319
      src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml
  2. 50
      src/AutoPilotPlugins/APM/APMSafetyComponentSummarySub.qml

319
src/AutoPilotPlugins/APM/APMSafetyComponentSub.qml

@ -12,6 +12,7 @@ import QtQuick 2.3
import QtQuick.Controls 1.2 import QtQuick.Controls 1.2
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import QGroundControl 1.0
import QGroundControl.FactSystem 1.0 import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0 import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0 import QGroundControl.Palette 1.0
@ -34,21 +35,27 @@ SetupPage {
QGCPalette { id: ggcPal; colorGroupEnabled: true } QGCPalette { id: ggcPal; colorGroupEnabled: true }
property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
property bool _firmware34: _activeVehicle.firmwareMajorVersion == 3 && _activeVehicle.firmwareMinorVersion == 4
// Enable/Action parameters
property Fact _failsafeBatteryEnable: controller.getParameterFact(-1, "FS_BATT_ENABLE")
property Fact _failsafeEKFEnable: controller.getParameterFact(-1, "FS_EKF_ACTION")
property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABLE") property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABLE")
property Fact _failsafeLeakEnable: controller.getParameterFact(-1, "FS_LEAK_ENABLE") property Fact _failsafeLeakEnable: controller.getParameterFact(-1, "FS_LEAK_ENABLE")
property Fact _failsafePilotEnable: controller.getParameterFact(-1, "FS_PILOT_INPUT")
property Fact _failsafePressureEnable: controller.getParameterFact(-1, "FS_PRESS_ENABLE") property Fact _failsafePressureEnable: controller.getParameterFact(-1, "FS_PRESS_ENABLE")
property Fact _failsafePressureValue: controller.getParameterFact(-1, "FS_PRESS_MAX") property Fact _failsafeTemperatureEnable: controller.getParameterFact(-1, "FS_TEMP_ENABLE")
property Fact _failsafeTempEnable: controller.getParameterFact(-1, "FS_TEMP_ENABLE")
property Fact _failsafeTempValue: controller.getParameterFact(-1, "FS_TEMP_MAX") // Threshold parameters
property Fact _failsafePressureThreshold: controller.getParameterFact(-1, "FS_PRESS_MAX")
property Fact _fenceAction: controller.getParameterFact(-1, "FENCE_ACTION") property Fact _failsafeTemperatureThreshold: controller.getParameterFact(-1, "FS_TEMP_MAX")
property Fact _fenceAltMax: controller.getParameterFact(-1, "r.FENCE_ALT_MIN") property Fact _failsafePilotTimeout: controller.getParameterFact(-1, "FS_PILOT_TIMEOUT")
property Fact _fenceEnable: controller.getParameterFact(-1, "FENCE_ENABLE") property Fact _failsafeLeakPin: controller.getParameterFact(-1, "LEAK1_PIN")
property Fact _fenceMargin: controller.getParameterFact(-1, "FENCE_MARGIN") property Fact _failsafeLeakLogic: controller.getParameterFact(-1, "LEAK1_LOGIC")
property Fact _fenceType: controller.getParameterFact(-1, "FENCE_TYPE") property Fact _failsafeEKFThreshold: controller.getParameterFact(-1, "FS_EKF_THRESH")
property Fact _failsafeBatteryVoltage: controller.getParameterFact(-1, "FS_BATT_VOLTAGE")
property Fact _leakPin: controller.getParameterFact(-1, "LEAK1_PIN") property Fact _failsafeBatteryCapacity: controller.getParameterFact(-1, "FS_BATT_MAH")
property Fact _leakLogic: controller.getParameterFact(-1, "LEAK1_LOGIC")
property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK") property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK")
@ -67,158 +74,264 @@ SetupPage {
} }
Rectangle { Rectangle {
id: failsafeSettings id: failsafeRectangle
width: leakEnableCombo.x + leakEnableCombo.width + _margins width: flowLayout.width
height: leakEnableCombo.y + leakEnableCombo.height + _margins height: childrenRect.height + _margins
color: ggcPal.windowShade color: ggcPal.windowShade
Column {
anchors.top: failsafeRectangle.top
anchors.left: failsafeRectangle.left
anchors.margins: _margins / 2
property var _labelWidth: ScreenTools.defaultFontPixelWidth * 15
property var _editWidth: ScreenTools.defaultFontPixelWidth * 20
id: failsafeSettings
spacing: ScreenTools.defaultFontPixelHeight
Row {
spacing: _margins / 2
QGCLabel { QGCLabel {
id: gcsEnableLabel id: gcsEnableLabel
anchors.margins: _margins width: failsafeSettings._labelWidth
anchors.left: parent.left
anchors.baseline: gcsEnableCombo.baseline anchors.baseline: gcsEnableCombo.baseline
text: qsTr("Ground Station failsafe:") text: qsTr("GCS Heartbeat:")
} }
FactComboBox { FactComboBox {
id: gcsEnableCombo id: gcsEnableCombo
anchors.margins: _margins width: failsafeSettings._editWidth
anchors.left: gcsEnableLabel.right
anchors.top: parent.top
width: ScreenTools.defaultFontPixelWidth*15
fact: _failsafeGCSEnable fact: _failsafeGCSEnable
indexModel: false indexModel: false
} }
}
Row {
spacing: _margins / 2
QGCLabel { QGCLabel {
id: leakEnableLabel id: leakEnableLabel
anchors.margins: _margins width: failsafeSettings._labelWidth
anchors.left: parent.left
anchors.baseline: leakEnableCombo.baseline anchors.baseline: leakEnableCombo.baseline
text: qsTr("Leak failsafe:") text: qsTr("Leak:")
} }
FactComboBox { FactComboBox {
id: leakEnableCombo id: leakEnableCombo
anchors.topMargin: _margins width: failsafeSettings._editWidth
anchors.left: gcsEnableCombo.left
anchors.top: gcsEnableCombo.bottom
width: ScreenTools.defaultFontPixelWidth*15
fact: _failsafeLeakEnable fact: _failsafeLeakEnable
indexModel: false indexModel: false
} }
} // Rectangle - Failsafe Settings
} // Column - Failsafe Settings
Column { QGCLabel {
text: "Detector Pin:"
width: failsafeSettings._labelWidth
visible: leakEnableCombo.currentIndex != 0
anchors.baseline: leakEnableCombo.baseline
}
FactComboBox {
width: failsafeSettings._editWidth
visible: leakEnableCombo.currentIndex != 0
anchors.baseline: leakEnableCombo.baseline
fact: _failsafeLeakPin
}
QGCLabel {
text: "Logic when Dry:"
width: failsafeSettings._labelWidth
visible: leakEnableCombo.currentIndex != 0
anchors.baseline: leakEnableCombo.baseline
}
FactComboBox {
width: failsafeSettings._editWidth
visible: leakEnableCombo.currentIndex != 0
anchors.baseline: leakEnableCombo.baseline
fact: _failsafeLeakLogic
}
}
Row {
spacing: _margins / 2 spacing: _margins / 2
visible: !_firmware34
QGCLabel { QGCLabel {
id: geoFenceLabel id: batteryEnableLabel
text: qsTr("GeoFence") width: failsafeSettings._labelWidth
font.family: ScreenTools.demiboldFontFamily anchors.baseline: batteryEnableCombo.baseline
text: qsTr("Battery:")
} }
Rectangle { FactComboBox {
id: geoFenceSettings id: batteryEnableCombo
width: fenceAltMaxField.x + fenceAltMaxField.width + _margins width: failsafeSettings._editWidth
height: fenceAltMaxField.y + fenceAltMaxField.height + _margins fact: _failsafeBatteryEnable
color: ggcPal.windowShade indexModel: false
}
QGCCheckBox { QGCLabel {
id: altitudeGeo text: "Voltage:"
anchors.margins: _margins width: failsafeSettings._labelWidth
anchors.left: parent.left visible: batteryEnableCombo.currentIndex != 0
anchors.top: parent.top anchors.baseline: batteryEnableCombo.baseline
text: qsTr("Depth GeoFence enabled\n(report only)") }
checked: _fenceEnable.value != 0 && _fenceType.value & 1
FactTextField {
width: failsafeSettings._editWidth
visible: batteryEnableCombo.currentIndex != 0
anchors.baseline: batteryEnableCombo.baseline
fact: _failsafeBatteryVoltage
}
QGCLabel {
text: "Remaining Capacity:"
width: failsafeSettings._labelWidth
visible: batteryEnableCombo.currentIndex != 0
anchors.baseline: batteryEnableCombo.baseline
}
onClicked: { FactTextField {
if (checked) { width: failsafeSettings._editWidth
if (_fenceEnable.value == 1) { visible: batteryEnableCombo.currentIndex != 0
_fenceType.value |= 1 anchors.baseline: batteryEnableCombo.baseline
} else { fact: _failsafeBatteryCapacity
_fenceEnable.value = 1
_fenceType.value = 1
} }
} else {
_fenceEnable.value = 0
_fenceType.value = 0
} }
Row {
spacing: _margins / 2
visible: !_firmware34
QGCLabel {
id: ekfEnableLabel
width: failsafeSettings._labelWidth
anchors.baseline: ekfEnableCombo.baseline
text: qsTr("EKF:")
} }
FactComboBox {
id: ekfEnableCombo
width: failsafeSettings._editWidth
fact: _failsafeEKFEnable
indexModel: false
} }
QGCLabel { QGCLabel {
id: fenceAltMaxLabel text: "Threshold:"
anchors.left: altitudeGeo.left width: failsafeSettings._labelWidth
anchors.baseline: fenceAltMaxField.baseline visible: ekfEnableCombo.currentIndex != 0
text: qsTr("Max depth:") anchors.baseline: ekfEnableCombo.baseline
} }
FactTextField { FactTextField {
id: fenceAltMaxField width: failsafeSettings._editWidth
anchors.topMargin: _margins / 2 visible: ekfEnableCombo.currentIndex != 0
anchors.leftMargin: _margins anchors.baseline: ekfEnableCombo.baseline
anchors.left: fenceAltMaxLabel.right fact: _failsafeEKFThreshold
anchors.top: altitudeGeo.bottom }
fact: _fenceAltMax
showUnits: true
} }
} // Rectangle - GeoFence Settings
} // Column - GeoFence Settings
Column { Row {
spacing: _margins / 2 spacing: _margins / 2
visible: !_firmware34
QGCLabel { QGCLabel {
id: leakDetectorLabel id: pilotEnableLabel
text: qsTr("Leak Detector") width: failsafeSettings._labelWidth
font.family: ScreenTools.demiboldFontFamily anchors.baseline: pilotEnableCombo.baseline
text: qsTr("Pilot Input:")
} }
Rectangle { FactComboBox {
id: leakDetectorSettings id: pilotEnableCombo
width: leakLogicCombo.x + leakLogicCombo.width + _margins width: failsafeSettings._editWidth
height: leakLogicCombo.y + leakLogicCombo.height + _margins fact: _failsafePilotEnable
color: ggcPal.windowShade indexModel: false
}
QGCLabel { QGCLabel {
id: leakPinLabel text: "Timeout:"
anchors.margins: _margins width: failsafeSettings._labelWidth
anchors.left: parent.left visible: pilotEnableCombo.currentIndex != 0
anchors.top: parent.top anchors.baseline: pilotEnableCombo.baseline
text: qsTr("Pin:")
}
FactTextField {
width: failsafeSettings._editWidth
visible: pilotEnableCombo.currentIndex != 0
anchors.baseline: pilotEnableCombo.baseline
fact: _failsafePilotTimeout
}
}
Row {
spacing: _margins / 2
QGCLabel {
id: temperatureEnableLabel
width: failsafeSettings._labelWidth
anchors.baseline: temperatureEnableCombo.baseline
text: qsTr("Internal Temperature:")
} }
FactComboBox { FactComboBox {
id: leakPinCombo id: temperatureEnableCombo
anchors.margins: _margins width: failsafeSettings._editWidth
anchors.left: leakLogicLabel.right fact: _failsafeTemperatureEnable
anchors.baseline: leakPinLabel.baseline
width: ScreenTools.defaultFontPixelWidth*15
fact: _leakPin
indexModel: false indexModel: false
} }
QGCLabel { QGCLabel {
id: leakLogicLabel text: "Threshold:"
anchors.margins: _margins width: failsafeSettings._labelWidth
anchors.left: parent.left visible: temperatureEnableCombo.currentIndex != 0
anchors.top: leakPinLabel.bottom anchors.baseline: temperatureEnableCombo.baseline
text: qsTr("Logic (when dry):") }
FactTextField {
width: failsafeSettings._editWidth
visible: temperatureEnableCombo.currentIndex != 0
anchors.baseline: temperatureEnableCombo.baseline
fact: _failsafeTemperatureThreshold
}
}
Row {
spacing: _margins / 2
QGCLabel {
id: pressureEnableLabel
width: failsafeSettings._labelWidth
anchors.baseline: pressureEnableCombo.baseline
text: qsTr("Internal Pressure:")
} }
FactComboBox { FactComboBox {
id: leakLogicCombo id: pressureEnableCombo
anchors.margins: _margins width: failsafeSettings._editWidth
anchors.left: leakLogicLabel.right fact: _failsafePressureEnable
anchors.baseline: leakLogicLabel.baseline
width: ScreenTools.defaultFontPixelWidth*15
fact: _leakLogic
indexModel: false indexModel: false
} }
} // Rectangle - Leak Detector Settings
} // Column - Leak Detector Settings QGCLabel {
text: "Threshold:"
width: failsafeSettings._labelWidth
visible: pressureEnableCombo.currentIndex != 0
anchors.baseline: pressureEnableCombo.baseline
}
FactTextField {
width: failsafeSettings._editWidth
visible: pressureEnableCombo.currentIndex != 0
anchors.baseline: pressureEnableCombo.baseline
fact: _failsafePressureThreshold
}
}
} // Column - Failsafe Settings
}// Rectangle - Failsafe Settings
} // Column - Failsafe Settings
Column { Column {
spacing: _margins / 2 spacing: _margins / 2

50
src/AutoPilotPlugins/APM/APMSafetyComponentSummarySub.qml

@ -14,14 +14,24 @@ FactPanel {
QGCPalette { id: qgcPal; colorGroupEnabled: enabled } QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
FactPanelController { id: controller; factPanel: panel } FactPanelController { id: controller; factPanel: panel }
// Enable/Action parameters
property Fact _failsafeBatteryEnable: controller.getParameterFact(-1, "FS_BATT_ENABLE")
property Fact _failsafeEKFEnable: controller.getParameterFact(-1, "FS_EKF_ACTION")
property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABLE") property Fact _failsafeGCSEnable: controller.getParameterFact(-1, "FS_GCS_ENABLE")
property Fact _failsafeLeakEnable: controller.getParameterFact(-1, "FS_LEAK_ENABLE") property Fact _failsafeLeakEnable: controller.getParameterFact(-1, "FS_LEAK_ENABLE")
property Fact _failsafePilotEnable: controller.getParameterFact(-1, "FS_PILOT_INPUT")
property Fact _failsafePressureEnable: controller.getParameterFact(-1, "FS_PRESS_ENABLE")
property Fact _failsafeTemperatureEnable: controller.getParameterFact(-1, "FS_TEMP_ENABLE")
property Fact _fenceAction: controller.getParameterFact(-1, "FENCE_ACTION") // Threshold parameters
property Fact _fenceEnable: controller.getParameterFact(-1, "FENCE_ENABLE") property Fact _failsafePressureThreshold: controller.getParameterFact(-1, "FS_PRESS_MAX")
property Fact _fenceType: controller.getParameterFact(-1, "FENCE_TYPE") property Fact _failsafeTemperatureThreshold: controller.getParameterFact(-1, "FS_TEMP_MAX")
property Fact _failsafePilotTimeout: controller.getParameterFact(-1, "FS_PILOT_TIMEOUT")
property Fact _leakPin: controller.getParameterFact(-1, "LEAK1_PIN") property Fact _failsafeLeakPin: controller.getParameterFact(-1, "LEAK1_PIN")
property Fact _failsafeLeakLogic: controller.getParameterFact(-1, "LEAK1_LOGIC")
property Fact _failsafeEKFThreshold: controller.getParameterFact(-1, "FS_EKF_THRESH")
property Fact _failsafeBatteryVoltage: controller.getParameterFact(-1, "FS_BATT_VOLTAGE")
property Fact _failsafeBatteryCapacity: controller.getParameterFact(-1, "FS_BATT_MAH")
property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK") property Fact _armingCheck: controller.getParameterFact(-1, "ARMING_CHECK")
@ -32,35 +42,33 @@ FactPanel {
labelText: qsTr("Arming Checks:") labelText: qsTr("Arming Checks:")
valueText: _armingCheck.value & 1 ? qsTr("Enabled") : qsTr("Some disabled") valueText: _armingCheck.value & 1 ? qsTr("Enabled") : qsTr("Some disabled")
} }
VehicleSummaryRow { VehicleSummaryRow {
labelText: qsTr("GCS failsafe:") labelText: qsTr("GCS failsafe:")
valueText: _failsafeGCSEnable.enumOrValueString valueText: _failsafeGCSEnable.enumOrValueString
} }
VehicleSummaryRow { VehicleSummaryRow {
labelText: qsTr("Leak failsafe:") labelText: qsTr("Leak failsafe:")
valueText: _failsafeLeakEnable.enumOrValueString valueText: _failsafeLeakEnable.enumOrValueString
} }
VehicleSummaryRow { VehicleSummaryRow {
labelText: qsTr("Leak detector:") labelText: qsTr("Battery failsafe:")
valueText: _leakPin.enumOrValueString valueText: _failsafeBatteryEnable.enumOrValueString
} }
VehicleSummaryRow { VehicleSummaryRow {
labelText: qsTr("GeoFence:") labelText: qsTr("EKF failsafe:")
valueText: _fenceEnable.value == 0 || _fenceType == 0 ? valueText: _failsafeEKFEnable.enumOrValueString
qsTr("Disabled") : }
(_fenceType.value == 1 ? VehicleSummaryRow {
qsTr("Depth") : labelText: qsTr("Pilot Input failsafe:")
(_fenceType.value == 2 ? qsTr("Circle") : qsTr("Depth,Circle"))) valueText: _failsafePilotEnable.enumOrValueString
}
VehicleSummaryRow {
labelText: qsTr("Int. Temperature failsafe:")
valueText: _failsafeTemperatureEnable.enumOrValueString
} }
VehicleSummaryRow { VehicleSummaryRow {
labelText: qsTr("GeoFence:") labelText: qsTr("Int. Pressure failsafe:")
valueText: qsTr("Report only") valueText: _failsafePressureEnable.enumOrValueString
visible: _fenceEnable.value != 0
} }
} }
} }

Loading…
Cancel
Save