#ifndef LINE_IN_H
#define LINE_IN_H

#ifdef Platform_16Bit
    #define Linelib_uint8_t  unsigned char
    #define Linelib_uint16_t unsigned int
    #define Linelib_uint32_t unsigned long
#else

    #define Linelib_uint8_t  unsigned char
    #define Linelib_uint16_t unsigned short
    #define Linelib_uint32_t unsigned int
    #define Linelib_uint64_t unsigned long long
#endif

#define LINE_IN_BLOCK_SIZE (( Linelib_uint8_t )(8u))

#define LINE_IN_IG_OFF   (Linelib_uint8_t)(0x00u)
#define LINE_IN_IG_ON    (Linelib_uint8_t)(0x01u)
#define LINE_IN_IG_ONOFF (Linelib_uint8_t)(0x02u)

#define LEVEL_LOW  (Linelib_uint8_t)(0x00u)
#define LEVEL_HIGH (Linelib_uint8_t)(0x01u)

#define LINE_IN_LOGIC_INVALID (Linelib_uint8_t)(0x00u)
#define LINE_IN_LOGIC_VALID   (Linelib_uint8_t)(0x01u)

/*获取实时硬线电平函数指针*/
typedef Linelib_uint8_t (*LineIn_Read_Level)(void);
typedef Linelib_uint16_t (*LineIn_GetPowerMode)(void);
/**@struct st_CANMsgAttribute
 * @brief 硬线去抖属性结构体 \n
 * 定义报接收文属性
 */
typedef struct __attribute__((aligned(4)))
{
    Linelib_uint8_t   DefaultLevel;       /**< 初始电平 LEVEL_LOW /LEVEL_HIGH */
    Linelib_uint8_t   TriggerLevel;       /**< 触发电平 LEVEL_LOW /LEVEL_HIGH */
    Linelib_uint16_t  enPowerStatus;      /**< 硬线工作的电源状态 LINE_IN_IG_OFF/LINE_IN_IG_ON/LINE_IN_IG_ONOFF */
    Linelib_uint16_t  ValidTime;          /**< 从无效到有效的消抖时间,单位ms */
    Linelib_uint16_t  InvalidTime;        /**< 从有效到无效的消抖时间,单位ms */
    LineIn_Read_Level pfnLineIn_Read_Cbk; /**< 获取实时电平的回调函数 */
} Line_In_Attribute_st;

extern void             Line_In_KL30_WakeUp_Init(Linelib_uint8_t *MemSpace, const Line_In_Attribute_st *Array, Linelib_uint16_t length, LineIn_GetPowerMode pfunc);
extern void             Line_In_Debounce_Service(Linelib_uint16_t CbkCycle);
extern void             Line_In_KL15_OFF_Init(void);
extern void             Line_In_KL15_ON_Init(void);
extern Linelib_uint16_t Line_In_Get_Status(Linelib_uint16_t Channel);
extern Linelib_uint16_t Get_LineIn_Version(void);
#endif