e0ca059588
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>
246 lines
8.2 KiB
C
246 lines
8.2 KiB
C
/****************************************************************************
|
|
|
|
(c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
|
|
www.systec-electronic.com
|
|
|
|
Project: openPOWERLINK
|
|
|
|
Description: include file for api function of the sdo 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: EplSdo.h,v $
|
|
|
|
$Author: D.Krueger $
|
|
|
|
$Revision: 1.6 $ $Date: 2008/04/17 21:36:32 $
|
|
|
|
$State: Exp $
|
|
|
|
Build Environment:
|
|
GCC V3.4
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
Revision History:
|
|
|
|
2006/06/26 k.t.: start of the implementation
|
|
|
|
****************************************************************************/
|
|
|
|
#include "EplInc.h"
|
|
#include "EplFrame.h"
|
|
#include "EplSdoAc.h"
|
|
|
|
#ifndef _EPLSDO_H_
|
|
#define _EPLSDO_H_
|
|
|
|
//---------------------------------------------------------------------------
|
|
// const defines
|
|
//---------------------------------------------------------------------------
|
|
// global defines
|
|
#ifndef EPL_SDO_MAX_PAYLOAD
|
|
#define EPL_SDO_MAX_PAYLOAD 256
|
|
#endif
|
|
|
|
// handle between Protocol Abstraction Layer and asynchronous SDO Sequence Layer
|
|
#define EPL_SDO_UDP_HANDLE 0x8000
|
|
#define EPL_SDO_ASND_HANDLE 0x4000
|
|
#define EPL_SDO_ASY_HANDLE_MASK 0xC000
|
|
#define EPL_SDO_ASY_INVALID_HDL 0x3FFF
|
|
|
|
// handle between SDO Sequence Layer and sdo command layer
|
|
#define EPL_SDO_ASY_HANDLE 0x8000
|
|
#define EPL_SDO_PDO_HANDLE 0x4000
|
|
#define EPL_SDO_SEQ_HANDLE_MASK 0xC000
|
|
#define EPL_SDO_SEQ_INVALID_HDL 0x3FFF
|
|
|
|
#define EPL_ASND_HEADER_SIZE 4
|
|
//#define EPL_SEQ_HEADER_SIZE 4
|
|
#define EPL_ETHERNET_HEADER_SIZE 14
|
|
|
|
#define EPL_SEQ_NUM_MASK 0xFC
|
|
|
|
// size for send buffer and history
|
|
#define EPL_MAX_SDO_FRAME_SIZE EPL_C_IP_MIN_MTU
|
|
// size for receive frame
|
|
// -> needed because SND-Kit sends up to 1518 Byte
|
|
// without Sdo-Command: Maximum Segment Size
|
|
#define EPL_MAX_SDO_REC_FRAME_SIZE EPL_C_IP_MAX_MTU
|
|
|
|
//---------------------------------------------------------------------------
|
|
// typedef
|
|
//---------------------------------------------------------------------------
|
|
// handle between Protocol Abstraction Layer and asynchronuus SDO Sequence Layer
|
|
typedef unsigned int tEplSdoConHdl;
|
|
|
|
// callback function pointer for Protocol Abstraction Layer to call
|
|
// asynchronuus SDO Sequence Layer
|
|
typedef tEplKernel(PUBLIC * tEplSequLayerReceiveCb) (tEplSdoConHdl ConHdl_p,
|
|
tEplAsySdoSeq *
|
|
pSdoSeqData_p,
|
|
unsigned int uiDataSize_p);
|
|
|
|
// handle between asynchronuus SDO Sequence Layer and SDO Command layer
|
|
typedef unsigned int tEplSdoSeqConHdl;
|
|
|
|
// callback function pointer for asynchronuus SDO Sequence Layer to call
|
|
// SDO Command layer for received data
|
|
typedef tEplKernel(PUBLIC *
|
|
tEplSdoComReceiveCb) (tEplSdoSeqConHdl SdoSeqConHdl_p,
|
|
tEplAsySdoCom * pAsySdoCom_p,
|
|
unsigned int uiDataSize_p);
|
|
|
|
// status of connection
|
|
typedef enum {
|
|
kAsySdoConStateConnected = 0x00,
|
|
kAsySdoConStateInitError = 0x01,
|
|
kAsySdoConStateConClosed = 0x02,
|
|
kAsySdoConStateAckReceived = 0x03,
|
|
kAsySdoConStateFrameSended = 0x04,
|
|
kAsySdoConStateTimeout = 0x05
|
|
} tEplAsySdoConState;
|
|
|
|
// callback function pointer for asynchronuus SDO Sequence Layer to call
|
|
// SDO Command layer for connection status
|
|
typedef tEplKernel(PUBLIC * tEplSdoComConCb) (tEplSdoSeqConHdl SdoSeqConHdl_p,
|
|
tEplAsySdoConState
|
|
AsySdoConState_p);
|
|
|
|
// handle between SDO Command layer and application
|
|
typedef unsigned int tEplSdoComConHdl;
|
|
|
|
// status of connection
|
|
typedef enum {
|
|
kEplSdoComTransferNotActive = 0x00,
|
|
kEplSdoComTransferRunning = 0x01,
|
|
kEplSdoComTransferTxAborted = 0x02,
|
|
kEplSdoComTransferRxAborted = 0x03,
|
|
kEplSdoComTransferFinished = 0x04,
|
|
kEplSdoComTransferLowerLayerAbort = 0x05
|
|
} tEplSdoComConState;
|
|
|
|
// SDO Services and Command-Ids from DS 1.0.0 p.152
|
|
typedef enum {
|
|
kEplSdoServiceNIL = 0x00,
|
|
kEplSdoServiceWriteByIndex = 0x01,
|
|
kEplSdoServiceReadByIndex = 0x02
|
|
//--------------------------------
|
|
// the following services are optional and
|
|
// not supported now
|
|
/*
|
|
kEplSdoServiceWriteAllByIndex = 0x03,
|
|
kEplSdoServiceReadAllByIndex = 0x04,
|
|
kEplSdoServiceWriteByName = 0x05,
|
|
kEplSdoServiceReadByName = 0x06,
|
|
|
|
kEplSdoServiceFileWrite = 0x20,
|
|
kEplSdoServiceFileRead = 0x21,
|
|
|
|
kEplSdoServiceWriteMultiByIndex = 0x31,
|
|
kEplSdoServiceReadMultiByIndex = 0x32,
|
|
|
|
kEplSdoServiceMaxSegSize = 0x70
|
|
|
|
// 0x80 - 0xFF manufacturer specific
|
|
|
|
*/
|
|
} tEplSdoServiceType;
|
|
|
|
// describes if read or write access
|
|
typedef enum {
|
|
kEplSdoAccessTypeRead = 0x00,
|
|
kEplSdoAccessTypeWrite = 0x01
|
|
} tEplSdoAccessType;
|
|
|
|
typedef enum {
|
|
kEplSdoTypeAuto = 0x00,
|
|
kEplSdoTypeUdp = 0x01,
|
|
kEplSdoTypeAsnd = 0x02,
|
|
kEplSdoTypePdo = 0x03
|
|
} tEplSdoType;
|
|
|
|
typedef enum {
|
|
kEplSdoTransAuto = 0x00,
|
|
kEplSdoTransExpedited = 0x01,
|
|
kEplSdoTransSegmented = 0x02
|
|
} tEplSdoTransType;
|
|
|
|
// structure to inform application about finish of SDO transfer
|
|
typedef struct {
|
|
tEplSdoComConHdl m_SdoComConHdl;
|
|
tEplSdoComConState m_SdoComConState;
|
|
DWORD m_dwAbortCode;
|
|
tEplSdoAccessType m_SdoAccessType;
|
|
unsigned int m_uiNodeId; // NodeId of the target
|
|
unsigned int m_uiTargetIndex; // index which was accessed
|
|
unsigned int m_uiTargetSubIndex; // subindex which was accessed
|
|
unsigned int m_uiTransferredByte; // number of bytes transferred
|
|
void *m_pUserArg; // user definable argument pointer
|
|
|
|
} tEplSdoComFinished;
|
|
|
|
// callback function pointer to inform application about connection
|
|
typedef tEplKernel(PUBLIC * tEplSdoFinishedCb) (tEplSdoComFinished *
|
|
pSdoComFinished_p);
|
|
|
|
// structure to init SDO transfer to Read or Write by Index
|
|
typedef struct {
|
|
tEplSdoComConHdl m_SdoComConHdl;
|
|
unsigned int m_uiIndex;
|
|
unsigned int m_uiSubindex;
|
|
void *m_pData;
|
|
unsigned int m_uiDataSize;
|
|
unsigned int m_uiTimeout; // not used in this version
|
|
tEplSdoAccessType m_SdoAccessType;
|
|
tEplSdoFinishedCb m_pfnSdoFinishedCb;
|
|
void *m_pUserArg; // user definable argument pointer
|
|
|
|
} tEplSdoComTransParamByIndex;
|
|
|
|
//---------------------------------------------------------------------------
|
|
// function prototypes
|
|
//---------------------------------------------------------------------------
|
|
|
|
#endif // #ifndef _EPLSDO_H_
|