You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

91 lines
3.6 KiB

#include "zcan.hpp"
#ifdef HAL_CAN_MODULE_ENABLED
extern "C" {
void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_TxMailbox0Complete(hcan);
}
}
void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_TxMailbox1Complete(hcan);
}
}
void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_TxMailbox2Complete(hcan);
}
}
void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_TxMailbox0Abort(hcan);
}
}
void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_TxMailbox1Abort(hcan);
}
}
void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_TxMailbox2Abort(hcan);
}
}
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_RxFifo0MsgPending(hcan);
}
}
void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_RxFifo0Full(hcan);
}
}
void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_RxFifo1MsgPending(hcan);
}
}
void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_RxFifo1Full(hcan);
}
}
void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_Sleep(hcan);
}
}
void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_WakeUpFromRxMsg(hcan);
}
}
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) {
for (int i = 0; i < iflytop::ZCanIRQDispatcher::instance().m_listenerNum; i++) {
iflytop::ZCanIRQDispatcher::instance().m_listener[i]->STM32_HAL_onCAN_Error(hcan);
}
}
}
using namespace iflytop;
void ZCanIRQDispatcher::regListener(ZCanIRQListener *listener) {
if (listener == NULL) return;
for (int i = 0; i < STM32_HAL_LISTENER_NUM; i++) {
if (m_listener[i] == NULL) {
m_listener[i] = listener;
m_listenerNum++;
return;
}
}
ZASSERT(0);
}
ZCanIRQDispatcher &ZCanIRQDispatcher::instance() {
static ZCanIRQDispatcher instance;
return instance;
}
#endif