X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fpolicy_manager%2Fzipc%2Fdummy_stm.c;h=0b2120adb069047aa0c85d604fbc8f71a19be22d;hb=208368fcc1c61319fa2728d950688523b0557b1f;hp=3be99641e61b9ee1a57f9d00fd6303f74ea754dc;hpb=a00d329aade532fd50bfb82106b13ef68dd40e1c;p=apps%2Fagl-service-windowmanager.git diff --git a/src/policy_manager/zipc/dummy_stm.c b/src/policy_manager/zipc/dummy_stm.c index 3be9964..0b2120a 100644 --- a/src/policy_manager/zipc/dummy_stm.c +++ b/src/policy_manager/zipc/dummy_stm.c @@ -43,9 +43,10 @@ const char* gStmCategoryName[] = { "map", "general", "splitable", - "popup", + "pop_up", "system_alert", "restriction", + "system", }; const int gStmCategoryNo[] = { @@ -56,67 +57,70 @@ const int gStmCategoryNo[] = { STM_CTG_NO_POPUP, STM_CTG_NO_SYSTEM_ALERT, STM_CTG_NO_RESTRICTION, + STM_CTG_NO_SYSTEM, }; const char* gStmAreaName[] = { - "full", + "none", + "fullscreen", "normal", "split.main", "split.sub", - "onscreen", + "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_ON_SCREEN, + 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* gStmTransGearStateNo2Name[] = { - "trans_gear_neutral", - "trans_gear_not_neutral" +const char* gStmTransGearStateName[] = { + "neutral", + "not_neutral" }; -const char* gStmParkingBrakeStateNo2Name[] = { - "parking_brake_off", - "parking_brake_on" +const char* gStmParkingBrakeStateName[] = { + "off", + "on" }; -const char* gStmAccelPedalStateNo2Name[] = { - "accel_pedal_off", - "accel_pedal_on" +const char* gStmAccelPedalStateName[] = { + "off", + "on" }; -const char* gStmCarStateNo2Name[] = { - "car_stop", - "car_run" +const char* gStmRunningStateNo2Name[] = { + "stop", + "run" }; -const char* gStmLampStateNo2Name[] = { - "lamp_off", - "lamp_on" +const char* gStmLampStateName[] = { + "off", + "on" }; -const char* gStmLightstatusBrakeStateNo2Name[] = { - "lightstatus_brake_off", - "lightstatus_brake_on" +const char* gStmLightstatusBrakeStateName[] = { + "off", + "on" }; -const char* gStmRestrictionModeStateNo2Name[] = { - "restriction_mode_off", - "restriction_mode_on" +const char* gStmRestrictionModeStateName[] = { + "off", + "on" }; -const char* gStmLayoutNo2Name[] = { +const char* gStmLayoutName[] = { "none", "pu", "sa", @@ -130,10 +134,39 @@ const char* gStmLayoutNo2Name[] = { "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; @@ -142,17 +175,17 @@ void stmInitialize() { // Initialize previous state memset(&g_prv_state, 0, sizeof(g_prv_state)); - g_prv_state.layer.on_screen.state = gStmLayoutNoNone; - g_prv_state.layer.restriction.state = gStmLayoutNoNone; - g_prv_state.layer.apps.state = gStmLayoutNoNone; - g_prv_state.layer.homescreen.state = gStmLayoutNoNone; - g_prv_state.trans_gear.state = gStmTransGearStateNoN; - g_prv_state.lightstatus_brake.state = gStmLightstatusBrakeStateNoOn; - g_prv_state.accel_pedal.state = gStmAccelPedalStateNoOff; - g_prv_state.car.state = gStmCarStateNoStop; - g_prv_state.lamp.state = gStmLampStateNoOff; - g_prv_state.parking_brake.state = gStmParkingBrakeStateNoOn; - g_prv_state.restriction_mode.state = gStmRestrictionModeStateNoOff; + 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; @@ -160,7 +193,7 @@ void stmInitialize() { int stmTransitionState(int event, stm_state_t* state) { int event_no, category_no, area_no; - int restriction_state, apps_state; + 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; @@ -171,90 +204,91 @@ int stmTransitionState(int event, stm_state_t* state) { g_prv_state = g_crr_state; // Get previous state - restriction_state = g_prv_state.layer.restriction.state; - apps_state = g_prv_state.layer.apps.state; - trans_gear_state = g_prv_state.trans_gear.state; - parking_brake_state = g_prv_state.parking_brake.state; - accel_pedal_state = g_prv_state.accel_pedal.state; - car_state = g_prv_state.car.state; - lamp_state = g_prv_state.lamp.state; - lightstatus_brake_state = g_prv_state.lightstatus_brake.state; - restriction_mode_state = g_prv_state.restriction_mode.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.on_screen.is_changed = STM_FALSE; - g_crr_state.layer.restriction.is_changed = STM_FALSE; - g_crr_state.layer.apps.is_changed = STM_FALSE; - g_crr_state.layer.homescreen.is_changed = STM_FALSE; - g_crr_state.trans_gear.is_changed = STM_FALSE; - g_crr_state.parking_brake.is_changed = STM_FALSE; - g_crr_state.lightstatus_brake.is_changed = STM_FALSE; - g_crr_state.accel_pedal.is_changed = STM_FALSE; - g_crr_state.car.is_changed = STM_FALSE; - g_crr_state.lamp.is_changed = STM_FALSE; - g_crr_state.restriction_mode.is_changed = STM_FALSE; + 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.trans_gear.state = gStmTransGearStateNoN; - g_crr_state.trans_gear.is_changed = STM_TRUE; + 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.trans_gear.state = gStmTransGearStateNoNotN; - g_crr_state.trans_gear.is_changed = STM_TRUE; + 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.parking_brake.state = gStmParkingBrakeStateNoOff; - g_crr_state.parking_brake.is_changed = STM_TRUE; + 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.parking_brake.state = gStmParkingBrakeStateNoOn; - g_crr_state.parking_brake.is_changed = STM_TRUE; + 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.accel_pedal.state = gStmAccelPedalStateNoOff; - g_crr_state.accel_pedal.is_changed = STM_TRUE; + 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.accel_pedal.state = gStmAccelPedalStateNoOn; - g_crr_state.accel_pedal.is_changed = STM_TRUE; + 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.lamp.state = gStmLampStateNoOff; - g_crr_state.lamp.is_changed = STM_TRUE; + 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.lamp.state = gStmLampStateNoOn; - g_crr_state.lamp.is_changed = STM_TRUE; + 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.lightstatus_brake.state = gStmLightstatusBrakeStateNoOff; - g_crr_state.lightstatus_brake.is_changed = STM_TRUE; + 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.lightstatus_brake.state = gStmLightstatusBrakeStateNoOn; - g_crr_state.lightstatus_brake.is_changed = STM_TRUE; + g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state = gStmLightstatusBrakeStateNoOn; + g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_TRUE; } break; default: @@ -263,27 +297,27 @@ int stmTransitionState(int event, stm_state_t* state) { } #if 1 // FOR ALS - if (g_crr_state.lightstatus_brake.is_changed - || g_crr_state.accel_pedal.is_changed) { - if ((gStmLightstatusBrakeStateNoOff == g_crr_state.lightstatus_brake.state) - && (gStmAccelPedalStateNoOn == g_crr_state.accel_pedal.state)){ + 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.parking_brake.is_changed - || g_crr_state.trans_gear.is_changed) { - if ((gStmParkingBrakeStateNoOff == g_crr_state.parking_brake.state) - && (gStmTransGearStateNoNotN == g_crr_state.trans_gear.state)){ + 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 (gStmCarStateNoRun != car_state) { + if (gStmRunningNoRun != car_state) { // Car state is changed stop -> run - g_crr_state.car.state = gStmCarStateNoRun; - g_crr_state.car.is_changed = STM_TRUE; + g_crr_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoRun; + g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_TRUE; } } else { - if (gStmCarStateNoStop != car_state) { + if (gStmRunningNoStop != car_state) { // Car state is changed run -> stop - g_crr_state.car.state = gStmCarStateNoStop; - g_crr_state.car.is_changed = STM_TRUE; + g_crr_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoStop; + g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_TRUE; } } } @@ -294,19 +328,25 @@ int stmTransitionState(int event, stm_state_t* state) { HMI_DEBUG("wm:pm:stm", "Restriction mode OFF -> ON"); // Restriction mode is changed OFF -> ON - g_crr_state.restriction_mode.state = gStmRestrictionModeStateNoOn; - g_crr_state.restriction_mode.is_changed = STM_TRUE; + 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.restriction.state = gStmLayoutNoNone; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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) { - g_crr_state.layer.apps.state = gStmLayoutNoM1; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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) @@ -314,17 +354,21 @@ int stmTransitionState(int event, stm_state_t* state) { HMI_DEBUG("wm:pm:stm", "Restriction mode ON -> OFF"); // Restriction mode is changed ON -> OFF - g_crr_state.restriction_mode.state = gStmRestrictionModeStateNoOff; - g_crr_state.restriction_mode.is_changed = STM_TRUE; + 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.restriction.state = g_prv_restriction_state_car_stop; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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.apps.state = g_prv_apps_state_car_stop; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = g_prv_apps_state_car_stop; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } } @@ -334,13 +378,15 @@ int stmTransitionState(int event, stm_state_t* state) { if (gStmRestrictionModeStateNoOff == restriction_mode_state) { switch (category_no) { case STM_CTG_NO_HOMESCREEN: - // Apps layer - g_crr_state.layer.apps.state = gStmLayoutNoNone; - g_crr_state.layer.apps.is_changed = STM_TRUE; - // Homescreen layer - g_crr_state.layer.homescreen.state = gStmLayoutNoHs; - g_crr_state.layer.homescreen.is_changed = STM_TRUE; + 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) { @@ -351,8 +397,8 @@ int stmTransitionState(int event, stm_state_t* state) { // nop break; default: - g_crr_state.layer.apps.state = gStmLayoutNoMf; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoMf; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; @@ -363,12 +409,12 @@ int stmTransitionState(int event, stm_state_t* state) { // nop break; case gStmLayoutNoS1: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: - g_crr_state.layer.apps.state = gStmLayoutNoM1; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } break; case STM_ARA_NO_SPLIT_MAIN: @@ -376,8 +422,8 @@ int stmTransitionState(int event, stm_state_t* state) { switch (apps_state) { case gStmLayoutNoS1: case gStmLayoutNoS2: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: // nop @@ -395,8 +441,27 @@ int stmTransitionState(int event, stm_state_t* state) { // nop break; default: - g_crr_state.layer.apps.state = gStmLayoutNoG; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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; @@ -411,16 +476,16 @@ int stmTransitionState(int event, stm_state_t* state) { // Apps layer switch (apps_state) { case gStmLayoutNoM1: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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.apps.state = gStmLayoutNoS1; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS1; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; } break; @@ -428,12 +493,12 @@ int stmTransitionState(int event, stm_state_t* state) { // Apps layer switch (apps_state) { case gStmLayoutNoS1: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoS2: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: // nop @@ -444,20 +509,20 @@ int stmTransitionState(int event, stm_state_t* state) { // Apps layer switch (apps_state) { case gStmLayoutNoM1: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoM2: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoS1: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; case gStmLayoutNoS2: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; break; default: // nop @@ -475,6 +540,46 @@ int stmTransitionState(int event, stm_state_t* state) { } 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: @@ -491,14 +596,14 @@ int stmTransitionState(int event, stm_state_t* state) { // Set restriction layer if (STM_CTG_NO_RESTRICTION == category_no) { if (STM_EVT_NO_ACTIVATE == event_no) { - if (gStmLightstatusBrakeStateNoOff == g_crr_state.lightstatus_brake.state) { + 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.apps.state == gStmLayoutNoS1) { - g_crr_state.layer.restriction.state = gStmLayoutNoRestriction; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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: @@ -509,8 +614,8 @@ int stmTransitionState(int event, stm_state_t* state) { case STM_ARA_NO_RESTRICTION_SPLIT_MAIN: switch (restriction_state) { case gStmLayoutNoNone: - g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitMain; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitMain; + g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; break; default: // nop @@ -520,9 +625,9 @@ int stmTransitionState(int event, stm_state_t* state) { case STM_ARA_NO_RESTRICTION_SPLIT_SUB: switch (restriction_state) { case gStmLayoutNoNone: - if (g_crr_state.layer.apps.state == gStmLayoutNoM2) { - g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitSub; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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: @@ -541,8 +646,8 @@ int stmTransitionState(int event, stm_state_t* state) { case gStmLayoutNoRestriction: case gStmLayoutNoRestrictionSplitMain: case gStmLayoutNoRestrictionSplitSub: - g_crr_state.layer.restriction.state = gStmLayoutNoNone; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone; + g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE; break; default: // nop @@ -550,27 +655,53 @@ int stmTransitionState(int event, stm_state_t* state) { } } } - else if (g_crr_state.layer.apps.is_changed) { - if (gStmLightstatusBrakeStateNoOff == g_crr_state.lightstatus_brake.state) { - if (gStmLayoutNoM2 == g_crr_state.layer.apps.state) { - g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitSub; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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.apps.state) { - g_crr_state.layer.restriction.state = gStmLayoutNoRestriction; - g_crr_state.layer.restriction.is_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.restriction.state) { - g_crr_state.layer.restriction.state = gStmLayoutNoNone; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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.restriction.state) { - g_crr_state.layer.restriction.state = gStmLayoutNoNone; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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; } } } @@ -579,12 +710,16 @@ int stmTransitionState(int event, stm_state_t* state) { memcpy(state, &g_crr_state, sizeof(g_crr_state)); if ((STM_FALSE == g_map_is_activated) - && (STM_TRUE == g_crr_state.layer.apps.is_changed) - && ((gStmLayoutNoM1 == g_crr_state.layer.apps.state) - || (gStmLayoutNoM2 == g_crr_state.layer.apps.state) - || (gStmLayoutNoMf == g_crr_state.layer.apps.state))) { + && (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; +}