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=f174866b785a214b6cec07d3c1059bdd9adaab02;hpb=b126caef1760902eb863af8ea892c4db9b9663f9;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 f174866..0b2120a 100644 --- a/src/policy_manager/zipc/dummy_stm.c +++ b/src/policy_manager/zipc/dummy_stm.c @@ -1,32 +1,41 @@ #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", - "car_stop", - "car_run", "timer_expired", "lamp_off", - "lamp_on" + "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_CAR_STOP, - STM_EVT_NO_CAR_RUN, STM_EVT_NO_TIMER_EXPIRED, STM_EVT_NO_LAMP_OFF, - STM_EVT_NO_LAMP_ON + 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[] = { @@ -34,9 +43,10 @@ const char* gStmCategoryName[] = { "map", "general", "splitable", - "popup", + "pop_up", "system_alert", "restriction", + "system", }; const int gStmCategoryNo[] = { @@ -47,52 +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* gStmParkingBrakeStateNo2Name[] = { - "parking_brake_off", - "parking_brake_on" +const char* gStmTransGearStateName[] = { + "neutral", + "not_neutral" }; -const char* gStmAccelPedalStateNo2Name[] = { - "accel_pedal_off", - "accel_pedal_on" +const char* gStmParkingBrakeStateName[] = { + "off", + "on" }; -const char* gStmCarStateNo2Name[] = { - "car_stop", - "car_run" +const char* gStmAccelPedalStateName[] = { + "off", + "on" }; -const char* gStmLampStateNo2Name[] = { - "lamp_off", - "lamp_on" +const char* gStmRunningStateNo2Name[] = { + "stop", + "run" }; -const char* gStmLayoutNo2Name[] = { +const char* gStmLampStateName[] = { + "off", + "on" +}; + +const char* gStmLightstatusBrakeStateName[] = { + "off", + "on" +}; + +const char* gStmRestrictionModeStateName[] = { + "off", + "on" +}; + +const char* gStmLayoutName[] = { "none", "pu", "sa", @@ -106,24 +134,58 @@ 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; 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.parking_brake.state = gStmParkingBrakeStateNoOn; - g_prv_state.accel_pedal.state = gStmAccelPedalStateNoOff; - g_prv_state.car.state = gStmCarStateNoStop; - g_prv_state.lamp.state = gStmLampStateNoOff; + 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; @@ -131,8 +193,8 @@ void stmInitialize() { int stmTransitionState(int event, stm_state_t* state) { int event_no, category_no, area_no; - int restriction_state, apps_state; - int parking_brake_state, accel_pedal_state, car_state, lamp_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; category_no = event & STM_MSK_CTG_NO; @@ -142,151 +204,330 @@ 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; - 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; + 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.parking_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.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: - 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; - break; - case STM_CTG_NO_MAP: - switch (area_no) { - case STM_ARA_NO_FULL: + 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 - switch (apps_state) { - case gStmLayoutNoMf: - // nop - break; - default: - g_crr_state.layer.apps.state = gStmLayoutNoMf; - g_crr_state.layer.apps.is_changed = STM_TRUE; - break; + if (gStmLayoutNoNone != apps_state) { + g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoNone; + g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE; } break; - case STM_ARA_NO_NORMAL: - // Apps layer - switch (apps_state) { - case gStmLayoutNoM1: - // nop - break; - case gStmLayoutNoS1: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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; - default: - g_crr_state.layer.apps.state = gStmLayoutNoM1; - g_crr_state.layer.apps.is_changed = STM_TRUE; - } - break; - case STM_ARA_NO_SPLIT_MAIN: - // Apps layer - switch (apps_state) { - case gStmLayoutNoS1: - case gStmLayoutNoS2: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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; - default: - // nop + 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; - } - break; - case STM_CTG_NO_GENERAL: - switch (area_no) { - case STM_ARA_NO_NORMAL: - // Apps layer - switch (apps_state) { - case gStmLayoutNoMf: - // nop + 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: - g_crr_state.layer.apps.state = gStmLayoutNoG; - g_crr_state.layer.apps.is_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.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_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; - break; } break; - case STM_ARA_NO_SPLIT_MAIN: - // Apps layer - switch (apps_state) { - case gStmLayoutNoS1: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; - break; - case gStmLayoutNoS2: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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_ARA_NO_SPLIT_SUB: - // Apps layer - switch (apps_state) { - case gStmLayoutNoM1: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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 gStmLayoutNoM2: - g_crr_state.layer.apps.state = gStmLayoutNoM2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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 gStmLayoutNoS1: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; - break; - case gStmLayoutNoS2: - g_crr_state.layer.apps.state = gStmLayoutNoS2; - g_crr_state.layer.apps.is_changed = STM_TRUE; + 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 @@ -298,142 +539,187 @@ int stmTransitionState(int event, stm_state_t* state) { break; } break; - case STM_CTG_NO_RESTRICTION: - switch (area_no) { - case STM_ARA_NO_RESTRICTION_NORMAL: - // restriction Layer - switch (restriction_state) { - case gStmLayoutNoNone: - g_crr_state.layer.restriction.state = gStmLayoutNoRestriction; - g_crr_state.layer.restriction.is_changed = STM_TRUE; - break; - default: - // nop + } + 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_ARA_NO_RESTRICTION_SPLIT_MAIN: - // restriction Layer - switch (restriction_state) { - case gStmLayoutNoNone: - g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitMain; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + 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_ARA_NO_RESTRICTION_SPLIT_SUB: - // restriction Layer - switch (restriction_state) { - case gStmLayoutNoNone: - g_crr_state.layer.restriction.state = gStmLayoutNoRestrictionSplitSub; - g_crr_state.layer.restriction.is_changed = STM_TRUE; + } + } + 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; } - break; - default: - // nop - break; } - break; - default: - // nop - break; } - case STM_EVT_NO_DEACTIVATE: - switch (category_no) { - case STM_CTG_NO_RESTRICTION: - // restriction Layer + else if (STM_EVT_NO_DEACTIVATE == event_no) { switch (restriction_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 break; } - default: - // nop - break; - } - 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; } - 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; - } - break; - case STM_EVT_NO_ACCEL_PEDAL_OFF: - if (gStmAccelPedalStateNoOff != accel_pedal_state) { - g_crr_state.layer.apps.state = g_prv_apps_state_car_stop; - g_crr_state.layer.apps.is_changed = STM_TRUE; - - g_crr_state.accel_pedal.state = gStmAccelPedalStateNoOff; - g_crr_state.accel_pedal.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[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; + } + } } - break; - case STM_EVT_NO_ACCEL_PEDAL_ON: - if (gStmAccelPedalStateNoOn != accel_pedal_state) { - g_prv_apps_state_car_stop = apps_state; - g_crr_state.layer.apps.state = gStmLayoutNoM1; - g_crr_state.layer.apps.is_changed = STM_TRUE; - - g_crr_state.accel_pedal.state = gStmAccelPedalStateNoOn; - g_crr_state.accel_pedal.is_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; + } } - break; - case STM_EVT_NO_CAR_STOP: - if (gStmCarStateNoStop != car_state) { - g_crr_state.layer.apps.state = g_prv_apps_state_car_stop; - g_crr_state.layer.apps.is_changed = STM_TRUE; + } - g_crr_state.car.state = gStmCarStateNoStop; - g_crr_state.car.is_changed = STM_TRUE; - } - break; - case STM_EVT_NO_CAR_RUN: - if (gStmCarStateNoRun != car_state) { - g_prv_apps_state_car_stop = apps_state; - g_crr_state.layer.apps.state = gStmLayoutNoM1; - g_crr_state.layer.apps.is_changed = STM_TRUE; - - g_crr_state.car.state = gStmCarStateNoRun; - g_crr_state.car.is_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; + // 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; + } } - 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; + 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; + } } - 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; +}