/**************************************************************************** * * (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.3 import QtQuick.Controls 1.2 import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.2 import QGroundControl.FactSystem 1.0 import QGroundControl.FactControls 1.0 import QGroundControl.Palette 1.0 import QGroundControl.Controls 1.0 import QGroundControl.ScreenTools 1.0 SetupPage { id: powerPage pageComponent: powerPageComponent FactPanelController { id: controller } Component { id: powerPageComponent Flow { id: flowLayout width: availableWidth spacing: _margins property Fact _batt1Monitor: controller.getParameterFact(-1, "BATT_MONITOR") property Fact _batt2Monitor: controller.getParameterFact(-1, "BATT2_MONITOR", false /* reportMissing */) property bool _batt2MonitorAvailable: controller.parameterExists(-1, "BATT2_MONITOR") property bool _batt1MonitorEnabled: _batt1Monitor.rawValue !== 0 property bool _batt2MonitorEnabled: _batt2MonitorAvailable && _batt2Monitor.rawValue !== 0 property bool _batt1ParamsAvailable: controller.parameterExists(-1, "BATT_CAPACITY") property bool _batt2ParamsAvailable: controller.parameterExists(-1, "BATT2_CAPACITY") property bool _showBatt1Reboot: _batt1MonitorEnabled && !_batt1ParamsAvailable property bool _showBatt2Reboot: _batt2MonitorEnabled && !_batt2ParamsAvailable property bool _escCalibrationAvailable: controller.parameterExists(-1, "ESC_CALIBRATION") property Fact _escCalibration: controller.getParameterFact(-1, "ESC_CALIBRATION", false /* reportMissing */) property string _restartRequired: qsTr("Requires vehicle reboot") QGCPalette { id: ggcPal; colorGroupEnabled: true } // Battery1 Monitor settings only - used when only monitor param is available Column { spacing: _margins / 2 visible: !_batt1MonitorEnabled || !_batt1ParamsAvailable QGCLabel { text: qsTr("Battery 1") font.family: ScreenTools.demiboldFontFamily } Rectangle { width: batt1Column.x + batt1Column.width + _margins height: batt1Column.y + batt1Column.height + _margins color: ggcPal.windowShade ColumnLayout { id: batt1Column anchors.margins: _margins anchors.top: parent.top anchors.left: parent.left spacing: ScreenTools.defaultFontPixelWidth RowLayout { id: batt1MonitorRow spacing: ScreenTools.defaultFontPixelWidth QGCLabel { text: qsTr("Battery1 monitor:") } FactComboBox { id: monitor1Combo fact: _batt1Monitor indexModel: false } } QGCLabel { text: _restartRequired visible: _showBatt1Reboot } QGCButton { text: qsTr("Reboot vehicle") visible: _showBatt1Reboot onClicked: controller.vehicle.rebootVehicle() } } } } // Battery 1 settings Column { id: _batt1FullSettings spacing: _margins / 2 visible: _batt1MonitorEnabled && _batt1ParamsAvailable QGCLabel { text: qsTr("Battery 1") font.family: ScreenTools.demiboldFontFamily } Rectangle { width: battery1Loader.x + battery1Loader.width + _margins height: battery1Loader.y + battery1Loader.height + _margins color: ggcPal.windowShade Loader { id: battery1Loader anchors.margins: _margins anchors.top: parent.top anchors.left: parent.left sourceComponent: _batt1FullSettings.visible ? powerSetupComponent : undefined property Fact armVoltMin: controller.getParameterFact(-1, "r.BATT_ARM_VOLT", false /* reportMissing */) property Fact battAmpPerVolt: controller.getParameterFact(-1, "r.BATT_AMP_PERVLT", false /* reportMissing */) property Fact battCapacity: controller.getParameterFact(-1, "BATT_CAPACITY", false /* reportMissing */) property Fact battCurrPin: controller.getParameterFact(-1, "BATT_CURR_PIN", false /* reportMissing */) property Fact battMonitor: controller.getParameterFact(-1, "BATT_MONITOR", false /* reportMissing */) property Fact battVoltMult: controller.getParameterFact(-1, "BATT_VOLT_MULT", false /* reportMissing */) property Fact battVoltPin: controller.getParameterFact(-1, "BATT_VOLT_PIN", false /* reportMissing */) property Fact vehicleVoltage: controller.vehicle.battery.voltage property Fact vehicleCurrent: controller.vehicle.battery.current } } } // Battery2 Monitor settings only - used when only monitor param is available Column { spacing: _margins / 2 visible: !_batt2MonitorEnabled || !_batt2ParamsAvailable QGCLabel { text: qsTr("Battery 2") font.family: ScreenTools.demiboldFontFamily } Rectangle { width: batt2Column.x + batt2Column.width + _margins height: batt2Column.y + batt2Column.height + _margins color: ggcPal.windowShade ColumnLayout { id: batt2Column anchors.margins: _margins anchors.top: parent.top anchors.left: parent.left spacing: ScreenTools.defaultFontPixelWidth RowLayout { id: batt2MonitorRow spacing: ScreenTools.defaultFontPixelWidth QGCLabel { text: qsTr("Battery2 monitor:") } FactComboBox { id: monitor2Combo fact: _batt2Monitor indexModel: false } } QGCLabel { text: _restartRequired visible: _showBatt2Reboot } QGCButton { text: qsTr("Reboot vehicle") visible: _showBatt2Reboot onClicked: controller.vehicle.rebootVehicle() } } } } // Battery 2 settings - Used when full params are available Column { id: batt2FullSettings spacing: _margins / 2 visible: _batt2MonitorEnabled && _batt2ParamsAvailable QGCLabel { text: qsTr("Battery 2") font.family: ScreenTools.demiboldFontFamily } Rectangle { width: battery2Loader.x + battery2Loader.width + _margins height: battery2Loader.y + battery2Loader.height + _margins color: ggcPal.windowShade Loader { id: battery2Loader anchors.margins: _margins anchors.top: parent.top anchors.left: parent.left sourceComponent: batt2FullSettings.visible ? powerSetupComponent : undefined property Fact armVoltMin: controller.getParameterFact(-1, "r.BATT2_ARM_VOLT", false /* reportMissing */) property Fact battAmpPerVolt: controller.getParameterFact(-1, "r.BATT2_AMP_PERVLT", false /* reportMissing */) property Fact battCapacity: controller.getParameterFact(-1, "BATT2_CAPACITY", false /* reportMissing */) property Fact battCurrPin: controller.getParameterFact(-1, "BATT2_CURR_PIN", false /* reportMissing */) property Fact battMonitor: controller.getParameterFact(-1, "BATT2_MONITOR", false /* reportMissing */) property Fact battVoltMult: controller.getParameterFact(-1, "BATT2_VOLT_MULT", false /* reportMissing */) property Fact battVoltPin: controller.getParameterFact(-1, "BATT2_VOLT_PIN", false /* reportMissing */) property Fact vehicleVoltage: controller.vehicle.battery2.voltage property Fact vehicleCurrent: controller.vehicle.battery2.current } } } Column { spacing: _margins / 2 visible: _escCalibrationAvailable QGCLabel { text: qsTr("ESC Calibration") font.family: ScreenTools.demiboldFontFamily } Rectangle { width: escCalibrationHolder.x + escCalibrationHolder.width + _margins height: escCalibrationHolder.y + escCalibrationHolder.height + _margins color: ggcPal.windowShade Column { id: escCalibrationHolder x: _margins y: _margins spacing: _margins Column { spacing: _margins QGCLabel { text: qsTr("WARNING: Remove props prior to calibration!") color: qgcPal.warningText } Row { spacing: _margins QGCButton { text: qsTr("Calibrate") enabled: _escCalibration.rawValue === 0 onClicked: _escCalibration.rawValue = 3 } Column { enabled: _escCalibration.rawValue === 3 QGCLabel { text: _escCalibration.rawValue === 3 ? qsTr("Now perform these steps:") : qsTr("Click Calibrate to start, then:") } QGCLabel { text: qsTr("- Disconnect USB and battery so flight controller powers down") } QGCLabel { text: qsTr("- Connect the battery") } QGCLabel { text: qsTr("- The arming tone will be played (if the vehicle has a buzzer attached)") } QGCLabel { text: qsTr("- If using a flight controller with a safety button press it until it displays solid red") } QGCLabel { text: qsTr("- You will hear a musical tone then two beeps") } QGCLabel { text: qsTr("- A few seconds later you should hear a number of beeps (one for each battery cell you’re using)") } QGCLabel { text: qsTr("- And finally a single long beep indicating the end points have been set and the ESC is calibrated") } QGCLabel { text: qsTr("- Disconnect the battery and power up again normally") } } } } } } } } // Flow } // Component - powerPageComponent Component { id: powerSetupComponent Column { spacing: _margins property real _margins: ScreenTools.defaultFontPixelHeight / 2 property bool _showAdvanced: sensorCombo.currentIndex === sensorModel.count - 1 property real _fieldWidth: ScreenTools.defaultFontPixelWidth * 25 Component.onCompleted: calcSensor() function calcSensor() { for (var i=0; i 0) { _calcVoltageDlgBattVoltMultParam.value = newVoltageMultiplier } } } } // Column } // QGCFlickable } // QGCViewDialog } // Component - calcVoltageMultiplierDlgComponent // Must be set prior to use of calcAmpsPerVoltDlgComponent property Fact _calcAmpsPerVoltDlgVehicleCurrent property Fact _calcAmpsPerVoltDlgBattAmpPerVoltParam Component { id: calcAmpsPerVoltDlgComponent QGCViewDialog { id: calcAmpsPerVoltDlg QGCFlickable { anchors.fill: parent contentHeight: column.height contentWidth: column.width Column { id: column width: calcAmpsPerVoltDlg.width spacing: ScreenTools.defaultFontPixelHeight QGCLabel { width: parent.width wrapMode: Text.WordWrap text: qsTr("Measure current draw using an external current meter and enter the value below. Click Calculate to set the new amps per volt value.") } Grid { columns: 2 spacing: ScreenTools.defaultFontPixelHeight / 2 verticalItemAlignment: Grid.AlignVCenter QGCLabel { text: qsTr("Measured current:") } QGCTextField { id: measuredCurrent } QGCLabel { text: qsTr("Vehicle current:") } FactLabel { fact: _calcAmpsPerVoltDlgVehicleCurrent } QGCLabel { text: qsTr("Amps per volt:") } FactLabel { fact: _calcAmpsPerVoltDlgBattAmpPerVoltParam } } QGCButton { text: qsTr("Calculate And Set") onClicked: { var measuredCurrentValue = parseFloat(measuredCurrent.text) if (measuredCurrentValue == 0) { return } var newAmpsPerVolt = (measuredCurrentValue * _calcAmpsPerVoltDlgBattAmpPerVoltParam.value) / _calcAmpsPerVoltDlgVehicleCurrent.value if (newAmpsPerVolt != 0) { _calcAmpsPerVoltDlgBattAmpPerVoltParam.value = newAmpsPerVolt } } } } // Column } // QGCFlickable } // QGCViewDialog } // Component - calcAmpsPerVoltDlgComponent } // SetupPage