#ifndef _TELLTALES_H_
#define _TELLTALES_H_

#include "TYW_stdint.h"
#include "string.h"
#include "RTE_BASE_TYPE.h"

typedef enum
{
    em_LED_INTER_DIFF_LOCK_T            ,
    em_LED_FOUR_MUL_FOUR_T              ,
    em_LED_EXH_BRAKE_T                  ,
    em_LED_QOS_GLOW_T                   ,
    em_LED_HI_BEAM_T                    ,
    em_LED_Rr_FOG_LAMP_T                ,
    em_LED_MIL_T                        ,
    em_LED_SVS_T                        ,
    em_LED_H_S_A__T                     ,
    em_LED_RETARDER_T                   ,
    em_LED_AUTO_LEVELING_T              ,
    em_LED_ROWS_L                       ,
    em_LED_BSM_OFF_L                    ,
    em_LED_AEBS_OFF_L                   ,
    em_LED_LDWS_L                       ,
    em_LED_SRS_L                        ,
    em_LED_ENG_OIL_L                    ,
    em_LED_CHARG_L                      ,
    em_LED_SEAT_BELT_L                  ,
    em_LED_RR_DIFF_LOCK_L               ,
    em_LED_TPMS_L                       ,
    em_LED_ASR_or_EVSC_OFF_L            ,
    em_LED_EVSC_L                       ,
    em_LED_eco_stop_OFF_L               ,
    em_LED_AMT_L                        ,
    em_LED_WEAR_IND_L                   ,
    em_LED_TRAILER_BRAKE_R              ,
    em_LED_BRAKE_AIR_or_EBS_YELLOW_R    ,
    em_LED_ACC_AIR_R                    ,
    em_LED_ABS_R                        ,
    em_LED_PARK_BRAKE_R                 ,
    em_LED_BRAKE_AIR_or_EBS_RED_R       ,
    em_LED_BRAKE_LOCK_R                 ,
    em_LED_AIR_SUS_R                    ,
    em_LED_TRAILER_ABS_U                ,
    em_LED_WORKING_LAMP_U               ,
    em_LED_TRAILER_ABS_INFO_U           ,
    
    LED_Max                             ,
} LED_Idx_t;




typedef uint8_t ( * LED_Judgment ) ( void );
typedef void ( * LED_Execution ) ( uint8_t led_status );


typedef struct
{
    LED_Idx_t LED_Index;
    SelfCheck_t isSelfCheck;
    ExtCheck_t isExCheck;
    WorkStatus_t WorkSts;

    uint32_t CheckStart;
    uint32_t CheckEnd;

    LED_Judgment LED_Judgment_Cbk;
    LED_Execution LED_Execution_Cbk;
} LED_Attribute_st;

typedef struct
{
    PowerStatus_t IG_Status;
    Checktatus_t LED_CheckFinish;
    uint32_t IG_ON_Timer;
    uint32_t IG_OFF_Timer;
} ExternalPara_st;

typedef struct
{
    uint8_t   LastLeft;
    uint8_t   LastRight;
    uint8_t   Delay;
} TelltaleLRCtrlStruct;

extern const  LED_Attribute_st LED_Attribute[LED_Max];


void Telltales_SetPara(ExternalPara_st *Para);
void Telltales_Management(void);        /*50ms*/
void Telltales_Left_Right_KL30_Init(void);
void Telltales_Left_Right_Management_Service(void) ;/*must put into 10ms task*/
void Telltales_IG_ON_Work(void);
void Telltales_IGOFF_Work(void);
void Test_LED_AllLight(void);

void Telltales_Wakeup_Init(void);
void Telltales_KL30_Init(void);
void Telltales_KL15_Init(void);





void LED_RIGHT_G_Execution(uint8_t led_status);
void LED_LEFT_G_Execution(uint8_t led_status);
uint8_t LED_RIGHT_G_Judgement(void);
uint8_t LED_LEFT_G_Judgement(void);

void Write_LED_POSITION_G(uint8_t led_status);
uint8_t GET_LED_POSITION_G(void);

void Write_LED_READY_G_Execution(uint8_t led_status);
uint8_t GET_LED_READY_G_Execution(void);





