/*
 * lin.h
 *
 *  Created on: 2024¦~9¤ë2¤é
 *      Author: Leo
 */

#ifndef LIN_H_
#define LIN_H_

#define BIT(A,B)      (((A)>>(B))&0x01)

typedef struct
{
    uint8_t ID;
    uint8_t Data[9];
    uint8_t length ;
} LIN_Msg ;

typedef enum
{
  IDLE =0 , _BREAK, LSYNCH, PROTECTED_IDENTIFIER,
  DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7, DATA8, DATA9
}LIN_State ;

typedef struct
{
  uint8_t PID ;
  uint8_t Data[9];
  LIN_State State;
  uint8_t Error;
} LIN_Frame ;

void AGS_Open(void);
void AGS_Close(void);
void lin_sleep(void);
void lin_process(void);
void UART1_Isr(void);

extern uint8_t ags_learn_flag;
extern uint8_t ags_unlock_flag;
extern uint8_t ags_unlock_loop;
extern uint8_t AGSPosition_Req;
extern uint8_t AGSCalbIsEnb_Req;
extern uint8_t AGSBoostTrq_Req;
extern uint8_t AGSTrqLevel_Req;

extern uint8_t AGS_CurrentPos_Status_LIN1;
extern uint8_t AGS_CurrentPos_Status_LIN2;
extern uint8_t lin1_error_flag;
extern uint8_t lin2_error_flag;
extern uint8_t lin_sleep_finish;

#endif /* LIN_H_ */
