ADM/GW/src/Safety_Layer/ARC/Arc.c
2025-08-05 16:06:08 +09:00

101 lines
2.4 KiB
C

#include "can.h"
#include "Arc.h"
#include "Global_Variable.h"
/*
* count = 10 → 100ms
* count = 50 → 500ms
* count = 100 → 1s
*/
#define count 100
void IDB_Arc_check(void) // Ch2 0x092 5ms
{
if(GV_prev_IDB_ECU_Arc == GV_IDB_Arc)
{
GV_IDB_ECU_Arc_ErrCnt++;
if(GV_IDB_ECU_Arc_ErrCnt >= 255) GV_IDB_ECU_Arc_ErrCnt = count;
if(GV_IDB_ECU_Arc_ErrCnt >= count) GV_VCU_RC_IDB_ECU_Fault_Flag = 1;
else GV_VCU_RC_IDB_ECU_Fault_Flag = 0;
}
else
{
GV_IDB_ECU_Arc_ErrCnt = 0;
GV_VCU_RC_IDB_ECU_Fault_Flag = 0;
}
GV_prev_IDB_ECU_Arc = GV_IDB_Arc;
}
void RCU_Arc_check(void) // Ch3 0x093 5ms
{
if(GV_prev_RCU_ECU_Arc == GV_RCU_Arc)
{
GV_RCU_ECU_Arc_ErrCnt++;
if(GV_RCU_ECU_Arc_ErrCnt >= 255) GV_RCU_ECU_Arc_ErrCnt = count;
if(GV_RCU_ECU_Arc_ErrCnt >= count) GV_VCU_RC_RCU_ECU_Fault_Flag = 1;
else GV_VCU_RC_RCU_ECU_Fault_Flag = 0;
}
else
{
GV_RCU_ECU_Arc_ErrCnt = 0;
GV_VCU_RC_RCU_ECU_Fault_Flag = 0;
}
GV_prev_RCU_ECU_Arc = GV_RCU_Arc;
}
void RWA1_Arc_check(void) // Ch2 0x072 5ms
{
if(GV_prev_RWA1_ECU_Arc == GV_RWA1_Arc)
{
GV_RWA1_ECU_Arc_ErrCnt++;
if(GV_RWA1_ECU_Arc_ErrCnt >= 255) GV_RWA1_ECU_Arc_ErrCnt = count;
if(GV_RWA1_ECU_Arc_ErrCnt >= count) GV_VCU_RC_RWA1_ECU_Fault_Flag = 1;
else GV_VCU_RC_RWA1_ECU_Fault_Flag = 0;
}
else
{
GV_RWA1_ECU_Arc_ErrCnt = 0;
GV_VCU_RC_RWA1_ECU_Fault_Flag = 0;
}
GV_prev_RWA1_ECU_Arc = GV_RWA1_Arc;
}
void RWA2_Arc_check(void) // Ch3 0x072 5ms
{
if(GV_prev_RWA2_ECU_Arc == GV_RWA2_Arc)
{
GV_RWA2_ECU_Arc_ErrCnt++;
if(GV_RWA2_ECU_Arc_ErrCnt >= 255) GV_RWA2_ECU_Arc_ErrCnt = count;
if(GV_RWA2_ECU_Arc_ErrCnt >= count) GV_VCU_RC_RWA2_ECU_Fault_Flag = 1;
else GV_VCU_RC_RWA2_ECU_Fault_Flag = 0;
}
else
{
GV_RWA2_ECU_Arc_ErrCnt = 0;
GV_VCU_RC_RWA2_ECU_Fault_Flag = 0;
}
GV_prev_RWA2_ECU_Arc = GV_RWA2_Arc;
}
void No_signal_RC(void){
// GV_RC_VCU_counter1_CHECK = 260 으로 초기에 GV_RC_VCU_counter1와 같은 숫자 회피
if(GV_VCU_Drive_Mode == 1 ){
if(GV_RC_VCU_counter1_CHECK != GV_RC_VCU_ARC){
GV_RC_VCU_counter1_CHECK = GV_RC_VCU_ARC;
}else{ // 200ms가 지낫는데도 둘다 같은 값이면 -> 신호가 안들어오고 있음 -> 이머전시 스탑 (기존 정상치라면 20 증가 해야함)
// GV_Operation_Mode = 2 ;
GV_RC_ALV_FLAG= 1;
}
}else if(GV_VCU_Drive_Mode == 2){
// 이머전시 모드 푸는 법 - rc 모듈 이머전시 토글
// 얼라이브 카운트로 이머전시 발동 시 - 이머전시 버튼 두번 누르면 됨
if(GV_RC_Emergency_Stop == 1){
GV_RC_ALV_FLAG= 0;
}
}
}