#include "Telltales_Lib.h" #include "Telltales_user.h" #include "Line_In\Line_In_user.h" #include "Application.h" #include "CAN_APP\CAN_CH0_CAN_Communication_Matrix.h" #include "Components.h" static Tellib_uint16_t LED_High_Beam_Judgement(void); static void LED_High_Beam_Execution(Tellib_uint16_t led_status); static Tellib_uint16_t LED_Efi_Fault_Judgement(void); static void LED_Efi_Fault_Execution(Tellib_uint16_t led_status); static Tellib_uint16_t LED_Auto_Start_Stop_Judgement(void); static void LED_Auto_Start_Stop_Execution(Tellib_uint16_t led_status); static Tellib_uint16_t LED_Voltage_Judgement(void); static void LED_Voltage_Execution(Tellib_uint16_t led_status); static Tellib_uint16_t LED_Fuel_Judgement(void); static void LED_Fuel_Execution(Tellib_uint16_t led_status); static Tellib_uint16_t LED_Atmosphere_Judgement(void); static void LED_Atmosphere_Execution(Tellib_uint16_t led_status); uint8_t u8CanId401Flag = 0; const LED_Attribute_st LED_Attribute [ LED_Max ] = { /* 指示灯索引 是否自检 外部信号自检 工作电源状态 自检开始时间 自检持续时间 指示灯点亮条件 指示灯执行函数 */ {em_LED_High_Beam, SelfCheck, NoExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_High_Beam_Judgement, LED_High_Beam_Execution }, {em_LED_Efi_Fault, SelfCheck, NoExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Efi_Fault_Judgement, LED_Efi_Fault_Execution }, {em_LED_Auto_Start_Stop, SelfCheck, NoExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Auto_Start_Stop_Judgement, LED_Auto_Start_Stop_Execution }, {em_LED_Voltage, SelfCheck, NoExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Voltage_Judgement, LED_Voltage_Execution }, {em_LED_Fuel, SelfCheck, NoExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Fuel_Judgement, LED_Fuel_Execution }, {em_LED_Atmosphere, SelfCheck, NoExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Atmosphere_Judgement, LED_Atmosphere_Execution}, }; Tellib_uint8_t Tel_Mem [ Tel_MEM_Block_Size * LED_Max + Tel_MEM_Block_Addition ]; void Telltales_Init(void) { TelExtPara m_ExtPara; m_ExtPara.TotalLength = LED_Max; m_ExtPara.LED_PowerOFF_TimerCbk = Common_GetIgnOffTime; m_ExtPara.LED_PowerON_TimerCbk = Common_GetIgnOnTime; m_ExtPara.LED_PowerCbk = Common_Get_IG_Sts; u8CanId401Flag = 0; Telltales_KL30_Wakeup_Init(Tel_Mem, LED_Attribute, &m_ExtPara); } void Can_ID_401(uint8_t CopyData []) { u8CanId401Flag = 1; } static Tellib_uint16_t LED_High_Beam_Judgement(void) { Tellib_uint16_t LED_STATE = 0u; if (Line_In_Get_Status(LINE_IN_HighBeam)) { LED_STATE = 1; } else { LED_STATE = 0; } return LED_STATE; } static void LED_High_Beam_Execution(Tellib_uint16_t led_status) { if ( led_status == 1u ) { RTE_GPIO_Set_Level(HighBeam_MUC_OUT, LED_LINEOUT_High); } else { RTE_GPIO_Set_Level(HighBeam_MUC_OUT, LED_LINEOUT_Low); } } static Tellib_uint16_t LED_Efi_Fault_Judgement(void) { Tellib_uint16_t LED_STATE = 0u; if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x402_Msg_Count) == CAN_SIG_LOST) { LED_STATE = 0u; } else { if(Get_CAN_CH0_ID_402_Sig_ECU_Warning_Lamp() == 1) { LED_STATE = 1u; } else { LED_STATE = 0u; } } return LED_STATE; } static void LED_Efi_Fault_Execution(Tellib_uint16_t led_status) { if ( led_status == 1u ) { RTE_GPIO_Set_Level(EFI_FAULT_OUT, LED_LINEOUT_High); } else { RTE_GPIO_Set_Level(EFI_FAULT_OUT, LED_LINEOUT_Low); } } Tellib_uint8_t Auto_Start_Stop = 0u; Tellib_uint8_t Key_ISTOP = 0u; void Telltales_Auto_Start_Stop(void) { Auto_Start_Stop = 0; } void Telltales_Auto_Start_Stop_Setting(void) { if (Auto_Start_Stop == 0) { Auto_Start_Stop = 1; } else if (Auto_Start_Stop == 1) { Auto_Start_Stop = 0; } else { ; } } static Tellib_uint16_t LED_Auto_Start_Stop_Judgement(void) { Tellib_uint16_t LED_STATE = 0u; if (Auto_Start_Stop == 1) { if (Line_In_Get_Status(LINE_IN_Auto_Start_Stop)) { LED_STATE = 1; } else { LED_STATE = 0; } } else { LED_STATE = 0; } return LED_STATE; } static void LED_Auto_Start_Stop_Execution(Tellib_uint16_t led_status) { if ( led_status == 1u ) { LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, LED_ON); SEG_SET_LED_STS(1,1); } else { LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, LED_OFF); SEG_SET_LED_STS(1,0); } } Tellib_uint8_t Telltales_Voltage_Date(void) { Tellib_uint8_t Voltage = 0; Voltage = Get_CAN_CH0_ID_401_Sig_ECU_Battery_Voltage(); return Voltage; } static Tellib_uint16_t LED_Voltage_Judgement(void) { Tellib_uint16_t LED_STATE = 0u; Tellib_uint16_t Voltage = 0u; Voltage = Telltales_Voltage_Date(); if ((CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x401_Msg_Count) == CAN_SIG_LOST) || (u8CanId401Flag != 1)) { u8CanId401Flag = 0; LED_STATE = 0u; } else { if ((Voltage < 120) || (Voltage > 150)) { LED_STATE = 1u; } else { LED_STATE = 2u; } } return LED_STATE; } static void LED_Voltage_Execution(Tellib_uint16_t led_status) { if ( led_status == 1u ) { LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, LED_ON); LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, LED_OFF); SEG_SET_LED_STS(0,1); } else if ( led_status == 2u ) { LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, LED_ON); LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, LED_OFF); SEG_SET_LED_STS(0,1); } else { LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, LED_OFF); LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, LED_OFF); SEG_SET_LED_STS(0,0); } } static Tellib_uint16_t LED_Fuel_Judgement(void) { Tellib_uint16_t LED_STATE = 0u; if (Common_GetIgnOnTime() >= 3000) { if(Get_Fuel_Sensor_State() == FuelSensorNormal) { if(Get_CurFuelSetp() > 1) { LED_STATE = 3;//白灯 } else { LED_STATE = 2;//格小于等于1 } } else { LED_STATE = 2;//开路 } } else { LED_STATE = 1;//自检只亮黄 } return LED_STATE; } static void LED_Fuel_Execution(Tellib_uint16_t led_status) { if ( led_status == 3u ) { LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, LED_ON); LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, LED_OFF); SEG_SET_LED_STS(2,1); } else if ( led_status == 2u ) { if (FLASH_SYNC_1Hz) { LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, LED_ON); SEG_SET_LED_STS(2,1); } else { LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, LED_OFF); SEG_SET_LED_STS(2,0); } LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, LED_OFF); } else if ( led_status == 1u ) { LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, LED_ON); SEG_SET_LED_STS(2,1); LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, LED_OFF); } else { LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, LED_OFF); LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, LED_OFF); SEG_SET_LED_STS(2,0); } } static Tellib_uint16_t LED_Atmosphere_Judgement(void) { Tellib_uint16_t LED_STATE = 0u; LED_STATE = 1; return LED_STATE; } static void LED_Atmosphere_Execution(Tellib_uint16_t led_status) { if (led_status == 1) { RTE_GPIO_Set_Level(AMBIENT_LIGHT_B, LED_LINEOUT_High); } else { RTE_GPIO_Set_Level(AMBIENT_LIGHT_B, LED_LINEOUT_Low); } } void Turn_Left_Right_Lamp(void) { if ( SYS_OPR_STAT_IGN_ON ) { if (Common_GetIgnOnTime() >= 3000) { if (Line_In_Get_Status(LINE_IN_TurnLeft)) { RTE_GPIO_Set_Level(LeftTurn_MUC_OUT, LED_LINEOUT_High); } else { RTE_GPIO_Set_Level(LeftTurn_MUC_OUT, LED_LINEOUT_Low); } if (Line_In_Get_Status(LINE_IN_TurnRight)) { RTE_GPIO_Set_Level(RightTurn_MUC_OUT, LED_LINEOUT_High); } else { RTE_GPIO_Set_Level(RightTurn_MUC_OUT, LED_LINEOUT_Low); } } else { RTE_GPIO_Set_Level(RightTurn_MUC_OUT, LED_LINEOUT_High); RTE_GPIO_Set_Level(LeftTurn_MUC_OUT, LED_LINEOUT_High); } } else { RTE_GPIO_Set_Level(RightTurn_MUC_OUT, LED_LINEOUT_Low); RTE_GPIO_Set_Level(LeftTurn_MUC_OUT, LED_LINEOUT_Low); } }