Modify the policy of restriction
[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     "trans_gear_neutral",
8     "trans_gear_not_neutral",
9     "parking_brake_off",
10     "parking_brake_on",
11     "accel_pedal_off",
12     "accel_pedal_on",
13     "timer_expired",
14     "lamp_off",
15     "lamp_on"
16 };
17
18 const int gStmEventNo[] = {
19     STM_EVT_NO_ACTIVATE,
20     STM_EVT_NO_DEACTIVATE,
21     STM_EVT_NO_TRANS_GEAR_N,
22     STM_EVT_NO_TRANS_GEAR_NOT_N,
23     STM_EVT_NO_PARKING_BRAKE_OFF,
24     STM_EVT_NO_PARKING_BRAKE_ON,
25     STM_EVT_NO_ACCEL_PEDAL_OFF,
26     STM_EVT_NO_ACCEL_PEDAL_ON,
27     STM_EVT_NO_TIMER_EXPIRED,
28     STM_EVT_NO_LAMP_OFF,
29     STM_EVT_NO_LAMP_ON
30 };
31
32 const char* gStmCategoryName[] = {
33     "homescreen",
34     "map",
35     "general",
36     "splitable",
37     "popup",
38     "system_alert",
39     "restriction",
40 };
41
42 const int gStmCategoryNo[] = {
43     STM_CTG_NO_HOMESCREEN,
44     STM_CTG_NO_MAP,
45     STM_CTG_NO_GENERAL,
46     STM_CTG_NO_SPLITABLE,
47     STM_CTG_NO_POPUP,
48     STM_CTG_NO_SYSTEM_ALERT,
49     STM_CTG_NO_RESTRICTION,
50 };
51
52 const char* gStmAreaName[] = {
53     "full",
54     "normal",
55     "split.main",
56     "split.sub",
57     "onscreen",
58     "restriction.normal",
59     "restriction.split.main",
60     "restriction.split.sub",
61 };
62
63 const int gStmAreaNo[] = {
64     STM_ARA_NO_FULL,
65     STM_ARA_NO_NORMAL,
66     STM_ARA_NO_SPLIT_MAIN,
67     STM_ARA_NO_SPLIT_SUB,
68     STM_ARA_NO_ON_SCREEN,
69     STM_ARA_NO_RESTRICTION_NORMAL,
70     STM_ARA_NO_RESTRICTION_SPLIT_MAIN,
71     STM_ARA_NO_RESTRICTION_SPLIT_SUB,
72 };
73
74 // String for state
75 const char* gStmTransGearStateNo2Name[] = {
76     "trans_gear_neutral",
77     "trans_gear_not_neutral"
78 };
79
80 const char* gStmParkingBrakeStateNo2Name[] = {
81     "parking_brake_off",
82     "parking_brake_on"
83 };
84
85 const char* gStmAccelPedalStateNo2Name[] = {
86     "accel_pedal_off",
87     "accel_pedal_on"
88 };
89
90 const char* gStmCarStateNo2Name[] = {
91     "car_stop",
92     "car_run"
93 };
94
95 const char* gStmLampStateNo2Name[] = {
96     "lamp_off",
97     "lamp_on"
98 };
99
100 const char* gStmLayoutNo2Name[] = {
101     "none",
102     "pu",
103     "sa",
104     "m1",
105     "m2",
106     "mf",
107     "s1",
108     "s2",
109     "g",
110     "hs",
111     "restriction",
112     "restriction.split.main",
113     "restriction.split.sub",
114 };
115
116 stm_state_t g_crr_state;
117 stm_state_t g_prv_state;
118 int g_prv_restriction_state_car_stop = 0;
119 int g_prv_apps_state_car_stop = 0;
120
121 void stmInitialize() {
122     // Initialize previous state
123     memset(&g_prv_state, 0, sizeof(g_prv_state));
124
125     g_prv_state.layer.on_screen.state   = gStmLayoutNoNone;
126     g_prv_state.layer.restriction.state = gStmLayoutNoNone;
127     g_prv_state.layer.apps.state        = gStmLayoutNoNone;
128     g_prv_state.layer.homescreen.state  = gStmLayoutNoNone;
129     g_prv_state.trans_gear.state    = gStmTransGearStateNoN;
130     g_prv_state.parking_brake.state = gStmParkingBrakeStateNoOn;
131     g_prv_state.accel_pedal.state   = gStmAccelPedalStateNoOff;
132     g_prv_state.car.state           = gStmCarStateNoStop;
133     g_prv_state.lamp.state          = gStmLampStateNoOff;
134
135     // Initialize current state
136     g_crr_state = g_prv_state;
137 }
138
139 int stmTransitionState(int event, stm_state_t* state) {
140     int event_no, category_no, area_no;
141     int restriction_state, apps_state;
142     int trans_gear_state, parking_brake_state, accel_pedal_state, car_state, lamp_state;
143
144     event_no    = event & STM_MSK_EVT_NO;
145     category_no = event & STM_MSK_CTG_NO;
146     area_no     = event & STM_MSK_ARA_NO;
147
148     // Backup previous state
149     g_prv_state = g_crr_state;
150
151     // Get previous state
152     restriction_state = g_prv_state.layer.restriction.state;
153     apps_state        = g_prv_state.layer.apps.state;
154     trans_gear_state    = g_prv_state.trans_gear.state;
155     parking_brake_state = g_prv_state.parking_brake.state;
156     accel_pedal_state   = g_prv_state.accel_pedal.state;
157     car_state           = g_prv_state.car.state;
158     lamp_state          = g_prv_state.lamp.state;
159
160     // Clear flags
161     g_crr_state.layer.on_screen.is_changed   = STM_FALSE;
162     g_crr_state.layer.restriction.is_changed = STM_FALSE;
163     g_crr_state.layer.apps.is_changed        = STM_FALSE;
164     g_crr_state.layer.homescreen.is_changed  = STM_FALSE;
165     g_crr_state.trans_gear.is_changed    = STM_FALSE;
166     g_crr_state.parking_brake.is_changed = STM_FALSE;
167     g_crr_state.accel_pedal.is_changed   = STM_FALSE;
168     g_crr_state.car.is_changed           = STM_FALSE;
169     g_crr_state.lamp.is_changed          = STM_FALSE;
170
171
172     // Set car state
173     switch (event_no) {
174     case STM_EVT_NO_TRANS_GEAR_N:
175         if (gStmTransGearStateNoN != trans_gear_state) {
176             g_crr_state.trans_gear.state = gStmTransGearStateNoN;
177             g_crr_state.trans_gear.is_changed = STM_TRUE;
178         }
179         break;
180     case STM_EVT_NO_TRANS_GEAR_NOT_N:
181         if (gStmTransGearStateNoNotN != trans_gear_state) {
182             g_crr_state.trans_gear.state = gStmTransGearStateNoNotN;
183             g_crr_state.trans_gear.is_changed = STM_TRUE;
184         }
185         break;
186     case STM_EVT_NO_PARKING_BRAKE_OFF:
187         if (gStmParkingBrakeStateNoOff != parking_brake_state) {
188             g_crr_state.parking_brake.state = gStmParkingBrakeStateNoOff;
189             g_crr_state.parking_brake.is_changed = STM_TRUE;
190         }
191         break;
192     case STM_EVT_NO_PARKING_BRAKE_ON:
193         if (gStmParkingBrakeStateNoOn != parking_brake_state) {
194             g_crr_state.parking_brake.state = gStmParkingBrakeStateNoOn;
195             g_crr_state.parking_brake.is_changed = STM_TRUE;
196         }
197         break;
198     case STM_EVT_NO_ACCEL_PEDAL_OFF:
199         if (gStmAccelPedalStateNoOff != accel_pedal_state) {
200             g_crr_state.accel_pedal.state = gStmAccelPedalStateNoOff;
201             g_crr_state.accel_pedal.is_changed = STM_TRUE;
202         }
203         break;
204     case STM_EVT_NO_ACCEL_PEDAL_ON:
205         if (gStmAccelPedalStateNoOn != accel_pedal_state) {
206             g_crr_state.accel_pedal.state = gStmAccelPedalStateNoOn;
207             g_crr_state.accel_pedal.is_changed = STM_TRUE;
208         }
209         break;
210     case STM_EVT_NO_LAMP_OFF:
211         if (gStmLampStateNoOff != lamp_state) {
212             g_crr_state.lamp.state = gStmLampStateNoOff;
213             g_crr_state.lamp.is_changed = STM_TRUE;
214         }
215         break;
216     case STM_EVT_NO_LAMP_ON:
217         if (gStmLampStateNoOn != lamp_state) {
218             g_crr_state.lamp.state = gStmLampStateNoOn;
219             g_crr_state.lamp.is_changed = STM_TRUE;
220         }
221         break;
222     default:
223         // nop
224         break;
225     }
226
227 #if 1 // FOR ALS
228     if (g_crr_state.parking_brake.is_changed
229         || g_crr_state.accel_pedal.is_changed) {
230         if ((gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state)
231             && (gStmAccelPedalStateNoOn == g_crr_state.accel_pedal.state)){
232 #else
233     if (g_crr_state.parking_brake.is_changed
234         || g_crr_state.trans_gear.is_changed) {
235         if ((gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state)
236             && (gStmTransGearStateNoNotN == g_crr_state.trans_gear.state)){
237 #endif
238             if (gStmCarStateNoRun != car_state) {
239                 // Car state is changed stop -> run
240                 g_crr_state.car.state = gStmCarStateNoRun;
241                 g_crr_state.car.is_changed = STM_TRUE;
242
243                 // Update restriction layer
244                 g_prv_restriction_state_car_stop = restriction_state;
245                 g_crr_state.layer.restriction.state = gStmLayoutNoNone;
246                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
247
248                 // Update apps layer
249                 g_prv_apps_state_car_stop = apps_state;
250                 g_crr_state.layer.apps.state = gStmLayoutNoM1;
251                 g_crr_state.layer.apps.is_changed = STM_TRUE;
252             }
253         }
254         else {
255             if (gStmCarStateNoStop != car_state) {
256                 // Car state is changed run -> stop
257                 g_crr_state.car.state = gStmCarStateNoStop;
258                 g_crr_state.car.is_changed = STM_TRUE;
259
260                 // Update restriction layer
261                 g_crr_state.layer.restriction.state = g_prv_restriction_state_car_stop;
262                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
263
264                 // Update apps layer
265                 g_crr_state.layer.apps.state = g_prv_apps_state_car_stop;
266                 g_crr_state.layer.apps.is_changed = STM_TRUE;
267             }
268         }
269     }
270
271     // Set apps/homescreen layer
272     switch (event_no) {
273     case STM_EVT_NO_ACTIVATE:
274         if (gStmCarStateNoStop == car_state) {
275             switch (category_no) {
276             case STM_CTG_NO_HOMESCREEN:
277                 // Apps layer
278                 g_crr_state.layer.apps.state = gStmLayoutNoNone;
279                 g_crr_state.layer.apps.is_changed = STM_TRUE;
280
281                 // Homescreen layer
282                 g_crr_state.layer.homescreen.state = gStmLayoutNoHs;
283                 g_crr_state.layer.homescreen.is_changed = STM_TRUE;
284                 break;
285             case STM_CTG_NO_MAP:
286                 switch (area_no) {
287                 case STM_ARA_NO_FULL:
288                     // Apps layer
289                     switch (apps_state) {
290                     case gStmLayoutNoMf:
291                         // nop
292                         break;
293                     default:
294                         g_crr_state.layer.apps.state = gStmLayoutNoMf;
295                         g_crr_state.layer.apps.is_changed = STM_TRUE;
296                         break;
297                     }
298                     break;
299                 case STM_ARA_NO_NORMAL:
300                     // Apps layer
301                     switch (apps_state) {
302                     case gStmLayoutNoM1:
303                         // nop
304                         break;
305                     case gStmLayoutNoS1:
306                         g_crr_state.layer.apps.state = gStmLayoutNoM2;
307                         g_crr_state.layer.apps.is_changed = STM_TRUE;
308                         break;
309                     default:
310                         g_crr_state.layer.apps.state = gStmLayoutNoM1;
311                         g_crr_state.layer.apps.is_changed = STM_TRUE;
312                     }
313                     break;
314                 case STM_ARA_NO_SPLIT_MAIN:
315                     // Apps layer
316                     switch (apps_state) {
317                     case gStmLayoutNoS1:
318                     case gStmLayoutNoS2:
319                         g_crr_state.layer.apps.state = gStmLayoutNoS2;
320                         g_crr_state.layer.apps.is_changed = STM_TRUE;
321                         break;
322                     default:
323                         // nop
324                         break;
325                     }
326                     break;
327                 }
328                 break;
329             case STM_CTG_NO_GENERAL:
330                 switch (area_no) {
331                 case STM_ARA_NO_NORMAL:
332                     // Apps layer
333                     switch (apps_state) {
334                     case gStmLayoutNoMf:
335                         // nop
336                         break;
337                     default:
338                         g_crr_state.layer.apps.state = gStmLayoutNoG;
339                         g_crr_state.layer.apps.is_changed = STM_TRUE;
340                         break;
341                     }
342                     break;
343                 default:
344                     // nop
345                     break;
346                 }
347                 break;
348             case STM_CTG_NO_SPLITABLE:
349                 switch (area_no) {
350                 case STM_ARA_NO_NORMAL:
351                     // Apps layer
352                     switch (apps_state) {
353                     case gStmLayoutNoM1:
354                         g_crr_state.layer.apps.state = gStmLayoutNoM2;
355                         g_crr_state.layer.apps.is_changed = STM_TRUE;
356                         break;
357                     case gStmLayoutNoMf:
358                     case gStmLayoutNoS1:
359                         // nop
360                         break;
361                     default:
362                         g_crr_state.layer.apps.state = gStmLayoutNoS1;
363                         g_crr_state.layer.apps.is_changed = STM_TRUE;
364                         break;
365                     }
366                     break;
367                 case STM_ARA_NO_SPLIT_MAIN:
368                     // Apps layer
369                     switch (apps_state) {
370                     case gStmLayoutNoS1:
371                         g_crr_state.layer.apps.state = gStmLayoutNoS2;
372                         g_crr_state.layer.apps.is_changed = STM_TRUE;
373                         break;
374                     case gStmLayoutNoS2:
375                         g_crr_state.layer.apps.state = gStmLayoutNoS2;
376                         g_crr_state.layer.apps.is_changed = STM_TRUE;
377                         break;
378                     default:
379                         // nop
380                         break;
381                     }
382                     break;
383                 case STM_ARA_NO_SPLIT_SUB:
384                     // Apps layer
385                     switch (apps_state) {
386                     case gStmLayoutNoM1:
387                         g_crr_state.layer.apps.state = gStmLayoutNoM2;
388                         g_crr_state.layer.apps.is_changed = STM_TRUE;
389                         break;
390                     case gStmLayoutNoM2:
391                         g_crr_state.layer.apps.state = gStmLayoutNoM2;
392                         g_crr_state.layer.apps.is_changed = STM_TRUE;
393                         break;
394                     case gStmLayoutNoS1:
395                         g_crr_state.layer.apps.state = gStmLayoutNoS2;
396                         g_crr_state.layer.apps.is_changed = STM_TRUE;
397                         break;
398                     case gStmLayoutNoS2:
399                         g_crr_state.layer.apps.state = gStmLayoutNoS2;
400                         g_crr_state.layer.apps.is_changed = STM_TRUE;
401                         break;
402                     default:
403                         // nop
404                         break;
405                     }
406                     break;
407                 default:
408                     // nop
409                     break;
410                 }
411                 break;
412             default:
413                 // nop
414                 break;
415             }
416             break;
417         }
418     case STM_EVT_NO_DEACTIVATE:
419         switch (category_no) {
420         default:
421             // nop
422             break;
423         }
424         break;
425     default:
426         // nop
427         break;
428     }
429
430
431     // Set restriction layer
432     if (STM_CTG_NO_RESTRICTION == category_no) {
433         if (STM_EVT_NO_ACTIVATE == event_no) {
434             if (gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state) {
435                 switch (area_no) {
436                 case STM_ARA_NO_RESTRICTION_NORMAL:
437                     switch (restriction_state) {
438                     case gStmLayoutNoNone:
439                         g_crr_state.layer.restriction.state = gStmLayoutNoRestriction;
440                         g_crr_state.layer.restriction.is_changed = STM_TRUE;
441                         break;
442                     default:
443                         // nop
444                         break;
445                     }
446                     break;
447                 case STM_ARA_NO_RESTRICTION_SPLIT_MAIN:
448                     switch (restriction_state) {
449                     case gStmLayoutNoNone:
450                         g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitMain;
451                         g_crr_state.layer.restriction.is_changed = STM_TRUE;
452                         break;
453                     default:
454                         // nop
455                         break;
456                     }
457                     break;
458                 case STM_ARA_NO_RESTRICTION_SPLIT_SUB:
459                     switch (restriction_state) {
460                     case gStmLayoutNoNone:
461                         g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitSub;
462                         g_crr_state.layer.restriction.is_changed = STM_TRUE;
463                         break;
464                     default:
465                         // nop
466                         break;
467                     }
468                     break;
469                 default:
470                     // nop
471                     break;
472                 }
473             }
474         }
475         else if (STM_EVT_NO_DEACTIVATE == event_no) {
476             switch (restriction_state) {
477             case gStmLayoutNoRestriction:
478             case gStmLayoutNoRestrictionSplitMain:
479             case gStmLayoutNoRestrictionSplitSub:
480                 g_crr_state.layer.restriction.state = gStmLayoutNoNone;
481                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
482                 break;
483             default:
484                 // nop
485                 break;
486             }
487         }
488     }
489     else if (g_crr_state.layer.apps.is_changed) {
490         if (gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state) {
491             if (gStmLayoutNoM2 == g_crr_state.layer.apps.state) {
492                 g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitSub;
493                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
494             }
495             else if (gStmLayoutNoS1 == g_crr_state.layer.apps.state) {
496                 g_crr_state.layer.restriction.state = gStmLayoutNoRestriction;
497                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
498             }
499             else {
500                 if (gStmLayoutNoNone != g_crr_state.layer.restriction.state) {
501                     g_crr_state.layer.restriction.state = gStmLayoutNoNone;
502                     g_crr_state.layer.restriction.is_changed = STM_TRUE;
503                 }
504             }
505         }
506         else {
507             if (gStmLayoutNoNone != g_crr_state.layer.restriction.state) {
508                 g_crr_state.layer.restriction.state = gStmLayoutNoNone;
509                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
510             }
511         }
512     }
513
514     // Copy current state for return
515     memcpy(state, &g_crr_state, sizeof(g_crr_state));
516
517     return 0;
518 }