51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
#include "bsp_can.h"
|
|
#include "main.h"
|
|
|
|
|
|
static void (*CAN_Callback[BSP_CAN_NUM][BSP_CAN_CB_NUM])(void);
|
|
|
|
static BSP_CAN_t CAN_Get(CAN_HandleTypeDef *hcan) {
|
|
if (hcan->Instance == CAN2)
|
|
return BSP_CAN_2;
|
|
else if (hcan->Instance == CAN1)
|
|
return BSP_CAN_1;
|
|
else
|
|
return BSP_CAN_ERR;
|
|
}
|
|
|
|
|
|
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan){
|
|
BSP_CAN_t bsp_can = CAN_Get(hcan);
|
|
if (bsp_can!=BSP_CAN_ERR) {
|
|
if (CAN_Callback[bsp_can][HAL_CAN_RX_FIFO0_MSG_PENDING_CB])
|
|
CAN_Callback[bsp_can][HAL_CAN_RX_FIFO0_MSG_PENDING_CB]();
|
|
}
|
|
}
|
|
|
|
void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) {
|
|
BSP_CAN_t bsp_can = CAN_Get(hcan);
|
|
if (bsp_can != BSP_CAN_ERR) {
|
|
if (CAN_Callback[bsp_can][HAL_CAN_RX_FIFO1_MSG_PENDING_CB])
|
|
CAN_Callback[bsp_can][HAL_CAN_RX_FIFO1_MSG_PENDING_CB]();
|
|
}
|
|
}
|
|
|
|
|
|
CAN_HandleTypeDef *BSP_CAN_GetHandle(BSP_CAN_t can) {
|
|
switch (can) {
|
|
case BSP_CAN_2:
|
|
return &hcan2;
|
|
case BSP_CAN_1:
|
|
return &hcan1;
|
|
default:
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
int8_t BSP_CAN_RegisterCallback(BSP_CAN_t can, BSP_CAN_Callback_t type,
|
|
void (*callback)(void)) {
|
|
if (callback == NULL) return BSP_ERR_NULL;
|
|
CAN_Callback[can][type] = callback;
|
|
return BSP_OK;
|
|
}
|