• 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 EPL API layer
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: Epl.h,v $
53 
54                 $Author: D.Krueger $
55 
56                 $Revision: 1.8 $  $Date: 2008/11/17 16:40:39 $
57 
58                 $State: Exp $
59 
60                 Build Environment:
61                     GCC V3.4
62 
63   -------------------------------------------------------------------------
64 
65   Revision History:
66 
67   2006/05/22 d.k.:   start of the implementation, version 1.00
68 
69 ****************************************************************************/
70 
71 #ifndef _EPL_API_H_
72 #define _EPL_API_H_
73 
74 #include "EplInc.h"
75 #include "EplSdo.h"
76 #include "EplObd.h"
77 #include "EplLed.h"
78 #include "EplEvent.h"
79 
80 //---------------------------------------------------------------------------
81 // const defines
82 //---------------------------------------------------------------------------
83 
84 //---------------------------------------------------------------------------
85 // typedef
86 //---------------------------------------------------------------------------
87 
88 typedef struct {
89 	unsigned int m_uiNodeId;
90 	tEplNmtState m_NmtState;
91 	tEplNmtNodeEvent m_NodeEvent;
92 	WORD m_wErrorCode;	// EPL error code if m_NodeEvent == kEplNmtNodeEventError
93 	BOOL m_fMandatory;
94 
95 } tEplApiEventNode;
96 
97 typedef struct {
98 	tEplNmtState m_NmtState;	// local NMT state
99 	tEplNmtBootEvent m_BootEvent;
100 	WORD m_wErrorCode;	// EPL error code if m_BootEvent == kEplNmtBootEventError
101 
102 } tEplApiEventBoot;
103 
104 typedef struct {
105 	tEplLedType m_LedType;	// type of the LED (e.g. Status or Error)
106 	BOOL m_fOn;		// state of the LED (e.g. on or off)
107 
108 } tEplApiEventLed;
109 
110 typedef enum {
111 	kEplApiEventNmtStateChange = 0x10,	// m_NmtStateChange
112 //    kEplApiEventRequestNmt     = 0x11,    // m_bNmtCmd
113 	kEplApiEventCriticalError = 0x12,	// m_InternalError, Stack halted
114 	kEplApiEventWarning = 0x13,	// m_InternalError, Stack running
115 	kEplApiEventNode = 0x20,	// m_Node
116 	kEplApiEventBoot = 0x21,	// m_Boot
117 	kEplApiEventSdo = 0x62,	// m_Sdo
118 	kEplApiEventObdAccess = 0x69,	// m_ObdCbParam
119 	kEplApiEventLed = 0x70,	// m_Led
120 
121 } tEplApiEventType;
122 
123 typedef union {
124 	tEplEventNmtStateChange m_NmtStateChange;
125 	tEplEventError m_InternalError;
126 	tEplSdoComFinished m_Sdo;
127 	tEplObdCbParam m_ObdCbParam;
128 	tEplApiEventNode m_Node;
129 	tEplApiEventBoot m_Boot;
130 	tEplApiEventLed m_Led;
131 
132 } tEplApiEventArg;
133 
134 typedef tEplKernel(PUBLIC ROM * tEplApiCbEvent) (tEplApiEventType EventType_p,	// IN: event type (enum)
135 						 tEplApiEventArg * pEventArg_p,	// IN: event argument (union)
136 						 void GENERIC * pUserArg_p);
137 
138 typedef struct {
139 	unsigned int m_uiSizeOfStruct;
140 	BOOL m_fAsyncOnly;	// do not need to register PRes
141 	unsigned int m_uiNodeId;	// local node ID
142 	BYTE m_abMacAddress[6];	// local MAC address
143 
144 	// 0x1F82: NMT_FeatureFlags_U32
145 	DWORD m_dwFeatureFlags;
146 	// Cycle Length (0x1006: NMT_CycleLen_U32) in [us]
147 	DWORD m_dwCycleLen;	// required for error detection
148 	// 0x1F98: NMT_CycleTiming_REC
149 	// 0x1F98.1: IsochrTxMaxPayload_U16
150 	unsigned int m_uiIsochrTxMaxPayload;	// const
151 	// 0x1F98.2: IsochrRxMaxPayload_U16
152 	unsigned int m_uiIsochrRxMaxPayload;	// const
153 	// 0x1F98.3: PResMaxLatency_U32
154 	DWORD m_dwPresMaxLatency;	// const in [ns], only required for IdentRes
155 	// 0x1F98.4: PReqActPayloadLimit_U16
156 	unsigned int m_uiPreqActPayloadLimit;	// required for initialisation (+28 bytes)
157 	// 0x1F98.5: PResActPayloadLimit_U16
158 	unsigned int m_uiPresActPayloadLimit;	// required for initialisation of Pres frame (+28 bytes)
159 	// 0x1F98.6: ASndMaxLatency_U32
160 	DWORD m_dwAsndMaxLatency;	// const in [ns], only required for IdentRes
161 	// 0x1F98.7: MultiplCycleCnt_U8
162 	unsigned int m_uiMultiplCycleCnt;	// required for error detection
163 	// 0x1F98.8: AsyncMTU_U16
164 	unsigned int m_uiAsyncMtu;	// required to set up max frame size
165 	// 0x1F98.9: Prescaler_U16
166 	unsigned int m_uiPrescaler;	// required for sync
167 	// $$$ Multiplexed Slot
168 
169 	// 0x1C14: DLL_LossOfFrameTolerance_U32 in [ns]
170 	DWORD m_dwLossOfFrameTolerance;
171 
172 	// 0x1F8A: NMT_MNCycleTiming_REC
173 	// 0x1F8A.1: WaitSoCPReq_U32 in [ns]
174 	DWORD m_dwWaitSocPreq;
175 
176 	// 0x1F8A.2: AsyncSlotTimeout_U32 in [ns]
177 	DWORD m_dwAsyncSlotTimeout;
178 
179 	DWORD m_dwDeviceType;	// NMT_DeviceType_U32
180 	DWORD m_dwVendorId;	// NMT_IdentityObject_REC.VendorId_U32
181 	DWORD m_dwProductCode;	// NMT_IdentityObject_REC.ProductCode_U32
182 	DWORD m_dwRevisionNumber;	// NMT_IdentityObject_REC.RevisionNo_U32
183 	DWORD m_dwSerialNumber;	// NMT_IdentityObject_REC.SerialNo_U32
184 	QWORD m_qwVendorSpecificExt1;
185 	DWORD m_dwVerifyConfigurationDate;	// CFM_VerifyConfiguration_REC.ConfDate_U32
186 	DWORD m_dwVerifyConfigurationTime;	// CFM_VerifyConfiguration_REC.ConfTime_U32
187 	DWORD m_dwApplicationSwDate;	// PDL_LocVerApplSw_REC.ApplSwDate_U32 on programmable device or date portion of NMT_ManufactSwVers_VS on non-programmable device
188 	DWORD m_dwApplicationSwTime;	// PDL_LocVerApplSw_REC.ApplSwTime_U32 on programmable device or time portion of NMT_ManufactSwVers_VS on non-programmable device
189 	DWORD m_dwIpAddress;
190 	DWORD m_dwSubnetMask;
191 	DWORD m_dwDefaultGateway;
192 	BYTE m_sHostname[32];
193 	BYTE m_abVendorSpecificExt2[48];
194 
195 	char *m_pszDevName;	// NMT_ManufactDevName_VS (0x1008/0 local OD)
196 	char *m_pszHwVersion;	// NMT_ManufactHwVers_VS  (0x1009/0 local OD)
197 	char *m_pszSwVersion;	// NMT_ManufactSwVers_VS  (0x100A/0 local OD)
198 
199 	tEplApiCbEvent m_pfnCbEvent;
200 	void *m_pEventUserArg;
201 	tEplSyncCb m_pfnCbSync;
202 
203 } tEplApiInitParam;
204 
205 typedef struct {
206 	void *m_pImage;
207 	unsigned int m_uiSize;
208 
209 } tEplApiProcessImage;
210 
211 //---------------------------------------------------------------------------
212 // function prototypes
213 //---------------------------------------------------------------------------
214 
215 tEplKernel PUBLIC EplApiInitialize(tEplApiInitParam * pInitParam_p);
216 
217 tEplKernel PUBLIC EplApiShutdown(void);
218 
219 tEplKernel PUBLIC EplApiReadObject(tEplSdoComConHdl * pSdoComConHdl_p,
220 				   unsigned int uiNodeId_p,
221 				   unsigned int uiIndex_p,
222 				   unsigned int uiSubindex_p,
223 				   void *pDstData_le_p,
224 				   unsigned int *puiSize_p,
225 				   tEplSdoType SdoType_p, void *pUserArg_p);
226 
227 tEplKernel PUBLIC EplApiWriteObject(tEplSdoComConHdl * pSdoComConHdl_p,
228 				    unsigned int uiNodeId_p,
229 				    unsigned int uiIndex_p,
230 				    unsigned int uiSubindex_p,
231 				    void *pSrcData_le_p,
232 				    unsigned int uiSize_p,
233 				    tEplSdoType SdoType_p, void *pUserArg_p);
234 
235 tEplKernel PUBLIC EplApiFreeSdoChannel(tEplSdoComConHdl SdoComConHdl_p);
236 
237 tEplKernel PUBLIC EplApiReadLocalObject(unsigned int uiIndex_p,
238 					unsigned int uiSubindex_p,
239 					void *pDstData_p,
240 					unsigned int *puiSize_p);
241 
242 tEplKernel PUBLIC EplApiWriteLocalObject(unsigned int uiIndex_p,
243 					 unsigned int uiSubindex_p,
244 					 void *pSrcData_p,
245 					 unsigned int uiSize_p);
246 
247 tEplKernel PUBLIC EplApiCbObdAccess(tEplObdCbParam MEM * pParam_p);
248 
249 tEplKernel PUBLIC EplApiLinkObject(unsigned int uiObjIndex_p,
250 				   void *pVar_p,
251 				   unsigned int *puiVarEntries_p,
252 				   tEplObdSize * pEntrySize_p,
253 				   unsigned int uiFirstSubindex_p);
254 
255 tEplKernel PUBLIC EplApiExecNmtCommand(tEplNmtEvent NmtEvent_p);
256 
257 tEplKernel PUBLIC EplApiProcess(void);
258 
259 #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
260 tEplKernel PUBLIC EplApiMnTriggerStateChange(unsigned int uiNodeId_p,
261 					     tEplNmtNodeCommand NodeCommand_p);
262 #endif
263 
264 tEplKernel PUBLIC EplApiGetIdentResponse(unsigned int uiNodeId_p,
265 					 tEplIdentResponse **
266 					 ppIdentResponse_p);
267 
268 // functions for process image will be implemented in separate file
269 tEplKernel PUBLIC EplApiProcessImageSetup(void);
270 tEplKernel PUBLIC EplApiProcessImageExchangeIn(tEplApiProcessImage * pPI_p);
271 tEplKernel PUBLIC EplApiProcessImageExchangeOut(tEplApiProcessImage * pPI_p);
272 
273 #endif // #ifndef _EPL_API_H_
274