aboutsummaryrefslogtreecommitdiffstats
path: root/imports/shared/service/climate/ClimateStateMachine.qml
diff options
context:
space:
mode:
Diffstat (limited to 'imports/shared/service/climate/ClimateStateMachine.qml')
-rw-r--r--imports/shared/service/climate/ClimateStateMachine.qml170
1 files changed, 170 insertions, 0 deletions
diff --git a/imports/shared/service/climate/ClimateStateMachine.qml b/imports/shared/service/climate/ClimateStateMachine.qml
new file mode 100644
index 0000000..2b36520
--- /dev/null
+++ b/imports/shared/service/climate/ClimateStateMachine.qml
@@ -0,0 +1,170 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:GPL-QTAS$
+** Commercial License Usage
+** Licensees holding valid commercial Qt Automotive Suite licenses may use
+** this file in accordance with the commercial license agreement provided
+** with the Software or, alternatively, in accordance with the terms
+** contained in a written agreement between you and The Qt Company. For
+** licensing terms and conditions see https://www.qt.io/terms-conditions.
+** For further information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQml.StateMachine 1.0 as DSM
+import QtIvi.VehicleFunctions 1.0
+
+QtObject {
+ id: root
+ property ClimateControl climateControl
+ property bool doorsOpen: false
+
+ property QtObject stateMachine: DSM.StateMachine {
+ id: climateStateMachine
+ running: true
+ initialState: runningState
+
+ DSM.State {
+ childMode: DSM.State.ParallelStates
+ id: runningState
+
+ DSM.State {
+ id: suspendable
+ initialState: doorsClosedState
+
+ DSM.State {
+ id: doorsClosedState
+ childMode: DSM.State.ParallelStates
+
+ DSM.State {
+ id: airConditionState
+ initialState: climateControl.airConditioning.value ? airConditionOn : airConditionOff
+
+ DSM.State {
+ id: airConditionOff
+ onEntered: climateControl.airConditioning.value = false
+ DSM.SignalTransition {
+ targetState: airConditionOn
+ signal: climateControl.airConditioning.valueChanged
+ guard: climateControl.airConditioning.value
+ }
+ }
+
+ DSM.State {
+ id: airConditionOn
+ onEntered: {
+ climateControl.airConditioning.value = true
+ steeringWheelHeat.enabled = false
+ }
+ DSM.SignalTransition {
+ targetState: airConditionOff
+ signal: climateControl.airConditioning.valueChanged
+ guard: !climateControl.airConditioning.value
+ }
+ }
+ } // airConditionState
+
+ DSM.State {
+ id: airRecirculationState
+ initialState: climateControl.recirculation.value ? airRecirculationOn : airRecirculationOff
+
+ DSM.State {
+ id: airRecirculationOff
+ onEntered: climateControl.recirculationMode.value = ClimateControl.RecirculationOff
+ DSM.SignalTransition {
+ targetState: airRecirculationOn
+ signal: climateControl.recirculationMode.valueChanged
+ guard: climateControl.recirculationMode.value == ClimateControl.RecirculationOn
+ }
+ }
+
+ DSM.State {
+ id: airRecirculationOn
+ onEntered: {
+ climateControl.recirculationMode.value = ClimateControl.RecirculationOn
+ }
+ DSM.SignalTransition {
+ targetState: airRecirculationOff
+ signal: climateControl.recirculationMode.valueChanged
+ guard: climateControl.recirculationMode.value == ClimateControl.RecirculationOff
+ }
+ }
+ } // airRecirculationState
+
+ DSM.HistoryState {
+ id: historyState
+ defaultState: doorsClosedState
+ historyType: DSM.HistoryState.DeepHistory
+ }
+
+ DSM.SignalTransition {
+ targetState: suspended
+ signal: doorsOpenChanged
+ guard: doorsOpen
+ }
+ } // door closed state
+
+ DSM.State {
+ id: suspended
+ onEntered: {
+ climateControl.airConditioning.value = false
+ climateControl.recirculationMode.value = ClimateControl.RecirculationOff
+ }
+ DSM.SignalTransition {
+ targetState: historyState
+ signal: doorsOpenChanged
+ guard: !doorsOpen
+ }
+ }
+
+ } // suspendable state
+
+ DSM.State {
+ id: steeringWheelHeatState
+ initialState: (climateControl.steeringWheelHeater.value >= 5) ? steeringWheelHeatOn : steeringWheelHeatOff
+
+ DSM.State {
+ id: steeringWheelHeatOff
+ onEntered: climateControl.steeringWheelHeater.value = 0
+ DSM.SignalTransition {
+ targetState: steeringWheelHeatOn
+ signal: climateControl.steeringWheelHeater.valueChanged
+ guard: climateControl.steeringWheelHeater.value >= 5
+ }
+ }
+
+ DSM.State {
+ id: steeringWheelHeatOn
+ onEntered: {
+ climateControl.steeringWheelHeater.value = 10
+ climateControl.airConditioning.value = false
+ }
+ DSM.SignalTransition {
+ targetState: steeringWheelHeatOff
+ signal: climateControl.steeringWheelHeater.valueChanged
+ guard: climateControl.steeringWheelHeater.value < 5
+ }
+ }
+ }
+ } // running state
+ }
+}