GuidedActionsController.qml 25.1 KB
Newer Older
1 2
/****************************************************************************
 *
Gus Grubba's avatar
Gus Grubba committed
3
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
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 30
 *
 * 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.Controls.Styles  1.4
import QtQuick.Dialogs          1.2
import QtLocation               5.3
import QtPositioning            5.3
import QtQuick.Layouts          1.2

import QGroundControl                           1.0
import QGroundControl.ScreenTools               1.0
import QGroundControl.Controls                  1.0
import QGroundControl.Palette                   1.0
import QGroundControl.Vehicle                   1.0
import QGroundControl.FlightMap                 1.0

/// This provides the smarts behind the guided mode commands, minus the user interface. This way you can change UI
/// without affecting the underlying functionality.
Item {
    id: _root

    property var missionController
31
    property var confirmDialog
DonLakeFlyer's avatar
DonLakeFlyer committed
32
    property var actionList
Don Gagne's avatar
Don Gagne committed
33
    property var altitudeSlider
34
    property var orbitMapCircle
35

36
    readonly property string emergencyStopTitle:            qsTr("EMERGENCY STOP")
37 38
    readonly property string armTitle:                      qsTr("Arm")
    readonly property string disarmTitle:                   qsTr("Disarm")
39
    readonly property string rtlTitle:                      qsTr("Return")
40 41 42
    readonly property string takeoffTitle:                  qsTr("Takeoff")
    readonly property string landTitle:                     qsTr("Land")
    readonly property string startMissionTitle:             qsTr("Start Mission")
43
    readonly property string mvStartMissionTitle:           qsTr("Start Mission (MV)")
44 45 46
    readonly property string continueMissionTitle:          qsTr("Continue Mission")
    readonly property string resumeMissionUploadFailTitle:  qsTr("Resume FAILED")
    readonly property string pauseTitle:                    qsTr("Pause")
47
    readonly property string mvPauseTitle:                  qsTr("Pause (MV)")
48 49 50 51
    readonly property string changeAltTitle:                qsTr("Change Altitude")
    readonly property string orbitTitle:                    qsTr("Orbit")
    readonly property string landAbortTitle:                qsTr("Land Abort")
    readonly property string setWaypointTitle:              qsTr("Set Waypoint")
52
    readonly property string gotoTitle:                     qsTr("Go To Location")
53
    readonly property string vtolTransitionTitle:           qsTr("VTOL Transition")
Gus Grubba's avatar
Gus Grubba committed
54
    readonly property string roiTitle:                      qsTr("ROI")
55
    readonly property string actionListTitle:               qsTr("Action")
56

57 58
    readonly property string armMessage:                        qsTr("Arm the vehicle.")
    readonly property string disarmMessage:                     qsTr("Disarm the vehicle")
59
    readonly property string emergencyStopMessage:              qsTr("WARNING: THIS WILL STOP ALL MOTORS. IF VEHICLE IS CURRENTLY IN THE AIR IT WILL CRASH.")
60 61 62
    readonly property string takeoffMessage:                    qsTr("Takeoff from ground and hold position.")
    readonly property string startMissionMessage:               qsTr("Takeoff from ground and start the current mission.")
    readonly property string continueMissionMessage:            qsTr("Continue the mission from the current waypoint.")
Don Gagne's avatar
Don Gagne committed
63
    readonly property string resumeMissionUploadFailMessage:    qsTr("Upload of resume mission failed. Confirm to retry upload")
64
    readonly property string landMessage:                       qsTr("Land the vehicle at the current position.")
65
    readonly property string rtlMessage:                        qsTr("Return to the launch position of the vehicle.")
66
    readonly property string changeAltMessage:                  qsTr("Change the altitude of the vehicle up or down.")
DonLakeFlyer's avatar
DonLakeFlyer committed
67
    readonly property string gotoMessage:                       qsTr("Move the vehicle to the specified location.")
68
             property string setWaypointMessage:                qsTr("Adjust current waypoint to %1.").arg(_actionData)
Don Gagne's avatar
Don Gagne committed
69
    readonly property string orbitMessage:                      qsTr("Orbit the vehicle around the specified location.")
70
    readonly property string landAbortMessage:                  qsTr("Abort the landing sequence.")
71
    readonly property string pauseMessage:                      qsTr("Pause the vehicle at it's current position, adjusting altitude up or down as needed.")
72
    readonly property string mvPauseMessage:                    qsTr("Pause all vehicles at their current position.")
73 74
    readonly property string vtolTransitionFwdMessage:          qsTr("Transition VTOL to fixed wing flight.")
    readonly property string vtolTransitionMRMessage:           qsTr("Transition VTOL to multi-rotor flight.")
Gus Grubba's avatar
Gus Grubba committed
75
    readonly property string roiMessage:                        qsTr("Make the specified location a Region Of Interest.")
76

77 78 79 80 81 82 83 84 85 86 87 88 89 90
    readonly property int actionRTL:                        1
    readonly property int actionLand:                       2
    readonly property int actionTakeoff:                    3
    readonly property int actionArm:                        4
    readonly property int actionDisarm:                     5
    readonly property int actionEmergencyStop:              6
    readonly property int actionChangeAlt:                  7
    readonly property int actionGoto:                       8
    readonly property int actionSetWaypoint:                9
    readonly property int actionOrbit:                      10
    readonly property int actionLandAbort:                  11
    readonly property int actionStartMission:               12
    readonly property int actionContinueMission:            13
    readonly property int actionResumeMission:              14
Don Gagne's avatar
Don Gagne committed
91
    readonly property int _actionUnused:                    15
92 93
    readonly property int actionResumeMissionUploadFail:    16
    readonly property int actionPause:                      17
94 95
    readonly property int actionMVPause:                    18
    readonly property int actionMVStartMission:             19
96 97
    readonly property int actionVtolTransitionToFwdFlight:  20
    readonly property int actionVtolTransitionToMRFlight:   21
Gus Grubba's avatar
Gus Grubba committed
98
    readonly property int actionROI:                        22
99
    readonly property int actionActionList:                 23
100

101 102 103 104
    property bool   _useChecklist:              QGroundControl.settingsManager.appSettings.useChecklist.rawValue && QGroundControl.corePlugin.options.preFlightChecklistUrl.toString().length
    property bool   _enforceChecklist:          _useChecklist && QGroundControl.settingsManager.appSettings.enforceChecklist.rawValue
    property bool   _canArm:                    activeVehicle ? (_useChecklist ? (_enforceChecklist ? activeVehicle.checkListState === Vehicle.CheckListPassed : true) : true) : false

105
    property bool showEmergenyStop:     _guidedActionsEnabled && !_hideEmergenyStop && _vehicleArmed && _vehicleFlying
106
    property bool showArm:              _guidedActionsEnabled && !_vehicleArmed && _canArm
107
    property bool showDisarm:           _guidedActionsEnabled && _vehicleArmed && !_vehicleFlying
108
    property bool showRTL:              _guidedActionsEnabled && _vehicleArmed && activeVehicle.guidedModeSupported && _vehicleFlying && !_vehicleInRTLMode
109
    property bool showTakeoff:          _guidedActionsEnabled && activeVehicle.takeoffVehicleSupported && !_vehicleFlying && _canArm
110
    property bool showLand:             _guidedActionsEnabled && activeVehicle.guidedModeSupported && _vehicleArmed && !activeVehicle.fixedWing && !_vehicleInLandMode
111
    property bool showStartMission:     _guidedActionsEnabled && _missionAvailable && !_missionActive && !_vehicleFlying && _canArm
112
    property bool showContinueMission:  _guidedActionsEnabled && _missionAvailable && !_missionActive && _vehicleArmed && _vehicleFlying && (_currentMissionIndex < _missionItemCount - 1)
113 114 115
    property bool showPause:            _guidedActionsEnabled && _vehicleArmed && activeVehicle.pauseVehicleSupported && _vehicleFlying && !_vehiclePaused && !_fixedWingOnApproach
    property bool showChangeAlt:        _guidedActionsEnabled && _vehicleFlying && activeVehicle.guidedModeSupported && _vehicleArmed && !_missionActive
    property bool showOrbit:            _guidedActionsEnabled && !_hideOrbit && _vehicleFlying && activeVehicle.orbitModeSupported && !_missionActive
Gus Grubba's avatar
Gus Grubba committed
116
    property bool showROI:              _guidedActionsEnabled && !_hideROI && _vehicleFlying && activeVehicle.roiModeSupported && !_missionActive
117
    property bool showLandAbort:        _guidedActionsEnabled && _vehicleFlying && _fixedWingOnApproach
118
    property bool showGotoLocation:     _guidedActionsEnabled && _vehicleFlying
119
    property bool showActionList:       _guidedActionsEnabled && (showStartMission || showResumeMission || showChangeAlt || showLandAbort)
120

121
    // Note: The '_missionItemCount - 2' is a hack to not trigger resume mission when a mission ends with an RTL item
122
    property bool showResumeMission:    activeVehicle && !_vehicleArmed && _vehicleWasFlying && _missionAvailable && _resumeMissionIndex > 0 && (_resumeMissionIndex < _missionItemCount - 2)
123

124
    property bool guidedUIVisible:      confirmDialog.visible || actionList.visible
DonLakeFlyer's avatar
DonLakeFlyer committed
125

126
    property var    _corePlugin:            QGroundControl.corePlugin
127 128
    property bool   _guidedActionsEnabled:  (!ScreenTools.isDebug && QGroundControl.corePlugin.options.guidedActionsRequireRCRSSI && activeVehicle) ? _rcRSSIAvailable : activeVehicle
    property string _flightMode:            activeVehicle ? activeVehicle.flightMode : ""
129
    property bool   _missionAvailable:      missionController.containsItems
130 131 132 133
    property bool   _missionActive:         activeVehicle ? _vehicleArmed && (_vehicleInLandMode || _vehicleInRTLMode || _vehicleInMissionMode) : false
    property bool   _vehicleArmed:          activeVehicle ? activeVehicle.armed  : false
    property bool   _vehicleFlying:         activeVehicle ? activeVehicle.flying  : false
    property bool   _vehicleLanding:        activeVehicle ? activeVehicle.landing  : false
134 135 136 137
    property bool   _vehiclePaused:         false
    property bool   _vehicleInMissionMode:  false
    property bool   _vehicleInRTLMode:      false
    property bool   _vehicleInLandMode:     false
138
    property int    _missionItemCount:      missionController.missionItemCount
139
    property int    _currentMissionIndex:   missionController.currentMissionIndex
140 141 142
    property int    _resumeMissionIndex:    missionController.resumeMissionIndex
    property bool   _hideEmergenyStop:      !QGroundControl.corePlugin.options.guidedBarShowEmergencyStop
    property bool   _hideOrbit:             !QGroundControl.corePlugin.options.guidedBarShowOrbit
Gus Grubba's avatar
Gus Grubba committed
143
    property bool   _hideROI:               !QGroundControl.corePlugin.options.guidedBarShowOrbit
144
    property bool   _vehicleWasFlying:      false
145 146
    property bool   _rcRSSIAvailable:       activeVehicle ? activeVehicle.rcRSSI > 0 && activeVehicle.rcRSSI <= 100 : false
    property bool   _fixedWingOnApproach:   activeVehicle ? activeVehicle.fixedWing && _vehicleLanding : false
147

148
    // You can turn on log output for GuidedActionsController by turning on GuidedActionsControllerLog category
149 150
    property bool __guidedModeSupported:    activeVehicle ? activeVehicle.guidedModeSupported : false
    property bool __pauseVehicleSupported:  activeVehicle ? activeVehicle.pauseVehicleSupported : false
151
    property bool __flightMode:             _flightMode
152 153

    function _outputState() {
154
        if (_corePlugin.guidedActionsControllerLogging()) {
155
            console.log(qsTr("activeVehicle(%1) _vehicleArmed(%2) guidedModeSupported(%3) _vehicleFlying(%4) _vehicleWasFlying(%5) _vehicleInRTLMode(%6) pauseVehicleSupported(%7) _vehiclePaused(%8) _flightMode(%9) _missionItemCount(%10)").arg(activeVehicle ? 1 : 0).arg(_vehicleArmed ? 1 : 0).arg(__guidedModeSupported ? 1 : 0).arg(_vehicleFlying ? 1 : 0).arg(_vehicleWasFlying ? 1 : 0).arg(_vehicleInRTLMode ? 1 : 0).arg(__pauseVehicleSupported ? 1 : 0).arg(_vehiclePaused ? 1 : 0).arg(_flightMode).arg(_missionItemCount))
Gus Grubba's avatar
Gus Grubba committed
156 157 158 159 160 161 162
        }
    }

    Connections {
        target: mainWindow
        onActiveVehicleChanged: {
            _outputState()
163
        }
164 165
    }

166 167 168 169 170 171 172
    Component.onCompleted:              _outputState()
    on_VehicleArmedChanged:             _outputState()
    on_VehicleInRTLModeChanged:         _outputState()
    on_VehiclePausedChanged:            _outputState()
    on__FlightModeChanged:              _outputState()
    on__GuidedModeSupportedChanged:     _outputState()
    on__PauseVehicleSupportedChanged:   _outputState()
173
    on_MissionItemCountChanged:         _outputState()
174

DonLakeFlyer's avatar
DonLakeFlyer committed
175
    on_CurrentMissionIndexChanged: {
176
        if (_corePlugin.guidedActionsControllerLogging()) {
DonLakeFlyer's avatar
DonLakeFlyer committed
177 178 179 180
            console.log("_currentMissionIndex", _currentMissionIndex)
        }
    }
    on_ResumeMissionIndexChanged: {
181
        if (_corePlugin.guidedActionsControllerLogging()) {
DonLakeFlyer's avatar
DonLakeFlyer committed
182 183 184
            console.log("_resumeMissionIndex", _resumeMissionIndex)
        }
    }
185
    onShowResumeMissionChanged: {
186
        if (_corePlugin.guidedActionsControllerLogging()) {
187 188
            console.log("showResumeMission", showResumeMission)
        }
189 190 191
        _outputState()
    }
    onShowStartMissionChanged: {
192
        if (_corePlugin.guidedActionsControllerLogging()) {
193 194
            console.log("showStartMission", showStartMission)
        }
195
        _outputState()
196 197 198
        if (showStartMission) {
            confirmAction(actionStartMission)
        }
199 200
    }
    onShowContinueMissionChanged: {
201
        if (_corePlugin.guidedActionsControllerLogging()) {
202 203
            console.log("showContinueMission", showContinueMission)
        }
204
        _outputState()
205 206 207
        if (showContinueMission) {
            confirmAction(actionContinueMission)
        }
208
    }
Don Gagne's avatar
Don Gagne committed
209 210 211 212 213 214
    onShowRTLChanged: {
        if (_corePlugin.guidedActionsControllerLogging()) {
            console.log("showRTL", showRTL)
        }
        _outputState()
    }
215 216 217 218 219 220
    onShowChangeAltChanged: {
        if (_corePlugin.guidedActionsControllerLogging()) {
            console.log("showChangeAlt", showChangeAlt)
        }
        _outputState()
    }
221 222 223 224 225
    onShowLandAbortChanged: {
        if (showLandAbort) {
            confirmAction(actionLandAbort)
        }
    }
226

227
    on_VehicleFlyingChanged: {
228
        _outputState()
229 230 231 232 233 234
        if (!_vehicleFlying) {
            // We use _vehicleWasFLying to help trigger Resume Mission only if the vehicle actually flew and came back down.
            // Otherwise it may trigger during the Start Mission sequence due to signal ordering or armed and resume mission index.
            _vehicleWasFlying = true
        }
    }
DonLakeFlyer's avatar
DonLakeFlyer committed
235 236

    property var _actionData
237 238

    on_FlightModeChanged: {
239 240 241 242
        _vehiclePaused =        activeVehicle ? _flightMode === activeVehicle.pauseFlightMode : false
        _vehicleInRTLMode =     activeVehicle ? _flightMode === activeVehicle.rtlFlightMode || _flightMode === activeVehicle.smartRTLFlightMode : false
        _vehicleInLandMode =    activeVehicle ? _flightMode === activeVehicle.landFlightMode : false
        _vehicleInMissionMode = activeVehicle ? _flightMode === activeVehicle.missionFlightMode : false // Must be last to get correct signalling for showStartMission popups
243
    }
244

245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
    Connections {
        target:                     missionController
        onResumeMissionUploadFail:  confirmAction(actionResumeMissionUploadFail)
    }

    Connections {
        target:                             mainWindow
        onArmVehicleRequest:                armVehicleRequest()
        onDisarmVehicleRequest:             disarmVehicleRequest()
        onVtolTransitionToFwdFlightRequest: vtolTransitionToFwdFlightRequest()
        onVtolTransitionToMRFlightRequest:  vtolTransitionToMRFlightRequest()
    }

    function armVehicleRequest() {
        confirmAction(actionArm)
    }

    function disarmVehicleRequest() {
        if (showEmergenyStop) {
            confirmAction(actionEmergencyStop)
        } else {
            confirmAction(actionDisarm)
        }

    }

    function vtolTransitionToFwdFlightRequest() {
        confirmAction(actionVtolTransitionToFwdFlight)
    }

    function vtolTransitionToMRFlightRequest() {
        confirmAction(actionVtolTransitionToMRFlight)
    }

279 280 281 282 283 284
    function closeAll() {
        confirmDialog.visible =     false
        actionList.visible =        false
        altitudeSlider.visible =    false
    }

285
    // Called when an action is about to be executed in order to confirm
286
    function confirmAction(actionCode, actionData, mapIndicator) {
287
        var showImmediate = true
288
        closeAll()
289 290
        confirmDialog.action = actionCode
        confirmDialog.actionData = actionData
291
        confirmDialog.hideTrigger = true
292
        confirmDialog.mapIndicator = mapIndicator
DonLakeFlyer's avatar
DonLakeFlyer committed
293
        confirmDialog.optionText = ""
294 295 296
        _actionData = actionData
        switch (actionCode) {
        case actionArm:
297
            if (_vehicleFlying || !_guidedActionsEnabled) {
298 299
                return
            }
300 301 302
            confirmDialog.title = armTitle
            confirmDialog.message = armMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showArm })
303 304
            break;
        case actionDisarm:
305
            if (_vehicleFlying) {
306 307
                return
            }
308 309 310
            confirmDialog.title = disarmTitle
            confirmDialog.message = disarmMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showDisarm })
311 312
            break;
        case actionEmergencyStop:
313 314 315
            confirmDialog.title = emergencyStopTitle
            confirmDialog.message = emergencyStopMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showEmergenyStop })
316 317
            break;
        case actionTakeoff:
318 319 320
            confirmDialog.title = takeoffTitle
            confirmDialog.message = takeoffMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showTakeoff })
321
            altitudeSlider.setToMinimumTakeoff()
322
            altitudeSlider.visible = true
323 324
            break;
        case actionStartMission:
325
            showImmediate = false
326 327 328
            confirmDialog.title = startMissionTitle
            confirmDialog.message = startMissionMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showStartMission })
329
            break;
330
        case actionMVStartMission:
331
            confirmDialog.title = mvStartMissionTitle
332 333 334
            confirmDialog.message = startMissionMessage
            confirmDialog.hideTrigger = true
            break;
335
        case actionContinueMission:
336
            showImmediate = false
337 338 339 340
            confirmDialog.title = continueMissionTitle
            confirmDialog.message = continueMissionMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showContinueMission })
            break;
341
        case actionResumeMission:
Don Gagne's avatar
Don Gagne committed
342 343
            // Resume Mission is handled in mission end dialog
            return
344 345 346 347 348
        case actionResumeMissionUploadFail:
            confirmDialog.title = resumeMissionUploadFailTitle
            confirmDialog.message = resumeMissionUploadFailMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showResumeMission })
            break;
349
        case actionLand:
350 351 352
            confirmDialog.title = landTitle
            confirmDialog.message = landMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showLand })
353 354
            break;
        case actionRTL:
355 356
            confirmDialog.title = rtlTitle
            confirmDialog.message = rtlMessage
357
            if (activeVehicle.supportsSmartRTL) {
DonLakeFlyer's avatar
DonLakeFlyer committed
358 359 360
                confirmDialog.optionText = qsTr("Smart RTL")
                confirmDialog.optionChecked = false
            }
361
            confirmDialog.hideTrigger = Qt.binding(function() { return !showRTL })
362 363
            break;
        case actionChangeAlt:
364 365 366
            confirmDialog.title = changeAltTitle
            confirmDialog.message = changeAltMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showChangeAlt })
Don Gagne's avatar
Don Gagne committed
367 368
            altitudeSlider.reset()
            altitudeSlider.visible = true
369 370
            break;
        case actionGoto:
371 372 373
            confirmDialog.title = gotoTitle
            confirmDialog.message = gotoMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showGotoLocation })
374 375
            break;
        case actionSetWaypoint:
376 377
            confirmDialog.title = setWaypointTitle
            confirmDialog.message = setWaypointMessage
378 379
            break;
        case actionOrbit:
380 381 382
            confirmDialog.title = orbitTitle
            confirmDialog.message = orbitMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showOrbit })
DonLakeFlyer's avatar
DonLakeFlyer committed
383 384
            altitudeSlider.reset()
            altitudeSlider.visible = true
385 386
            break;
        case actionLandAbort:
387 388 389
            confirmDialog.title = landAbortTitle
            confirmDialog.message = landAbortMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showLandAbort })
390 391
            break;
        case actionPause:
392 393 394
            confirmDialog.title = pauseTitle
            confirmDialog.message = pauseMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showPause })
395 396
            altitudeSlider.reset()
            altitudeSlider.visible = true
397
            break;
398
        case actionMVPause:
399
            confirmDialog.title = mvPauseTitle
400 401 402
            confirmDialog.message = mvPauseMessage
            confirmDialog.hideTrigger = true
            break;
403 404 405 406 407 408 409 410 411 412
        case actionVtolTransitionToFwdFlight:
            confirmDialog.title = vtolTransitionTitle
            confirmDialog.message = vtolTransitionFwdMessage
            confirmDialog.hideTrigger = true
            break
        case actionVtolTransitionToMRFlight:
            confirmDialog.title = vtolTransitionTitle
            confirmDialog.message = vtolTransitionMRMessage
            confirmDialog.hideTrigger = true
            break
Gus Grubba's avatar
Gus Grubba committed
413 414 415 416 417
        case actionROI:
            confirmDialog.title = roiTitle
            confirmDialog.message = roiMessage
            confirmDialog.hideTrigger = Qt.binding(function() { return !showROI })
            break;
418 419 420
        case actionActionList:
            actionList.show()
            return
421 422 423
        default:
            console.warn("Unknown actionCode", actionCode)
            return
424
        }
425
        confirmDialog.show(showImmediate)
426 427 428
    }

    // Executes the specified action
DonLakeFlyer's avatar
DonLakeFlyer committed
429
    function executeAction(actionCode, actionData, actionAltitudeChange, optionChecked) {
430 431
        var i;
        var rgVehicle;
432 433
        switch (actionCode) {
        case actionRTL:
434
            activeVehicle.guidedModeRTL(optionChecked)
435 436
            break
        case actionLand:
437
            activeVehicle.guidedModeLand()
438 439
            break
        case actionTakeoff:
440
            activeVehicle.guidedModeTakeoff(actionAltitudeChange)
441 442
            break
        case actionResumeMission:
443
        case actionResumeMissionUploadFail:
444
            missionController.resumeMission(missionController.resumeMissionIndex)
445 446
            break
        case actionStartMission:
447
        case actionContinueMission:
448
            activeVehicle.startMission()
449
            break
450
        case actionMVStartMission:
451 452 453
            rgVehicle = QGroundControl.multiVehicleManager.vehicles
            for (i = 0; i < rgVehicle.count; i++) {
                rgVehicle.get(i).startMission()
454 455
            }
            break
456
        case actionArm:
457
            activeVehicle.armed = true
458 459
            break
        case actionDisarm:
460
            activeVehicle.armed = false
461 462
            break
        case actionEmergencyStop:
463
            activeVehicle.emergencyStop()
464 465
            break
        case actionChangeAlt:
466
            activeVehicle.guidedModeChangeAltitude(actionAltitudeChange)
467 468
            break
        case actionGoto:
469
            activeVehicle.guidedModeGotoLocation(actionData)
470 471
            break
        case actionSetWaypoint:
472
            activeVehicle.setCurrentMissionSequence(actionData)
473 474
            break
        case actionOrbit:
475
            activeVehicle.guidedModeOrbit(orbitMapCircle.center, orbitMapCircle.radius() * (orbitMapCircle.clockwiseRotation ? 1 : -1), activeVehicle.altitudeAMSL.rawValue + actionAltitudeChange)
476 477
            break
        case actionLandAbort:
478
            activeVehicle.abortLanding(50)     // hardcoded value for climbOutAltitude that is currently ignored
479 480
            break
        case actionPause:
481 482
            activeVehicle.pauseVehicle()
            activeVehicle.guidedModeChangeAltitude(actionAltitudeChange)
483
            break
484
        case actionMVPause:
485 486 487
            rgVehicle = QGroundControl.multiVehicleManager.vehicles
            for (i = 0; i < rgVehicle.count; i++) {
                rgVehicle.get(i).pauseVehicle()
488 489
            }
            break
490
        case actionVtolTransitionToFwdFlight:
491
            activeVehicle.vtolInFwdFlight = true
492 493
            break
        case actionVtolTransitionToMRFlight:
494
            activeVehicle.vtolInFwdFlight = false
495
            break
Gus Grubba's avatar
Gus Grubba committed
496 497 498
        case actionROI:
            activeVehicle.guidedModeROI(actionData)
            break
499 500 501 502 503 504
        default:
            console.warn(qsTr("Internal error: unknown actionCode"), actionCode)
            break
        }
    }
}