2 * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "stm_inner.h"
21 static StmState g_stm_crr_state;
22 static StmState g_stm_prv_state;
24 void stmInitializeInner() {
25 // Initialize previous state
26 memset(&g_stm_prv_state, 0, sizeof(g_stm_prv_state));
28 // Initialize current state
29 g_stm_crr_state = g_stm_prv_state;
32 int stmTransitionStateInner(int event, StmState* state) {
33 int event_no, category_no, area_no;
35 event_no = STM_GET_EVENT_FROM_ID(event);
36 category_no = STM_GET_CATEGORY_FROM_ID(event);
37 area_no = STM_GET_AREA_FROM_ID(event);
39 // Backup previous state
40 g_stm_prv_state = g_stm_crr_state;
42 // -------------------------------------------------------
43 // There is no policy table by default.
44 // Therefore update each layers
45 // to draw the applications in requested area
46 // in accordance with inputed activate/deactivate events.
47 // -------------------------------------------------------
48 if (StmEvtNoActivate == event_no)
50 if (StmCtgNoHomescreen == category_no)
52 g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoHms;
53 g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
55 // For AGL JIRA SPEC-1407
56 // Apps layer is invisibled only when Homescreen app is started already
57 if (StmLayoutNoHms == g_stm_prv_state.layer[StmLayerNoHomescreen].state)
59 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
60 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
63 else if (StmCtgNoDebug == category_no)
65 if (StmAreaNoNormal == area_no)
67 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgNml;
69 else if (StmAreaNoSplitMain == area_no)
71 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplMain;
73 else if (StmAreaNoSplitSub == area_no)
75 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplSub;
77 else if (StmAreaNoFullscreen == area_no)
79 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgFll;
81 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
83 else if (StmCtgNoSoftwareKeyboard == category_no)
85 g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoSftKbd;
86 g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE;
88 else if (StmCtgNoPopUp == category_no)
90 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoPopUp;
91 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
93 else if (StmCtgNoSystemAlert == category_no)
95 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt;
96 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
98 else if (StmCtgNoTbt == category_no)
100 if (StmAreaNoMasterSplitSub == area_no)
102 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoRcvSpl;
103 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
105 g_stm_crr_state.layer[StmLayerNoRemote].state = StmLayoutNoRmtTbt;
106 g_stm_crr_state.layer[StmLayerNoRemote].changed = STM_TRUE;
108 else if (StmAreaNoNormal == area_no)
110 g_stm_crr_state.layer[StmLayerNoRemote].state = StmLayoutNoTbt;
111 g_stm_crr_state.layer[StmLayerNoRemote].changed = STM_TRUE;
114 else if (StmCtgNoReceiver == category_no)
116 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoRcvSpl;
117 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
119 else if (StmCtgNoMeter == category_no)
121 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoMtrNml;
122 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
125 else if (StmEvtNoDeactivate == event_no)
127 if (StmCtgNoHomescreen == category_no)
129 g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoNone;
130 g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
132 else if (StmCtgNoDebug == category_no)
134 if ((StmLayoutNoDbgNml == g_stm_prv_state.layer[StmLayerNoApps].state) ||
135 (StmLayoutNoDbgSplMain == g_stm_prv_state.layer[StmLayerNoApps].state) ||
136 (StmLayoutNoDbgSplSub == g_stm_prv_state.layer[StmLayerNoApps].state) ||
137 (StmLayoutNoDbgFll == g_stm_prv_state.layer[StmLayerNoApps].state))
139 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
140 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
143 else if (StmCtgNoSoftwareKeyboard == category_no)
145 if (StmLayoutNoSftKbd == g_stm_prv_state.layer[StmLayerNoNearHomescreen].state )
147 g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoNone;
148 g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE;
151 else if (StmCtgNoPopUp == category_no)
153 if (StmLayoutNoPopUp == g_stm_prv_state.layer[StmLayerNoOnScreen].state )
155 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
156 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
159 else if (StmCtgNoSystemAlert == category_no)
161 if (StmLayoutNoSysAlt == g_stm_prv_state.layer[StmLayerNoOnScreen].state )
163 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
164 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
167 else if (StmCtgNoTbt == category_no)
169 if (StmLayoutNoRmtTbt == g_stm_prv_state.layer[StmLayerNoRemote].state)
171 g_stm_crr_state.layer[StmLayerNoRemote].state = StmLayoutNoNone;
172 g_stm_crr_state.layer[StmLayerNoRemote].changed = STM_TRUE;
177 // Copy current state for return
178 memcpy(state, &g_stm_crr_state, sizeof(g_stm_crr_state));
183 void stmUndoStateInner() {
184 g_stm_crr_state = g_stm_prv_state;