/* * Copyright (c) 2018 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "stm.h" #include "stm_inner.h" static StmState g_stm_crr_state; static StmState g_stm_prv_state; void stmInitializeInner() { // Initialize previous state memset(&g_stm_prv_state, 0, sizeof(g_stm_prv_state)); // Initialize current state g_stm_crr_state = g_stm_prv_state; } int stmTransitionStateInner(int event, StmState* state) { int event_no, category_no, area_no; event_no = STM_GET_EVENT_FROM_ID(event); category_no = STM_GET_CATEGORY_FROM_ID(event); area_no = STM_GET_AREA_FROM_ID(event); // Backup previous state g_stm_prv_state = g_stm_crr_state; // ------------------------------------------------------- // There is no policy table by default. // Therefore update each layers // to draw the applications in requested area // in accordance with inputed activate/deactivate events. // ------------------------------------------------------- if (StmEvtNoActivate == event_no) { if (StmCtgNoHomescreen == category_no) { g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoHms; g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE; // For AGL JIRA SPEC-1407 // Apps layer is invisibled only when Homescreen app is started already if (StmLayoutNoHms == g_stm_prv_state.layer[StmLayerNoHomescreen].state) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE; } } else if (StmCtgNoDebug == category_no) { if (StmAreaNoNormal == area_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgNml; } else if (StmAreaNoSplitMain == area_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplMain; } else if (StmAreaNoSplitSub == area_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplSub; } else if (StmAreaNoFullscreen == area_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgFll; } g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE; } else if (StmCtgNoSoftwareKeyboard == category_no) { g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoSftKbd; g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE; } else if (StmCtgNoPopUp == category_no) { g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoPopUp; g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE; } else if (StmCtgNoSystemAlert == category_no) { g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt; g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE; } else if (StmCtgNoTbt == category_no) { if (StmAreaNoMasterSplitSub == area_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoRcvSpl; g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE; g_stm_crr_state.layer[StmLayerNoRemote].state = StmLayoutNoRmtTbt; g_stm_crr_state.layer[StmLayerNoRemote].changed = STM_TRUE; } else if (StmAreaNoNormal == area_no) { g_stm_crr_state.layer[StmLayerNoRemote].state = StmLayoutNoTbt; g_stm_crr_state.layer[StmLayerNoRemote].changed = STM_TRUE; } } else if (StmCtgNoReceiver == category_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoRcvSpl; g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE; } else if (StmCtgNoMeter == category_no) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoMtrNml; g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE; } } else if (StmEvtNoDeactivate == event_no) { if (StmCtgNoHomescreen == category_no) { g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE; } else if (StmCtgNoDebug == category_no) { if ((StmLayoutNoDbgNml == g_stm_prv_state.layer[StmLayerNoApps].state) || (StmLayoutNoDbgSplMain == g_stm_prv_state.layer[StmLayerNoApps].state) || (StmLayoutNoDbgSplSub == g_stm_prv_state.layer[StmLayerNoApps].state) || (StmLayoutNoDbgFll == g_stm_prv_state.layer[StmLayerNoApps].state)) { g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE; } } else if (StmCtgNoSoftwareKeyboard == category_no) { if (StmLayoutNoSftKbd == g_stm_prv_state.layer[StmLayerNoNearHomescreen].state ) { g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE; } } else if (StmCtgNoPopUp == category_no) { if (StmLayoutNoPopUp == g_stm_prv_state.layer[StmLayerNoOnScreen].state ) { g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE; } } else if (StmCtgNoSystemAlert == category_no) { if (StmLayoutNoSysAlt == g_stm_prv_state.layer[StmLayerNoOnScreen].state ) { g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE; } } else if (StmCtgNoTbt == category_no) { if (StmLayoutNoRmtTbt == g_stm_prv_state.layer[StmLayerNoRemote].state) { g_stm_crr_state.layer[StmLayerNoRemote].state = StmLayoutNoNone; g_stm_crr_state.layer[StmLayerNoRemote].changed = STM_TRUE; } } } // Copy current state for return memcpy(state, &g_stm_crr_state, sizeof(g_stm_crr_state)); return 0; } void stmUndoStateInner() { g_stm_crr_state = g_stm_prv_state; }