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.
|
|
#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
|