#ifndef LINE_IN_H
#define LINE_IN_H

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

/*所有硬线输入的索引*/
typedef enum
{
    /*ZH修改:2021.6.25*/
    /*指示灯相关*/
    LINE_IN_ABS = 0U,         /*A22  ABS*/
    LINE_IN_PARK_BRAKE,       /*A23  PARK BRAKE*/
    LINE_IN_HI_BEAM,          /*A25  HI BEAM*/
    LINE_IN_BRAKE_AIR_EBS,    /*A28  BRAKE AIR/EBS*/
    LINE_IN_SEAT_BELT,        /*A30  SEAT BELT*/
    LINE_IN_MIL,              /*A31  MIL*/
    LINE_IN_ENG_OIL,          /*A32  ENG OIL*/
    LINE_IN_CHARGE,           /*A34  CHARGE*/
    LINE_IN_TRAILER_ABS_INFO, /*B03  TRAILER ABS INFO*/
    LINE_IN_Rr_FOG_LAMP,      /*B14  Rr FOG LAMP*/
    LINE_IN_ACC_AIR,          /*B15  ACC AIR*/
    LINE_IN_AIR_SUS,          /*B30  AIR SUS*/
    LINE_IN_TRAILER_BRAKE,    /*B31  TRAILER BRAKE*/
    LINE_IN_TRAILER_ABS,      /*B33  TRAILER ABS*/
    LINE_IN_RR_DIFF_LOCK,     /*B36  RR DIFF LOCK*/
    LINE_IN_WEAR_IND,         /*B38  WEAR IND*/

    /*ZH新增:2021.6.29*/
    /*非指示灯相关*/
    LINE_IN_ILLUMINATION,    /*A06  ILLUMINATION*/
    LINE_IN_RET_BLENDING,    /*A10  RET_BLENDING*/
    LINE_IN_BRAKE,           /*A21  BRAKE*/
    LINE_IN_TURN_R,          /*A26  TURN_R*/
    LINE_IN_TURN_L,          /*A27  TURN_L*/
    LINE_IN_ABS_DETECT,      /*A33  ABS_DETECT*/
    LINE_IN_PTO,             /*B01  PTO*/
    LINE_IN_GLOW,            /*B05  GLOW*/
    LINE_IN_TRAILER_CONNECT, /*B06  TRAILER_CONNECT*/
    LINE_IN_LOW_COOLANT,     /*B32  LOW_COOLANT*/
    LINE_IN_ACC,             /*B39  ACC*/
    LINE_IN_WEAR2,           /*B40  WEAR2*/
    LINE_IN_MAX,
} Line_In_Channel_en_t;

/*获取实时硬线电平函数指针*/
typedef LINE_IN_TriggerLevel_en_t (*LineIn_Read_Level)(void);

typedef struct
{
    LINE_IN_TriggerLevel_en_t enValidLevel; /*有效电平*/
    uint16_t u16ValidTime;                  /*从无效到有效的消抖时间 ms*/
    uint16_t u16InvalidTime;                /*从有效到无效的消抖时间*/
    LINE_IN_WorkSt_en_t enPowerStatus;      /*硬线工作的电源状态*/
    LineIn_Read_Level pfnLineIn_Read_Cbk;   /*获取实时电平的回调函数*/
} Line_In_Attribute_st_t;

/*属性表与硬线索引号Line_In_Channel_en_t一一对应*/
extern const Line_In_Attribute_st_t g_stLineInAttribute[LINE_IN_MAX];
extern void Line_In_SetPowerSt(LINE_IN_WorkSt_en_t u8PowerSt);
/*10ms调用*/
extern void Line_In_Debounce_Service(void);

extern LineIn_LogicLevel_en_t Line_In_Get_Status(uint8_t Channel);

extern void Line_In_KL30_Init(void);
extern void Line_In_KL15_ON_Init(void);
extern void Line_In_KL15_OFF_Init(void);

#endif