diff --git a/.vscode/settings.json b/.vscode/settings.json index 78e0c1dd..c9a14482 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "cmake.sourceDirectory": "C:/Users/MSI/Documents/WorkSpace/git/ADM/GW", + "cmake.sourceDirectory": "C:/Users/blueb/Documents/WorkSpace/git/ADM/GW", "files.associations": { "algorithm": "cpp", "any": "cpp", diff --git a/GW/src/Global_Variable.c b/GW/src/Global_Variable.c index eff536b3..a097e3fe 100644 --- a/GW/src/Global_Variable.c +++ b/GW/src/Global_Variable.c @@ -970,4 +970,10 @@ uint8_t GV_VCU_EstMassFlag = 0; uint8_t GV_VCU_AccControlFlag = 0; // VCU Emergency Stop -uint8_t GV_VCU_Emergency_Flag = 0; \ No newline at end of file +uint8_t GV_VCU_Emergency_Flag = 0; +bool isEmergencyVcu; +bool isEmergencyRc; +bool isEmergencyAcu; +bool isEmergencySwitch; +bool isEmergency; +bool isCharging; \ No newline at end of file diff --git a/GW/src/Global_Variable.h b/GW/src/Global_Variable.h index fb930f70..8ef4c088 100644 --- a/GW/src/Global_Variable.h +++ b/GW/src/Global_Variable.h @@ -11,6 +11,7 @@ #include "stdint.h" #include "main.h" #include "define.h" +#include "stdbool.h" /*----------------------------------------Variables----------------------------------------*/ /* Variable Name : IG_Process_Status * Data Type : uint8 @@ -981,6 +982,12 @@ extern uint8_t GV_VCU_AccControlFlag; // VCU Emergency Stop extern uint8_t GV_VCU_Emergency_Flag; +extern bool isEmergencyVcu; +extern bool isEmergencyRc; +extern bool isEmergencyAcu; +extern bool isEmergencySwitch; +extern bool isEmergency; +extern bool isCharging; #endif /* GLOBAL_VARIABLE_H_ */ diff --git a/GW/src/KATECK_Logic.c b/GW/src/KATECK_Logic.c index 1e51a703..5c0a2e1c 100644 --- a/GW/src/KATECK_Logic.c +++ b/GW/src/KATECK_Logic.c @@ -41,7 +41,7 @@ void ECU3_KATECH_Logic_10ms(void) RCU_Arc_check(); RWA1_Arc_check(); RWA2_Arc_check(); - ECU_check(); + System_check(); } void ECU3_KATECH_Logic_20ms(void) diff --git a/GW/src/Operation_Layer/MCU/Motor_Status.c b/GW/src/Operation_Layer/MCU/Motor_Status.c index c525d3fb..cc30b0eb 100644 --- a/GW/src/Operation_Layer/MCU/Motor_Status.c +++ b/GW/src/Operation_Layer/MCU/Motor_Status.c @@ -26,6 +26,7 @@ void Motor_Status(void) GV_VCU_MtrDir = 0; GV_VCU_EPAM_Park_Request_to_EPC = 1; // 1 = Lock + GV_ParkBrakeRequest = 2; // 2 = EPB Apply } else if(GV_VCU_GearSelStat == 1) // R { @@ -33,6 +34,7 @@ void Motor_Status(void) GV_VCU_MtrDir = 2; GV_VCU_EPAM_Park_Request_to_EPC = 2; // 2 = Release + GV_ParkBrakeRequest = 1; // 1 = EPB Release } else if(GV_VCU_GearSelStat == 2 && GV_VCU_Vx_Fbk == 0) // N { @@ -40,6 +42,7 @@ void Motor_Status(void) GV_VCU_MtrDir = 0; GV_VCU_EPAM_Park_Request_to_EPC = 2; + GV_ParkBrakeRequest = 1; // 1 = EPB Release } else if(GV_VCU_GearSelStat == 3 && GV_VCU_Vx_Fbk == 0) // D { @@ -47,5 +50,6 @@ void Motor_Status(void) GV_VCU_MtrDir = 1; GV_VCU_EPAM_Park_Request_to_EPC = 2; + GV_ParkBrakeRequest = 1; // 1 = EPB Release } } diff --git a/GW/src/Safety_Layer/System_Check/System_Check.c b/GW/src/Safety_Layer/System_Check/System_Check.c index b3508d52..91693863 100644 --- a/GW/src/Safety_Layer/System_Check/System_Check.c +++ b/GW/src/Safety_Layer/System_Check/System_Check.c @@ -163,7 +163,7 @@ void RWA2_Arc_check(void) // Ch3 0x072 5ms GV_prev_RWA2_ECU_Arc = GV_RWA2_Arc; } -void ECU_check(void) +void System_check(void) { if(GV_RC_VCU_ACU_Fault_Flag == 1 && GV_Act_Fault_Exist) GV_VCU_RC_ACU_Fault_Flag = 1; else GV_VCU_RC_ACU_Fault_Flag = 0; @@ -178,6 +178,18 @@ void ECU_check(void) GV_ACU_ECU_Fault_Flag_Master = 1; else GV_ACU_ECU_Fault_Flag_Master = 0; + + isEmergencyVcu = (GV_VCU_Emergency_Flag == 1 + || GV_ACU_ECU_Fault_Flag == 1 || GV_ACU_ECU_Fault_Flag1 == 1 || GV_ACU_ECU_Fault_Flag2 == 1 || GV_ACU_ECU_Fault_Flag3 == 1 + || GV_VCU_RC_IDB_ECU_Fault_Flag == 1 || GV_VCU_RC_RCU_ECU_Fault_Flag == 1 + || GV_VCU_RC_RWA1_ECU_Fault_Flag == 1 || GV_VCU_RC_RWA2_ECU_Fault_Flag == 1 || GV_VCU_RC_RWA_Actuator_Fault_Flag == 1 + || GV_VCU_RC_MCU_Actuator_Fault_Flag == 1); + isEmergencyRc = (GV_RC_Emergency_Stop == 1); + isEmergencyAcu = (GV_ACU_Emergency_Stop == 1); + isEmergencySwitch = (Emergency_Switch == 1); + + isEmergency = (isEmergencyVcu || isEmergencyRc || isEmergencySwitch || isEmergencyAcu || GV_RC_ALV_FLAG == 1 || GV_Act_Fault_Exist == 1); + isCharging = (GV_ChargingStatus == 1 || GV_ChargingStatus == 2 || GV_ChargingStatus == 3); // 0(READY), 1(INITALIZE), 2(CHARGING), 3(EXIT) } diff --git a/GW/src/Safety_Layer/System_Check/System_Check.h b/GW/src/Safety_Layer/System_Check/System_Check.h index 36a6825c..c18f2127 100644 --- a/GW/src/Safety_Layer/System_Check/System_Check.h +++ b/GW/src/Safety_Layer/System_Check/System_Check.h @@ -13,7 +13,7 @@ extern void IDB_Arc_check(void); extern void RCU_Arc_check(void); extern void RWA1_Arc_check(void); extern void RWA2_Arc_check(void); -extern void ECU_check(void); +extern void System_check(void); extern void No_signal_RC(void); diff --git a/GW/src/System_Layer/Drive_Mode.c b/GW/src/System_Layer/Drive_Mode.c index e9d40679..7d753f3d 100644 --- a/GW/src/System_Layer/Drive_Mode.c +++ b/GW/src/System_Layer/Drive_Mode.c @@ -115,22 +115,14 @@ void ExecuteDriveMode() void CheckDriveMode(void) { - RcRequestCheck(); - - bool isEmergencyVcu = (GV_VCU_Emergency_Flag == 1 || GV_ACU_ECU_Fault_Flag == 1 || GV_ACU_ECU_Fault_Flag1 == 1 || GV_ACU_ECU_Fault_Flag2 == 1 || GV_ACU_ECU_Fault_Flag3 == 1 || GV_VCU_RC_IDB_ECU_Fault_Flag == 1 || GV_VCU_RC_RCU_ECU_Fault_Flag == 1 || GV_VCU_RC_RWA1_ECU_Fault_Flag == 1 || GV_VCU_RC_RWA2_ECU_Fault_Flag == 1 || GV_VCU_RC_RWA_Actuator_Fault_Flag == 1 || GV_VCU_RC_MCU_Actuator_Fault_Flag == 1 || GV_VCU_RC_ACU_Fault_Flag == 1); - bool isEmergencyRc = (GV_RC_Emergency_Stop == 1); - bool isEmergencyAcu = (GV_ACU_Emergency_Stop == 1); - bool isEmergencySwitch = (Emergency_Switch == 1); - - bool isEmergency = (isEmergencyVcu || isEmergencyRc || isEmergencySwitch || isEmergencyAcu || GV_RC_ALV_FLAG == 1 || GV_Act_Fault_Exist == 1); - bool isCharging = (GV_ChargingStatus == 1 || GV_ChargingStatus == 2 || GV_ChargingStatus == 3); // 0(READY), 1(INITALIZE), 2(CHARGING), 3(EXIT) - bool acuWaitOn = false; const DriveMode_e curMode = GV_VCU_Drive_Mode; DriveMode_e nextMode = curMode; HandoverPhase_e nextPhase = HO_NONE; + RcRequestCheck(); + if(isEmergency) { nextMode = DRIVE_MODE_EMERGENCY; @@ -277,6 +269,7 @@ void CheckDriveMode(void) break; } } + GV_VCU_Drive_Mode = (uint8_t)nextMode; GV_VCU_HandoverPhase = nextPhase; @@ -296,7 +289,7 @@ void RcRequestCheck(void) { if (s_lastRcModeReq == RC_REQ_AUTO) GV_RC_ModeReq = RC_REQ_AUTO; else GV_RC_ModeReq = RC_REQ_MANUAL; - + GV_VCU_Emergency_Flag = 1; } else if (GV_RC_ACU_Drive_Mode == 1U) @@ -375,10 +368,22 @@ void ExecuteRCMode() /*============================== Emergency Mode ==============================*/ +bool Flag_EmergencyAutoParking = true; void ExecuteEmergencyMode() { - GV_VCU_EPAM_Park_Request_to_EPC = 2; // EPam release - GV_VCU_GearSelStat = 2; // gear N + if(GV_VCU_Vx_Fbk >= 0.1 && Flag_EmergencyAutoParking) + GV_VCU_GearSelStat = 2; // gear N + else if(GV_VCU_GearSelStat == 2 && GV_VCU_Vx_Fbk < 0.1 && Flag_EmergencyAutoParking) + { + GV_VCU_GearSelStat = 0; // gear P + Flag_EmergencyAutoParking = false; + } + else if(GV_VCU_GearSelStat == 2 && GV_VCU_Vx_Fbk < 0.1 && !Flag_EmergencyAutoParking) + GV_VCU_GearSelStat = 2; // gear N + else if(GV_VCU_GearSelStat == 0 && GV_VCU_Vx_Fbk < 0.1 && !Flag_EmergencyAutoParking) + GV_VCU_GearSelStat = 0; // gear P + else + // Do nothing, maintain current gear GV_VCU_RC_Emergency_Stop = 1; GV_VCU_ACU_Emergency_Stop = 1; @@ -397,6 +402,8 @@ void ExecuteEmergencyMode() GV_VCU_RC_Emergency_Stop = 0; GV_VCU_ACU_Emergency_Stop = 0; + Flag_EmergencyAutoParking = true; + GV_VCU_Drive_Mode = DRIVE_MODE_DEFAULT; } } diff --git a/GW/src/System_Layer/SW_Version/SW_VER.c b/GW/src/System_Layer/SW_Version/SW_VER.c index 9b816334..d7420d6a 100644 --- a/GW/src/System_Layer/SW_Version/SW_VER.c +++ b/GW/src/System_Layer/SW_Version/SW_VER.c @@ -7,7 +7,7 @@ void SET_SW_VER(void) { GV_YEAR = 26; GV_Month = 3; - GV_Day = 3; - GV_Ver = 2; + GV_Day = 8; + GV_Ver = 1; GV_CAR_NUM = 240623; } diff --git a/[ADM] Integrated Logic/ADM_Integrated_Logic.slx b/[ADM] Integrated Logic/ADM_Integrated_Logic.slx index f8158f06..090f3ad7 100644 Binary files a/[ADM] Integrated Logic/ADM_Integrated_Logic.slx and b/[ADM] Integrated Logic/ADM_Integrated_Logic.slx differ diff --git a/[ADM] Integrated Logic/ADM_Integrated_Logic.slx.r2024b b/[ADM] Integrated Logic/ADM_Integrated_Logic.slx.r2024b new file mode 100644 index 00000000..f8158f06 Binary files /dev/null and b/[ADM] Integrated Logic/ADM_Integrated_Logic.slx.r2024b differ