blob: 4eb2eb086084be2222d83d7a800e99f8ee2028ed [file] [log] [blame]
/*******************************************************************************
* 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_*/