Add parking brake ON/OFF event
[apps/agl-service-windowmanager.git] / src / policy_manager / zipc / dummy_stm.c
1 #include <string.h>
2 #include "dummy_stm.h"
3
4 const char* gStmEventName[] = {
5     "activate",
6     "deactivate",
7     "parking_brake_off",
8     "parking_brake_on",
9     "car_stop",
10     "car_run",
11     "timer_expired",
12     "lamp_off",
13     "lamp_on"
14 };
15
16 const int gStmEventNo[] = {
17     STM_EVT_NO_ACTIVATE,
18     STM_EVT_NO_DEACTIVATE,
19     STM_EVT_NO_PARKING_BRAKE_OFF,
20     STM_EVT_NO_PARKING_BRAKE_ON,
21     STM_EVT_NO_CAR_STOP,
22     STM_EVT_NO_CAR_RUN,
23     STM_EVT_NO_TIMER_EXPIRED,
24     STM_EVT_NO_LAMP_OFF,
25     STM_EVT_NO_LAMP_ON
26 };
27
28 const char* gStmCategoryName[] = {
29     "homescreen",
30     "map",
31     "general",
32     "splitable",
33     "popup",
34     "system_alert"
35 };
36
37 const int gStmCategoryNo[] = {
38     STM_CTG_NO_HOMESCREEN,
39     STM_CTG_NO_MAP,
40     STM_CTG_NO_GENERAL,
41     STM_CTG_NO_SPLITABLE,
42     STM_CTG_NO_POPUP,
43     STM_CTG_NO_SYSTEM_ALERT
44 };
45
46 const char* gStmAreaName[] = {
47     "full",
48     "normal",
49     "split.main",
50     "split.sub",
51     "onscreen"
52 };
53
54 const int gStmAreaNo[] = {
55     STM_ARA_NO_FULL,
56     STM_ARA_NO_NORMAL,
57     STM_ARA_NO_SPLIT_MAIN,
58     STM_ARA_NO_SPLIT_SUB,
59     STM_ARA_NO_ON_SCREEN
60 };
61
62 // String for state
63 const char* gStmParkingBrakeStateNo2Name[] = {
64     "parking_brake_off",
65     "parking_brake_on"
66 };
67
68 const char* gStmCarStateNo2Name[] = {
69     "car_stop",
70     "car_run"
71 };
72
73 const char* gStmLampStateNo2Name[] = {
74     "lamp_off",
75     "lamp_on"
76 };
77
78 const char* gStmLayoutNo2Name[] = {
79     "none",
80     "pu",
81     "sa",
82     "m1",
83     "m2",
84     "mf",
85     "s1",
86     "s2",
87     "g",
88     "hs",
89 };
90
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;
94
95 int stmTransitionState(int event, stm_state_t* state) {
96     int event_no, category_no, area_no;
97     int apps_state, car_state, lamp_state;
98
99     event_no    = event & STM_MSK_EVT_NO;
100     category_no = event & STM_MSK_CTG_NO;
101     area_no     = event & STM_MSK_ARA_NO;
102
103     // Backup previous state
104     g_prv_state = g_crr_state;
105
106     // Get previous state
107     apps_state = g_prv_state.layer.apps.state;
108     car_state  = g_prv_state.car.state;
109     lamp_state = g_prv_state.lamp.state;
110
111     // Clear current state
112     memset(&g_crr_state, 0, sizeof(g_crr_state));
113
114     switch (event_no) {
115     case STM_EVT_NO_ACTIVATE:
116         switch (category_no) {
117         case STM_CTG_NO_HOMESCREEN:
118             // Apps layer
119             g_crr_state.layer.apps.state = gStmLayoutNoNone;
120             g_crr_state.layer.apps.is_changed = STM_TRUE;
121
122             // Homescreen layer
123             g_crr_state.layer.homescreen.state = gStmLayoutNoHs;
124             g_crr_state.layer.homescreen.is_changed = STM_TRUE;
125             break;
126         case STM_CTG_NO_MAP:
127             switch (area_no) {
128             case STM_ARA_NO_FULL:
129                 // Apps layer
130                 switch (apps_state) {
131                 case gStmLayoutNoMf:
132                     // nop
133                     break;
134                 default:
135                     g_crr_state.layer.apps.state = gStmLayoutNoMf;
136                     g_crr_state.layer.apps.is_changed = STM_TRUE;
137                     break;
138                 }
139                 break;
140             case STM_ARA_NO_NORMAL:
141                 // Apps layer
142                 switch (apps_state) {
143                 case gStmLayoutNoM1:
144                     // nop
145                     break;
146                 case gStmLayoutNoS1:
147                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
148                     g_crr_state.layer.apps.is_changed = STM_TRUE;
149                     break;
150                 default:
151                     g_crr_state.layer.apps.state = gStmLayoutNoM1;
152                     g_crr_state.layer.apps.is_changed = STM_TRUE;
153                 }
154                 break;
155             case STM_ARA_NO_SPLIT_MAIN:
156                 // Apps layer
157                 switch (apps_state) {
158                 case gStmLayoutNoS1:
159                 case gStmLayoutNoS2:
160                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
161                     g_crr_state.layer.apps.is_changed = STM_TRUE;
162                     break;
163                 default:
164                     // nop
165                     break;
166                 }
167                 break;
168             }
169             break;
170         case STM_CTG_NO_GENERAL:
171             switch (area_no) {
172             case STM_ARA_NO_NORMAL:
173                 // Apps layer
174                 switch (apps_state) {
175                 case gStmLayoutNoMf:
176                     // nop
177                     break;
178                 default:
179                     g_crr_state.layer.apps.state = gStmLayoutNoG;
180                     g_crr_state.layer.apps.is_changed = STM_TRUE;
181                     break;
182                 }
183                 break;
184             default:
185                 // nop
186                 break;
187             }
188             break;
189         case STM_CTG_NO_SPLITABLE:
190             switch (area_no) {
191             case STM_ARA_NO_NORMAL:
192                 // Apps layer
193                 switch (apps_state) {
194                 case gStmLayoutNoMf:
195                     // nop
196                     break;
197                 case gStmLayoutNoS1:
198                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
199                     g_crr_state.layer.apps.is_changed = STM_TRUE;
200                     break;
201                 default:
202                     g_crr_state.layer.apps.state = gStmLayoutNoS1;
203                     g_crr_state.layer.apps.is_changed = STM_TRUE;
204                     break;
205                 }
206                 break;
207             case STM_ARA_NO_SPLIT_MAIN:
208                 // Apps layer
209                 switch (apps_state) {
210                 case gStmLayoutNoS1:
211                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
212                     g_crr_state.layer.apps.is_changed = STM_TRUE;
213                     break;
214                 case gStmLayoutNoS2:
215                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
216                     g_crr_state.layer.apps.is_changed = STM_TRUE;
217                     break;
218                 default:
219                     // nop
220                     break;
221                 }
222                 break;
223             case STM_ARA_NO_SPLIT_SUB:
224                 // Apps layer
225                 switch (apps_state) {
226                 case gStmLayoutNoM1:
227                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
228                     g_crr_state.layer.apps.is_changed = STM_TRUE;
229                     break;
230                 case gStmLayoutNoM2:
231                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
232                     g_crr_state.layer.apps.is_changed = STM_TRUE;
233                     break;
234                 case gStmLayoutNoS1:
235                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
236                     g_crr_state.layer.apps.is_changed = STM_TRUE;
237                     break;
238                 case gStmLayoutNoS2:
239                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
240                     g_crr_state.layer.apps.is_changed = STM_TRUE;
241                     break;
242                 default:
243                     // nop
244                     break;
245                 }
246                 break;
247             default:
248                 // nop
249                 break;
250             }
251             break;
252         default:
253           // nop
254           break;
255         }
256         break;
257     case STM_EVT_NO_CAR_STOP:
258         if (gStmCarStateNoStop != car_state) {
259             g_crr_state.layer.apps.state = g_prv_apps_state_car_stop;
260             g_crr_state.layer.apps.is_changed = STM_TRUE;
261
262             g_crr_state.car.state = gStmCarStateNoStop;
263             g_crr_state.car.is_changed = STM_TRUE;
264         }
265         break;
266     case STM_EVT_NO_CAR_RUN:
267         if (gStmCarStateNoRun != car_state) {
268             g_prv_apps_state_car_stop = apps_state;
269             g_crr_state.layer.apps.state = gStmLayoutNoM1;
270             g_crr_state.layer.apps.is_changed = STM_TRUE;
271
272             g_crr_state.car.state = gStmCarStateNoRun;
273             g_crr_state.car.is_changed = STM_TRUE;
274         }
275         break;
276     case STM_EVT_NO_LAMP_OFF:
277         if (gStmLampStateNoOff != lamp_state) {
278             g_crr_state.lamp.state = gStmLampStateNoOff;
279             g_crr_state.lamp.is_changed = STM_TRUE;
280         }
281         break;
282     case STM_EVT_NO_LAMP_ON:
283         if (gStmLampStateNoOn != lamp_state) {
284             g_crr_state.lamp.state = gStmLampStateNoOn;
285             g_crr_state.lamp.is_changed = STM_TRUE;
286         }
287         break;
288     default:
289         // nop
290         break;
291     }
292
293     // Copy current state for return
294     memcpy(state, &g_crr_state, sizeof(g_crr_state));
295
296     return 0;
297 }