4 const char* gStmEventName[] = {
16 const int gStmEventNo[] = {
18 STM_EVT_NO_DEACTIVATE,
19 STM_EVT_NO_PARKING_BRAKE_OFF,
20 STM_EVT_NO_PARKING_BRAKE_ON,
23 STM_EVT_NO_TIMER_EXPIRED,
28 const char* gStmCategoryName[] = {
37 const int gStmCategoryNo[] = {
38 STM_CTG_NO_HOMESCREEN,
43 STM_CTG_NO_SYSTEM_ALERT
46 const char* gStmAreaName[] = {
54 const int gStmAreaNo[] = {
57 STM_ARA_NO_SPLIT_MAIN,
63 const char* gStmParkingBrakeStateNo2Name[] = {
68 const char* gStmCarStateNo2Name[] = {
73 const char* gStmLampStateNo2Name[] = {
78 const char* gStmLayoutNo2Name[] = {
91 stm_state_t g_crr_state = {0};
92 stm_state_t g_prv_state = {0};
93 int g_prv_apps_state_car_stop = 0;
95 int stmTransitionState(int event, stm_state_t* state) {
96 int event_no, category_no, area_no;
97 int apps_state, parking_brake_state, car_state, lamp_state;
99 event_no = event & STM_MSK_EVT_NO;
100 category_no = event & STM_MSK_CTG_NO;
101 area_no = event & STM_MSK_ARA_NO;
103 // Backup previous state
104 g_prv_state = g_crr_state;
106 // Get previous state
107 apps_state = g_prv_state.layer.apps.state;
108 parking_brake_state = g_prv_state.parking_brake.state;
109 car_state = g_prv_state.car.state;
110 lamp_state = g_prv_state.lamp.state;
112 // Clear current state
113 memset(&g_crr_state, 0, sizeof(g_crr_state));
116 case STM_EVT_NO_ACTIVATE:
117 switch (category_no) {
118 case STM_CTG_NO_HOMESCREEN:
120 g_crr_state.layer.apps.state = gStmLayoutNoNone;
121 g_crr_state.layer.apps.is_changed = STM_TRUE;
124 g_crr_state.layer.homescreen.state = gStmLayoutNoHs;
125 g_crr_state.layer.homescreen.is_changed = STM_TRUE;
129 case STM_ARA_NO_FULL:
131 switch (apps_state) {
136 g_crr_state.layer.apps.state = gStmLayoutNoMf;
137 g_crr_state.layer.apps.is_changed = STM_TRUE;
141 case STM_ARA_NO_NORMAL:
143 switch (apps_state) {
148 g_crr_state.layer.apps.state = gStmLayoutNoM2;
149 g_crr_state.layer.apps.is_changed = STM_TRUE;
152 g_crr_state.layer.apps.state = gStmLayoutNoM1;
153 g_crr_state.layer.apps.is_changed = STM_TRUE;
156 case STM_ARA_NO_SPLIT_MAIN:
158 switch (apps_state) {
161 g_crr_state.layer.apps.state = gStmLayoutNoS2;
162 g_crr_state.layer.apps.is_changed = STM_TRUE;
171 case STM_CTG_NO_GENERAL:
173 case STM_ARA_NO_NORMAL:
175 switch (apps_state) {
180 g_crr_state.layer.apps.state = gStmLayoutNoG;
181 g_crr_state.layer.apps.is_changed = STM_TRUE;
190 case STM_CTG_NO_SPLITABLE:
192 case STM_ARA_NO_NORMAL:
194 switch (apps_state) {
199 g_crr_state.layer.apps.state = gStmLayoutNoS2;
200 g_crr_state.layer.apps.is_changed = STM_TRUE;
203 g_crr_state.layer.apps.state = gStmLayoutNoS1;
204 g_crr_state.layer.apps.is_changed = STM_TRUE;
208 case STM_ARA_NO_SPLIT_MAIN:
210 switch (apps_state) {
212 g_crr_state.layer.apps.state = gStmLayoutNoS2;
213 g_crr_state.layer.apps.is_changed = STM_TRUE;
216 g_crr_state.layer.apps.state = gStmLayoutNoS2;
217 g_crr_state.layer.apps.is_changed = STM_TRUE;
224 case STM_ARA_NO_SPLIT_SUB:
226 switch (apps_state) {
228 g_crr_state.layer.apps.state = gStmLayoutNoM2;
229 g_crr_state.layer.apps.is_changed = STM_TRUE;
232 g_crr_state.layer.apps.state = gStmLayoutNoM2;
233 g_crr_state.layer.apps.is_changed = STM_TRUE;
236 g_crr_state.layer.apps.state = gStmLayoutNoS2;
237 g_crr_state.layer.apps.is_changed = STM_TRUE;
240 g_crr_state.layer.apps.state = gStmLayoutNoS2;
241 g_crr_state.layer.apps.is_changed = STM_TRUE;
258 case STM_EVT_NO_PARKING_BRAKE_OFF:
259 if (gStmParkingBrakeStateNoOff != parking_brake_state) {
260 g_crr_state.parking_brake.state = gStmParkingBrakeStateNoOff;
261 g_crr_state.parking_brake.is_changed = STM_TRUE;
264 case STM_EVT_NO_PARKING_BRAKE_ON:
265 if (gStmParkingBrakeStateNoOn != parking_brake_state) {
266 g_crr_state.parking_brake.state = gStmParkingBrakeStateNoOn;
267 g_crr_state.parking_brake.is_changed = STM_TRUE;
270 case STM_EVT_NO_CAR_STOP:
271 if (gStmCarStateNoStop != car_state) {
272 g_crr_state.layer.apps.state = g_prv_apps_state_car_stop;
273 g_crr_state.layer.apps.is_changed = STM_TRUE;
275 g_crr_state.car.state = gStmCarStateNoStop;
276 g_crr_state.car.is_changed = STM_TRUE;
279 case STM_EVT_NO_CAR_RUN:
280 if (gStmCarStateNoRun != car_state) {
281 g_prv_apps_state_car_stop = apps_state;
282 g_crr_state.layer.apps.state = gStmLayoutNoM1;
283 g_crr_state.layer.apps.is_changed = STM_TRUE;
285 g_crr_state.car.state = gStmCarStateNoRun;
286 g_crr_state.car.is_changed = STM_TRUE;
289 case STM_EVT_NO_LAMP_OFF:
290 if (gStmLampStateNoOff != lamp_state) {
291 g_crr_state.lamp.state = gStmLampStateNoOff;
292 g_crr_state.lamp.is_changed = STM_TRUE;
295 case STM_EVT_NO_LAMP_ON:
296 if (gStmLampStateNoOn != lamp_state) {
297 g_crr_state.lamp.state = gStmLampStateNoOn;
298 g_crr_state.lamp.is_changed = STM_TRUE;
306 // Copy current state for return
307 memcpy(state, &g_crr_state, sizeof(g_crr_state));