Add transmission gear position event in PolicyManager
[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     switch (event_no) {
172     case STM_EVT_NO_ACTIVATE:
173         switch (category_no) {
174         case STM_CTG_NO_HOMESCREEN:
175             // Apps layer
176             g_crr_state.layer.apps.state = gStmLayoutNoNone;
177             g_crr_state.layer.apps.is_changed = STM_TRUE;
178
179             // Homescreen layer
180             g_crr_state.layer.homescreen.state = gStmLayoutNoHs;
181             g_crr_state.layer.homescreen.is_changed = STM_TRUE;
182             break;
183         case STM_CTG_NO_MAP:
184             switch (area_no) {
185             case STM_ARA_NO_FULL:
186                 // Apps layer
187                 switch (apps_state) {
188                 case gStmLayoutNoMf:
189                     // nop
190                     break;
191                 default:
192                     g_crr_state.layer.apps.state = gStmLayoutNoMf;
193                     g_crr_state.layer.apps.is_changed = STM_TRUE;
194                     break;
195                 }
196                 break;
197             case STM_ARA_NO_NORMAL:
198                 // Apps layer
199                 switch (apps_state) {
200                 case gStmLayoutNoM1:
201                     // nop
202                     break;
203                 case gStmLayoutNoS1:
204                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
205                     g_crr_state.layer.apps.is_changed = STM_TRUE;
206                     break;
207                 default:
208                     g_crr_state.layer.apps.state = gStmLayoutNoM1;
209                     g_crr_state.layer.apps.is_changed = STM_TRUE;
210                 }
211                 break;
212             case STM_ARA_NO_SPLIT_MAIN:
213                 // Apps layer
214                 switch (apps_state) {
215                 case gStmLayoutNoS1:
216                 case gStmLayoutNoS2:
217                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
218                     g_crr_state.layer.apps.is_changed = STM_TRUE;
219                     break;
220                 default:
221                     // nop
222                     break;
223                 }
224                 break;
225             }
226             break;
227         case STM_CTG_NO_GENERAL:
228             switch (area_no) {
229             case STM_ARA_NO_NORMAL:
230                 // Apps layer
231                 switch (apps_state) {
232                 case gStmLayoutNoMf:
233                     // nop
234                     break;
235                 default:
236                     g_crr_state.layer.apps.state = gStmLayoutNoG;
237                     g_crr_state.layer.apps.is_changed = STM_TRUE;
238                     break;
239                 }
240                 break;
241             default:
242                 // nop
243                 break;
244             }
245             break;
246         case STM_CTG_NO_SPLITABLE:
247             switch (area_no) {
248             case STM_ARA_NO_NORMAL:
249                 // Apps layer
250                 switch (apps_state) {
251                 case gStmLayoutNoM1:
252                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
253                     g_crr_state.layer.apps.is_changed = STM_TRUE;
254                     break;
255                 case gStmLayoutNoMf:
256                 case gStmLayoutNoS1:
257                     // nop
258                     break;
259                 default:
260                     g_crr_state.layer.apps.state = gStmLayoutNoS1;
261                     g_crr_state.layer.apps.is_changed = STM_TRUE;
262                     break;
263                 }
264                 break;
265             case STM_ARA_NO_SPLIT_MAIN:
266                 // Apps layer
267                 switch (apps_state) {
268                 case gStmLayoutNoS1:
269                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
270                     g_crr_state.layer.apps.is_changed = STM_TRUE;
271                     break;
272                 case gStmLayoutNoS2:
273                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
274                     g_crr_state.layer.apps.is_changed = STM_TRUE;
275                     break;
276                 default:
277                     // nop
278                     break;
279                 }
280                 break;
281             case STM_ARA_NO_SPLIT_SUB:
282                 // Apps layer
283                 switch (apps_state) {
284                 case gStmLayoutNoM1:
285                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
286                     g_crr_state.layer.apps.is_changed = STM_TRUE;
287                     break;
288                 case gStmLayoutNoM2:
289                     g_crr_state.layer.apps.state = gStmLayoutNoM2;
290                     g_crr_state.layer.apps.is_changed = STM_TRUE;
291                     break;
292                 case gStmLayoutNoS1:
293                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
294                     g_crr_state.layer.apps.is_changed = STM_TRUE;
295                     break;
296                 case gStmLayoutNoS2:
297                     g_crr_state.layer.apps.state = gStmLayoutNoS2;
298                     g_crr_state.layer.apps.is_changed = STM_TRUE;
299                     break;
300                 default:
301                     // nop
302                     break;
303                 }
304                 break;
305             default:
306                 // nop
307                 break;
308             }
309             break;
310         case STM_CTG_NO_RESTRICTION:
311             switch (area_no) {
312             case STM_ARA_NO_RESTRICTION_NORMAL:
313                 // restriction Layer
314                 switch (restriction_state) {
315                 case gStmLayoutNoNone:
316                     g_crr_state.layer.restriction.state = gStmLayoutNoRestriction;
317                     g_crr_state.layer.restriction.is_changed = STM_TRUE;
318                     break;
319                 default:
320                     // nop
321                     break;
322                 }
323                 break;
324             case STM_ARA_NO_RESTRICTION_SPLIT_MAIN:
325                 // restriction Layer
326                 switch (restriction_state) {
327                 case gStmLayoutNoNone:
328                     g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitMain;
329                     g_crr_state.layer.restriction.is_changed = STM_TRUE;
330                     break;
331                 default:
332                     // nop
333                     break;
334                 }
335                 break;
336             case STM_ARA_NO_RESTRICTION_SPLIT_SUB:
337                 // restriction Layer
338                 switch (restriction_state) {
339                 case gStmLayoutNoNone:
340                     g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitSub;
341                     g_crr_state.layer.restriction.is_changed = STM_TRUE;
342                     break;
343                 default:
344                     // nop
345                     break;
346                 }
347                 break;
348             default:
349                 // nop
350                 break;
351             }
352             break;
353         default:
354             // nop
355             break;
356         }
357     case STM_EVT_NO_DEACTIVATE:
358         switch (category_no) {
359         case STM_CTG_NO_RESTRICTION:
360             // restriction Layer
361             switch (restriction_state) {
362             case gStmLayoutNoRestriction:
363             case gStmLayoutNoRestrictionSplitMain:
364             case gStmLayoutNoRestrictionSplitSub:
365                 g_crr_state.layer.restriction.state = gStmLayoutNoNone;
366                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
367                 break;
368             default:
369                 // nop
370                 break;
371             }
372         default:
373             // nop
374             break;
375         }
376         break;
377     case STM_EVT_NO_TRANS_GEAR_N:
378         if (gStmTransGearStateNoN != trans_gear_state) {
379             g_crr_state.trans_gear.state = gStmTransGearStateNoN;
380             g_crr_state.trans_gear.is_changed = STM_TRUE;
381         }
382         break;
383     case STM_EVT_NO_TRANS_GEAR_NOT_N:
384         if (gStmTransGearStateNoNotN != trans_gear_state) {
385             g_crr_state.trans_gear.state = gStmTransGearStateNoNotN;
386             g_crr_state.trans_gear.is_changed = STM_TRUE;
387         }
388         break;
389     case STM_EVT_NO_PARKING_BRAKE_OFF:
390         if (gStmParkingBrakeStateNoOff != parking_brake_state) {
391             g_crr_state.parking_brake.state = gStmParkingBrakeStateNoOff;
392             g_crr_state.parking_brake.is_changed = STM_TRUE;
393         }
394         break;
395     case STM_EVT_NO_PARKING_BRAKE_ON:
396         if (gStmParkingBrakeStateNoOn != parking_brake_state) {
397             g_crr_state.parking_brake.state = gStmParkingBrakeStateNoOn;
398             g_crr_state.parking_brake.is_changed = STM_TRUE;
399         }
400         break;
401     case STM_EVT_NO_ACCEL_PEDAL_OFF:
402         if (gStmAccelPedalStateNoOff != accel_pedal_state) {
403             g_crr_state.accel_pedal.state = gStmAccelPedalStateNoOff;
404             g_crr_state.accel_pedal.is_changed = STM_TRUE;
405         }
406         break;
407     case STM_EVT_NO_ACCEL_PEDAL_ON:
408         if (gStmAccelPedalStateNoOn != accel_pedal_state) {
409             g_crr_state.accel_pedal.state = gStmAccelPedalStateNoOn;
410             g_crr_state.accel_pedal.is_changed = STM_TRUE;
411         }
412         break;
413     case STM_EVT_NO_LAMP_OFF:
414         if (gStmLampStateNoOff != lamp_state) {
415             g_crr_state.lamp.state = gStmLampStateNoOff;
416             g_crr_state.lamp.is_changed = STM_TRUE;
417         }
418         break;
419     case STM_EVT_NO_LAMP_ON:
420         if (gStmLampStateNoOn != lamp_state) {
421             g_crr_state.lamp.state = gStmLampStateNoOn;
422             g_crr_state.lamp.is_changed = STM_TRUE;
423         }
424         break;
425     default:
426         // nop
427         break;
428     }
429
430     // Set car state
431 #if 1 // FOR ALS
432     if (g_crr_state.parking_brake.is_changed
433         || g_crr_state.accel_pedal.is_changed) {
434         if ((gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state)
435             && (gStmAccelPedalStateNoOn == g_crr_state.accel_pedal.state)){
436 #else
437     if (g_crr_state.parking_brake.is_changed
438         || g_crr_state.trans_gear.is_changed) {
439         if ((gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state)
440             && (gStmTransGearStateNoNotN == g_crr_state.trans_gear.state)){
441 #endif
442             if (gStmCarStateNoRun != car_state) {
443                 // Car state is changed stop -> run
444                 g_crr_state.car.state = gStmCarStateNoRun;
445                 g_crr_state.car.is_changed = STM_TRUE;
446
447                 // Update restriction layer
448                 g_prv_restriction_state_car_stop = restriction_state;
449                 g_crr_state.layer.restriction.state = gStmLayoutNoNone;
450                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
451
452                 // Update apps layer
453                 g_prv_apps_state_car_stop = apps_state;
454                 g_crr_state.layer.apps.state = gStmLayoutNoM1;
455                 g_crr_state.layer.apps.is_changed = STM_TRUE;
456             }
457         }
458         else {
459             if (gStmCarStateNoStop != car_state) {
460                 // Car state is changed run -> stop
461                 g_crr_state.car.state = gStmCarStateNoStop;
462                 g_crr_state.car.is_changed = STM_TRUE;
463
464                 // Update restriction layer
465                 g_crr_state.layer.restriction.state = g_prv_restriction_state_car_stop;
466                 g_crr_state.layer.restriction.is_changed = STM_TRUE;
467
468                 // Update apps layer
469                 g_crr_state.layer.apps.state = g_prv_apps_state_car_stop;
470                 g_crr_state.layer.apps.is_changed = STM_TRUE;
471             }
472         }
473     }
474
475     // Copy current state for return
476     memcpy(state, &g_crr_state, sizeof(g_crr_state));
477
478     return 0;
479 }