• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2 
3   (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4       www.systec-electronic.com
5 
6   Project:      openPOWERLINK
7 
8   Description:  include file for api function of the sdo module
9 
10   License:
11 
12     Redistribution and use in source and binary forms, with or without
13     modification, are permitted provided that the following conditions
14     are met:
15 
16     1. Redistributions of source code must retain the above copyright
17        notice, this list of conditions and the following disclaimer.
18 
19     2. Redistributions in binary form must reproduce the above copyright
20        notice, this list of conditions and the following disclaimer in the
21        documentation and/or other materials provided with the distribution.
22 
23     3. Neither the name of SYSTEC electronic GmbH nor the names of its
24        contributors may be used to endorse or promote products derived
25        from this software without prior written permission. For written
26        permission, please contact info@systec-electronic.com.
27 
28     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
31     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32     COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
38     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39     POSSIBILITY OF SUCH DAMAGE.
40 
41     Severability Clause:
42 
43         If a provision of this License is or becomes illegal, invalid or
44         unenforceable in any jurisdiction, that shall not affect:
45         1. the validity or enforceability in that jurisdiction of any other
46            provision of this License; or
47         2. the validity or enforceability in other jurisdictions of that or
48            any other provision of this License.
49 
50   -------------------------------------------------------------------------
51 
52                 $RCSfile: EplSdo.h,v $
53 
54                 $Author: D.Krueger $
55 
56                 $Revision: 1.6 $  $Date: 2008/04/17 21:36:32 $
57 
58                 $State: Exp $
59 
60                 Build Environment:
61                     GCC V3.4
62 
63   -------------------------------------------------------------------------
64 
65   Revision History:
66 
67  2006/06/26 k.t.:   start of the implementation
68 
69 ****************************************************************************/
70 
71 #include "EplInc.h"
72 #include "EplFrame.h"
73 #include "EplSdoAc.h"
74 
75 #ifndef _EPLSDO_H_
76 #define _EPLSDO_H_
77 
78 //---------------------------------------------------------------------------
79 // const defines
80 //---------------------------------------------------------------------------
81 // global defines
82 #ifndef EPL_SDO_MAX_PAYLOAD
83 #define EPL_SDO_MAX_PAYLOAD     256
84 #endif
85 
86 // handle between Protocol Abstraction Layer and asynchronous SDO Sequence Layer
87 #define EPL_SDO_UDP_HANDLE      0x8000
88 #define EPL_SDO_ASND_HANDLE     0x4000
89 #define EPL_SDO_ASY_HANDLE_MASK 0xC000
90 #define EPL_SDO_ASY_INVALID_HDL 0x3FFF
91 
92 // handle between  SDO Sequence Layer and sdo command layer
93 #define EPL_SDO_ASY_HANDLE      0x8000
94 #define EPL_SDO_PDO_HANDLE      0x4000
95 #define EPL_SDO_SEQ_HANDLE_MASK 0xC000
96 #define EPL_SDO_SEQ_INVALID_HDL 0x3FFF
97 
98 #define EPL_ASND_HEADER_SIZE        4
99 //#define EPL_SEQ_HEADER_SIZE         4
100 #define EPL_ETHERNET_HEADER_SIZE    14
101 
102 #define EPL_SEQ_NUM_MASK            0xFC
103 
104 // size for send buffer and history
105 #define EPL_MAX_SDO_FRAME_SIZE      EPL_C_IP_MIN_MTU
106 // size for receive frame
107 // -> needed because SND-Kit sends up to 1518 Byte
108 //    without Sdo-Command: Maximum Segment Size
109 #define EPL_MAX_SDO_REC_FRAME_SIZE  EPL_C_IP_MAX_MTU
110 
111 //---------------------------------------------------------------------------
112 // typedef
113 //---------------------------------------------------------------------------
114 // handle between Protocol Abstraction Layer and asynchronuus SDO Sequence Layer
115 typedef unsigned int tEplSdoConHdl;
116 
117 // callback function pointer for Protocol Abstraction Layer to call
118 // asynchronuus SDO Sequence Layer
119 typedef tEplKernel(PUBLIC * tEplSequLayerReceiveCb) (tEplSdoConHdl ConHdl_p,
120 						     tEplAsySdoSeq *
121 						     pSdoSeqData_p,
122 						     unsigned int uiDataSize_p);
123 
124 // handle between asynchronuus SDO Sequence Layer and SDO Command layer
125 typedef unsigned int tEplSdoSeqConHdl;
126 
127 // callback function pointer for asynchronuus SDO Sequence Layer to call
128 // SDO Command layer for received data
129 typedef tEplKernel(PUBLIC *
130 		   tEplSdoComReceiveCb) (tEplSdoSeqConHdl SdoSeqConHdl_p,
131 					 tEplAsySdoCom * pAsySdoCom_p,
132 					 unsigned int uiDataSize_p);
133 
134 // status of connection
135 typedef enum {
136 	kAsySdoConStateConnected = 0x00,
137 	kAsySdoConStateInitError = 0x01,
138 	kAsySdoConStateConClosed = 0x02,
139 	kAsySdoConStateAckReceived = 0x03,
140 	kAsySdoConStateFrameSended = 0x04,
141 	kAsySdoConStateTimeout = 0x05
142 } tEplAsySdoConState;
143 
144 // callback function pointer for asynchronuus SDO Sequence Layer to call
145 // SDO Command layer for connection status
146 typedef tEplKernel(PUBLIC * tEplSdoComConCb) (tEplSdoSeqConHdl SdoSeqConHdl_p,
147 					      tEplAsySdoConState
148 					      AsySdoConState_p);
149 
150 // handle between  SDO Command layer and application
151 typedef unsigned int tEplSdoComConHdl;
152 
153 // status of connection
154 typedef enum {
155 	kEplSdoComTransferNotActive = 0x00,
156 	kEplSdoComTransferRunning = 0x01,
157 	kEplSdoComTransferTxAborted = 0x02,
158 	kEplSdoComTransferRxAborted = 0x03,
159 	kEplSdoComTransferFinished = 0x04,
160 	kEplSdoComTransferLowerLayerAbort = 0x05
161 } tEplSdoComConState;
162 
163 // SDO Services and Command-Ids from DS 1.0.0 p.152
164 typedef enum {
165 	kEplSdoServiceNIL = 0x00,
166 	kEplSdoServiceWriteByIndex = 0x01,
167 	kEplSdoServiceReadByIndex = 0x02
168 	    //--------------------------------
169 	    // the following services are optional and
170 	    // not supported now
171 /*
172     kEplSdoServiceWriteAllByIndex   = 0x03,
173     kEplSdoServiceReadAllByIndex    = 0x04,
174     kEplSdoServiceWriteByName       = 0x05,
175     kEplSdoServiceReadByName        = 0x06,
176 
177     kEplSdoServiceFileWrite         = 0x20,
178     kEplSdoServiceFileRead          = 0x21,
179 
180     kEplSdoServiceWriteMultiByIndex = 0x31,
181     kEplSdoServiceReadMultiByIndex  = 0x32,
182 
183     kEplSdoServiceMaxSegSize        = 0x70
184 
185     // 0x80 - 0xFF manufacturer specific
186 
187  */
188 } tEplSdoServiceType;
189 
190 // describes if read or write access
191 typedef enum {
192 	kEplSdoAccessTypeRead = 0x00,
193 	kEplSdoAccessTypeWrite = 0x01
194 } tEplSdoAccessType;
195 
196 typedef enum {
197 	kEplSdoTypeAuto = 0x00,
198 	kEplSdoTypeUdp = 0x01,
199 	kEplSdoTypeAsnd = 0x02,
200 	kEplSdoTypePdo = 0x03
201 } tEplSdoType;
202 
203 typedef enum {
204 	kEplSdoTransAuto = 0x00,
205 	kEplSdoTransExpedited = 0x01,
206 	kEplSdoTransSegmented = 0x02
207 } tEplSdoTransType;
208 
209 // structure to inform application about finish of SDO transfer
210 typedef struct {
211 	tEplSdoComConHdl m_SdoComConHdl;
212 	tEplSdoComConState m_SdoComConState;
213 	DWORD m_dwAbortCode;
214 	tEplSdoAccessType m_SdoAccessType;
215 	unsigned int m_uiNodeId;	// NodeId of the target
216 	unsigned int m_uiTargetIndex;	// index which was accessed
217 	unsigned int m_uiTargetSubIndex;	// subindex which was accessed
218 	unsigned int m_uiTransferredByte;	// number of bytes transferred
219 	void *m_pUserArg;	// user definable argument pointer
220 
221 } tEplSdoComFinished;
222 
223 // callback function pointer to inform application about connection
224 typedef tEplKernel(PUBLIC * tEplSdoFinishedCb) (tEplSdoComFinished *
225 						pSdoComFinished_p);
226 
227 // structure to init SDO transfer to Read or Write by Index
228 typedef struct {
229 	tEplSdoComConHdl m_SdoComConHdl;
230 	unsigned int m_uiIndex;
231 	unsigned int m_uiSubindex;
232 	void *m_pData;
233 	unsigned int m_uiDataSize;
234 	unsigned int m_uiTimeout;	// not used in this version
235 	tEplSdoAccessType m_SdoAccessType;
236 	tEplSdoFinishedCb m_pfnSdoFinishedCb;
237 	void *m_pUserArg;	// user definable argument pointer
238 
239 } tEplSdoComTransParamByIndex;
240 
241 //---------------------------------------------------------------------------
242 // function prototypes
243 //---------------------------------------------------------------------------
244 
245 #endif // #ifndef _EPLSDO_H_
246