versadac  1
versadac - Scalable Recorder Firmware
drep.h
1 /*---------------------------------------------------------------------------*/
2 /* Copyright (C) 2006 Woodhead Software & Electonics. All rights reserved. */
3 /*---------------------------------------------------------------------------*/
4 /* This program is protected by international copyright. */
5 /* */
6 /* The use of this software including but not limited to its Source Code */
7 /* is subject to restrictions as agreed in the license agreement between */
8 /* you and Woodhead. */
9 /* Copying or distribution is not allowed unless expressly permitted */
10 /* according to your license agreement with Woodhead. */
11 /*---------------------------------------------------------------------------*/
12 /* */
13 /* Project : STACK PROFINET Controller */
14 /* Component : DREP managment */
15 /* $Workfile:: drep.h $*/
16 /* $Revision:: 12 $*/
17 /* $Date:: 28/02/12 16:40 $*/
18 /* */
19 /*---------------------------------------------------------------------------*/
20 /* */
21 /* D e s c r i p t i o n : */
22 /* Access API to AREP array. Internal used */
23 /* */
24 /*---------------------------------------------------------------------------*/
25 #ifndef _DREP_H
26 #define _DREP_H
27 
28 #include "os_pck.h"
29 
30 typedef struct _DCP_XCR{
31  LPST_CBF cbMcrDcp; /* Pointer on timer scheduled function */
32  LPST_CBF cbUcrDcp; /* Pointer on timer scheduled function */
33  APP_DWORD dwMcrXid; /* Received frame Xid */
34  APP_DWORD dwUcrXid; /* Received frame Xid */
35  APP_WORD wClientHoldTile;/* define in nomre: 4.3.2.1.2 Intervals of the receiver, refer to :Table 11 — Reaction time for an IO device */
36  APP_BYTE SrcMac[MAC_ADDRESS_LEN]; /* Mac Address to respond (sender address in the received frame) */
37  APP_BYTE UCRSrcMac[MAC_ADDRESS_LEN];
38 }PACK_ALIGNEMENT(ST_DCP_XCR);
39 
40 typedef struct _DREP_DCP_FRAME{
41  APP_LPBYTE pbyDcpBuffer;
42  APP_LPBYTE pbyDcpCurrent;
43  APP_WORD wDcpDataLen;
44  ST_DCP_XCR XCR_DCP;
45  APP_WORD wDcpmcrIdentReady;
46 }PACK_ALIGNEMENT(ST_DREP_DCP_FRAME), APP_FAR * LPST_DREP_DCP_FRAME;
47 
48 /* RMPM */
49 typedef struct _ST_RMPM
50 {
51  APP_WORD wState;
52  APP_WORD wActive;
53  APP_WORD wCurrentId;
54  APP_WORD wNbSetBlock;
55  APP_BOOL wIpChange;
56  APP_BOOL wNameChange;
57  APP_DWORD dwOldIP; /* Store the old IP when this one has change. use for RPC update open socket*/
58 }PACK_ALIGNEMENT(ST_RMPM), APP_FAR * LPST_RMPM;
59 
60 /* DCP */
61 typedef struct _ST_DCP
62 {
63  APP_WORD wDCPMCRState;
64  APP_WORD wDCPUCRState;
65 }PACK_ALIGNEMENT(ST_DCP), APP_FAR * LPST_DCP;
66 
67 /* DCP */
68 typedef struct _ST_DCP_HELLO
69 {
70 
71  LPST_CBF lpstCbf;
72  APP_WORD wXid;
73  APP_WORD wInterval;
74  APP_WORD wStartDelay;
75  APP_WORD wRetry;
76  APP_BOOL bHelloSupported;
77  APP_BYTE byDeviceInitiative;
78 
79 }PACK_ALIGNEMENT(ST_DCP_HELLO), APP_FAR * LPST_DCP_HELLO;
80 
81 typedef struct _DREP{
82 
83  /*** One hashTabe per DREP ***/
84  LPST_POOL arrayOfstPool_HahTable;/*ST_POOL stHashTable[HASH_SIZE]; */
85 
86  /*** Device information ***/
87  APP_DWORD dwDRContextInd; /* Device Relation Contexte indicateur */
88  APP_WORD wDeviceID;
89  APP_WORD wVendorID;
90 
91  APP_BYTE byDeviceName[NAMELEN+1];
92  APP_BYTE byDeviceType[NAMELEN+1];
93 
94  /*** Profinet variable ***/
95  ST_DCP stDcp;
96  ST_RMPM stRmpm;
97  LPST_POOL lpstPoolAcyc;
98  LPST_POOL lpstPoolDcp;
99 
100  ST_DREP_DCP_FRAME stDcpFrame;
101  ST_DREP_DCP_FRAME stDcpMulticastFrame;
102 
103  ST_IREP stIrep[MAX_INSTANCE_PER_DEVICE];
104 
105  /*** Network informations ***/
106  ST_IPPARAMETER stIpParameters;
107  APP_LPCHAR lpszInterfaceName;
108  APP_LPVOID lpvHandleRead;
109  APP_LPVOID lpvHandleWrite;
110  APP_WORD wPort;
111  APP_BYTE lpbyMacAddr[MAC_ADDRESS_LEN];
112 
113 #ifdef DHCP_ACTIVATE
114  APP_BYTE byDHCPParameter[NAMELEN+1];
115  APP_WORD wDHCPParameterLentgh;
116  APP_WORD wDHCPType;
117 #endif
118 
119  /*** Information ***/
120  APP_WORD wDeviceStarted;
121  APP_BYTE bRmpmHasStart;
122 
123  ST_DCP_HELLO stDcpHello;
124 
125 }PACK_ALIGNEMENT(ST_DREP), APP_FAR * LPST_DREP;
126 
127 #include "os_unpck.h"
128 
129 #define DREP_GET_HASH_TABLE(lpstDrep) ((lpstDrep)->arrayOfstPool_HahTable)
130 
131 
132 
133 
134 /* Stack version definition */
135 #define PN_DEV_VERSION "02.02.02.00"
136 
137 #define SET_DREP_CONTEXT_IND(lpstDrep, dwContextInd) (lpstDrep)->dwDRContextInd = (dwContextInd)
138 #define GET_DREP_CONTEXT_IND(lpstDrep) (lpstDrep)->dwDRContextInd
139 
140 #define SET_DREP_INTERFACE_NAME(a, lpszInterfaceName) (a)->lpszInterfaceName = lpszInterfaceName
141 #define SET_DREP_INTERFACE_PORT(a, wPort) (a)->wPort = wPort
142 
143 #define GET_DREP_INTERFACE_NAME(a) (a)->lpszInterfaceName
144 #define GET_DREP_INTERFACE_PORT(a) (a)->wPort
145 
146 #define GET_DREP_INTERFACE_MAC_ADDRESS(a) (a)->lpbyMacAddr
147 
148 #define DREP_GET_IREP(lpstDrep, lpstIrep, index) lpstIrep = &(lpstDrep->stIrep[index]);
149 
150 #define GET_DREP_RMPM_STATE(a) (a)->stRmpm.wState
151 #define SET_DREP_RMPM_STATE(a,b) (a)->stRmpm.wState = b
152 
153 #define GET_DREP_RMPM_ACTIVE(a) (a)->stRmpm.wActive
154 #define SET_DREP_RMPM_ACTIVE(a,b) (a)->stRmpm.wActive = b
155 #define INC_DREP_RMPM_ACTIVE(a) (a)->stRmpm.wActive++
156 #define DEC_DREP_RMPM_ACTIVE(a) (a)->stRmpm.wActive--
157 
158 #define GET_DREP_RMPM_CURRENT_ID(a) (a)->stRmpm.wCurrentId
159 #define SET_DREP_RMPM_CURRENT_ID(a,b) (a)->stRmpm.wCurrentId = b
160 #define UPDATE_DREP_RMPM_CURRENT_ID(a) ((a)->stRmpm.wCurrentId++)
161 
162 #define GET_DREP_RMPM_NB_SET_BLOCK(a) ((a)->stRmpm.wNbSetBlock )
163 #define INC_DREP_RMPM_NB_SET_BLOCK(a) ((a)->stRmpm.wNbSetBlock++)
164 #define DEC_DREP_RMPM_NB_SET_BLOCK(a) ((a)->stRmpm.wNbSetBlock--)
165 
166 #define SET_DREP_RMPM_OLD_IP(a, b) (((a)->stRmpm.dwOldIP) = b)
167 #define GET_DREP_RMPM_OLD_IP(a) (((a)->stRmpm.dwOldIP))
168 
169 #define GET_DREP_RMPM_IP_CHANGE(a) ((a)->stRmpm.wIpChange)
170 #define SET_DREP_RMPM_IP_CHANGE(a) ((a)->stRmpm.wIpChange = APP_TRUE)
171 #define RESET_DREP_RMPM_IP_CHANGE(a) ((a)->stRmpm.wIpChange = APP_FALSE)
172 
173 #define GET_DREP_RMPM_NAME_CHANGE(a) ((a)->stRmpm.wNameChange)
174 #define SET_DREP_RMPM_NAME_CHANGE(a) ((a)->stRmpm.wNameChange = APP_TRUE)
175 #define RESET_DREP_RMPM_NAME_CHANGE(a) ((a)->stRmpm.wNameChange = APP_FALSE)
176 
177 #define ST_DREP_SIZEOF sizeof(ST_DREP)
178 
179 #define SET_DREP_DEVICEID(a,b) (a)->wDeviceID = b
180 #define GET_DREP_DEVICEID(a) (a)->wDeviceID
181 
182 #define SET_DREP_VENDORID(a,b) (a)->wVendorID = b
183 #define GET_DREP_VENDORID(a) (a)->wVendorID
184 
185 #define SET_DREP_DEVICENAME(a,b) OS_MEMCOPY((a)->byDeviceName,b,OS_STRLEN((APP_LPCHAR)b))
186 /*#define GET_DREP_DEVICENAME(a,b) OS_STRNCPY(b,((a)->byDeviceName), OS_STRLEN( ((a)->byDeviceName)))*/
187 #define GET_DREP_DEVICENAME(a,b) OS_MEMCOPY(b,(a)->byDeviceName,OS_STRLEN( (APP_LPCHAR)(a)->byDeviceName))
188 
189 #define SET_DREP_DEVICETYPE(a,b) OS_MEMCOPY((a)->byDeviceType,b,OS_STRLEN((APP_LPCHAR)b))
190 #define GET_DREP_DEVICETYPE(a,b) OS_MEMCOPY(b,(a)->byDeviceType,OS_STRLEN((APP_LPCHAR)(a)->byDeviceType))
191 
192 #define SET_DREP_DHCP_PARAM_LENGTH(a,b) (a)->wDHCPParameterLentgh = b
193 #define GET_DREP_DHCP_PARAM_LENGTH(a) (a)->wDHCPParameterLentgh
194 
195 #define SET_DREP_DHCP_PARAM(a,b,c) OS_MEMCOPY((a)->byDHCPParameter,b,c)
196 #define GET_DREP_DHCP_PARAM(a,b) OS_MEMCOPY(b,(a)->byDHCPParameter,(a)->wDHCPParameterLentgh)
197 
198 #define GET_DREP_DHCP_TYPE(a) (a)->wDHCPType
199 #define SET_DREP_DHCP_TYPE(a, b) (a)->wDHCPType = b
200 
201 #define SET_DREP_IP(a,b) (a)->stIpParameters.dwIpAddr = b
202 #define GET_DREP_IP(a) (a)->stIpParameters.dwIpAddr
203 
204 #define SET_DREP_SUBNETMASK(a,b) (a)->stIpParameters.dwSubNet = b
205 #define GET_DREP_SUBNETMASK(a) (a)->stIpParameters.dwSubNet
206 
207 #define SET_DREP_GATEWAY(a,b) (a)->stIpParameters.dwGateway = b
208 #define GET_DREP_GATEWAY(a) (a)->stIpParameters.dwGateway
209 
210 #define SET_DREP_IP_MODE(a,b) (a)->stIpParameters.ipMode = b
211 #define GET_DREP_IP_MODE(a) (a)->stIpParameters.ipMode
212 
213 #define SET_DREP_DCPUCR_STATE(a,b) (a)->stDcp.wDCPUCRState = b
214 #define SET_DREP_DCPMCR_STATE(a,b) (a)->stDcp.wDCPMCRState = b
215 #define GET_DREP_DCPUCR_STATE(a) (a)->stDcp.wDCPUCRState
216 #define GET_DREP_DCPMCR_STATE(a) (a)->stDcp.wDCPMCRState
217 
218 
219 
220 #define GET_DREP_DCP_IDENT_READY(a) (a)->stDcpFrame.wDcpmcrIdentReady
221 #define SET_DREP_DCP_IDENT_READY(a,b) (a)->stDcpFrame.wDcpmcrIdentReady = (b)
222 
223 #define GET_DREP_DCP_XCR_MAC(a) (a)->stDcpFrame.XCR_DCP.SrcMac
224 #define GET_DREP_DCP_UCR_MAC(a) (a)->stDcpFrame.XCR_DCP.UCRSrcMac
225 #define GET_DREP_DCP_MCR_XID(a) (a)->stDcpFrame.XCR_DCP.dwMcrXid
226 #define SET_DREP_DCP_MCR_XID(a,b) (a)->stDcpFrame.XCR_DCP.dwMcrXid = b
227 #define GET_DREP_DCP_MCR_CB(a) (a)->stDcpFrame.XCR_DCP.cbMcrDcp
228 #define SET_DREP_DCP_MCR_CB(a,b) (a)->stDcpFrame.XCR_DCP.cbMcrDcp = b
229 #define GET_DREP_DCP_UCR_CB(a) (a)->stDcpFrame.XCR_DCP.cbUcrDcp
230 #define SET_DREP_DCP_UCR_CB(a,b) (a)->stDcpFrame.XCR_DCP.cbUcrDcp = b
231 
232 #define SET_DREP_DCP_UCR_CHF(a,b) (a)->stDcpFrame.XCR_DCP.wClientHoldTile = b
233 #define GET_DREP_DCP_UCR_CHF(a) (a)->stDcpFrame.XCR_DCP.wClientHoldTile
234 
235 
236 #define GET_DREP_DCP_UCR_XID(a) (a)->stDcpFrame.XCR_DCP.dwUcrXid
237 #define SET_DREP_DCP_UCR_XID(a,b) (a)->stDcpFrame.XCR_DCP.dwUcrXid = b
238 
239 #define GET_DREP_IP_PARAM_IP(a) (a)->stIpParameters.dwIpAddr
240 #define GET_DREP_IP_PARAM_MASK(a) (a)->stIpParameters.dwSubNet
241 #define GET_DREP_IP_PARAM_ROUTE(a) (a)->stIpParameters.dwGateway
242 
243 #define SET_DREP_IP_PARAM_IP(a,b) (a)->stIpParameters.dwIpAddr = b;
244 #define SET_DREP_IP_PARAM_MASK(a,b) (a)->stIpParameters.dwSubNet = b;
245 #define SET_DREP_IP_PARAM_ROUTE(a,b) (a)->stIpParameters.dwGateway = b;
246 
247 #define GET_DREP_NAME_PTR(a) (a)->byDeviceName
248 #define GET_DREP_TYPE_PTR(a) (a)->byDeviceType
249 #define GET_DREP_DEV_ID(a) (a)->wDeviceID
250 #define GET_DREP_VENDOR_ID(a) (a)->wVendorID
251 
252 #define DREP_DCP_BUFFER_GET_PTR(lpstDcpBuffer) lpstDcpBuffer->pbyDcpCurrent
253 #define DREP_DCP_BUFFER_GET_LEN(lpstDcpBuffer) lpstDcpBuffer->wDcpDataLen
254 
255 
256 #define GET_DREP_UDPRT_PORT(lpdrep) (PNIO_UDPRT_PORT)
257 
258 #define SET_DREP_DEVICESTARTED(a) (a)->wDeviceStarted = 1
259 #define SET_DREP_DEVICESTOPPED(a) (a)->wDeviceStarted = 0
260 #define GET_DREP_DEVICESTARTED(a) (a)->wDeviceStarted
261 
262 LPST_DREP arepGetDrep(LPST_AREP lpstArep);
263 #define AREP_GET_DREP(lpArep) arepGetDrep(lpArep)
264 
265 
266 #define DREP_GET_HANDLE_WRITE(lpstDrep) (lpstDrep->lpvHandleWrite)
267 #define DREP_GET_HANDLE_READ (lpstDrep) (lpstDrep->lpvHandleRead)
268 
269 
270 APP_WORD Check_Drep_Validity(LPST_DREP lpstDrepToValid, LPST_DREP lpstDrepArrayOfValid);
271 APP_WORD Check_Irep_Validity(LPST_IREP lpstIrepToValid, LPST_DREP lpstDrepArrayOfValid);
272 APP_VOID Init_Drep (LPST_DREP lpstDrep, LPST_POOL lpstAcycPool, LPST_POOL lpstDcpPool);
273 APP_VOID Exit_Drep (LPST_DREP lpstDrep);
274 
275 /* Function prototype */
276 LPST_IREP Get_Free_Instance(LPST_DREP lpPhysicalDev);
277 
278 
279 APP_BOOL DREP_DCP_BUFFER_USED (LPST_DREP_DCP_FRAME lpstDcpBuffer);
280 APP_BOOL DREP_SET_DCP_BUFFER (LPST_DREP_DCP_FRAME lpstDcpBuffer, APP_LPBYTE pbyData, LPST_POOL lpstPoolDcp);
281 APP_BOOL DREP_RELEASE_DCP_BUFFER(LPST_DREP_DCP_FRAME lpstDcpBuffer);
282 APP_BOOL DREP_DCP_BUFFER_SET_PTR(LPST_DREP_DCP_FRAME lpstDcpBuffer, APP_WORD wDataLen);
283 
284 
285 
286 #define SHIFT_DREP_DCP_BUFFER(lpstDcpBuffer, byTmpDrepBuffer, wSizeNewOfBlock) if( (lpstDcpBuffer->wDcpDataLen + wSizeNewOfBlock) < ETHERNET_MAX_FRAME_LENGTH )\
287  {\
288  OS_MEMCOPY(&(byTmpDrepBuffer)[0] , (lpstDcpBuffer)->pbyDcpCurrent, (lpstDcpBuffer)->wDcpDataLen);\
289  OS_MEMCOPY(((lpstDcpBuffer)->pbyDcpCurrent - wSizeNewOfBlock), &(byTmpDrepBuffer)[0] , (lpstDcpBuffer)->wDcpDataLen);\
290  (lpstDcpBuffer)->pbyDcpCurrent = lpstDcpBuffer->pbyDcpBuffer + ETHERNET_MAX_FRAME_LENGTH;\
291  }
292 
293 #define RESTORE_DREP_CURRENT_DCP_BUFFER(lpstDcpBuffer) (lpstDcpBuffer)->pbyDcpCurrent = (lpstDcpBuffer)->pbyDcpBuffer + ETHERNET_MAX_FRAME_LENGTH - (lpstDcpBuffer)->wDcpDataLen ;
294 
295 #define INSERT_EMPTY_BLOCK(lpstDcpBuffer, wSizeNewOfBlock) (lpstDcpBuffer)->wDcpDataLen = (APP_WORD)((lpstDcpBuffer)->wDcpDataLen + (wSizeNewOfBlock))
296 
297 #define SET_PTR_TO_EMPTY_BLOCK(lpstDcpBuffer, wSizeOfOldBlock, wSizeNewOfBlock) (lpstDcpBuffer)->wDcpDataLen = (APP_WORD)((lpstDcpBuffer)->wDcpDataLen - (wSizeNewOfBlock)); \
298  (lpstDcpBuffer)->pbyDcpCurrent = (lpstDcpBuffer)->pbyDcpCurrent + (wSizeOfOldBlock) + (wSizeNewOfBlock);
299 
300 
301 #define DREP_CLEAR_LIST list_destroy
302 
303 APP_BOOL DREP_INIT_STATE(LPST_DREP pDrep);
304 APP_VOID Init_All_Arep_Cmdev_State(LPST_DREP lpstDrep);
305 
306 APP_VOID find_drep_from_rpc_req (LPST_DREP APP_FAR *lpstDrep, APP_LPBYTE lpData,LPST_RPC_REQ lpstRPCReq);
307 #define FIND_DREP_FROM_RPC_REQ(lpstDrep, lpData, lpstRPCReq) find_drep_from_rpc_req( &(lpstDrep), lpData, lpstRPCReq)
308 
309 #define DREP_IS_VALID(a) Check_Drep_Validity(a, gstDrep)
310 #define IREP_IS_VALID(a) Check_Irep_Validity(a, gstDrep)
311 
312 #define DREP_GET_HELLO_IS_SUPPORTED(lpstDrep) (lpstDrep)->stDcpHello.bHelloSupported
313 #define DREP_GET_HELLO_DEVICE_INITIATIVE(lpstDrep) (lpstDrep)->stDcpHello.byDeviceInitiative
314 #define DREP_GET_HELLO_INTERVAL(lpstDrep) (lpstDrep)->stDcpHello.wInterval
315 #define DREP_GET_HELLO_START_DELAY(lpstDrep) (lpstDrep)->stDcpHello.wStartDelay
316 #define DREP_GET_HELLO_RETRY(lpstDrep) (lpstDrep)->stDcpHello.wRetry
317 
318 #define DREP_SET_HELLO_IS_SUPPORTED(lpstDrep, bSupported) (lpstDrep)->stDcpHello.bHelloSupported = bSupported
319 #define DREP_SET_HELLO_DEVICE_INITIATIVE(lpstDrep, wInit) (lpstDrep)->stDcpHello.byDeviceInitiative = wInit
320 #define DREP_SET_HELLO_INTERVAL(lpstDrep, wInter) (lpstDrep)->stDcpHello.wInterval = wInter
321 #define DREP_SET_HELLO_START_DELAY(lpstDrep, wDelay) (lpstDrep)->stDcpHello.wStartDelay = wDelay
322 #define DREP_SET_HELLO_RETRY(lpstDrep, wRetryCount) (lpstDrep)->stDcpHello.wRetry = wRetryCount
323 
324 
325 #define DREP_SET_HELLO_CB(lpstDrep, lpstCbfToAdd) (lpstDrep)->stDcpHello.lpstCbf = lpstCbfToAdd
326 #define DREP_GET_HELLO_CB(lpstDrep) (lpstDrep)->stDcpHello.lpstCbf
327 #define DREP_GET_REQUEST_XID(lpstDrep) (lpstDrep)->stDcpHello.wXid
328 #define DREP_INCREASE_REQUEST_XID(lpstDrep) (lpstDrep)->stDcpHello.wXid = (lpstDrep)->stDcpHello.wXid + 1;
329 
330 #endif
Definition: drep.h:61
Definition: schedule.h:40
Definition: drep.h:30
Definition: drep.h:81
Definition: drep.h:68
Definition: drep.h:40
Definition: drep.h:49