5 stm_state_t g_crr_state = {0};
6 stm_state_t g_prv_state = {0};
7 int g_prv_apps_state_car_stop = 0;
9 int stmTransitionState(int event, stm_state_t* state) {
10 int event_no, category_no, area_no;
11 int apps_state, car_state, lamp_state;
13 event_no = event & STM_MSK_EVT_NO;
14 category_no = event & STM_MSK_CTG_NO;
15 area_no = event & STM_MSK_ARA_NO;
17 // Backup previous state
18 g_prv_state = g_crr_state;
21 apps_state = g_prv_state.layer.apps.state;
22 car_state = g_prv_state.car.state;
23 lamp_state = g_prv_state.lamp.state;
25 // Clear current state
26 memset(&g_crr_state, 0, sizeof(g_crr_state));
29 case STM_EVT_NO_ACTIVATE:
30 switch (category_no) {
31 case STM_CTG_NO_HOMESCREEN:
33 g_crr_state.layer.apps.state = gStmLayoutNoNone;
34 g_crr_state.layer.apps.is_changed = STM_TRUE;
37 g_crr_state.layer.homescreen.state = gStmLayoutNoHs;
38 g_crr_state.layer.homescreen.is_changed = STM_TRUE;
49 g_crr_state.layer.apps.state = gStmLayoutNoMf;
50 g_crr_state.layer.apps.is_changed = STM_TRUE;
54 case STM_ARA_NO_NORMAL:
61 g_crr_state.layer.apps.state = gStmLayoutNoM2;
62 g_crr_state.layer.apps.is_changed = STM_TRUE;
65 g_crr_state.layer.apps.state = gStmLayoutNoM1;
66 g_crr_state.layer.apps.is_changed = STM_TRUE;
69 case STM_ARA_NO_SPLIT_MAIN:
74 g_crr_state.layer.apps.state = gStmLayoutNoS2;
75 g_crr_state.layer.apps.is_changed = STM_TRUE;
84 case STM_CTG_NO_GENERAL:
86 case STM_ARA_NO_NORMAL:
93 g_crr_state.layer.apps.state = gStmLayoutNoG;
94 g_crr_state.layer.apps.is_changed = STM_TRUE;
103 case STM_CTG_NO_SPLITABLE:
105 case STM_ARA_NO_NORMAL:
107 switch (apps_state) {
112 g_crr_state.layer.apps.state = gStmLayoutNoS2;
113 g_crr_state.layer.apps.is_changed = STM_TRUE;
116 g_crr_state.layer.apps.state = gStmLayoutNoS1;
117 g_crr_state.layer.apps.is_changed = STM_TRUE;
121 case STM_ARA_NO_SPLIT_MAIN:
123 switch (apps_state) {
125 g_crr_state.layer.apps.state = gStmLayoutNoS2;
126 g_crr_state.layer.apps.is_changed = STM_TRUE;
129 g_crr_state.layer.apps.state = gStmLayoutNoS2;
130 g_crr_state.layer.apps.is_changed = STM_TRUE;
137 case STM_ARA_NO_SPLIT_SUB:
139 switch (apps_state) {
141 g_crr_state.layer.apps.state = gStmLayoutNoM2;
142 g_crr_state.layer.apps.is_changed = STM_TRUE;
145 g_crr_state.layer.apps.state = gStmLayoutNoM2;
146 g_crr_state.layer.apps.is_changed = STM_TRUE;
149 g_crr_state.layer.apps.state = gStmLayoutNoS2;
150 g_crr_state.layer.apps.is_changed = STM_TRUE;
153 g_crr_state.layer.apps.state = gStmLayoutNoS2;
154 g_crr_state.layer.apps.is_changed = STM_TRUE;
171 case STM_EVT_NO_CAR_STOP:
172 if (gStmCarStateNoStop != car_state) {
173 g_crr_state.layer.apps.state = g_prv_apps_state_car_stop;
174 g_crr_state.layer.apps.is_changed = STM_TRUE;
176 g_crr_state.car.state = gStmCarStateNoStop;
177 g_crr_state.car.is_changed = STM_TRUE;
180 case STM_EVT_NO_CAR_RUN:
181 if (gStmCarStateNoRun != car_state) {
182 g_prv_apps_state_car_stop = apps_state;
183 g_crr_state.layer.apps.state = gStmLayoutNoM1;
184 g_crr_state.layer.apps.is_changed = STM_TRUE;
186 g_crr_state.car.state = gStmCarStateNoRun;
187 g_crr_state.car.is_changed = STM_TRUE;
190 case STM_EVT_NO_LAMP_OFF:
191 if (gStmLampStateNoOff != lamp_state) {
192 g_crr_state.lamp.state = gStmLampStateNoOff;
193 g_crr_state.lamp.is_changed = STM_TRUE;
196 case STM_EVT_NO_LAMP_ON:
197 if (gStmLampStateNoOn != lamp_state) {
198 g_crr_state.lamp.state = gStmLampStateNoOn;
199 g_crr_state.lamp.is_changed = STM_TRUE;
207 // Copy current state for return
208 memcpy(state, &g_crr_state, sizeof(g_crr_state));