| /******************************************************************************* | |
| * Copyright (c) 2005 - 2013 ACIN, fortiss GmbH | |
| * | |
| * This program and the accompanying materials are made available under the | |
| * terms of the Eclipse Public License 2.0 which is available at | |
| * http://www.eclipse.org/legal/epl-2.0. | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 | |
| * | |
| * Contributors: | |
| * Alois Zoitl | |
| * - initial implementation and rework communication infrastructure | |
| *******************************************************************************/ | |
| #ifndef _EXTEVHAN_H_ | |
| #define _EXTEVHAN_H_ | |
| #include "devexec.h" | |
| class CEventSourceFB; | |
| class CFunctionBlock; | |
| #define DECLARE_HANDLER(TypeName) \ | |
| public: \ | |
| static const size_t mHandlerIdentifier; \ | |
| virtual size_t getIdentifier() const; \ | |
| explicit TypeName(CDeviceExecution& paDeviceExecution);\ | |
| ~TypeName(); | |
| #define DEFINE_HANDLER(TypeName) \ | |
| size_t TypeName::getIdentifier() const { return TypeName::mHandlerIdentifier;} | |
| /** \defgroup FORTE_HAL FORTE Hardware Abstraction Layer - FORTE-HAL | |
| * \brief The FORTE-HAL is the abstraction of HW dependent features important | |
| * and needed in each port of FORTE. | |
| */ | |
| /*@{*/ | |
| /**\defgroup EXTEVHAND External Event Handling | |
| */ | |
| /*@{*/ | |
| /*! \brief Baseclass for handling incoming interrupts and similar external events. | |
| * | |
| * Implementations of such classes should provide the following functions for ES-FBs: | |
| * - registerFB(CFunctionBlock *pa_poESFB, ...) allows the ES-FB to register to this ExternalEventHandler for recieving external | |
| * events (e.g. INIT+). the specific parameters depend on the ExternalEventHandler. | |
| * - unregisterFB(CFunctionBlock *pa_poESFB) the ES-FB doesn't want to receive any external events any more (e.g. INIT-). | |
| */ | |
| class CExternalEventHandler{ | |
| public: | |
| explicit CExternalEventHandler(CDeviceExecution& paDeviceExecution); | |
| virtual ~CExternalEventHandler(){ | |
| } | |
| ; | |
| /*!\brief Enables this event source | |
| * | |
| */ | |
| virtual void enableHandler(void) = 0; | |
| /*!\brief Disable this event source | |
| */ | |
| virtual void disableHandler(void) = 0; | |
| /*!\brief Sets the priority of the event source | |
| * | |
| * \param paPriority new priority of the event source | |
| */ | |
| virtual void setPriority(int paPriority) = 0; | |
| /*!\brief Get the current priority of the event source | |
| * | |
| * \return current priority | |
| */ | |
| virtual int getPriority(void) const = 0; | |
| virtual size_t getIdentifier() const = 0; | |
| protected: | |
| /*! \brief Check if the external event handler is allowed to start event chains | |
| * | |
| */ | |
| bool isAllowed(); | |
| /*!\brief register event source at device execution for starting a new event chain | |
| * | |
| * this function checks if the external event handler is allowed to start new event chains and if yes performs the necessary actions. | |
| * | |
| * @param paECStartFB the event source function block which starts the new event chain | |
| */ | |
| void startNewEventChain(CEventSourceFB *paECStartFB); | |
| template<typename T> | |
| T& getExtEvHandler(){ | |
| return mDeviceExecution.getExtEvHandler<T>(); | |
| } | |
| CDeviceExecution& mDeviceExecution; | |
| private: | |
| }; | |
| /*@}*/ | |
| /*@}*/ | |
| #endif /*EXTEVHAN_H_*/ |