Files
F103C8T6/Core/Src/canerrorbox.c

234 lines
4.1 KiB
C

#include "canerrorbox.h"
CanErrorBox CanErrors;
__weak void CanErrorCallbackEWG()
{
CanErrors.EWG.counter++;
}
__weak void CanErrorCallbackEPV()
{
CanErrors.EPV.counter++;
}
__weak void CanErrorCallbackBOF()
{
CanErrors.BOF.counter++;
}
__weak void CanErrorCallbackSTF()
{
CanErrors.STF.counter++;
}
__weak void CanErrorCallbackFOR()
{
CanErrors.FOR.counter++;
}
__weak void CanErrorCallbackACK()
{
CanErrors.ACK.counter++;
}
__weak void CanErrorCallbackBR()
{
CanErrors.BR.counter++;
}
__weak void CanErrorCallbackBD()
{
CanErrors.BD.counter++;
}
__weak void CanErrorCallbackCRC()
{
CanErrors.CRC_ERROR.counter++;
}
__weak void CanErrorCallbackRXFOV0()
{
CanErrors.RXFOV0.counter++;
}
__weak void CanErrorCallbackRXFOV1()
{
CanErrors.RXFOV1.counter++;
}
__weak void CanErrorCallbackTXALST0()
{
CanErrors.TXALST0.counter++;
}
__weak void CanErrorCallbackTXTERR0()
{
CanErrors.TXTERR0.counter++;
}
__weak void CanErrorCallbackTXALST1()
{
CanErrors.TXALST1.counter++;
}
__weak void CanErrorCallbackTXTERR1()
{
CanErrors.TXTERR1.counter++;
}
__weak void CanErrorCallbackTXALST2()
{
CanErrors.TXALST2.counter++;
}
__weak void CanErrorCallbackTXTERR2()
{
CanErrors.TXTERR2.counter++;
}
__weak void CanErrorCallbackTIMEOUT()
{
CanErrors.TIMEOUT.counter++;
}
__weak void CanErrorCallbackNOTINITIALIZED()
{
CanErrors.NOTINITIALIZED.counter++;
}
__weak void CanErrorCallbackNOTREADY()
{
CanErrors.NOTREADY.counter++;
}
__weak void CanErrorCallbackNOTSTARTED()
{
CanErrors.NOTSTARTED.counter++;
}
__weak void CanErrorCallbackPARAM()
{
CanErrors.PARAM.counter++;
}
#ifdef CAN_ERROR_BOX_ENABLED
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
{
if(!hcan->ErrorCode)
{
// NO ERROR
return;
}
if(hcan->ErrorCode & HAL_CAN_ERROR_EWG)
{
// Protocol Error Warning
CanErrorCallbackEWG();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_EPV)
{
// Error Passive
CanErrorCallbackEPV();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_BOF)
{
// Bus-off error
CanErrorCallbackBOF();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_STF)
{
// Stuff error
CanErrorCallbackSTF();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_FOR)
{
// Form error
CanErrorCallbackFOR();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_ACK)
{
// Acknowledgment error
CanErrorCallbackACK();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_BR)
{
// Bit recessive error
CanErrorCallbackBR();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_BD)
{
// Bit dominant error
CanErrorCallbackBD();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_CRC)
{
// CRC error
CanErrorCallbackCRC();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_RX_FOV0)
{
// Rx FIFO0 overrun error
CanErrorCallbackRXFOV0();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_RX_FOV1)
{
// Rx FIFO1 overrun error
CanErrorCallbackRXFOV1();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TX_ALST0)
{
// TxMailbox 0 transmit failure due to arbitration lost
CanErrorCallbackTXALST0();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TX_TERR0)
{
// TxMailbox 0 transmit failure due to transmit error
CanErrorCallbackTXTERR0();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TX_ALST1)
{
// TxMailbox 1 transmit failure due to arbitration lost
CanErrorCallbackTXALST1();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TX_TERR1)
{
// TxMailbox 1 transmit failure due to transmit error
CanErrorCallbackTXTERR1();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TX_ALST2)
{
// TxMailbox 2 transmit failure due to arbitration lost
CanErrorCallbackTXALST2();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TX_TERR2)
{
// TxMailbox 2 transmit failure due to transmit error
CanErrorCallbackTXTERR2();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_TIMEOUT)
{
// Timeout error
CanErrorCallbackTIMEOUT();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_NOT_INITIALIZED)
{
// Peripheral not initialized
CanErrorCallbackNOTINITIALIZED();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_NOT_READY)
{
// Peripheral not ready
CanErrorCallbackNOTREADY();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_NOT_STARTED)
{
// Peripheral not started
CanErrorCallbackNOTSTARTED();
}
if(hcan->ErrorCode & HAL_CAN_ERROR_PARAM)
{
// Parameter error
CanErrorCallbackPARAM();
}
}
#endif