![Greg Kroah-Hartman](/assets/img/avatar_default.png)
It's a start, still a mess... 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>
274 lines
9.7 KiB
C
274 lines
9.7 KiB
C
/****************************************************************************
|
|
|
|
(c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
|
|
www.systec-electronic.com
|
|
|
|
Project: openPOWERLINK
|
|
|
|
Description: include file for EPL API layer
|
|
|
|
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: Epl.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/05/22 d.k.: start of the implementation, version 1.00
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _EPL_API_H_
|
|
#define _EPL_API_H_
|
|
|
|
#include "EplInc.h"
|
|
#include "EplSdo.h"
|
|
#include "EplObd.h"
|
|
#include "EplLed.h"
|
|
#include "EplEvent.h"
|
|
|
|
//---------------------------------------------------------------------------
|
|
// const defines
|
|
//---------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------
|
|
// typedef
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef struct {
|
|
unsigned int m_uiNodeId;
|
|
tEplNmtState m_NmtState;
|
|
tEplNmtNodeEvent m_NodeEvent;
|
|
WORD m_wErrorCode; // EPL error code if m_NodeEvent == kEplNmtNodeEventError
|
|
BOOL m_fMandatory;
|
|
|
|
} tEplApiEventNode;
|
|
|
|
typedef struct {
|
|
tEplNmtState m_NmtState; // local NMT state
|
|
tEplNmtBootEvent m_BootEvent;
|
|
WORD m_wErrorCode; // EPL error code if m_BootEvent == kEplNmtBootEventError
|
|
|
|
} tEplApiEventBoot;
|
|
|
|
typedef struct {
|
|
tEplLedType m_LedType; // type of the LED (e.g. Status or Error)
|
|
BOOL m_fOn; // state of the LED (e.g. on or off)
|
|
|
|
} tEplApiEventLed;
|
|
|
|
typedef enum {
|
|
kEplApiEventNmtStateChange = 0x10, // m_NmtStateChange
|
|
// kEplApiEventRequestNmt = 0x11, // m_bNmtCmd
|
|
kEplApiEventCriticalError = 0x12, // m_InternalError, Stack halted
|
|
kEplApiEventWarning = 0x13, // m_InternalError, Stack running
|
|
kEplApiEventNode = 0x20, // m_Node
|
|
kEplApiEventBoot = 0x21, // m_Boot
|
|
kEplApiEventSdo = 0x62, // m_Sdo
|
|
kEplApiEventObdAccess = 0x69, // m_ObdCbParam
|
|
kEplApiEventLed = 0x70, // m_Led
|
|
|
|
} tEplApiEventType;
|
|
|
|
typedef union {
|
|
tEplEventNmtStateChange m_NmtStateChange;
|
|
tEplEventError m_InternalError;
|
|
tEplSdoComFinished m_Sdo;
|
|
tEplObdCbParam m_ObdCbParam;
|
|
tEplApiEventNode m_Node;
|
|
tEplApiEventBoot m_Boot;
|
|
tEplApiEventLed m_Led;
|
|
|
|
} tEplApiEventArg;
|
|
|
|
typedef tEplKernel(PUBLIC ROM * tEplApiCbEvent) (tEplApiEventType EventType_p, // IN: event type (enum)
|
|
tEplApiEventArg * pEventArg_p, // IN: event argument (union)
|
|
void GENERIC * pUserArg_p);
|
|
|
|
typedef struct {
|
|
unsigned int m_uiSizeOfStruct;
|
|
BOOL m_fAsyncOnly; // do not need to register PRes
|
|
unsigned int m_uiNodeId; // local node ID
|
|
BYTE m_abMacAddress[6]; // local MAC address
|
|
|
|
// 0x1F82: NMT_FeatureFlags_U32
|
|
DWORD m_dwFeatureFlags;
|
|
// Cycle Length (0x1006: NMT_CycleLen_U32) in [us]
|
|
DWORD m_dwCycleLen; // required for error detection
|
|
// 0x1F98: NMT_CycleTiming_REC
|
|
// 0x1F98.1: IsochrTxMaxPayload_U16
|
|
unsigned int m_uiIsochrTxMaxPayload; // const
|
|
// 0x1F98.2: IsochrRxMaxPayload_U16
|
|
unsigned int m_uiIsochrRxMaxPayload; // const
|
|
// 0x1F98.3: PResMaxLatency_U32
|
|
DWORD m_dwPresMaxLatency; // const in [ns], only required for IdentRes
|
|
// 0x1F98.4: PReqActPayloadLimit_U16
|
|
unsigned int m_uiPreqActPayloadLimit; // required for initialisation (+28 bytes)
|
|
// 0x1F98.5: PResActPayloadLimit_U16
|
|
unsigned int m_uiPresActPayloadLimit; // required for initialisation of Pres frame (+28 bytes)
|
|
// 0x1F98.6: ASndMaxLatency_U32
|
|
DWORD m_dwAsndMaxLatency; // const in [ns], only required for IdentRes
|
|
// 0x1F98.7: MultiplCycleCnt_U8
|
|
unsigned int m_uiMultiplCycleCnt; // required for error detection
|
|
// 0x1F98.8: AsyncMTU_U16
|
|
unsigned int m_uiAsyncMtu; // required to set up max frame size
|
|
// 0x1F98.9: Prescaler_U16
|
|
unsigned int m_uiPrescaler; // required for sync
|
|
// $$$ Multiplexed Slot
|
|
|
|
// 0x1C14: DLL_LossOfFrameTolerance_U32 in [ns]
|
|
DWORD m_dwLossOfFrameTolerance;
|
|
|
|
// 0x1F8A: NMT_MNCycleTiming_REC
|
|
// 0x1F8A.1: WaitSoCPReq_U32 in [ns]
|
|
DWORD m_dwWaitSocPreq;
|
|
|
|
// 0x1F8A.2: AsyncSlotTimeout_U32 in [ns]
|
|
DWORD m_dwAsyncSlotTimeout;
|
|
|
|
DWORD m_dwDeviceType; // NMT_DeviceType_U32
|
|
DWORD m_dwVendorId; // NMT_IdentityObject_REC.VendorId_U32
|
|
DWORD m_dwProductCode; // NMT_IdentityObject_REC.ProductCode_U32
|
|
DWORD m_dwRevisionNumber; // NMT_IdentityObject_REC.RevisionNo_U32
|
|
DWORD m_dwSerialNumber; // NMT_IdentityObject_REC.SerialNo_U32
|
|
QWORD m_qwVendorSpecificExt1;
|
|
DWORD m_dwVerifyConfigurationDate; // CFM_VerifyConfiguration_REC.ConfDate_U32
|
|
DWORD m_dwVerifyConfigurationTime; // CFM_VerifyConfiguration_REC.ConfTime_U32
|
|
DWORD m_dwApplicationSwDate; // PDL_LocVerApplSw_REC.ApplSwDate_U32 on programmable device or date portion of NMT_ManufactSwVers_VS on non-programmable device
|
|
DWORD m_dwApplicationSwTime; // PDL_LocVerApplSw_REC.ApplSwTime_U32 on programmable device or time portion of NMT_ManufactSwVers_VS on non-programmable device
|
|
DWORD m_dwIpAddress;
|
|
DWORD m_dwSubnetMask;
|
|
DWORD m_dwDefaultGateway;
|
|
BYTE m_sHostname[32];
|
|
BYTE m_abVendorSpecificExt2[48];
|
|
|
|
char *m_pszDevName; // NMT_ManufactDevName_VS (0x1008/0 local OD)
|
|
char *m_pszHwVersion; // NMT_ManufactHwVers_VS (0x1009/0 local OD)
|
|
char *m_pszSwVersion; // NMT_ManufactSwVers_VS (0x100A/0 local OD)
|
|
|
|
tEplApiCbEvent m_pfnCbEvent;
|
|
void *m_pEventUserArg;
|
|
tEplSyncCb m_pfnCbSync;
|
|
|
|
} tEplApiInitParam;
|
|
|
|
typedef struct {
|
|
void *m_pImage;
|
|
unsigned int m_uiSize;
|
|
|
|
} tEplApiProcessImage;
|
|
|
|
//---------------------------------------------------------------------------
|
|
// function prototypes
|
|
//---------------------------------------------------------------------------
|
|
|
|
tEplKernel PUBLIC EplApiInitialize(tEplApiInitParam * pInitParam_p);
|
|
|
|
tEplKernel PUBLIC EplApiShutdown(void);
|
|
|
|
tEplKernel PUBLIC EplApiReadObject(tEplSdoComConHdl * pSdoComConHdl_p,
|
|
unsigned int uiNodeId_p,
|
|
unsigned int uiIndex_p,
|
|
unsigned int uiSubindex_p,
|
|
void *pDstData_le_p,
|
|
unsigned int *puiSize_p,
|
|
tEplSdoType SdoType_p, void *pUserArg_p);
|
|
|
|
tEplKernel PUBLIC EplApiWriteObject(tEplSdoComConHdl * pSdoComConHdl_p,
|
|
unsigned int uiNodeId_p,
|
|
unsigned int uiIndex_p,
|
|
unsigned int uiSubindex_p,
|
|
void *pSrcData_le_p,
|
|
unsigned int uiSize_p,
|
|
tEplSdoType SdoType_p, void *pUserArg_p);
|
|
|
|
tEplKernel PUBLIC EplApiFreeSdoChannel(tEplSdoComConHdl SdoComConHdl_p);
|
|
|
|
tEplKernel PUBLIC EplApiReadLocalObject(unsigned int uiIndex_p,
|
|
unsigned int uiSubindex_p,
|
|
void *pDstData_p,
|
|
unsigned int *puiSize_p);
|
|
|
|
tEplKernel PUBLIC EplApiWriteLocalObject(unsigned int uiIndex_p,
|
|
unsigned int uiSubindex_p,
|
|
void *pSrcData_p,
|
|
unsigned int uiSize_p);
|
|
|
|
tEplKernel PUBLIC EplApiCbObdAccess(tEplObdCbParam MEM * pParam_p);
|
|
|
|
tEplKernel PUBLIC EplApiLinkObject(unsigned int uiObjIndex_p,
|
|
void *pVar_p,
|
|
unsigned int *puiVarEntries_p,
|
|
tEplObdSize * pEntrySize_p,
|
|
unsigned int uiFirstSubindex_p);
|
|
|
|
tEplKernel PUBLIC EplApiExecNmtCommand(tEplNmtEvent NmtEvent_p);
|
|
|
|
tEplKernel PUBLIC EplApiProcess(void);
|
|
|
|
#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
|
|
tEplKernel PUBLIC EplApiMnTriggerStateChange(unsigned int uiNodeId_p,
|
|
tEplNmtNodeCommand NodeCommand_p);
|
|
#endif
|
|
|
|
tEplKernel PUBLIC EplApiGetIdentResponse(unsigned int uiNodeId_p,
|
|
tEplIdentResponse **
|
|
ppIdentResponse_p);
|
|
|
|
// functions for process image will be implemented in separate file
|
|
tEplKernel PUBLIC EplApiProcessImageSetup(void);
|
|
tEplKernel PUBLIC EplApiProcessImageExchangeIn(tEplApiProcessImage * pPI_p);
|
|
tEplKernel PUBLIC EplApiProcessImageExchangeOut(tEplApiProcessImage * pPI_p);
|
|
|
|
#endif // #ifndef _EPL_API_H_
|