Add boot sequence and multi ecu transfer
[apps/agl-service-windowmanager.git] / policy_manager / stm / zipc / StateTransitionor / ZST_StateTransitionor_func.c
1 /************************************************************/
2 /*     ZST_StateTransitionor_func.c                         */
3 /*     Function and variable source file                    */
4 /*     ZIPC Designer Version 1.2.1                          */
5 /************************************************************/
6 #include "ZST_include.h"
7
8 /*************************************************************
9     Function definition
10 *************************************************************/
11
12 #include <string.h>
13 #include <stdbool.h>
14
15 #include "../stm_master_apps.h"
16 #include "../stm_master_remote.h"
17
18 static int stm_ecu_type = StmEcuTypeIVI;
19
20 //=================================
21 // API
22 //=================================
23 /**
24  *  Initialize STM
25  */
26 void stmInitializeInner(const char *ecu_name) {
27
28     if (0 == strcmp("slave", ecu_name))
29     {
30         stm_ecu_type = StmEcuTypeIVI;
31     }
32     else if (0 == strcmp("master", ecu_name))
33     {
34         stm_ecu_type = StmEcuTypeMeter;
35     }
36     else if (0 == strcmp("hud", ecu_name))
37     {
38         stm_ecu_type = StmEcuTypeHUD;
39     }
40     else if (0 == strcmp("rse1", ecu_name))
41     {
42         stm_ecu_type = StmEcuTypeRSE1;
43     }
44     else if (0 == strcmp("rse2", ecu_name))
45     {
46         stm_ecu_type = StmEcuTypeRSE2;
47     }
48
49     // Initialize previous state
50     memset(&g_stm_prv_state, 0, sizeof(g_stm_prv_state));
51
52     // Initialize current state
53     g_stm_crr_state = g_stm_prv_state;
54
55     // Initialize map activate state
56         g_stm_map_is_activated = STM_FALSE;
57
58     switch ( stm_ecu_type )
59     {
60     case StmEcuTypeMeter:
61         /* Initialize LightstatusBrake state */
62         stm_lbs_initialize();
63         stm_lbs_initialize_variable();
64
65         /* Initialize AccelPedal state */
66         stm_aps_initialize();
67         stm_aps_initialize_variable();
68
69         /* Initialize car state */
70         stm_rns_initialize();
71         stm_rns_initialize_variable();
72
73         /* Initialize restriction mode state */
74         stm_rem_initialize();
75         stm_rem_initialize_variable();
76
77         // Initialize homecsreen layer
78         stm_hsl_initialize();
79         stm_hsl_initialize_variable();
80
81         // Initialize apps layer on master ecu
82         stm_master_apl_initialize();
83         stm_master_apl_initialize_valiable();
84
85         // Initialize near_homecsreen layer
86         stm_nhl_initialize();
87         stm_nhl_initialize_variable();
88
89         /* Initialize restriction layer */
90         stm_rel_initialize();
91         stm_rel_initialize_variable();
92
93         // Initialize remote layer on master ecu
94         stm_mst_rmt_initialize();
95         stm_mst_rmt_initialize_valiable();
96         break;
97     case StmEcuTypeHUD:
98         // Initialize remote_hud layer on HUD ecu
99         stm_rmt_hud_initialize();
100         stm_rmt_hud_initialize_variable();
101
102         // Initialize remote_hud_up_left layer on HUD ecu
103         stm_rmt_hud_up_left_initialize();
104         stm_rmt_hud_up_left_initialize_variable();
105         break;
106     case StmEcuTypeRSE1:
107         // Initialize remote_rse1 layer on RSE1 ecu
108         stm_rmt_rse1_initialize();
109         stm_rmt_rse1_initialize_variable();
110         break;
111     case StmEcuTypeRSE2:
112         // Initialize remote_rse2 layer on RSE2 ecu
113         stm_rmt_rse2_initialize();
114         stm_rmt_rse2_initialize_variable();
115         break;
116     case StmEcuTypeIVI:
117     default:
118         // Initialize LightstatusBrake state
119         stm_lbs_initialize();
120         stm_lbs_initialize_variable();
121
122         // Initialize AccelPedal state
123         stm_aps_initialize();
124         stm_aps_initialize_variable();
125
126         // Initialize car state
127         stm_rns_initialize();
128         stm_rns_initialize_variable();
129
130         // Initialize restriction mode state
131         stm_rem_initialize();
132         stm_rem_initialize_variable();
133
134         // Initialize homecsreen layer
135         stm_hsl_initialize();
136         stm_hsl_initialize_variable();
137
138         // Initialize apps layer
139         stm_apl_initialize();
140         stm_apl_initialize_variable();
141
142         // Initialize near_homecsreen layer
143         stm_nhl_initialize();
144         stm_nhl_initialize_variable();
145
146         // Initialize restriction layer
147         stm_rel_initialize();
148         stm_rel_initialize_variable();
149         break;
150     }
151 }
152
153 /**
154  *  Transition State
155  */
156 int stmTransitionStateInner(int event_id, StmState* state) {
157     g_stm_event    = STM_GET_EVENT_FROM_ID(event_id);
158     g_stm_category = STM_GET_CATEGORY_FROM_ID(event_id);
159     g_stm_area     = STM_GET_AREA_FROM_ID(event_id);
160
161     switch ( stm_ecu_type )
162     {
163     case StmEcuTypeMeter:
164         // LightstatusBrake state
165         stm_lbs_event_call();
166
167         // AccelPedal state
168         stm_aps_event_call();
169
170         // Car state
171         stm_rns_event_call();
172
173         // restriction mode
174         stm_rem_event_call();
175
176         // homescreen layer
177         stm_hsl_event_call();
178
179         // apps layer on master ecu
180         stm_master_apl_event_call();
181
182         // near_homecsreen layer
183         stm_nhl_event_call();
184
185         // restriction layer
186         stm_rel_event_call();
187
188         // on_screen layer
189         stm_osl_event_call();
190
191         // remote layer on master ecu
192         stm_mst_rmt_event_call();
193         break;
194     case StmEcuTypeHUD:
195         // remote_hud layer on HUD ecu
196         stm_rmt_hud_event_call();
197
198         // remote_hud_up_left layer on HUD ecu
199         stm_rmt_hud_up_left_event_call();
200         break;
201     case StmEcuTypeRSE1:
202         // remote_rse1 layer on RSE1 ecu
203         stm_rmt_rse1_event_call();
204         break;
205     case StmEcuTypeRSE2:
206         // remote_rse2 layer on RSE2 ecu
207         stm_rmt_rse1_event_call();
208         break;
209     case StmEcuTypeIVI:
210     default:
211         // LightstatusBrake state
212         stm_lbs_event_call();
213
214         // AccelPedal state
215         stm_aps_event_call();
216
217         // Car state
218         stm_rns_event_call();
219
220         // restriction mode
221         stm_rem_event_call();
222
223         // homescreen layer
224         stm_hsl_event_call();
225
226         // apps layer
227         stm_apl_event_call();
228
229         // near_homecsreen layer
230         stm_nhl_event_call();
231
232         // restriction layer
233         stm_rel_event_call();
234
235         // on_screen layer
236         stm_osl_event_call();
237         break;
238     }
239
240     // Copy current state for return
241     memcpy(state, &g_stm_crr_state, sizeof(g_stm_crr_state));
242
243     return 0;
244 }
245
246 /**
247  *  Undo State
248  */
249 void stmUndoStateInner() {
250     g_stm_event = StmEvtNoUndo;
251
252     if (StmEcuTypeMeter == stm_ecu_type)
253     {
254         // apps layer on master ecu
255         stm_master_apl_event_call();
256     }
257     else
258     {
259         // apps layer
260         stm_apl_event_call();
261     }
262
263     // near_homecsreen layer
264     stm_nhl_event_call();
265
266     // restriction layer
267     stm_rel_event_call();
268
269     // on_screen layer
270     stm_osl_event_call();
271
272     if (StmEcuTypeMeter == stm_ecu_type)
273     {
274         // remote layer on master ecu
275         stm_mst_rmt_event_call();
276     }
277
278         g_stm_crr_state = g_stm_prv_state;
279 }