diff options
Diffstat (limited to 'drivers/staging/epl/EplSdo.h')
-rw-r--r-- | drivers/staging/epl/EplSdo.h | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/drivers/staging/epl/EplSdo.h b/drivers/staging/epl/EplSdo.h new file mode 100644 index 00000000000..1cb3f2de4a3 --- /dev/null +++ b/drivers/staging/epl/EplSdo.h @@ -0,0 +1,245 @@ +/**************************************************************************** + + (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_ |