9d7164cfdb
This is the openPOWERLINK network stack from systec electronic. It's a bit messed up as there is a driver mixed into the middle of it, lots of work needs to be done to unwind the different portions to make it sane. Cc: Daniel Krueger <daniel.krueger@systec-electronic.com> Cc: Ronald Sieber <Ronald.Sieber@systec-electronic.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
304 lines
13 KiB
C
304 lines
13 KiB
C
/****************************************************************************
|
|
|
|
(c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
|
|
www.systec-electronic.com
|
|
|
|
Project: openPOWERLINK
|
|
|
|
Description: include file for event module
|
|
|
|
License:
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
2. Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
3. Neither the name of SYSTEC electronic GmbH nor the names of its
|
|
contributors may be used to endorse or promote products derived
|
|
from this software without prior written permission. For written
|
|
permission, please contact info@systec-electronic.com.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
Severability Clause:
|
|
|
|
If a provision of this License is or becomes illegal, invalid or
|
|
unenforceable in any jurisdiction, that shall not affect:
|
|
1. the validity or enforceability in that jurisdiction of any other
|
|
provision of this License; or
|
|
2. the validity or enforceability in other jurisdictions of that or
|
|
any other provision of this License.
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
$RCSfile: EplEvent.h,v $
|
|
|
|
$Author: D.Krueger $
|
|
|
|
$Revision: 1.8 $ $Date: 2008/11/17 16:40:39 $
|
|
|
|
$State: Exp $
|
|
|
|
Build Environment:
|
|
GCC V3.4
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
Revision History:
|
|
|
|
2006/06/12 d.k.: start of the implementation, version 1.00
|
|
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _EPL_EVENT_H_
|
|
#define _EPL_EVENT_H_
|
|
|
|
#include "EplInc.h"
|
|
#include "EplNmt.h"
|
|
|
|
//---------------------------------------------------------------------------
|
|
// const defines
|
|
//---------------------------------------------------------------------------
|
|
|
|
// name and size of event queues
|
|
#define EPL_EVENT_NAME_SHB_KERNEL_TO_USER "ShbKernelToUser"
|
|
#ifndef EPL_EVENT_SIZE_SHB_KERNEL_TO_USER
|
|
#define EPL_EVENT_SIZE_SHB_KERNEL_TO_USER 32768 // 32 kByte
|
|
#endif
|
|
|
|
#define EPL_EVENT_NAME_SHB_USER_TO_KERNEL "ShbUserToKernel"
|
|
#ifndef EPL_EVENT_SIZE_SHB_USER_TO_KERNEL
|
|
#define EPL_EVENT_SIZE_SHB_USER_TO_KERNEL 32768 // 32 kByte
|
|
#endif
|
|
|
|
|
|
// max size of event argument
|
|
#ifndef EPL_MAX_EVENT_ARG_SIZE
|
|
#define EPL_MAX_EVENT_ARG_SIZE 256 // because of PDO
|
|
#endif
|
|
|
|
#define EPL_DLL_ERR_MN_CRC 0x00000001L // object 0x1C00
|
|
#define EPL_DLL_ERR_MN_COLLISION 0x00000002L // object 0x1C01
|
|
#define EPL_DLL_ERR_MN_CYCTIMEEXCEED 0x00000004L // object 0x1C02
|
|
#define EPL_DLL_ERR_MN_LOSS_LINK 0x00000008L // object 0x1C03
|
|
#define EPL_DLL_ERR_MN_CN_LATE_PRES 0x00000010L // objects 0x1C04-0x1C06
|
|
#define EPL_DLL_ERR_MN_CN_LOSS_PRES 0x00000080L // objects 0x1C07-0x1C09
|
|
#define EPL_DLL_ERR_CN_COLLISION 0x00000400L // object 0x1C0A
|
|
#define EPL_DLL_ERR_CN_LOSS_SOC 0x00000800L // object 0x1C0B
|
|
#define EPL_DLL_ERR_CN_LOSS_SOA 0x00001000L // object 0x1C0C
|
|
#define EPL_DLL_ERR_CN_LOSS_PREQ 0x00002000L // object 0x1C0D
|
|
#define EPL_DLL_ERR_CN_RECVD_PREQ 0x00004000L // decrement object 0x1C0D/2
|
|
#define EPL_DLL_ERR_CN_SOC_JITTER 0x00008000L // object 0x1C0E
|
|
#define EPL_DLL_ERR_CN_CRC 0x00010000L // object 0x1C0F
|
|
#define EPL_DLL_ERR_CN_LOSS_LINK 0x00020000L // object 0x1C10
|
|
#define EPL_DLL_ERR_MN_LOSS_STATRES 0x00040000L // objects 0x1C15-0x1C17 (should be operated by NmtMnu module)
|
|
#define EPL_DLL_ERR_BAD_PHYS_MODE 0x00080000L // no object
|
|
#define EPL_DLL_ERR_MAC_BUFFER 0x00100000L // no object (NMT_GT6)
|
|
#define EPL_DLL_ERR_INVALID_FORMAT 0x00200000L // no object (NMT_GT6)
|
|
#define EPL_DLL_ERR_ADDRESS_CONFLICT 0x00400000L // no object (remove CN from configuration)
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// typedef
|
|
//---------------------------------------------------------------------------
|
|
|
|
// EventType determines the argument of the event
|
|
typedef enum
|
|
{
|
|
kEplEventTypeNmtEvent = 0x01, // NMT event
|
|
// arg is pointer to tEplNmtEvent
|
|
kEplEventTypePdoRx = 0x02, // PDO frame received event (PRes/PReq)
|
|
// arg is pointer to tEplFrame
|
|
kEplEventTypePdoTx = 0x03, // PDO frame transmitted event (PRes/PReq)
|
|
// arg is pointer to tEplFrameInfo
|
|
kEplEventTypePdoSoa = 0x04, // SoA frame received event (isochronous phase completed)
|
|
// arg is pointer to nothing
|
|
kEplEventTypeSync = 0x05, // Sync event (e.g. SoC or anticipated SoC)
|
|
// arg is pointer to nothing
|
|
kEplEventTypeTimer = 0x06, // Timer event
|
|
// arg is pointer to tEplTimerEventArg
|
|
kEplEventTypeHeartbeat = 0x07, // Heartbeat event
|
|
// arg is pointer to tEplHeartbeatEvent
|
|
kEplEventTypeDllkCreate = 0x08, // DLL kernel create event
|
|
// arg is pointer to the new tEplNmtState
|
|
kEplEventTypeDllkDestroy = 0x09, // DLL kernel destroy event
|
|
// arg is pointer to the old tEplNmtState
|
|
kEplEventTypeDllkFillTx = 0x0A, // DLL kernel fill TxBuffer event
|
|
// arg is pointer to tEplDllAsyncReqPriority
|
|
kEplEventTypeDllkPresReady = 0x0B, // DLL kernel PRes ready event
|
|
// arg is pointer to nothing
|
|
kEplEventTypeError = 0x0C, // Error event for API layer
|
|
// arg is pointer to tEplEventError
|
|
kEplEventTypeNmtStateChange = 0x0D, // indicate change of NMT-State
|
|
// arg is pointer to tEplEventNmtStateChange
|
|
kEplEventTypeDllError = 0x0E, // DLL error event for Error handler
|
|
// arg is pointer to tEplErrorHandlerkEvent
|
|
kEplEventTypeAsndRx = 0x0F, // received ASnd frame for DLL user module
|
|
// arg is pointer to tEplFrame
|
|
kEplEventTypeDllkServFilter = 0x10, // configure ServiceIdFilter
|
|
// arg is pointer to tEplDllCalServiceIdFilter
|
|
kEplEventTypeDllkIdentity = 0x11, // configure Identity
|
|
// arg is pointer to tEplDllIdentParam
|
|
kEplEventTypeDllkConfig = 0x12, // configure ConfigParam
|
|
// arg is pointer to tEplDllConfigParam
|
|
kEplEventTypeDllkIssueReq = 0x13, // issue Ident/Status request
|
|
// arg is pointer to tEplDllCalIssueRequest
|
|
kEplEventTypeDllkAddNode = 0x14, // add node to isochronous phase
|
|
// arg is pointer to tEplDllNodeInfo
|
|
kEplEventTypeDllkDelNode = 0x15, // remove node from isochronous phase
|
|
// arg is pointer to unsigned int
|
|
kEplEventTypeDllkSoftDelNode= 0x16, // remove node softly from isochronous phase
|
|
// arg is pointer to unsigned int
|
|
kEplEventTypeDllkStartReducedCycle = 0x17, // start reduced EPL cycle on MN
|
|
// arg is pointer to nothing
|
|
kEplEventTypeNmtMnuNmtCmdSent = 0x18, // NMT command was actually sent
|
|
// arg is pointer to tEplFrame
|
|
|
|
} tEplEventType;
|
|
|
|
|
|
// EventSink determines the consumer of the event
|
|
typedef enum
|
|
{
|
|
kEplEventSinkSync = 0x00, // Sync event for application or kernel EPL module
|
|
kEplEventSinkNmtk = 0x01, // events for Nmtk module
|
|
kEplEventSinkDllk = 0x02, // events for Dllk module
|
|
kEplEventSinkDlluCal = 0x03, // events for DlluCal module
|
|
kEplEventSinkDllkCal = 0x04, // events for DllkCal module
|
|
kEplEventSinkPdok = 0x05, // events for Pdok module
|
|
kEplEventSinkNmtu = 0x06, // events for Nmtu module
|
|
kEplEventSinkErrk = 0x07, // events for Error handler module
|
|
kEplEventSinkErru = 0x08, // events for Error signaling module
|
|
kEplEventSinkSdoAsySeq = 0x09, // events for asyncronous SDO Sequence Layer module
|
|
kEplEventSinkNmtMnu = 0x0A, // events for NmtMnu module
|
|
kEplEventSinkLedu = 0x0B, // events for Ledu module
|
|
kEplEventSinkApi = 0x0F, // events for API module
|
|
|
|
} tEplEventSink;
|
|
|
|
|
|
// EventSource determines the source of an errorevent
|
|
typedef enum
|
|
{
|
|
// kernelspace modules
|
|
kEplEventSourceDllk = 0x01, // Dllk module
|
|
kEplEventSourceNmtk = 0x02, // Nmtk module
|
|
kEplEventSourceObdk = 0x03, // Obdk module
|
|
kEplEventSourcePdok = 0x04, // Pdok module
|
|
kEplEventSourceTimerk = 0x05, // Timerk module
|
|
kEplEventSourceEventk = 0x06, // Eventk module
|
|
kEplEventSourceSyncCb = 0x07, // sync-Cb
|
|
kEplEventSourceErrk = 0x08, // Error handler module
|
|
|
|
// userspace modules
|
|
kEplEventSourceDllu = 0x10, // Dllu module
|
|
kEplEventSourceNmtu = 0x11, // Nmtu module
|
|
kEplEventSourceNmtCnu = 0x12, // NmtCnu module
|
|
kEplEventSourceNmtMnu = 0x13, // NmtMnu module
|
|
kEplEventSourceObdu = 0x14, // Obdu module
|
|
kEplEventSourceSdoUdp = 0x15, // Sdo/Udp module
|
|
kEplEventSourceSdoAsnd = 0x16, // Sdo/Asnd module
|
|
kEplEventSourceSdoAsySeq = 0x17, // Sdo asynchronus Sequence Layer module
|
|
kEplEventSourceSdoCom = 0x18, // Sdo command layer module
|
|
kEplEventSourceTimeru = 0x19, // Timeru module
|
|
kEplEventSourceCfgMau = 0x1A, // CfgMau module
|
|
kEplEventSourceEventu = 0x1B, // Eventu module
|
|
kEplEventSourceEplApi = 0x1C, // Api module
|
|
kEplEventSourceLedu = 0x1D, // Ledu module
|
|
|
|
} tEplEventSource;
|
|
|
|
|
|
// structure of EPL event (element order must not be changed!)
|
|
typedef struct
|
|
{
|
|
tEplEventType m_EventType /*:28*/; // event type
|
|
tEplEventSink m_EventSink /*:4*/; // event sink
|
|
tEplNetTime m_NetTime; // timestamp
|
|
unsigned int m_uiSize; // size of argument
|
|
void * m_pArg; // argument of event
|
|
|
|
} tEplEvent;
|
|
|
|
|
|
// short structure of EPL event without argument and its size (element order must not be changed!)
|
|
typedef struct
|
|
{
|
|
tEplEventType m_EventType /*:28*/; // event type
|
|
tEplEventSink m_EventSink /*:4*/; // event sink
|
|
tEplNetTime m_NetTime; // timestamp
|
|
|
|
} tEplEventShort;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
unsigned int m_uiIndex;
|
|
unsigned int m_uiSubIndex;
|
|
|
|
} tEplEventObdError;
|
|
|
|
|
|
// structure for kEplEventTypeError
|
|
typedef struct
|
|
{
|
|
tEplEventSource m_EventSource; // module which posted this error event
|
|
tEplKernel m_EplError; // EPL error which occured
|
|
union
|
|
{
|
|
BYTE m_bArg;
|
|
DWORD m_dwArg;
|
|
tEplEventSource m_EventSource; // from Eventk/u module (originating error source)
|
|
tEplEventObdError m_ObdError; // from Obd module
|
|
// tEplErrHistoryEntry m_HistoryEntry; // from Nmtk/u module
|
|
|
|
} m_Arg;
|
|
|
|
} tEplEventError;
|
|
|
|
|
|
// structure for kEplEventTypeDllError
|
|
typedef struct
|
|
{
|
|
unsigned long m_ulDllErrorEvents; // EPL_DLL_ERR_*
|
|
unsigned int m_uiNodeId;
|
|
tEplNmtState m_NmtState;
|
|
|
|
} tEplErrorHandlerkEvent;
|
|
|
|
|
|
// callback function to get informed about sync event
|
|
typedef tEplKernel (PUBLIC* tEplSyncCb) (void);
|
|
|
|
// callback function for generic events
|
|
typedef tEplKernel (PUBLIC* tEplProcessEventCb) (tEplEvent* pEplEvent_p);
|
|
|
|
//---------------------------------------------------------------------------
|
|
// function prototypes
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#endif // #ifndef _EPL_EVENT_H_
|
|
|
|
|