#include #include "dummy_stm.h" #include "hmi-debug.h" const char* gStmEventName[] = { "activate", "deactivate", "trans_gear_neutral", "trans_gear_not_neutral", "parking_brake_off", "parking_brake_on", "accel_pedal_off", "accel_pedal_on", "timer_expired", "lamp_off", "lamp_on", "lightstatus_brake_off", "lightstatus_brake_on", "restriction_mode_off", "restriction_mode_on", }; const int gStmEventNo[] = { STM_EVT_NO_ACTIVATE, STM_EVT_NO_DEACTIVATE, STM_EVT_NO_TRANS_GEAR_N, STM_EVT_NO_TRANS_GEAR_NOT_N, STM_EVT_NO_PARKING_BRAKE_OFF, STM_EVT_NO_PARKING_BRAKE_ON, STM_EVT_NO_ACCEL_PEDAL_OFF, STM_EVT_NO_ACCEL_PEDAL_ON, STM_EVT_NO_TIMER_EXPIRED, STM_EVT_NO_LAMP_OFF, STM_EVT_NO_LAMP_ON, STM_EVT_NO_LIGHTSTATUS_BRAKE_OFF, STM_EVT_NO_LIGHTSTATUS_BRAKE_ON, STM_EVT_NO_RESTRICTION_MODE_OFF, STM_EVT_NO_RESTRICTION_MODE_ON, }; const char* gStmCategoryName[] = { "homescreen", "map", "general", "splitable", "pop_up", "system_alert", "restriction", "system", }; const int gStmCategoryNo[] = { STM_CTG_NO_HOMESCREEN, STM_CTG_NO_MAP, STM_CTG_NO_GENERAL, STM_CTG_NO_SPLITABLE, STM_CTG_NO_POPUP, STM_CTG_NO_SYSTEM_ALERT, STM_CTG_NO_RESTRICTION, STM_CTG_NO_SYSTEM, }; const char* gStmAreaName[] = { "none", "fullscreen", "normal", "split.main", "split.sub", "pop_up", "restriction.normal", "restriction.split.main", "restriction.split.sub", }; const int gStmAreaNo[] = { STM_ARA_NO_NONE, STM_ARA_NO_FULL, STM_ARA_NO_NORMAL, STM_ARA_NO_SPLIT_MAIN, STM_ARA_NO_SPLIT_SUB, STM_ARA_NO_POP_UP, STM_ARA_NO_RESTRICTION_NORMAL, STM_ARA_NO_RESTRICTION_SPLIT_MAIN, STM_ARA_NO_RESTRICTION_SPLIT_SUB, }; // String for state const char* gStmTransGearStateName[] = { "neutral", "not_neutral" }; const char* gStmParkingBrakeStateName[] = { "off", "on" }; const char* gStmAccelPedalStateName[] = { "off", "on" }; const char* gStmRunningStateNo2Name[] = { "stop", "run" }; const char* gStmLampStateName[] = { "off", "on" }; const char* gStmLightstatusBrakeStateName[] = { "off", "on" }; const char* gStmRestrictionModeStateName[] = { "off", "on" }; const char* gStmLayoutName[] = { "none", "pu", "sa", "m1", "m2", "mf", "s1", "s2", "g", "hs", "restriction", "restriction.split.main", "restriction.split.sub", "system", }; const char* gStmLayerName[] = { "homescreen", "apps", "restriction", "on_screen", }; const char* gStmCarElementName[] = { "trans_gear", "parking_brake", "accel_pedal", "running", "lamp", "lightstatus_brake", "restriction_mode", }; const char** gStmCarStateNameList[] = { gStmTransGearStateName, gStmParkingBrakeStateName, gStmAccelPedalStateName, gStmRunningStateNo2Name, gStmLampStateName, gStmLightstatusBrakeStateName, gStmRestrictionModeStateName, }; stm_state_t g_crr_state; stm_state_t g_prv_state; int g_prv_on_screen_state_car_stop = 0; int g_prv_restriction_state_car_stop = 0; int g_prv_apps_state_car_stop = 0; int g_map_is_activated = STM_FALSE; void stmInitialize() { // Initialize previous state memset(&g_prv_state, 0, sizeof(g_prv_state)); g_prv_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoNone; g_prv_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone; g_prv_state.layer[gStmLayerNoApps].state = gStmLayoutNoNone; g_prv_state.layer[gStmLayerNoHomescreen].state = gStmLayoutNoNone; g_prv_state.car_element[gStmCarElementNoTransGear].state = gStmTransGearStateNoN; g_prv_state.car_element[gStmCarElementNoLightstatusBrake].state = gStmLightstatusBrakeStateNoOn; g_prv_state.car_element[gStmCarElementNoAccelPedal].state = gStmAccelPedalStateNoOff; g_prv_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoStop; g_prv_state.car_element[gStmCarElementNoLamp].state = gStmLampStateNoOff; g_prv_state.car_element[gStmCarElementNoParkingBrake].state = gStmParkingBrakeStateNoOn; g_prv_state.car_element[gStmCarElementNoRestrictionMode].state = gStmRestrictionModeStateNoOff; // Initialize current state g_crr_state = g_prv_state; } int stmTransitionState(int event, stm_state_t* state) { int event_no, category_no, area_no; int on_screen_state, restriction_state, apps_state; int trans_gear_state, parking_brake_state, lightstatus_brake_state, accel_pedal_state, car_state, lamp_state, restriction_mode_state; event_no = event & STM_MSK_EVT_NO; category_no = event & STM_MSK_CTG_NO; area_no = event & STM_MSK_ARA_NO; // Backup previous state g_prv_state = g_crr_state; // Get previous state on_screen_state = g_prv_state.layer[gStmLayerNoOnScreen].state; restriction_state = g_prv_state.layer[gStmLayerNoRestriction].state; apps_state = g_prv_state.layer[gStmLayerNoApps].state; trans_gear_state = g_prv_state.car_element[gStmCarElementNoTransGear].state; parking_brake_state = g_prv_state.car_element[gStmCarElementNoParkingBrake].state; accel_pedal_state = g_prv_state.car_element[gStmCarElementNoAccelPedal].state; car_state = g_prv_state.car_element[gStmCarElementNoRunning].state; lamp_state = g_prv_state.car_element[gStmCarElementNoLamp].state; lightstatus_brake_state = g_prv_state.car_element[gStmCarElementNoLightstatusBrake].state; restriction_mode_state = g_prv_state.car_element[gStmCarElementNoRestrictionMode].state; // Clear flags g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_FALSE; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_FALSE; g_crr_state.layer[gStmLayerNoApps].changed = STM_FALSE; g_crr_state.layer[gStmLayerNoHomescreen].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoTransGear].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoParkingBrake].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoAccelPedal].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoLamp].changed = STM_FALSE; g_crr_state.car_element[gStmCarElementNoRestrictionMode].changed = STM_FALSE; // Set car state switch (event_no) { case STM_EVT_NO_TRANS_GEAR_N: if (gStmTransGearStateNoN != trans_gear_state) { g_crr_state.car_element[gStmCarElementNoTransGear].state = gStmTransGearStateNoN; g_crr_state.car_element[gStmCarElementNoTransGear].changed = STM_TRUE; } break; case STM_EVT_NO_TRANS_GEAR_NOT_N: if (gStmTransGearStateNoNotN != trans_gear_state) { g_crr_state.car_element[gStmCarElementNoTransGear].state = gStmTransGearStateNoNotN; g_crr_state.car_element[gStmCarElementNoTransGear].changed = STM_TRUE; } break; case STM_EVT_NO_PARKING_BRAKE_OFF: if (gStmParkingBrakeStateNoOff != parking_brake_state) { g_crr_state.car_element[gStmCarElementNoParkingBrake].state = gStmParkingBrakeStateNoOff; g_crr_state.car_element[gStmCarElementNoParkingBrake].changed = STM_TRUE; } break; case STM_EVT_NO_PARKING_BRAKE_ON: if (gStmParkingBrakeStateNoOn != parking_brake_state) { g_crr_state.car_element[gStmCarElementNoParkingBrake].state = gStmParkingBrakeStateNoOn; g_crr_state.car_element[gStmCarElementNoParkingBrake].changed = STM_TRUE; } break; case STM_EVT_NO_ACCEL_PEDAL_OFF: if (gStmAccelPedalStateNoOff != accel_pedal_state) { g_crr_state.car_element[gStmCarElementNoAccelPedal].state = gStmAccelPedalStateNoOff; g_crr_state.car_element[gStmCarElementNoAccelPedal].changed = STM_TRUE; } break; case STM_EVT_NO_ACCEL_PEDAL_ON: if (gStmAccelPedalStateNoOn != accel_pedal_state) { g_crr_state.car_element[gStmCarElementNoAccelPedal].state = gStmAccelPedalStateNoOn; g_crr_state.car_element[gStmCarElementNoAccelPedal].changed = STM_TRUE; } break; case STM_EVT_NO_LAMP_OFF: if (gStmLampStateNoOff != lamp_state) { g_crr_state.car_element[gStmCarElementNoLamp].state = gStmLampStateNoOff; g_crr_state.car_element[gStmCarElementNoLamp].changed = STM_TRUE; } break; case STM_EVT_NO_LAMP_ON: if (gStmLampStateNoOn != lamp_state) { g_crr_state.car_element[gStmCarElementNoLamp].state = gStmLampStateNoOn; g_crr_state.car_element[gStmCarElementNoLamp].changed = STM_TRUE; } break; case STM_EVT_NO_LIGHTSTATUS_BRAKE_OFF: if (gStmLightstatusBrakeStateNoOff != lightstatus_brake_state) { g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state = gStmLightstatusBrakeStateNoOff; g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_TRUE; } break; case STM_EVT_NO_LIGHTSTATUS_BRAKE_ON: if (gStmLightstatusBrakeStateNoOn != lightstatus_brake_state) { g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state = gStmLightstatusBrakeStateNoOn; g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_TRUE; } break; default: // nop break; } #if 1 // FOR ALS if (g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed || g_crr_state.car_element[gStmCarElementNoAccelPedal].changed) { if ((gStmLightstatusBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state) && (gStmAccelPedalStateNoOn == g_crr_state.car_element[gStmCarElementNoAccelPedal].state)){ #else if (g_crr_state.car_element[gStmCarElementNoParkingBrake].changed || g_crr_state.car_element[gStmCarElementNoTransGear].changed) { if ((gStmParkingBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoParkingBrake].state) && (gStmTransGearStateNoNotN == g_crr_state.car_element[gStmCarElementNoTransGear].state)){ #endif if (gStmRunningNoRun != car_state) { // Car state is changed stop -> run g_crr_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoRun; g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_TRUE; } } else { if (gStmRunningNoStop != car_state) { // Car state is changed run -> stop g_crr_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoStop; g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_TRUE; } } } // Set restriction mode if ((STM_EVT_NO_RESTRICTION_MODE_ON == event_no) && (gStmRestrictionModeStateNoOn != restriction_mode_state)) { HMI_DEBUG("wm:pm:stm", "Restriction mode OFF -> ON"); // Restriction mode is changed OFF -> ON g_crr_state.car_element[gStmCarElementNoRestrictionMode].state = gStmRestrictionModeStateNoOn; g_crr_state.car_element[gStmCarElementNoRestrictionMode].changed = STM_TRUE; // Update on screen layer g_prv_on_screen_state_car_stop = on_screen_state; g_crr_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE; // Update restriction layer g_prv_restriction_state_car_stop = restriction_state; g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; // Update apps layer g_prv_apps_state_car_stop = apps_state; if ((STM_TRUE == g_map_is_activated) && (gStmLayoutNoSystem != apps_state)) { g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } } else if ((STM_EVT_NO_RESTRICTION_MODE_OFF == event_no) && (gStmRestrictionModeStateNoOff != restriction_mode_state)) { HMI_DEBUG("wm:pm:stm", "Restriction mode ON -> OFF"); // Restriction mode is changed ON -> OFF g_crr_state.car_element[gStmCarElementNoRestrictionMode].state = gStmRestrictionModeStateNoOff; g_crr_state.car_element[gStmCarElementNoRestrictionMode].changed = STM_TRUE; // Update on screen layer g_crr_state.layer[gStmLayerNoOnScreen].state = g_prv_on_screen_state_car_stop; g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE; // Update restriction layer g_crr_state.layer[gStmLayerNoRestriction].state = g_prv_restriction_state_car_stop; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; // Update apps layer if (STM_TRUE == g_map_is_activated) { g_crr_state.layer[gStmLayerNoApps].state = g_prv_apps_state_car_stop; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } } // Set apps/homescreen layer switch (event_no) { case STM_EVT_NO_ACTIVATE: if (gStmRestrictionModeStateNoOff == restriction_mode_state) { switch (category_no) { case STM_CTG_NO_HOMESCREEN: // Homescreen layer g_crr_state.layer[gStmLayerNoHomescreen].state = gStmLayoutNoHs; g_crr_state.layer[gStmLayerNoHomescreen].changed = STM_TRUE; // Apps layer if (gStmLayoutNoNone != apps_state) { g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } break; case STM_CTG_NO_MAP: switch (area_no) { case STM_ARA_NO_FULL: // Apps layer switch (apps_state) { case gStmLayoutNoMf: // nop break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoMf; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; case STM_ARA_NO_NORMAL: // Apps layer switch (apps_state) { case gStmLayoutNoM1: // nop break; case gStmLayoutNoS1: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } break; case STM_ARA_NO_SPLIT_MAIN: // Apps layer switch (apps_state) { case gStmLayoutNoS1: case gStmLayoutNoS2: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: // nop break; } break; } break; case STM_CTG_NO_GENERAL: switch (area_no) { case STM_ARA_NO_NORMAL: // Apps layer switch (apps_state) { case gStmLayoutNoMf: // nop break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoG; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; default: // nop break; } break; case STM_CTG_NO_SYSTEM: switch (area_no) { case STM_ARA_NO_NORMAL: // Apps layer switch (apps_state) { case gStmLayoutNoMf: // nop break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoSystem; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; default: // nop break; } break; case STM_CTG_NO_SPLITABLE: switch (area_no) { case STM_ARA_NO_NORMAL: // Apps layer switch (apps_state) { case gStmLayoutNoM1: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoMf: case gStmLayoutNoS1: // nop break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS1; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; case STM_ARA_NO_SPLIT_MAIN: // Apps layer switch (apps_state) { case gStmLayoutNoS1: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoS2: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: // nop break; } break; case STM_ARA_NO_SPLIT_SUB: // Apps layer switch (apps_state) { case gStmLayoutNoM1: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoM2: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoS1: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoS2: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: // nop break; } break; default: // nop break; } break; default: // nop break; } break; } else { // (gStmRestrictionModeStateNoOn == restriction_mode_state) switch (category_no) { case STM_CTG_NO_MAP: switch (area_no) { case STM_ARA_NO_FULL: case STM_ARA_NO_NORMAL: case STM_ARA_NO_SPLIT_MAIN: // Apps layer switch (apps_state) { case gStmLayoutNoM1: // nop break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } break; } break; case STM_CTG_NO_SYSTEM: switch (area_no) { case STM_ARA_NO_NORMAL: // Apps layer switch (apps_state) { case gStmLayoutNoMf: // nop break; default: g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoSystem; g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; default: // nop break; } break; } } case STM_EVT_NO_DEACTIVATE: switch (category_no) { default: // nop break; } break; default: // nop break; } // Set restriction layer if (STM_CTG_NO_RESTRICTION == category_no) { if (STM_EVT_NO_ACTIVATE == event_no) { if (gStmLightstatusBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state) { switch (area_no) { case STM_ARA_NO_RESTRICTION_NORMAL: switch (restriction_state) { case gStmLayoutNoNone: if (g_crr_state.layer[gStmLayerNoApps].state == gStmLayoutNoS1) { g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestriction; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; } break; default: // nop break; } break; case STM_ARA_NO_RESTRICTION_SPLIT_MAIN: switch (restriction_state) { case gStmLayoutNoNone: g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitMain; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; break; default: // nop break; } break; case STM_ARA_NO_RESTRICTION_SPLIT_SUB: switch (restriction_state) { case gStmLayoutNoNone: if (g_crr_state.layer[gStmLayerNoApps].state == gStmLayoutNoM2) { g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitSub; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; } break; default: // nop break; } break; default: // nop break; } } } else if (STM_EVT_NO_DEACTIVATE == event_no) { switch (restriction_state) { case gStmLayoutNoRestriction: case gStmLayoutNoRestrictionSplitMain: case gStmLayoutNoRestrictionSplitSub: g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; break; default: // nop break; } } } else if (g_crr_state.layer[gStmLayerNoApps].changed) { if (gStmLightstatusBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state) { if (gStmLayoutNoM2 == g_crr_state.layer[gStmLayerNoApps].state) { g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitSub; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; } else if (gStmLayoutNoS1 == g_crr_state.layer[gStmLayerNoApps].state) { g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestriction; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; } else { if (gStmLayoutNoNone != g_crr_state.layer[gStmLayerNoRestriction].state) { g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; } } } else { if (gStmLayoutNoNone != g_crr_state.layer[gStmLayerNoRestriction].state) { g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; } } } // Set on screen layer if (STM_CTG_NO_POPUP == category_no) { if (STM_EVT_NO_ACTIVATE == event_no) { switch (on_screen_state) { case gStmLayoutNoNone: g_crr_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoPu; g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE; break; default: // nop break; } } else if (STM_EVT_NO_DEACTIVATE == event_no) { switch (on_screen_state) { case gStmLayoutNoPu: g_crr_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoNone; g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE; break; default: // nop break; } } } // Copy current state for return memcpy(state, &g_crr_state, sizeof(g_crr_state)); if ((STM_FALSE == g_map_is_activated) && (STM_TRUE == g_crr_state.layer[gStmLayerNoApps].changed) && ((gStmLayoutNoM1 == g_crr_state.layer[gStmLayerNoApps].state) || (gStmLayoutNoM2 == g_crr_state.layer[gStmLayerNoApps].state) || (gStmLayoutNoMf == g_crr_state.layer[gStmLayerNoApps].state))) { g_map_is_activated = STM_TRUE; } return 0; } void stmUndoState() { g_crr_state = g_prv_state; }