Revert "Add policy table generated by ZIPC for EXAMPLE"
[apps/agl-service-windowmanager-2017.git] / src / policy_manager / stm / stub / src / stm.c
1 /*
2  * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <string.h>
18 #include "stm.h"
19
20 const char* kStmEventName[] = {
21     "none",
22     "activate",
23     "deactivate",
24     "restriction_mode_off",
25     "restriction_mode_1_on",
26     "restriction_mode_2_on",
27     "undo",
28 };
29
30 const char* kStmCategoryName[] = {
31     "none",
32     "homescreen",
33     "map",
34     "general",
35     "splitable",
36     "pop_up",
37     "system_alert",
38     "restriction",
39     "system",
40     "software_keyboard",
41 };
42
43 const char* kStmAreaName[] = {
44     "none",
45     "fullscreen",
46     "normal",
47     "split.main",
48     "split.sub",
49     "on_screen",
50     "restriction.normal",
51     "restriction.split.main",
52     "restriction.split.sub",
53     "software_keyboard",
54 };
55
56 const char* kStmLayoutName[] = {
57     "none",
58     "pop_up",
59     "system_alert",
60     "map.normal",
61     "map.split",
62     "map.fullscreen",
63     "splitable.normal",
64     "splitable.split",
65     "general.normal",
66     "homescreen",
67     "restriction.normal",
68     "restriction.split.main",
69     "restriction.split.sub",
70     "system.normal",
71     "software_keyboard",
72 };
73
74 const char* kStmLayerName[] = {
75     "homescreen",
76     "apps",
77     "near_homescreen",
78     "restriction",
79     "on_screen",
80 };
81
82 const char* kStmModeName[] = {
83     "trans_gear",
84     "parking_brake",
85     "accel_pedal",
86     "running",
87     "lamp",
88     "lightstatus_brake",
89     "restriction_mode",
90 };
91
92 const char* kStmRestrictionModeStateName[] = {
93     "off",
94     "1on",
95     "2on",
96 };
97
98 const char** kStmModeStateNameList[] = {
99     kStmRestrictionModeStateName,
100 };
101
102 static StmState g_crr_state;
103 static StmState g_prv_state;
104
105 void stmInitialize() {
106     // Initialize previous state
107     memset(&g_prv_state, 0, sizeof(g_prv_state));
108
109     // Initialize current state
110     g_crr_state = g_prv_state;
111 }
112
113 int stmTransitionState(int event, StmState* state) {
114     int event_no, category_no;
115
116     event_no    = STM_GET_EVENT_FROM_ID(event);
117     category_no = STM_GET_CATEGORY_FROM_ID(event);
118
119     // Backup previous state
120     g_prv_state = g_crr_state;
121
122     // Clear current state
123     memset(&g_prv_state, 0, sizeof(g_prv_state));
124
125     // -------------------------------------------------------
126     // There is no policy table by default.
127     // Therefore update each layers
128     // to draw the applications in normal.full area
129     // in accordance with inputed activate/deactivate events.
130     // -------------------------------------------------------
131     if (StmEvtNoActivate == event_no)
132     {
133         if (StmCtgNoHomescreen == category_no)
134         {
135             g_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoHms;
136             g_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
137
138             g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
139             g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
140         }
141         else if (StmCtgNoMap == category_no)
142         {
143             g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoMapNml;
144             g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
145         }
146         else if (StmCtgNoGeneral == category_no)
147         {
148             g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoGenNml;
149             g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
150         }
151         else if (StmCtgNoSystem == category_no)
152         {
153             g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoSysNml;
154             g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
155         }
156         else if (StmCtgNoSplitable == category_no)
157         {
158             g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoSplNml;
159             g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
160         }
161         else if (StmCtgNoPopUp == category_no)
162         {
163             g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoPopUp;
164             g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
165         }
166         else if (StmCtgNoSystemAlert == category_no)
167         {
168             g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt;
169             g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
170         }
171     }
172     else if (StmEvtNoDeactivate == event_no)
173     {
174         if (StmCtgNoHomescreen == category_no)
175         {
176             g_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoNone;
177             g_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
178         }
179         else if (StmCtgNoMap == category_no)
180         {
181             if (StmLayoutNoMapNml == g_prv_state.layer[StmLayerNoApps].state )
182             {
183                 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
184                 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
185             }
186         }
187         else if (StmCtgNoGeneral == category_no)
188         {
189             if (StmLayoutNoGenNml == g_prv_state.layer[StmLayerNoApps].state )
190             {
191                 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
192                 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
193             }
194         }
195         else if (StmCtgNoSystem == category_no)
196         {
197             if (StmLayoutNoSysNml == g_prv_state.layer[StmLayerNoApps].state )
198             {
199                 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
200                 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
201             }
202         }
203         else if (StmCtgNoSplitable == category_no)
204         {
205             if (StmLayoutNoSplNml == g_prv_state.layer[StmLayerNoApps].state )
206             {
207                 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
208                 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
209             }
210         }
211         else if (StmCtgNoPopUp == category_no)
212         {
213             if (StmLayoutNoPopUp == g_prv_state.layer[StmLayerNoOnScreen].state )
214             {
215                 g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
216                 g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
217             }
218         }
219         else if (StmCtgNoSystemAlert == category_no)
220         {
221             if (StmLayoutNoSysAlt == g_prv_state.layer[StmLayerNoOnScreen].state )
222             {
223                 g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
224                 g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
225             }
226         }
227     }
228
229     // Copy current state for return
230     memcpy(state, &g_crr_state, sizeof(g_crr_state));
231
232     return 0;
233 }
234
235 void stmUndoState() {
236     g_crr_state = g_prv_state;
237 }