PowerComponent.qml 13 KB
Newer Older
dogmaphobic's avatar
dogmaphobic committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/*=====================================================================

 QGroundControl Open Source Ground Control Station

 (c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

 This file is part of the QGROUNDCONTROL project

 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 QGROUNDCONTROL is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.

 ======================================================================*/

/// @file
///     @brief Battery, propeller and magnetometer settings
///     @author Gus Grubba <mavlink@grubba.com>

import QtQuick 2.2
import QtQuick.Controls 1.2
30
import QtQuick.Dialogs 1.2
dogmaphobic's avatar
dogmaphobic committed
31 32 33 34 35

import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
36
import QGroundControl.ScreenTools 1.0
37
import QGroundControl.Controllers 1.0
dogmaphobic's avatar
dogmaphobic committed
38

39
QGCView {
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
    id:         rootQGCView
    viewPanel:  panel

    property int firstColumnWidth: 220
    property int textEditWidth:    80

    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 alias battHigh: battHighRow
    property alias battLow:  battLowRow

    function getBatteryImage()
    {
        switch(battNumCells.value) {
            case 1:  return "/qml/PowerComponentBattery_01cell.svg";
            case 2:  return "/qml/PowerComponentBattery_02cell.svg"
            case 3:  return "/qml/PowerComponentBattery_03cell.svg"
            case 4:  return "/qml/PowerComponentBattery_04cell.svg"
            case 5:  return "/qml/PowerComponentBattery_05cell.svg"
            case 6:  return "/qml/PowerComponentBattery_06cell.svg"
            default: return "/qml/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:  panel

        onOldFirmware:          showMessage("ESC Calibration", "QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware.", StandardButton.Ok)
        onNewerFirmware:        showMessage("ESC Calibration", "QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl.", StandardButton.Ok)
        onBatteryConnected:     showMessage("ESC Calibration", "Performing calibration. This will take a few seconds..", 0)
        onCalibrationFailed:    showMessage("ESC Calibration failed", errorMessage, StandardButton.Ok)
        onCalibrationSuccess:   showMessage("ESC Calibration", "Calibration complete. You can disconnect your battery now if you like.", StandardButton.Ok)
        onConnectBattery:       showMessage("ESC Calibration", "WARNING: Props must be removed from vehicle prior to performing ESC calibration.\n\nConnect the battery now and calibration will begin.", 0)
        onDisconnectBattery:    showMessage("ESC Calibration failed", "You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again.", StandardButton.Ok)
    }

    QGCPalette { id: palette; colorGroupEnabled: panel.enabled }

    QGCViewPanel {
        id:             panel
        anchors.fill:   parent


        Column {
            anchors.fill: parent
            spacing: 10

            QGCLabel {
                text: "POWER CONFIG"
118
                font.pixelSize: ScreenTools.largeFontPixelSize
119 120
            }

121 122
            QGCLabel {
                text: "Battery"
123
                font.pixelSize: ScreenTools.mediumFontPixelSize
124 125
            }

126 127 128 129
            Rectangle {
                width: parent.width
                height: 120
                color: palette.windowShade
130

131 132 133 134 135
                Column {
                    id: batteryColumn
                    spacing: 10
                    anchors.verticalCenter: parent.verticalCenter
                    x: (parent.x + 20)
136

137
                    Row {
138
                        spacing: 10
139 140
                        Column {
                            id: voltageCol
141
                            spacing: 10
142
                            Row {
143
                                spacing: 10
144 145 146 147 148 149
                                QGCLabel { text: "Number of Cells (in Series)"; width: firstColumnWidth; anchors.baseline: cellsField.baseline}
                                FactTextField {
                                    id: cellsField
                                    width: textEditWidth
                                    fact: battNumCells
                                    showUnits: true
150
                                }
151 152 153 154 155 156 157 158 159 160
                            }
                            Row {
                                id: battHighRow
                                spacing: 10
                                QGCLabel { text: "Full Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battHighField.baseline}
                                FactTextField {
                                    id: battHighField
                                    width: textEditWidth
                                    fact: battHighVolt
                                    showUnits: true
161
                                }
162
                            }
163 164 165 166 167 168 169 170 171
                            Row {
                                id: battLowRow
                                spacing: 10
                                QGCLabel { text: "Empty Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battLowField.baseline}
                                FactTextField {
                                    id: battLowField
                                    width: textEditWidth
                                    fact: battLowVolt
                                    showUnits: true
172
                                }
173 174 175 176 177 178 179 180 181 182 183
                            }
                        }
                        Canvas {
                            id: arrows
                            height: voltageCol.height
                            width: 40
                            antialiasing: true
                            Connections {
                                target: ScreenTools
                                onRepaintRequestedChanged: {
                                    arrows.requestPaint();
184
                                }
185
                            }
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
                            onPaint: {
                                var y0 = voltageCol.mapFromItem(battHigh, 0, battHigh.height / 2).y;
                                var y1 = voltageCol.mapFromItem(battLow,  0, battLow.height  / 2).y;
                                var context = getContext("2d");
                                context.reset();
                                context.strokeStyle = palette.button;
                                context.fillStyle   = palette.button;
                                drawLineWithArrow(context, 0, y0, width, height * 0.25);
                                drawLineWithArrow(context, 0, y1, width, height * 0.85);
                            }
                        }
                        QGCColoredImage {
                            height:   voltageCol.height
                            width:    voltageCol.height * 0.75
                            source:   getBatteryImage();
                            fillMode: Image.PreserveAspectFit
                            smooth:   true
                            color:    palette.button
                            cache:    false
                        }
                        Item { width: 20; height: 1; }
                        Column {
                            spacing: 10
                            anchors.verticalCenter: parent.verticalCenter
                            Row {
                                spacing: 10
                                QGCLabel {
                                    text: "Battery Max:"
                                    width: 80
                                }
                                QGCLabel {
                                    text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V'
                                }
219
                            }
220
                            Row {
221
                                spacing: 10
222 223 224
                                QGCLabel {
                                    text: "Battery Min:"
                                    width: 80
225
                                }
226 227
                                QGCLabel {
                                    text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V'
228
                                }
229 230
                            }
                        }
dogmaphobic's avatar
dogmaphobic committed
231
                    }
232
                }
233
            }
234

235 236
            QGCLabel {
                text:           "ESC Calibration"
237
                font.pixelSize: ScreenTools.mediumFontPixelSize
238
            }
239

240 241 242 243
            Rectangle {
                width:              parent.width
                height:             80
                color:              palette.windowShade
244

245 246 247 248
                Column {
                    anchors.margins:    10
                    anchors.fill:       parent
                    spacing:            10
249

250 251 252
                    QGCLabel {
                        text: "WARNING: Props must be removed from vehicle prior to performing ESC calibration."
                    }
253

254 255 256
                    QGCButton {
                        text:       "Calibrate"
                        onClicked:  controller.calibrateEsc()
dogmaphobic's avatar
dogmaphobic committed
257
                    }
258
                }
259
            }
260

261 262 263 264 265 266 267 268 269 270 271
            /*
             * This is disabled for now
            Row {
                width: parent.width
                spacing: 30
                visible: showAdvanced.checked
                Column {
                    spacing: 10
                    width: (parent.width / 2) - 5
                    QGCLabel {
                        text: "Propeller Function"
272
                        font.pixelSize: ScreenTools.font20;
273
                    }
274 275 276 277
                    Rectangle {
                        width: parent.width
                        height: 160
                        color: palette.windowShade
dogmaphobic's avatar
dogmaphobic committed
278 279
                    }
                }
280 281 282 283 284
                Column {
                    spacing: 10
                    width: (parent.width / 2) - 5
                    QGCLabel {
                        text: "Magnetometer Distortion"
285
                        font.pixelSize: ScreenTools.font20;
286 287 288 289 290 291
                    }
                    Rectangle {
                        width: parent.width
                        height: 160
                        color: palette.windowShade
                    }
292

293
                }
294 295 296 297 298 299 300 301 302 303
            }
            */

            //-- Advanced Settings
            QGCCheckBox {
                id: showAdvanced
                text: "Show Advanced Settings"
            }
            QGCLabel {
                text: "Advanced Power Settings"
304
                font.pixelSize: ScreenTools.font20;
305 306 307 308 309 310 311 312 313 314 315 316 317
                visible: showAdvanced.checked
            }
            Rectangle {
                width: parent.width
                height: 40
                color: palette.windowShade
                visible: showAdvanced.checked
                Column {
                    id: advBatteryColumn
                    spacing: 10
                    anchors.verticalCenter: parent.verticalCenter
                    x: (parent.x + 20)
                    Row {
318
                        spacing: 10
319 320 321 322 323 324
                        QGCLabel { text: "Voltage Drop on Full Load (per cell)"; width: firstColumnWidth; anchors.baseline: battDropField.baseline}
                        FactTextField {
                            id: battDropField
                            width: textEditWidth
                            fact: battVoltLoadDrop
                            showUnits: true
325
                        }
dogmaphobic's avatar
dogmaphobic committed
326 327
                    }
                }
328 329 330
            }
        } // Column
    } // QGCViewPanel
dogmaphobic's avatar
dogmaphobic committed
331
}