Add policy of switching parking brake state to dummy stm for validation
[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, parking_brake_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     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;
111
112     // Clear current state
113     memset(&g_crr_state, 0, sizeof(g_crr_state));
114
115     switch (event_no) {
116     case STM_EVT_NO_ACTIVATE:
117         switch (category_no) {
118         case STM_CTG_NO_HOMESCREEN:
119             // Apps layer
120             g_crr_state.layer.apps.state = gStmLayoutNoNone;
121             g_crr_state.layer.apps.is_changed = STM_TRUE;
122
123             // Homescreen layer
124             g_crr_state.layer.homescreen.state = gStmLayoutNoHs;
125             g_crr_state.layer.homescreen.is_changed = STM_TRUE;
126             break;
127         case STM_CTG_NO_MAP:
128             switch (area_no) {
129             case STM_ARA_NO_FULL:
130                 // Apps layer
131                 switch (apps_state) {
132                 case gStmLayoutNoMf:
133                     // nop
134                     break;
135                 default:
136                     g_crr_state.layer.apps.state = gStmLayoutNoMf;
137                     g_crr_state.layer.apps.is_changed = STM_TRUE;
138                     break;
139                 }
140                 break;
141             case STM_ARA_NO_NORMAL:
142                 // Apps layer
143                 switch (apps_state) {
144                 case gStmLayoutNoM1:
145                     // nop
146                     break;
147                 case gStmLayoutNoS1:
148                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
149                     g_crr_state.layer.apps.is_changed = STM_TRUE;
150                     break;
151                 default:
152                     g_crr_state.layer.apps.state = gStmLayoutNoM1;
153                     g_crr_state.layer.apps.is_changed = STM_TRUE;
154                 }
155                 break;
156             case STM_ARA_NO_SPLIT_MAIN:
157                 // Apps layer
158                 switch (apps_state) {
159                 case gStmLayoutNoS1:
160                 case gStmLayoutNoS2:
161                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
162                     g_crr_state.layer.apps.is_changed = STM_TRUE;
163                     break;
164                 default:
165                     // nop
166                     break;
167                 }
168                 break;
169             }
170             break;
171         case STM_CTG_NO_GENERAL:
172             switch (area_no) {
173             case STM_ARA_NO_NORMAL:
174                 // Apps layer
175                 switch (apps_state) {
176                 case gStmLayoutNoMf:
177                     // nop
178                     break;
179                 default:
180                     g_crr_state.layer.apps.state = gStmLayoutNoG;
181                     g_crr_state.layer.apps.is_changed = STM_TRUE;
182                     break;
183                 }
184                 break;
185             default:
186                 // nop
187                 break;
188             }
189             break;
190         case STM_CTG_NO_SPLITABLE:
191             switch (area_no) {
192             case STM_ARA_NO_NORMAL:
193                 // Apps layer
194                 switch (apps_state) {
195                 case gStmLayoutNoMf:
196                     // nop
197                     break;
198                 case gStmLayoutNoS1:
199                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
200                     g_crr_state.layer.apps.is_changed = STM_TRUE;
201                     break;
202                 default:
203                     g_crr_state.layer.apps.state = gStmLayoutNoS1;
204                     g_crr_state.layer.apps.is_changed = STM_TRUE;
205                     break;
206                 }
207                 break;
208             case STM_ARA_NO_SPLIT_MAIN:
209                 // Apps layer
210                 switch (apps_state) {
211                 case gStmLayoutNoS1:
212                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
213                     g_crr_state.layer.apps.is_changed = STM_TRUE;
214                     break;
215                 case gStmLayoutNoS2:
216                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
217                     g_crr_state.layer.apps.is_changed = STM_TRUE;
218                     break;
219                 default:
220                     // nop
221                     break;
222                 }
223                 break;
224             case STM_ARA_NO_SPLIT_SUB:
225                 // Apps layer
226                 switch (apps_state) {
227                 case gStmLayoutNoM1:
228                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
229                     g_crr_state.layer.apps.is_changed = STM_TRUE;
230                     break;
231                 case gStmLayoutNoM2:
232                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
233                     g_crr_state.layer.apps.is_changed = STM_TRUE;
234                     break;
235                 case gStmLayoutNoS1:
236                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
237                     g_crr_state.layer.apps.is_changed = STM_TRUE;
238                     break;
239                 case gStmLayoutNoS2:
240                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
241                     g_crr_state.layer.apps.is_changed = STM_TRUE;
242                     break;
243                 default:
244                     // nop
245                     break;
246                 }
247                 break;
248             default:
249                 // nop
250                 break;
251             }
252             break;
253         default:
254           // nop
255           break;
256         }
257         break;
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;
262         }
263         break;
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;
268         }
269         break;
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;
274
275             g_crr_state.car.state = gStmCarStateNoStop;
276             g_crr_state.car.is_changed = STM_TRUE;
277         }
278         break;
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;
284
285             g_crr_state.car.state = gStmCarStateNoRun;
286             g_crr_state.car.is_changed = STM_TRUE;
287         }
288         break;
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;
293         }
294         break;
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;
299         }
300         break;
301     default:
302         // nop
303         break;
304     }
305
306     // Copy current state for return
307     memcpy(state, &g_crr_state, sizeof(g_crr_state));
308
309     return 0;
310 }