diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index 512e9dc..aa49c23 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -79,6 +79,7 @@
src/QmlControls/QGCFlickable.qml
src/QmlControls/QGCFlickableHorizontalIndicator.qml
src/QmlControls/QGCFlickableVerticalIndicator.qml
+ src/QmlControls/QGCGroupBox.qml
src/QmlControls/QGCLabel.qml
src/QmlControls/QGCListView.qml
src/QmlControls/QGCMapLabel.qml
diff --git a/src/AutoPilotPlugins/PX4/PowerComponent.qml b/src/AutoPilotPlugins/PX4/PowerComponent.qml
index 5b91083..7d992a4 100644
--- a/src/AutoPilotPlugins/PX4/PowerComponent.qml
+++ b/src/AutoPilotPlugins/PX4/PowerComponent.qml
@@ -7,11 +7,6 @@
*
****************************************************************************/
-
-/// @file
-/// @brief Battery, propeller and magnetometer settings
-/// @author Gus Grubba
-
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
@@ -30,527 +25,485 @@ SetupPage {
Component {
id: pageComponent
- Column {
- id: innerColumn
- width: availableWidth
- spacing: ScreenTools.defaultFontPixelHeight * 0.5
-
- property int textEditWidth: ScreenTools.defaultFontPixelWidth * 8
-
- property Fact battNumCells: controller.getParameterFact(-1, "BAT_N_CELLS")
- property Fact battHighVolt: controller.getParameterFact(-1, "BAT_V_CHARGED")
- property Fact battLowVolt: controller.getParameterFact(-1, "BAT_V_EMPTY")
- property Fact battVoltLoadDrop: controller.getParameterFact(-1, "BAT_V_LOAD_DROP")
- property Fact battVoltageDivider: controller.getParameterFact(-1, "BAT_V_DIV")
- property Fact battAmpsPerVolt: controller.getParameterFact(-1, "BAT_A_PER_V")
- property Fact uavcanEnable: controller.getParameterFact(-1, "UAVCAN_ENABLE", false)
-
- readonly property string highlightPrefix: ""
- readonly property string highlightSuffix: ""
-
-
- function getBatteryImage()
- {
- switch(battNumCells.value) {
- case 1: return "/qmlimages/PowerComponentBattery_01cell.svg";
- case 2: return "/qmlimages/PowerComponentBattery_02cell.svg"
- case 3: return "/qmlimages/PowerComponentBattery_03cell.svg"
- case 4: return "/qmlimages/PowerComponentBattery_04cell.svg"
- case 5: return "/qmlimages/PowerComponentBattery_05cell.svg"
- case 6: return "/qmlimages/PowerComponentBattery_06cell.svg"
- default: return "/qmlimages/PowerComponentBattery_01cell.svg";
+ Item {
+ width: Math.max(availableWidth, innerColumn.width)
+ height: innerColumn.height
+
+ ColumnLayout {
+ id: innerColumn
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: ScreenTools.defaultFontPixelHeight
+
+ property int textEditWidth: ScreenTools.defaultFontPixelWidth * 8
+
+ property Fact battNumCells: controller.getParameterFact(-1, "BAT_N_CELLS")
+ property Fact battHighVolt: controller.getParameterFact(-1, "BAT_V_CHARGED")
+ property Fact battLowVolt: controller.getParameterFact(-1, "BAT_V_EMPTY")
+ property Fact battVoltLoadDrop: controller.getParameterFact(-1, "BAT_V_LOAD_DROP")
+ property Fact battVoltageDivider: controller.getParameterFact(-1, "BAT_V_DIV")
+ property Fact battAmpsPerVolt: controller.getParameterFact(-1, "BAT_A_PER_V")
+ property Fact uavcanEnable: controller.getParameterFact(-1, "UAVCAN_ENABLE", false)
+
+ readonly property string highlightPrefix: ""
+ readonly property string highlightSuffix: ""
+
+
+ function getBatteryImage()
+ {
+ switch(battNumCells.value) {
+ case 1: return "/qmlimages/PowerComponentBattery_01cell.svg";
+ case 2: return "/qmlimages/PowerComponentBattery_02cell.svg"
+ case 3: return "/qmlimages/PowerComponentBattery_03cell.svg"
+ case 4: return "/qmlimages/PowerComponentBattery_04cell.svg"
+ case 5: return "/qmlimages/PowerComponentBattery_05cell.svg"
+ case 6: return "/qmlimages/PowerComponentBattery_06cell.svg"
+ default: return "/qmlimages/PowerComponentBattery_01cell.svg";
+ }
}
- }
-
- function drawArrowhead(ctx, x, y, radians)
- {
- ctx.save();
- ctx.beginPath();
- ctx.translate(x,y);
- ctx.rotate(radians);
- ctx.moveTo(0,0);
- ctx.lineTo(5,10);
- ctx.lineTo(-5,10);
- ctx.closePath();
- ctx.restore();
- ctx.fill();
- }
-
- function drawLineWithArrow(ctx, x1, y1, x2, y2)
- {
- ctx.beginPath();
- ctx.moveTo(x1, y1);
- ctx.lineTo(x2, y2);
- ctx.stroke();
- var rd = Math.atan((y2 - y1) / (x2 - x1));
- rd += ((x2 > x1) ? 90 : -90) * Math.PI/180;
- drawArrowhead(ctx, x2, y2, rd);
- }
-
- PowerComponentController {
- id: controller
- factPanel: powerPage.viewPanel
-
- onOldFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware."), StandardButton.Ok)
- onNewerFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl."), StandardButton.Ok)
- onBatteryConnected: showMessage(qsTr("ESC Calibration"), qsTr("Performing calibration. This will take a few seconds.."), 0)
- onCalibrationFailed: showMessage(qsTr("ESC Calibration failed"), errorMessage, StandardButton.Ok)
- onCalibrationSuccess: showMessage(qsTr("ESC Calibration"), qsTr("Calibration complete. You can disconnect your battery now if you like."), StandardButton.Ok)
- onConnectBattery: showMessage(qsTr("ESC Calibration"), highlightPrefix + qsTr("WARNING: Props must be removed from vehicle prior to performing ESC calibration.") + highlightSuffix + qsTr(" Connect the battery now and calibration will begin."), 0)
- onDisconnectBattery: showMessage(qsTr("ESC Calibration failed"), qsTr("You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again."), StandardButton.Ok)
- }
-
- Component {
- id: calcVoltageDividerDlgComponent
-
- QGCViewDialog {
- id: calcVoltageDividerDlg
-
- QGCFlickable {
- anchors.fill: parent
- contentHeight: column.height
- contentWidth: column.width
-
- Column {
- id: column
- width: calcVoltageDividerDlg.width
- spacing: ScreenTools.defaultFontPixelHeight
- QGCLabel {
- width: parent.width
- wrapMode: Text.WordWrap
- text: "Measure battery voltage using an external voltmeter and enter the value below. Click Calculate to set the new voltage multiplier."
- }
+ function drawArrowhead(ctx, x, y, radians)
+ {
+ ctx.save();
+ ctx.beginPath();
+ ctx.translate(x,y);
+ ctx.rotate(radians);
+ ctx.moveTo(0,0);
+ ctx.lineTo(5,10);
+ ctx.lineTo(-5,10);
+ ctx.closePath();
+ ctx.restore();
+ ctx.fill();
+ }
+
+ function drawLineWithArrow(ctx, x1, y1, x2, y2)
+ {
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ var rd = Math.atan((y2 - y1) / (x2 - x1));
+ rd += ((x2 > x1) ? 90 : -90) * Math.PI/180;
+ drawArrowhead(ctx, x2, y2, rd);
+ }
+
+ PowerComponentController {
+ id: controller
+ factPanel: powerPage.viewPanel
+
+ onOldFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware."), StandardButton.Ok)
+ onNewerFirmware: showMessage(qsTr("ESC Calibration"), qsTr("QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl."), StandardButton.Ok)
+ onBatteryConnected: showMessage(qsTr("ESC Calibration"), qsTr("Performing calibration. This will take a few seconds.."), 0)
+ onCalibrationFailed: showMessage(qsTr("ESC Calibration failed"), errorMessage, StandardButton.Ok)
+ onCalibrationSuccess: showMessage(qsTr("ESC Calibration"), qsTr("Calibration complete. You can disconnect your battery now if you like."), StandardButton.Ok)
+ onConnectBattery: showMessage(qsTr("ESC Calibration"), highlightPrefix + qsTr("WARNING: Props must be removed from vehicle prior to performing ESC calibration.") + highlightSuffix + qsTr(" Connect the battery now and calibration will begin."), 0)
+ onDisconnectBattery: showMessage(qsTr("ESC Calibration failed"), qsTr("You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again."), StandardButton.Ok)
+ }
+
+ Component {
+ id: calcVoltageDividerDlgComponent
+
+ QGCViewDialog {
+ id: calcVoltageDividerDlg
- Grid {
- columns: 2
- spacing: ScreenTools.defaultFontPixelHeight / 2
- verticalItemAlignment: Grid.AlignVCenter
+ QGCFlickable {
+ anchors.fill: parent
+ contentHeight: column.height
+ contentWidth: column.width
+
+ Column {
+ id: column
+ width: calcVoltageDividerDlg.width
+ spacing: ScreenTools.defaultFontPixelHeight
QGCLabel {
- text: "Measured voltage:"
+ width: parent.width
+ wrapMode: Text.WordWrap
+ text: "Measure battery voltage using an external voltmeter and enter the value below. Click Calculate to set the new voltage multiplier."
}
- QGCTextField { id: measuredVoltage }
- QGCLabel { text: "Vehicle voltage:" }
- QGCLabel { text: controller.vehicle.battery.voltage.valueString }
+ Grid {
+ columns: 2
+ spacing: ScreenTools.defaultFontPixelHeight / 2
+ verticalItemAlignment: Grid.AlignVCenter
- QGCLabel { text: "Voltage divider:" }
- FactLabel { fact: battVoltageDivider }
- }
+ QGCLabel {
+ text: "Measured voltage:"
+ }
+ QGCTextField { id: measuredVoltage }
- QGCButton {
- text: "Calculate"
+ QGCLabel { text: "Vehicle voltage:" }
+ QGCLabel { text: controller.vehicle.battery.voltage.valueString }
- onClicked: {
- var measuredVoltageValue = parseFloat(measuredVoltage.text)
- if (measuredVoltageValue == 0 || isNaN(measuredVoltageValue)) {
- return
- }
- var newVoltageDivider = (measuredVoltageValue * battVoltageDivider.value) / controller.vehicle.battery.voltage.value
- if (newVoltageDivider > 0) {
- battVoltageDivider.value = newVoltageDivider
- }
+ QGCLabel { text: "Voltage divider:" }
+ FactLabel { fact: battVoltageDivider }
}
- }
- } // Column
- } // QGCFlickable
- } // QGCViewDialog
- } // Component - calcVoltageDividerDlgComponent
-
- Component {
- id: calcAmpsPerVoltDlgComponent
- QGCViewDialog {
- id: calcAmpsPerVoltDlg
+ QGCButton {
+ text: "Calculate"
+
+ onClicked: {
+ var measuredVoltageValue = parseFloat(measuredVoltage.text)
+ if (measuredVoltageValue == 0 || isNaN(measuredVoltageValue)) {
+ return
+ }
+ var newVoltageDivider = (measuredVoltageValue * battVoltageDivider.value) / controller.vehicle.battery.voltage.value
+ if (newVoltageDivider > 0) {
+ battVoltageDivider.value = newVoltageDivider
+ }
+ }
+ }
+ } // Column
+ } // QGCFlickable
+ } // QGCViewDialog
+ } // Component - calcVoltageDividerDlgComponent
- QGCFlickable {
- anchors.fill: parent
- contentHeight: column.height
- contentWidth: column.width
+ Component {
+ id: calcAmpsPerVoltDlgComponent
- Column {
- id: column
- width: calcAmpsPerVoltDlg.width
- spacing: ScreenTools.defaultFontPixelHeight
+ QGCViewDialog {
+ id: calcAmpsPerVoltDlg
- QGCLabel {
- width: parent.width
- wrapMode: Text.WordWrap
- text: "Measure current draw using an external current meter and enter the value below. Click Calculate to set the new amps per volt value."
- }
+ QGCFlickable {
+ anchors.fill: parent
+ contentHeight: column.height
+ contentWidth: column.width
- Grid {
- columns: 2
- spacing: ScreenTools.defaultFontPixelHeight / 2
- verticalItemAlignment: Grid.AlignVCenter
+ Column {
+ id: column
+ width: calcAmpsPerVoltDlg.width
+ spacing: ScreenTools.defaultFontPixelHeight
QGCLabel {
- text: "Measured current:"
+ width: parent.width
+ wrapMode: Text.WordWrap
+ text: "Measure current draw using an external current meter and enter the value below. Click Calculate to set the new amps per volt value."
}
- QGCTextField { id: measuredCurrent }
- QGCLabel { text: "Vehicle current:" }
- QGCLabel { text: controller.vehicle.battery.current.valueString }
+ Grid {
+ columns: 2
+ spacing: ScreenTools.defaultFontPixelHeight / 2
+ verticalItemAlignment: Grid.AlignVCenter
- QGCLabel { text: "Amps per volt:" }
- FactLabel { fact: battAmpsPerVolt }
- }
+ QGCLabel {
+ text: "Measured current:"
+ }
+ QGCTextField { id: measuredCurrent }
- QGCButton {
- text: "Calculate"
+ QGCLabel { text: "Vehicle current:" }
+ QGCLabel { text: controller.vehicle.battery.current.valueString }
- onClicked: {
- var measuredCurrentValue = parseFloat(measuredCurrent.text)
- if (measuredCurrentValue == 0) {
- return
- }
- var newAmpsPerVolt = (measuredCurrentValue * battAmpsPerVolt.value) / controller.vehicle.battery.current.value
- if (newAmpsPerVolt != 0) {
- battAmpsPerVolt.value = newAmpsPerVolt
+ QGCLabel { text: "Amps per volt:" }
+ FactLabel { fact: battAmpsPerVolt }
+ }
+
+ QGCButton {
+ text: "Calculate"
+
+ onClicked: {
+ var measuredCurrentValue = parseFloat(measuredCurrent.text)
+ if (measuredCurrentValue == 0) {
+ return
+ }
+ var newAmpsPerVolt = (measuredCurrentValue * battAmpsPerVolt.value) / controller.vehicle.battery.current.value
+ if (newAmpsPerVolt != 0) {
+ battAmpsPerVolt.value = newAmpsPerVolt
+ }
}
}
- }
- } // Column
- } // QGCFlickable
- } // QGCViewDialog
- } // Component - calcAmpsPerVoltDlgComponent
-
-
- QGCLabel {
- text: qsTr("Battery")
- font.family: ScreenTools.demiboldFontFamily
- }
-
- Rectangle {
- width: parent.width
- height: batteryGrid.height + ScreenTools.defaultFontPixelHeight
- color: qgcPal.windowShade
-
- GridLayout {
- id: batteryGrid
- anchors.margins: ScreenTools.defaultFontPixelHeight / 2
- anchors.left: parent.left
- anchors.top: parent.top
- columns: 5
- columnSpacing: ScreenTools.defaultFontPixelWidth
-
- QGCLabel {
- text: qsTr("Number of Cells (in Series)")
- }
+ } // Column
+ } // QGCFlickable
+ } // QGCViewDialog
+ } // Component - calcAmpsPerVoltDlgComponent
- FactTextField {
- id: cellsField
- width: textEditWidth
- fact: battNumCells
- showUnits: true
- }
+ QGCGroupBox {
+ id: batteryGroup
+ title: qsTr("Battery")
- QGCColoredImage {
- id: batteryImage
- Layout.rowSpan: 3
- width: height * 0.75
- height: 100
- sourceSize.height: height
- fillMode: Image.PreserveAspectFit
- smooth: true
- color: qgcPal.text
- cache: false
- source: getBatteryImage();
- }
+ GridLayout {
+ id: batteryGrid
+ columns: 5
+ columnSpacing: ScreenTools.defaultFontPixelWidth
- Item { width: 1; height: 1; Layout.columnSpan: 2 }
+ QGCLabel {
+ text: qsTr("Number of Cells (in Series)")
+ }
- QGCLabel {
- id: battHighLabel
- text: qsTr("Full Voltage (per cell)")
- }
+ FactTextField {
+ id: cellsField
+ width: textEditWidth
+ fact: battNumCells
+ showUnits: true
+ }
- FactTextField {
- id: battHighField
- width: textEditWidth
- fact: battHighVolt
- showUnits: true
- }
+ QGCColoredImage {
+ id: batteryImage
+ Layout.rowSpan: 3
+ width: height * 0.75
+ height: 100
+ sourceSize.height: height
+ fillMode: Image.PreserveAspectFit
+ smooth: true
+ color: qgcPal.text
+ cache: false
+ source: getBatteryImage();
+ }
- QGCLabel {
- text: qsTr("Battery Max:")
- }
+ Item { width: 1; height: 1; Layout.columnSpan: 2 }
- QGCLabel {
- text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V'
- }
+ QGCLabel {
+ id: battHighLabel
+ text: qsTr("Full Voltage (per cell)")
+ }
- QGCLabel {
- id: battLowLabel
- text: qsTr("Empty Voltage (per cell)")
- }
+ FactTextField {
+ id: battHighField
+ width: textEditWidth
+ fact: battHighVolt
+ showUnits: true
+ }
- FactTextField {
- id: battLowField
- width: textEditWidth
- fact: battLowVolt
- showUnits: true
- }
+ QGCLabel {
+ text: qsTr("Battery Max:")
+ }
- QGCLabel {
- text: qsTr("Battery Min:")
- }
+ QGCLabel {
+ text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V'
+ }
- QGCLabel {
- text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V'
- }
+ QGCLabel {
+ id: battLowLabel
+ text: qsTr("Empty Voltage (per cell)")
+ }
- QGCLabel {
- text: qsTr("Voltage divider")
- }
+ FactTextField {
+ id: battLowField
+ width: textEditWidth
+ fact: battLowVolt
+ showUnits: true
+ }
- FactTextField {
- id: voltMultField
- fact: battVoltageDivider
- }
+ QGCLabel {
+ text: qsTr("Battery Min:")
+ }
- QGCButton {
- id: voltMultCalculateButton
- text: "Calculate"
- onClicked: showDialog(calcVoltageDividerDlgComponent, qsTr("Calculate Voltage Divider"), powerPage.showDialogDefaultWidth, StandardButton.Close)
- }
+ QGCLabel {
+ text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V'
+ }
- Item { width: 1; height: 1; Layout.columnSpan: 2 }
+ QGCLabel {
+ text: qsTr("Voltage divider")
+ }
- QGCLabel {
- id: voltMultHelp
- Layout.columnSpan: batteryGrid.columns
- Layout.fillWidth: true
- font.pointSize: ScreenTools.smallFontPointSize
- wrapMode: Text.WordWrap
- text: "If the battery voltage reported by the vehicle is largely different than the voltage read externally using a voltmeter you can adjust the voltage multiplier value to correct this. " +
- "Click the Calculate button for help with calculating a new value."
- }
+ FactTextField {
+ id: voltMultField
+ fact: battVoltageDivider
+ }
- QGCLabel {
- id: ampPerVoltLabel
- text: qsTr("Amps per volt")
- }
+ QGCButton {
+ id: voltMultCalculateButton
+ text: "Calculate"
+ onClicked: showDialog(calcVoltageDividerDlgComponent, qsTr("Calculate Voltage Divider"), powerPage.showDialogDefaultWidth, StandardButton.Close)
+ }
- FactTextField {
- id: ampPerVoltField
- fact: battAmpsPerVolt
- }
+ Item { width: 1; height: 1; Layout.columnSpan: 2 }
- QGCButton {
- id: ampPerVoltCalculateButton
- text: "Calculate"
- onClicked: showDialog(calcAmpsPerVoltDlgComponent, qsTr("Calculate Amps per Volt"), powerPage.showDialogDefaultWidth, StandardButton.Close)
- }
+ QGCLabel {
+ id: voltMultHelp
+ Layout.columnSpan: batteryGrid.columns
+ Layout.fillWidth: true
+ font.pointSize: ScreenTools.smallFontPointSize
+ wrapMode: Text.WordWrap
+ text: "If the battery voltage reported by the vehicle is largely different than the voltage read externally using a voltmeter you can adjust the voltage multiplier value to correct this. " +
+ "Click the Calculate button for help with calculating a new value."
+ }
- Item { width: 1; height: 1; Layout.columnSpan: 2 }
+ QGCLabel {
+ id: ampPerVoltLabel
+ text: qsTr("Amps per volt")
+ }
- QGCLabel {
- id: ampPerVoltHelp
- Layout.columnSpan: batteryGrid.columns
- Layout.fillWidth: true
- font.pointSize: ScreenTools.smallFontPointSize
- wrapMode: Text.WordWrap
- text: "If the current draw reported by the vehicle is largely different than the current read externally using a current meter you can adjust the amps per volt value to correct this. " +
- "Click the Calculate button for help with calculating a new value."
- }
- } // Grid
- } // Rectangle - Battery settings
-
- QGCLabel {
- text: qsTr("ESC PWM Minimum and Maximum Calibration")
- font.family: ScreenTools.demiboldFontFamily
- }
-
- Rectangle {
- width: parent.width
- height: escCalColumn.height + ScreenTools.defaultFontPixelHeight
- color: qgcPal.windowShade
-
- Column {
- id : escCalColumn
- anchors.margins: ScreenTools.defaultFontPixelHeight / 2
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- spacing: ScreenTools.defaultFontPixelWidth
-
- QGCLabel {
- width: parent.width
- color: qgcPal.warningText
- wrapMode: Text.WordWrap
- text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing ESC calibration.")
- }
+ FactTextField {
+ id: ampPerVoltField
+ fact: battAmpsPerVolt
+ }
- QGCLabel {
- text: qsTr("You must use USB connection for this operation.")
- }
+ QGCButton {
+ id: ampPerVoltCalculateButton
+ text: "Calculate"
+ onClicked: showDialog(calcAmpsPerVoltDlgComponent, qsTr("Calculate Amps per Volt"), powerPage.showDialogDefaultWidth, StandardButton.Close)
+ }
- QGCButton {
- text: qsTr("Calibrate")
- width: ScreenTools.defaultFontPixelWidth * 20
- onClicked: controller.calibrateEsc()
- }
- }
- }
-
- QGCCheckBox {
- id: showUAVCAN
- text: qsTr("Show UAVCAN Settings")
- checked: uavcanEnable.rawValue != 0
- }
-
- QGCLabel {
- text: qsTr("UAVCAN Bus Configuration")
- font.family: ScreenTools.demiboldFontFamily
- visible: showUAVCAN.checked
- }
-
- Rectangle {
- width: parent.width
- height: uavCanConfigRow.height + ScreenTools.defaultFontPixelHeight
- color: qgcPal.windowShade
- visible: showUAVCAN.checked
-
- Row {
- id: uavCanConfigRow
- anchors.margins: ScreenTools.defaultFontPixelHeight / 2
- anchors.left: parent.left
- anchors.top: parent.top
- spacing: ScreenTools.defaultFontPixelWidth
-
- FactComboBox {
- id: uavcanEnabledCheckBox
- width: ScreenTools.defaultFontPixelWidth * 20
- fact: uavcanEnable
- indexModel: false
- }
+ Item { width: 1; height: 1; Layout.columnSpan: 2 }
- QGCLabel {
- anchors.verticalCenter: parent.verticalCenter
- text: qsTr("Change required restart")
- }
- }
- }
-
- QGCLabel {
- text: qsTr("UAVCAN Motor Index and Direction Assignment")
- font.family: ScreenTools.demiboldFontFamily
- visible: showUAVCAN.checked
- }
-
- Rectangle {
- width: parent.width
- height: uavCanEscCalColumn.height + ScreenTools.defaultFontPixelHeight
- color: qgcPal.windowShade
- visible: showUAVCAN.checked
- enabled: uavcanEnabledCheckBox.checked
-
- Column {
- id: uavCanEscCalColumn
- anchors.margins: ScreenTools.defaultFontPixelHeight / 2
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- spacing: ScreenTools.defaultFontPixelWidth
-
- QGCLabel {
- width: parent.width
- wrapMode: Text.WordWrap
- color: qgcPal.warningText
- text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration.")
- }
+ QGCLabel {
+ id: ampPerVoltHelp
+ Layout.columnSpan: batteryGrid.columns
+ Layout.fillWidth: true
+ font.pointSize: ScreenTools.smallFontPointSize
+ wrapMode: Text.WordWrap
+ text: "If the current draw reported by the vehicle is largely different than the current read externally using a current meter you can adjust the amps per volt value to correct this. " +
+ "Click the Calculate button for help with calculating a new value."
+ }
+ } // Grid
+ } // QGCGroupBox - Battery settings
- QGCLabel {
- width: parent.width
- wrapMode: Text.WordWrap
- text: qsTr("ESC parameters will only be accessible in the editor after assignment.")
- }
+ QGCGroupBox {
+ anchors.left: batteryGroup.left
+ anchors.right: batteryGroup.right
+ title: qsTr("ESC PWM Minimum and Maximum Calibration")
- QGCLabel {
- width: parent.width
- wrapMode: Text.WordWrap
- text: qsTr("Start the process, then turn each motor into its turn direction, in the order of their motor indices.")
- }
+ ColumnLayout {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ spacing: ScreenTools.defaultFontPixelWidth
- QGCButton {
- text: qsTr("Start Assignment")
- width: ScreenTools.defaultFontPixelWidth * 20
- onClicked: controller.busConfigureActuators()
- }
+ QGCLabel {
+ color: qgcPal.warningText
+ wrapMode: Text.WordWrap
+ text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing ESC calibration.")
+ Layout.fillWidth: true
+ }
+
+ QGCLabel {
+ text: qsTr("You must use USB connection for this operation.")
+ }
- QGCButton {
- text: qsTr("Stop Assignment")
- width: ScreenTools.defaultFontPixelWidth * 20
- onClicked: controller.stopBusConfigureActuators()
+ QGCButton {
+ text: qsTr("Calibrate")
+ width: ScreenTools.defaultFontPixelWidth * 20
+ onClicked: controller.calibrateEsc()
+ }
}
}
- }
-
- QGCCheckBox {
- id: showAdvanced
- text: qsTr("Show Advanced Settings")
- }
-
- QGCLabel {
- text: qsTr("Advanced Power Settings")
- font.family: ScreenTools.demiboldFontFamily
- visible: showAdvanced.checked
- }
-
- Rectangle {
- id: batteryRectangle
- width: parent.width
- height: advBatteryColumn.height + ScreenTools.defaultFontPixelHeight
- color: qgcPal.windowShade
- visible: showAdvanced.checked
-
- Column {
- id: advBatteryColumn
- anchors.margins: ScreenTools.defaultFontPixelHeight / 2
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- spacing: ScreenTools.defaultFontPixelWidth
- Row {
- spacing: ScreenTools.defaultFontPixelWidth
+ QGCCheckBox {
+ id: showUAVCAN
+ text: qsTr("Show UAVCAN Settings")
+ checked: uavcanEnable.rawValue != 0
+ }
- QGCLabel {
- text: qsTr("Voltage Drop on Full Load (per cell)")
- anchors.baseline: battDropField.baseline
+ QGCGroupBox {
+ anchors.left: batteryGroup.left
+ anchors.right: batteryGroup.right
+ title: qsTr("UAVCAN Bus Configuration")
+ visible: showUAVCAN.checked
+
+ Row {
+ id: uavCanConfigRow
+ spacing: ScreenTools.defaultFontPixelWidth
+
+ FactComboBox {
+ id: uavcanEnabledCheckBox
+ width: ScreenTools.defaultFontPixelWidth * 20
+ fact: uavcanEnable
+ indexModel: false
}
- FactTextField {
- id: battDropField
- width: textEditWidth
- fact: battVoltLoadDrop
- showUnits: true
+ QGCLabel {
+ anchors.verticalCenter: parent.verticalCenter
+ text: qsTr("Change required restart")
}
}
+ }
- QGCLabel {
- width: parent.width
- wrapMode: Text.WordWrap
- text: qsTr("Batteries show less voltage at high throttle. Enter the difference in Volts between idle throttle and full ") +
- qsTr("throttle, divided by the number of battery cells. Leave at the default if unsure. ") +
- highlightPrefix + qsTr("If this value is set too high, the battery might be deep discharged and damaged.") + highlightSuffix
- }
+ QGCGroupBox {
+ anchors.left: batteryGroup.left
+ anchors.right: batteryGroup.right
+ title: qsTr("UAVCAN Motor Index and Direction Assignment")
+ visible: showUAVCAN.checked
- Row {
- spacing: ScreenTools.defaultFontPixelWidth
+ ColumnLayout {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ spacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
- text: qsTr("Compensated Minimum Voltage:")
+ wrapMode: Text.WordWrap
+ color: qgcPal.warningText
+ text: qsTr("WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration.")
+ Layout.fillWidth: true
}
QGCLabel {
- text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + qsTr(" V")
+ wrapMode: Text.WordWrap
+ text: qsTr("ESC parameters will only be accessible in the editor after assignment.")
+ Layout.fillWidth: true
+ }
+
+ QGCLabel {
+ wrapMode: Text.WordWrap
+ text: qsTr("Start the process, then turn each motor into its turn direction, in the order of their motor indices.")
+ Layout.fillWidth: true
+ }
+
+ QGCButton {
+ text: qsTr("Start Assignment")
+ width: ScreenTools.defaultFontPixelWidth * 20
+ onClicked: controller.busConfigureActuators()
+ }
+
+ QGCButton {
+ text: qsTr("Stop Assignment")
+ width: ScreenTools.defaultFontPixelWidth * 20
+ onClicked: controller.stopBusConfigureActuators()
}
}
}
- } // Rectangle - Advanced power settings
- } // Column
+
+ QGCCheckBox {
+ id: showAdvanced
+ text: qsTr("Show Advanced Settings")
+ }
+
+ QGCGroupBox {
+ anchors.left: batteryGroup.left
+ anchors.right: batteryGroup.right
+ title: qsTr("Advanced Power Settings")
+ visible: showAdvanced.checked
+
+ ColumnLayout {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ spacing: ScreenTools.defaultFontPixelWidth
+
+ Row {
+ spacing: ScreenTools.defaultFontPixelWidth
+
+ QGCLabel {
+ text: qsTr("Voltage Drop on Full Load (per cell)")
+ anchors.baseline: battDropField.baseline
+ }
+
+ FactTextField {
+ id: battDropField
+ width: textEditWidth
+ fact: battVoltLoadDrop
+ showUnits: true
+ }
+ }
+
+ QGCLabel {
+ wrapMode: Text.WordWrap
+ text: qsTr("Batteries show less voltage at high throttle. Enter the difference in Volts between idle throttle and full ") +
+ qsTr("throttle, divided by the number of battery cells. Leave at the default if unsure. ") +
+ highlightPrefix + qsTr("If this value is set too high, the battery might be deep discharged and damaged.") + highlightSuffix
+ Layout.fillWidth: true
+ }
+
+ Row {
+ spacing: ScreenTools.defaultFontPixelWidth
+
+ QGCLabel {
+ text: qsTr("Compensated Minimum Voltage:")
+ }
+
+ QGCLabel {
+ text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + qsTr(" V")
+ }
+ }
+ } // Column
+ } // QGCGroupBox - Advanced power settings
+ } // Column
+ } // Item
} // Component
} // SetupPage
diff --git a/src/QmlControls/QGCGroupBox.qml b/src/QmlControls/QGCGroupBox.qml
new file mode 100644
index 0000000..6021797
--- /dev/null
+++ b/src/QmlControls/QGCGroupBox.qml
@@ -0,0 +1,32 @@
+/****************************************************************************
+ *
+ * (c) 2009-2016 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+import QtQuick 2.2
+import QtQuick.Controls 2.0
+
+import QGroundControl.Palette 1.0
+import QGroundControl.ScreenTools 1.0
+
+GroupBox {
+ id: control
+
+ QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
+
+ background: Rectangle {
+ y: control.topPadding - control.padding
+ width: parent.width
+ height: parent.height - control.topPadding + control.padding
+ color: qgcPal.windowShade
+ }
+
+ label: QGCLabel {
+ width: control.availableWidth
+ text: control.title
+ }
+}
diff --git a/src/QmlControls/QGroundControl.Controls.qmldir b/src/QmlControls/QGroundControl.Controls.qmldir
index 2040fed..97d45d6 100644
--- a/src/QmlControls/QGroundControl.Controls.qmldir
+++ b/src/QmlControls/QGroundControl.Controls.qmldir
@@ -31,6 +31,7 @@ QGCCheckBox 1.0 QGCCheckBox.qml
QGCColoredImage 1.0 QGCColoredImage.qml
QGCComboBox 1.0 QGCComboBox.qml
QGCFlickable 1.0 QGCFlickable.qml
+QGCGroupBox 1.0 QGCGroupBox.qml
QGCLabel 1.0 QGCLabel.qml
QGCListView 1.0 QGCListView.qml
QGCMapLabel 1.0 QGCMapLabel.qml