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