/*ZH:*/
/*LED点灯条件判别函数*/
uint8_t LED_INTER_DIFF_LOCK_T_Judgement(void);
uint8_t LED_FOUR_MUL_FOUR_T_Judgement(void);
uint8_t LED_EXH_BRAKE_T_Judgement(void);
uint8_t LED_QOS_GLOW_T_Judgement(void);
uint8_t LED_HI_BEAM_T_Judgement(void);
uint8_t LED_Rr_FOG_LAMP_T_Judgement(void);
uint8_t LED_MIL_T_Judgement(void);
uint8_t LED_SVS_T_Judgement(void);
uint8_t LED_H_S_A__T_Judgement(void);
uint8_t LED_RETARDER_T_Judgement(void);
uint8_t LED_AUTO_LEVELING_T_Judgement(void);
uint8_t LED_ROWS_L_Judgement(void);
uint8_t LED_BSM_OFF_L_Judgement(void);
uint8_t LED_AEBS_OFF_L_Judgement(void);
uint8_t LED_LDWS_L_Judgement(void);
uint8_t LED_SRS_L_Judgement(void);
uint8_t LED_ENG_OIL_L_Judgement(void);
uint8_t LED_CHARG_L_Judgement(void);
uint8_t LED_SEAT_BELT_L_Judgement(void);
uint8_t LED_RR_DIFF_LOCK_L_Judgement(void);
uint8_t LED_TPMS_L_Judgement(void);
uint8_t LED_ASR_or_EVSC_OFF_L_Judgement(void);
uint8_t LED_EVSC_L_Judgement(void);
uint8_t LED_eco_stop_OFF_L_Judgement(void);
uint8_t LED_AMT_L_Judgement(void);
uint8_t LED_WEAR_IND_L_Judgement(void);
uint8_t LED_TRAILER_BRAKE_R_Judgement(void);
uint8_t LED_BRAKE_AIR_or_EBS_YELLOW_R_Judgement(void);
uint8_t LED_ACC_AIR_R_Judgement(void);
uint8_t LED_ABS_R_Judgement(void);
uint8_t LED_PARK_BRAKE_R_Judgement(void);
uint8_t LED_BRAKE_AIR_or_EBS_RED_R_Judgement(void);
uint8_t LED_BRAKE_LOCK_R_Judgement(void);
uint8_t LED_AIR_SUS_R_Judgement(void);
uint8_t LED_TRAILER_ABS_U_Judgement(void);
uint8_t LED_WORKING_LAMP_U_Judgement(void);
uint8_t LED_TRAILER_ABS_INFO_U_Judgement(void);



/*LED执行函数*/
void LED_INTER_DIFF_LOCK_T_Execution(uint8_t led_status);
void LED_FOUR_MUL_FOUR_T_Execution(uint8_t led_status);
void LED_EXH_BRAKE_T_Execution(uint8_t led_status);
void LED_QOS_GLOW_T_Execution(uint8_t led_status);
void LED_HI_BEAM_T_Execution(uint8_t led_status);
void LED_Rr_FOG_LAMP_T_Execution(uint8_t led_status);
void LED_MIL_T_Execution(uint8_t led_status);
void LED_SVS_T_Execution(uint8_t led_status);
void LED_H_S_A__T_Execution(uint8_t led_status);
void LED_RETARDER_T_Execution(uint8_t led_status);
void LED_AUTO_LEVELING_T_Execution(uint8_t led_status);
void LED_ROWS_L_Execution(uint8_t led_status);
void LED_BSM_OFF_L_Execution(uint8_t led_status);
void LED_AEBS_OFF_L_Execution(uint8_t led_status);
void LED_LDWS_L_Execution(uint8_t led_status);
void LED_SRS_L_Execution(uint8_t led_status);
void LED_ENG_OIL_L_Execution(uint8_t led_status);
void LED_CHARG_L_Execution(uint8_t led_status);
void LED_SEAT_BELT_L_Execution(uint8_t led_status);
void LED_RR_DIFF_LOCK_L_Execution(uint8_t led_status);
void LED_TPMS_L_Execution(uint8_t led_status);
void LED_ASR_or_EVSC_OFF_L_Execution(uint8_t led_status);
void LED_EVSC_L_Execution(uint8_t led_status);
void LED_eco_stop_OFF_L_Execution(uint8_t led_status);
void LED_AMT_L_Execution(uint8_t led_status);
void LED_WEAR_IND_L_Execution(uint8_t led_status);
void LED_TRAILER_BRAKE_R_Execution(uint8_t led_status);
void LED_BRAKE_AIR_or_EBS_YELLOW_R_Execution(uint8_t led_status);
void LED_ACC_AIR_R_Execution(uint8_t led_status);
void LED_ABS_R_Execution(uint8_t led_status);
void LED_PARK_BRAKE_R_Execution(uint8_t led_status);
void LED_BRAKE_AIR_or_EBS_RED_R_Execution(uint8_t led_status);
void LED_BRAKE_LOCK_R_Execution(uint8_t led_status);
void LED_AIR_SUS_R_Execution(uint8_t led_status);
void LED_TRAILER_ABS_U_Execution(uint8_t led_status);
void LED_WORKING_LAMP_U_Execution(uint8_t led_status);
void LED_TRAILER_ABS_INFO_U_Execution(uint8_t led_status);
/*:ZH*/


#endif




