📄 lin_driver08.c
字号:
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 1;
#endif
}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
Msg_18_Encode();
//response error: send & clear
LIN_Error_Status &= ~LIN_ERR_IN_RESPONSE;
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 0;
#endif
}
else
#endif
#if LIN_MSG_19 == LIN_MSG_SEND
#ifndef CON_IF_EXIT
#define CON_IF_EXIT 1
#else
else
#endif
if(uMsgID == 0x19)
{
if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
{
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 1;
#endif
}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
Msg_19_Encode();
//response error: send & clear
LIN_Error_Status &= ~LIN_ERR_IN_RESPONSE;
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 0;
#endif
}
#endif
#if LIN_MSG_1A == LIN_MSG_SEND
#ifndef CON_IF_EXIT
#define CON_IF_EXIT 1
#else
else
#endif
if(uMsgID == 0x1a)
{
if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
{
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 1;
#endif
}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
Msg_1A_Encode();
//response error: send & clear
LIN_Error_Status &= ~LIN_ERR_IN_RESPONSE;
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 0;
#endif
}
#endif
#if LIN_MSG_1B == LIN_MSG_SEND
#ifndef CON_IF_EXIT
#define CON_IF_EXIT 1
#else
else
#endif
if(uMsgID == 0x1b)
{
if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
{
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 1;
#endif
}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
Msg_1B_Encode();
//response error: send & clear
LIN_Error_Status &= ~LIN_ERR_IN_RESPONSE;
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 0;
#endif
}
#endif
#if LIN_MSG_1C == LIN_MSG_SEND
#ifndef CON_IF_EXIT
#define CON_IF_EXIT 1
#else
else
#endif
if(uMsgID == 0x1c)
{
if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
{
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 1;
#endif
}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
Msg_1C_Encode();
//response error: send & clear
LIN_Error_Status &= ~LIN_ERR_IN_RESPONSE;
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 0;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 0;
#endif
}
#endif
LIN_TX_Buf[LIN_INDEX_ID] = LIN_TmpByte;
LIN_TX_Buf[LIN_INDEX_CHECKSUM] = LIN_Calc_Tx_Checksum_EN(uMsgLen);
LIN_SendData(LIN_TX_Buf[0]);
}
else if((uIndex & LIN_MSG_RECEIVE) == LIN_MSG_RECEIVE)
{
//We are this message's subscriber
LIN_Transceiver_Status = LIN_FLAG_REC_DATA;
LIN_Rx_Counter = 0;
}
else if(LIN_RX_Buf[LIN_INDEX_ID] == LIN_ID_GOTO_SLEEP)
{
// We always receive LIN_Goto_Sleep Command
LIN_Transceiver_Status = LIN_FLAG_REC_DATA;
LIN_Rx_Counter = 0;
}
else
{
//We don't know this ID, Ignore it
LIN_Transceiver_Status = LIN_FLAG_IGNORE;
}
}//else if((LIN_Transceiver_Status & LIN_FLAG_REC_HEADER) == LIN_FLAG_REC_HEADER)
else if((LIN_Transceiver_Status & LIN_FLAG_SEND_DATA) == LIN_FLAG_SEND_DATA)
{
//uIndex = LIN_TX_Buf[LIN_INDEX_ID];
//Bug fixed: the index value should be lookuped from LIN_Msg_Index table;
//Modified by wangjunpeng, on 26th, may, 2005
//uIndex = LIN_Msg_Index[LIN_TX_Buf[LIN_INDEX_ID] & 0x3f];
//Modified by wangjunpeng, on 28th, may, 2005
//bug fixed, LIN_rX_Buf[LIN_INDEX_ID] is not accessible, I don't know the reason!!!
uIndex = LIN_Msg_Index[LIN_RX_Buf[LIN_INDEX_ID] & 0x3f];
uMsgLen = LIN_MsgLen[uIndex & 0x3f];
#if LIN_DEBUG_MODE == 1
LIN_Debug_PIN_DATA = ~LIN_Debug_PIN_DATA;
#endif
if(LIN_TmpByte == LIN_TX_Buf[LIN_Tx_Counter])
{//we successed transmit a byte, so se send another one data byte
++LIN_Tx_Counter;
if(LIN_Tx_Counter == uMsgLen)
{//End of data transmit, send checksum byte
LIN_SendData(LIN_TX_Buf[LIN_INDEX_CHECKSUM]);
#if LIN_DEBUG_MODE == 1
LIN_Debug_PIN_ID = 0;
LIN_Debug_PIN_DATA = 0;
LIN_Debug_PIN_CHECK = 1;
LIN_Debug_PIN_BREAK = 0;
LIN_Debug_PIN_SYNCH = 0;
#endif
}//if(LIN_Tx_Counter == uMsgLen)
else if(LIN_Tx_Counter == (uMsgLen + 1))
{
LIN_Error_Status |= LIN_SUCCESS_TRANSFER;
LIN_Err_TxCounter <<= 1;
LIN_Err_TxCounter &= 0xfe;
//we finished transmitting all data byte and checksum,
//weill wait untill another break/synch senquence
LIN_Transceiver_Status = LIN_FLAG_IGNORE;
//set idletime out here wait for next frame transfer
//LIN_Set_Idle_Timeout
}//if(LIN_Tx_Counter == (uMsgLen + 1))
else//if(LIN_Tx_Counter == (uMsgLen + 1))
{//transmision unfinihsed, continue sending data
LIN_SendData(LIN_TX_Buf[LIN_Tx_Counter]);
}//if(LIN_Tx_Counter == uMsgLen)
}
else
{//transmit error, set flag
LIN_Error_Status |= LIN_ERR_IN_RESPONSE;
LIN_Err_TxCounter <<= 1;
LIN_Err_TxCounter |= 1;
LIN_Transceiver_Status = LIN_FLAG_IGNORE;
/*
#if LIN_NODE_SEL == LIN_NODE_SW_C
SW_C_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_SW_D
SM_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FR
FR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_FL
FL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DR
DR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_DL
DL_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_MR
MR_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_ML
ML_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_RR
R_Response_Error = 1;
#endif
#if LIN_NODE_SEL == LIN_NODE_CH
Head_C_Response_Error = 1;
#endif
*/ }
}
else if((LIN_Transceiver_Status & LIN_FLAG_REC_DATA) == LIN_FLAG_REC_DATA)
{
//First, save recevied data in the LIN_RX_Buf
LIN_RX_Buf[LIN_Rx_Counter++] = LIN_TmpByte;
//Bug fixed: the index value should be lookuped from LIN_Msg_Index table;
//Modified by wangjunpeng, on 28th, may, 2005
//uIndex = LIN_Msg_Index[LIN_TX_Buf[LIN_INDEX_ID] & 0x3f];
//bug fixed, LIN_rX_Buf[LIN_INDEX_ID] is not accessible, I don't know the reason!!!
uIndex = LIN_Msg_Index[LIN_RX_Buf[LIN_INDEX_ID] & 0x3f];
uMsgLen = LIN_MsgLen[uIndex & 0x3f];
//Second, check if we have received all data of this message
if((LIN_RX_Buf[LIN_INDEX_ID] == LIN_ID_GOTO_SLEEP) && (LIN_TmpByte == 0))
{
LIN_Node_Status = LIN_FLAG_SLEEP;
LIN_Transceiver_Status = LIN_FLAG_IGNORE;
//LIN_SCIRIE = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -