1 /*=============================================================================|
2 | PROJECT SNAP7 1.4.1 |
3 |==============================================================================|
4 | Copyright (C) 2013, 2015 Davide Nardella |
5 | All rights reserved. |
6 |==============================================================================|
7 | SNAP7 is free software: you can redistribute it and/or modify |
8 | it under the terms of the Lesser GNU General Public License as published by |
9 | the Free Software Foundation, either version 3 of the License, or |
10 | (at your option) any later version. |
11 | |
12 | It means that you can distribute your commercial software linked with |
13 | SNAP7 without the requirement to distribute the source code of your |
14 | application and without the requirement that your application be itself |
15 | distributed under LGPL. |
16 | |
17 | SNAP7 is distributed in the hope that it will be useful, |
18 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
20 | Lesser GNU General Public License for more details. |
21 | |
22 | You should have received a copy of the GNU General Public License and a |
23 | copy of Lesser GNU General Public License along with Snap7. |
24 | If not, see http://www.gnu.org/licenses/ |
25 |=============================================================================*/
26 #include "snap7_libmain.h"
27
28 #ifndef OS_WINDOWS
29 void libinit(void) __attribute__((constructor));
30 void libdone(void) __attribute__((destructor));
31 #endif
32
33 static bool libresult = true;
34
libinit(void)35 void libinit(void)
36 {
37 // in future expansions here can be inserted some initialization code
38 libresult=true;
39 }
40
libdone(void)41 void libdone(void)
42 {
43 // in future expansions here can be inserted some destruction code
44 }
45
46 #ifdef OS_WINDOWS
DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)47 BOOL APIENTRY DllMain (HINSTANCE hInst,
48 DWORD reason,
49 LPVOID reserved)
50 {
51 switch (reason)
52 {
53 case DLL_PROCESS_ATTACH:
54 libinit();
55 break;
56 case DLL_PROCESS_DETACH:
57 libdone();
58 break;
59 case DLL_THREAD_ATTACH:
60 break;
61 case DLL_THREAD_DETACH:
62 break;
63 }
64 return libresult;
65 }
66 #endif
67
68 //***************************************************************************
69 // CLIENT
70 //***************************************************************************
Cli_Create()71 S7Object S7API Cli_Create()
72 {
73 return S7Object(new TSnap7Client());
74 }
75 //---------------------------------------------------------------------------
Cli_Destroy(S7Object & Client)76 void S7API Cli_Destroy(S7Object &Client)
77 {
78 if (Client)
79 {
80 delete PSnap7Client(Client);
81 Client=0;
82 }
83 }
84 //---------------------------------------------------------------------------
Cli_SetConnectionParams(S7Object Client,const char * Address,word LocalTSAP,word RemoteTSAP)85 int S7API Cli_SetConnectionParams(S7Object Client, const char *Address, word LocalTSAP, word RemoteTSAP)
86 {
87 if (Client)
88 {
89 PSnap7Client(Client)->SetConnectionParams(Address, LocalTSAP, RemoteTSAP);
90 return 0;
91 }
92 else
93 return errLibInvalidObject;
94 }
95 //---------------------------------------------------------------------------
Cli_SetConnectionType(S7Object Client,word ConnectionType)96 int S7API Cli_SetConnectionType(S7Object Client, word ConnectionType)
97 {
98 if (Client)
99 {
100 PSnap7Client(Client)->SetConnectionType(ConnectionType);
101 return 0;
102 }
103 else
104 return errLibInvalidObject;
105 }
106 //---------------------------------------------------------------------------
Cli_ConnectTo(S7Object Client,const char * Address,int Rack,int Slot)107 int S7API Cli_ConnectTo(S7Object Client, const char *Address, int Rack, int Slot)
108 {
109 if (Client)
110 return PSnap7Client(Client)->ConnectTo(Address, Rack, Slot);
111 else
112 return errLibInvalidObject;
113 }
114 //---------------------------------------------------------------------------
Cli_Connect(S7Object Client)115 int S7API Cli_Connect(S7Object Client)
116 {
117 if (Client)
118 return PSnap7Client(Client)->Connect();
119 else
120 return errLibInvalidObject;
121 }
122 //---------------------------------------------------------------------------
Cli_Disconnect(S7Object Client)123 int S7API Cli_Disconnect(S7Object Client)
124 {
125 if (Client)
126 return PSnap7Client(Client)->Disconnect();
127 else
128 return errLibInvalidObject;
129 }
130 //---------------------------------------------------------------------------
Cli_GetParam(S7Object Client,int ParamNumber,void * pValue)131 int S7API Cli_GetParam(S7Object Client, int ParamNumber, void *pValue)
132 {
133 if (Client)
134 return PSnap7Client(Client)->GetParam(ParamNumber, pValue);
135 else
136 return errLibInvalidObject;
137 }
138 //---------------------------------------------------------------------------
Cli_SetParam(S7Object Client,int ParamNumber,void * pValue)139 int S7API Cli_SetParam(S7Object Client, int ParamNumber, void *pValue)
140 {
141 if (Client)
142 return PSnap7Client(Client)->SetParam(ParamNumber, pValue);
143 else
144 return errLibInvalidObject;
145 }
146 //---------------------------------------------------------------------------
Cli_SetAsCallback(S7Object Client,pfn_CliCompletion pCompletion,void * usrPtr)147 int S7API Cli_SetAsCallback(S7Object Client, pfn_CliCompletion pCompletion, void *usrPtr)
148 {
149 if (Client)
150 return PSnap7Client(Client)->SetAsCallback(pCompletion, usrPtr);
151 else
152 return errLibInvalidObject;
153 }
154 //---------------------------------------------------------------------------
Cli_ReadArea(S7Object Client,int Area,int DBNumber,int Start,int Amount,int WordLen,void * pUsrData)155 int S7API Cli_ReadArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
156 {
157 if (Client)
158 return PSnap7Client(Client)->ReadArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
159 else
160 return errLibInvalidObject;
161 }
162 //---------------------------------------------------------------------------
Cli_WriteArea(S7Object Client,int Area,int DBNumber,int Start,int Amount,int WordLen,void * pUsrData)163 int S7API Cli_WriteArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
164 {
165 if (Client)
166 return PSnap7Client(Client)->WriteArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
167 else
168 return errLibInvalidObject;
169 }
170 //---------------------------------------------------------------------------
Cli_ReadMultiVars(S7Object Client,PS7DataItem Item,int ItemsCount)171 int S7API Cli_ReadMultiVars(S7Object Client, PS7DataItem Item, int ItemsCount)
172 {
173 if (Client)
174 return PSnap7Client(Client)->ReadMultiVars(Item, ItemsCount);
175 else
176 return errLibInvalidObject;
177 }
178 //---------------------------------------------------------------------------
Cli_WriteMultiVars(S7Object Client,PS7DataItem Item,int ItemsCount)179 int S7API Cli_WriteMultiVars(S7Object Client, PS7DataItem Item, int ItemsCount)
180 {
181 if (Client)
182 return PSnap7Client(Client)->WriteMultiVars(Item, ItemsCount);
183 else
184 return errLibInvalidObject;
185 }
186 //---------------------------------------------------------------------------
Cli_DBRead(S7Object Client,int DBNumber,int Start,int Size,void * pUsrData)187 int S7API Cli_DBRead(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
188 {
189 if (Client)
190 return PSnap7Client(Client)->DBRead(DBNumber, Start, Size, pUsrData);
191 else
192 return errLibInvalidObject;
193 }
194 //---------------------------------------------------------------------------
Cli_DBWrite(S7Object Client,int DBNumber,int Start,int Size,void * pUsrData)195 int S7API Cli_DBWrite(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
196 {
197 if (Client)
198 return PSnap7Client(Client)->DBWrite(DBNumber, Start, Size, pUsrData);
199 else
200 return errLibInvalidObject;
201 }
202 //---------------------------------------------------------------------------
Cli_MBRead(S7Object Client,int Start,int Size,void * pUsrData)203 int S7API Cli_MBRead(S7Object Client, int Start, int Size, void *pUsrData)
204 {
205 if (Client)
206 return PSnap7Client(Client)->MBRead(Start, Size, pUsrData);
207 else
208 return errLibInvalidObject;
209 }
210 //---------------------------------------------------------------------------
Cli_MBWrite(S7Object Client,int Start,int Size,void * pUsrData)211 int S7API Cli_MBWrite(S7Object Client, int Start, int Size, void *pUsrData)
212 {
213 if (Client)
214 return PSnap7Client(Client)->MBWrite(Start, Size, pUsrData);
215 else
216 return errLibInvalidObject;
217 }
218 //---------------------------------------------------------------------------
Cli_EBRead(S7Object Client,int Start,int Size,void * pUsrData)219 int S7API Cli_EBRead(S7Object Client, int Start, int Size, void *pUsrData)
220 {
221 if (Client)
222 return PSnap7Client(Client)->EBRead(Start, Size, pUsrData);
223 else
224 return errLibInvalidObject;
225 }
226 //---------------------------------------------------------------------------
Cli_EBWrite(S7Object Client,int Start,int Size,void * pUsrData)227 int S7API Cli_EBWrite(S7Object Client, int Start, int Size, void *pUsrData)
228 {
229 if (Client)
230 return PSnap7Client(Client)->EBWrite(Start, Size, pUsrData);
231 else
232 return errLibInvalidObject;
233 }
234 //---------------------------------------------------------------------------
Cli_ABRead(S7Object Client,int Start,int Size,void * pUsrData)235 int S7API Cli_ABRead(S7Object Client, int Start, int Size, void *pUsrData)
236 {
237 if (Client)
238 return PSnap7Client(Client)->ABRead(Start, Size, pUsrData);
239 else
240 return errLibInvalidObject;
241 }
242 //---------------------------------------------------------------------------
Cli_ABWrite(S7Object Client,int Start,int Size,void * pUsrData)243 int S7API Cli_ABWrite(S7Object Client, int Start, int Size, void *pUsrData)
244 {
245 if (Client)
246 return PSnap7Client(Client)->ABWrite(Start, Size, pUsrData);
247 else
248 return errLibInvalidObject;
249 }
250 //---------------------------------------------------------------------------
Cli_TMRead(S7Object Client,int Start,int Amount,void * pUsrData)251 int S7API Cli_TMRead(S7Object Client, int Start, int Amount, void *pUsrData)
252 {
253 if (Client)
254 return PSnap7Client(Client)->TMRead(Start, Amount, pUsrData);
255 else
256 return errLibInvalidObject;
257 }
258 //---------------------------------------------------------------------------
Cli_TMWrite(S7Object Client,int Start,int Amount,void * pUsrData)259 int S7API Cli_TMWrite(S7Object Client, int Start, int Amount, void *pUsrData)
260 {
261 if (Client)
262 return PSnap7Client(Client)->TMWrite(Start, Amount, pUsrData);
263 else
264 return errLibInvalidObject;
265 }
266 //---------------------------------------------------------------------------
Cli_CTRead(S7Object Client,int Start,int Amount,void * pUsrData)267 int S7API Cli_CTRead(S7Object Client, int Start, int Amount, void *pUsrData)
268 {
269 if (Client)
270 return PSnap7Client(Client)->CTRead(Start, Amount, pUsrData);
271 else
272 return errLibInvalidObject;
273 }
274 //---------------------------------------------------------------------------
Cli_CTWrite(S7Object Client,int Start,int Amount,void * pUsrData)275 int S7API Cli_CTWrite(S7Object Client, int Start, int Amount, void *pUsrData)
276 {
277 if (Client)
278 return PSnap7Client(Client)->CTWrite(Start, Amount, pUsrData);
279 else
280 return errLibInvalidObject;
281 }
282 //---------------------------------------------------------------------------
Cli_ListBlocks(S7Object Client,TS7BlocksList * pUsrData)283 int S7API Cli_ListBlocks(S7Object Client, TS7BlocksList *pUsrData)
284 {
285 if (Client)
286 return PSnap7Client(Client)->ListBlocks(pUsrData);
287 else
288 return errLibInvalidObject;
289 }
290 //---------------------------------------------------------------------------
Cli_GetAgBlockInfo(S7Object Client,int BlockType,int BlockNum,TS7BlockInfo * pUsrData)291 int S7API Cli_GetAgBlockInfo(S7Object Client, int BlockType, int BlockNum, TS7BlockInfo *pUsrData)
292 {
293 if (Client)
294 return PSnap7Client(Client)->GetAgBlockInfo(BlockType, BlockNum, pUsrData);
295 else
296 return errLibInvalidObject;
297 }
298 //---------------------------------------------------------------------------
Cli_GetPgBlockInfo(S7Object Client,void * pBlock,TS7BlockInfo * pUsrData,int Size)299 int S7API Cli_GetPgBlockInfo(S7Object Client, void *pBlock, TS7BlockInfo *pUsrData, int Size)
300 {
301 if (Client)
302 return PSnap7Client(Client)->GetPgBlockInfo(pBlock, pUsrData, Size);
303 else
304 return errLibInvalidObject;
305 }
306 //---------------------------------------------------------------------------
Cli_ListBlocksOfType(S7Object Client,int BlockType,TS7BlocksOfType * pUsrData,int & ItemsCount)307 int S7API Cli_ListBlocksOfType(S7Object Client, int BlockType, TS7BlocksOfType *pUsrData, int &ItemsCount)
308 {
309 if (Client)
310 return PSnap7Client(Client)->ListBlocksOfType(BlockType, pUsrData, ItemsCount);
311 else
312 return errLibInvalidObject;
313 }
314 //---------------------------------------------------------------------------
Cli_Upload(S7Object Client,int BlockType,int BlockNum,void * pUsrData,int & Size)315 int S7API Cli_Upload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
316 {
317 if (Client)
318 return PSnap7Client(Client)->Upload(BlockType, BlockNum, pUsrData, Size);
319 else
320 return errLibInvalidObject;
321 }
322 //---------------------------------------------------------------------------
Cli_FullUpload(S7Object Client,int BlockType,int BlockNum,void * pUsrData,int & Size)323 int S7API Cli_FullUpload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
324 {
325 if (Client)
326 return PSnap7Client(Client)->FullUpload(BlockType, BlockNum, pUsrData, Size);
327 else
328 return errLibInvalidObject;
329 }
330 //---------------------------------------------------------------------------
Cli_Download(S7Object Client,int BlockNum,void * pUsrData,int Size)331 int S7API Cli_Download(S7Object Client, int BlockNum, void *pUsrData, int Size)
332 {
333 if (Client)
334 return PSnap7Client(Client)->Download(BlockNum, pUsrData, Size);
335 else
336 return errLibInvalidObject;
337 }
338 //---------------------------------------------------------------------------
Cli_Delete(S7Object Client,int BlockType,int BlockNum)339 int S7API Cli_Delete(S7Object Client, int BlockType, int BlockNum)
340 {
341 if (Client)
342 return PSnap7Client(Client)->Delete(BlockType, BlockNum);
343 else
344 return errLibInvalidObject;
345 }
346 //---------------------------------------------------------------------------
Cli_DBGet(S7Object Client,int DBNumber,void * pUsrData,int & Size)347 int S7API Cli_DBGet(S7Object Client, int DBNumber, void *pUsrData, int &Size)
348 {
349 if (Client)
350 return PSnap7Client(Client)->DBGet(DBNumber, pUsrData, Size);
351 else
352 return errLibInvalidObject;
353 }
354 //---------------------------------------------------------------------------
Cli_DBFill(S7Object Client,int DBNumber,int FillChar)355 int S7API Cli_DBFill(S7Object Client, int DBNumber, int FillChar)
356 {
357 if (Client)
358 return PSnap7Client(Client)->DBFill(DBNumber, FillChar);
359 else
360 return errLibInvalidObject;
361 }
362 //---------------------------------------------------------------------------
Cli_GetPlcDateTime(S7Object Client,tm & DateTime)363 int S7API Cli_GetPlcDateTime(S7Object Client, tm &DateTime)
364 {
365 if (Client)
366 return PSnap7Client(Client)->GetPlcDateTime(DateTime);
367 else
368 return errLibInvalidObject;
369 }
370 //---------------------------------------------------------------------------
Cli_SetPlcDateTime(S7Object Client,tm * DateTime)371 int S7API Cli_SetPlcDateTime(S7Object Client, tm *DateTime)
372 {
373 if (Client)
374 return PSnap7Client(Client)->SetPlcDateTime(DateTime);
375 else
376 return errLibInvalidObject;
377 }
378 //---------------------------------------------------------------------------
Cli_SetPlcSystemDateTime(S7Object Client)379 int S7API Cli_SetPlcSystemDateTime(S7Object Client)
380 {
381 if (Client)
382 return PSnap7Client(Client)->SetPlcSystemDateTime();
383 else
384 return errLibInvalidObject;
385 }
386 //---------------------------------------------------------------------------
Cli_GetOrderCode(S7Object Client,TS7OrderCode * pUsrData)387 int S7API Cli_GetOrderCode(S7Object Client, TS7OrderCode *pUsrData)
388 {
389 if (Client)
390 return PSnap7Client(Client)->GetOrderCode(pUsrData);
391 else
392 return errLibInvalidObject;
393 }
394 //---------------------------------------------------------------------------
Cli_GetCpuInfo(S7Object Client,TS7CpuInfo * pUsrData)395 int S7API Cli_GetCpuInfo(S7Object Client, TS7CpuInfo *pUsrData)
396 {
397 if (Client)
398 return PSnap7Client(Client)->GetCpuInfo(pUsrData);
399 else
400 return errLibInvalidObject;
401 }
402 //---------------------------------------------------------------------------
Cli_GetCpInfo(S7Object Client,TS7CpInfo * pUsrData)403 int S7API Cli_GetCpInfo(S7Object Client, TS7CpInfo *pUsrData)
404 {
405 if (Client)
406 return PSnap7Client(Client)->GetCpInfo(pUsrData);
407 else
408 return errLibInvalidObject;
409 }
410 //---------------------------------------------------------------------------
Cli_ReadSZL(S7Object Client,int ID,int Index,TS7SZL * pUsrData,int & Size)411 int S7API Cli_ReadSZL(S7Object Client, int ID, int Index, TS7SZL *pUsrData, int &Size)
412 {
413 if (Client)
414 return PSnap7Client(Client)->ReadSZL(ID, Index, pUsrData, Size);
415 else
416 return errLibInvalidObject;
417 }
418 //---------------------------------------------------------------------------
Cli_ReadSZLList(S7Object Client,TS7SZLList * pUsrData,int & ItemsCount)419 int S7API Cli_ReadSZLList(S7Object Client, TS7SZLList *pUsrData, int &ItemsCount)
420 {
421 if (Client)
422 return PSnap7Client(Client)->ReadSZLList(pUsrData, ItemsCount);
423 else
424 return errLibInvalidObject;
425 }
426 //---------------------------------------------------------------------------
Cli_PlcHotStart(S7Object Client)427 int S7API Cli_PlcHotStart(S7Object Client)
428 {
429 if (Client)
430 return PSnap7Client(Client)->PlcHotStart();
431 else
432 return errLibInvalidObject;
433 }
434 //---------------------------------------------------------------------------
Cli_PlcColdStart(S7Object Client)435 int S7API Cli_PlcColdStart(S7Object Client)
436 {
437 if (Client)
438 return PSnap7Client(Client)->PlcColdStart();
439 else
440 return errLibInvalidObject;
441 }
442 //---------------------------------------------------------------------------
Cli_PlcStop(S7Object Client)443 int S7API Cli_PlcStop(S7Object Client)
444 {
445 if (Client)
446 return PSnap7Client(Client)->PlcStop();
447 else
448 return errLibInvalidObject;
449 }
450 //---------------------------------------------------------------------------
Cli_CopyRamToRom(S7Object Client,int Timeout)451 int S7API Cli_CopyRamToRom(S7Object Client, int Timeout)
452 {
453 if (Client)
454 return PSnap7Client(Client)->CopyRamToRom(Timeout);
455 else
456 return errLibInvalidObject;
457 }
458 //---------------------------------------------------------------------------
Cli_Compress(S7Object Client,int Timeout)459 int S7API Cli_Compress(S7Object Client, int Timeout)
460 {
461 if (Client)
462 return PSnap7Client(Client)->Compress(Timeout);
463 else
464 return errLibInvalidObject;
465 }
466 //---------------------------------------------------------------------------
Cli_GetPlcStatus(S7Object Client,int & Status)467 int S7API Cli_GetPlcStatus(S7Object Client, int &Status)
468 {
469 if (Client)
470 return PSnap7Client(Client)->GetPlcStatus(Status);
471 else
472 return errLibInvalidObject;
473 }
474 //---------------------------------------------------------------------------
Cli_GetProtection(S7Object Client,TS7Protection * pUsrData)475 int S7API Cli_GetProtection(S7Object Client, TS7Protection *pUsrData)
476 {
477 if (Client)
478 return PSnap7Client(Client)->GetProtection(pUsrData);
479 else
480 return errLibInvalidObject;
481 }
482 //---------------------------------------------------------------------------
Cli_SetSessionPassword(S7Object Client,char * Password)483 int S7API Cli_SetSessionPassword(S7Object Client, char *Password)
484 {
485 if (Client)
486 return PSnap7Client(Client)->SetSessionPassword(Password);
487 else
488 return errLibInvalidObject;
489 }
490 //---------------------------------------------------------------------------
Cli_ClearSessionPassword(S7Object Client)491 int S7API Cli_ClearSessionPassword(S7Object Client)
492 {
493 if (Client)
494 return PSnap7Client(Client)->ClearSessionPassword();
495 else
496 return errLibInvalidObject;
497 }
498 //---------------------------------------------------------------------------
Cli_IsoExchangeBuffer(S7Object Client,void * pUsrData,int & Size)499 int S7API Cli_IsoExchangeBuffer(S7Object Client, void *pUsrData, int &Size)
500 {
501 if (Client)
502 return PSnap7Client(Client)->isoExchangeBuffer(pUsrData, Size);
503 else
504 return errLibInvalidObject;
505 }
506 //---------------------------------------------------------------------------
Cli_GetExecTime(S7Object Client,int & Time)507 int S7API Cli_GetExecTime(S7Object Client, int &Time)
508 {
509 if (Client)
510 {
511 Time=PSnap7Client(Client)->Time();
512 return 0;
513 }
514 else
515 return errLibInvalidObject;
516 }
517 //---------------------------------------------------------------------------
Cli_GetLastError(S7Object Client,int & LastError)518 int S7API Cli_GetLastError(S7Object Client, int &LastError)
519 {
520 if (Client)
521 {
522 LastError=PSnap7Client(Client)->LastError;
523 return 0;
524 }
525 else
526 return errLibInvalidObject;
527 }
528 //---------------------------------------------------------------------------
Cli_GetPduLength(S7Object Client,int & Requested,int & Negotiated)529 int S7API Cli_GetPduLength(S7Object Client, int &Requested, int &Negotiated)
530 {
531 if (Client)
532 {
533 Negotiated=PSnap7Client(Client)->PDULength;
534 Requested =PSnap7Client(Client)->PDURequest;
535 return 0;
536 }
537 else
538 return errLibInvalidObject;
539 }
540 //---------------------------------------------------------------------------
Cli_ErrorText(int Error,char * Text,int TextLen)541 int S7API Cli_ErrorText(int Error, char *Text, int TextLen)
542 {
543 try{
544 ErrCliText(Error, Text, TextLen);
545 Text[TextLen-1] = '\0';
546 }
547 catch (...){
548 return errLibInvalidParam;
549 }
550 return 0;
551 }
552 //---------------------------------------------------------------------------
Cli_GetConnected(S7Object Client,int & Connected)553 int S7API Cli_GetConnected(S7Object Client, int &Connected)
554 {
555 Connected=0;
556 if (Client)
557 {
558 Connected=PSnap7Client(Client)->Connected;
559 return 0;
560 }
561 else
562 return errLibInvalidObject;
563 }
564 //---------------------------------------------------------------------------
Cli_AsReadArea(S7Object Client,int Area,int DBNumber,int Start,int Amount,int WordLen,void * pUsrData)565 int S7API Cli_AsReadArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
566 {
567 if (Client)
568 return PSnap7Client(Client)->AsReadArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
569 else
570 return errLibInvalidParam;
571 }
572 //---------------------------------------------------------------------------
Cli_AsWriteArea(S7Object Client,int Area,int DBNumber,int Start,int Amount,int WordLen,void * pUsrData)573 int S7API Cli_AsWriteArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
574 {
575 if (Client)
576 return PSnap7Client(Client)->AsWriteArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
577 else
578 return errLibInvalidObject;
579 }
580 //---------------------------------------------------------------------------
Cli_AsDBRead(S7Object Client,int DBNumber,int Start,int Size,void * pUsrData)581 int S7API Cli_AsDBRead(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
582 {
583 if (Client)
584 return PSnap7Client(Client)->AsDBRead(DBNumber, Start, Size, pUsrData);
585 else
586 return errLibInvalidObject;
587 }
588 //---------------------------------------------------------------------------
Cli_AsDBWrite(S7Object Client,int DBNumber,int Start,int Size,void * pUsrData)589 int S7API Cli_AsDBWrite(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
590 {
591 if (Client)
592 return PSnap7Client(Client)->AsDBWrite(DBNumber, Start, Size, pUsrData);
593 else
594 return errLibInvalidObject;
595 }
596 //---------------------------------------------------------------------------
Cli_AsMBRead(S7Object Client,int Start,int Size,void * pUsrData)597 int S7API Cli_AsMBRead(S7Object Client, int Start, int Size, void *pUsrData)
598 {
599 if (Client)
600 return PSnap7Client(Client)->AsMBRead(Start, Size, pUsrData);
601 else
602 return errLibInvalidObject;
603 }
604 //---------------------------------------------------------------------------
Cli_AsMBWrite(S7Object Client,int Start,int Size,void * pUsrData)605 int S7API Cli_AsMBWrite(S7Object Client, int Start, int Size, void *pUsrData)
606 {
607 if (Client)
608 return PSnap7Client(Client)->AsMBWrite(Start, Size, pUsrData);
609 else
610 return errLibInvalidObject;
611 }
612 //---------------------------------------------------------------------------
Cli_AsEBRead(S7Object Client,int Start,int Size,void * pUsrData)613 int S7API Cli_AsEBRead(S7Object Client, int Start, int Size, void *pUsrData)
614 {
615 if (Client)
616 return PSnap7Client(Client)->AsEBRead(Start, Size, pUsrData);
617 else
618 return errLibInvalidObject;
619 }
620 //---------------------------------------------------------------------------
Cli_AsEBWrite(S7Object Client,int Start,int Size,void * pUsrData)621 int S7API Cli_AsEBWrite(S7Object Client, int Start, int Size, void *pUsrData)
622 {
623 if (Client)
624 return PSnap7Client(Client)->AsEBWrite(Start, Size, pUsrData);
625 else
626 return errLibInvalidObject;
627 }
628 //---------------------------------------------------------------------------
Cli_AsABRead(S7Object Client,int Start,int Size,void * pUsrData)629 int S7API Cli_AsABRead(S7Object Client, int Start, int Size, void *pUsrData)
630 {
631 if (Client)
632 return PSnap7Client(Client)->AsABRead(Start, Size, pUsrData);
633 else
634 return errLibInvalidObject;
635 }
636 //---------------------------------------------------------------------------
Cli_AsABWrite(S7Object Client,int Start,int Size,void * pUsrData)637 int S7API Cli_AsABWrite(S7Object Client, int Start, int Size, void *pUsrData)
638 {
639 if (Client)
640 return PSnap7Client(Client)->AsABWrite(Start, Size, pUsrData);
641 else
642 return errLibInvalidObject;
643 }
644 //---------------------------------------------------------------------------
Cli_AsTMRead(S7Object Client,int Start,int Amount,void * pUsrData)645 int S7API Cli_AsTMRead(S7Object Client, int Start, int Amount, void *pUsrData)
646 {
647 if (Client)
648 return PSnap7Client(Client)->AsTMRead(Start, Amount, pUsrData);
649 else
650 return errLibInvalidObject;
651 }
652 //---------------------------------------------------------------------------
Cli_AsTMWrite(S7Object Client,int Start,int Amount,void * pUsrData)653 int S7API Cli_AsTMWrite(S7Object Client, int Start, int Amount, void *pUsrData)
654 {
655 if (Client)
656 return PSnap7Client(Client)->AsTMWrite(Start, Amount, pUsrData);
657 else
658 return errLibInvalidObject;
659 }
660 //---------------------------------------------------------------------------
Cli_AsCTRead(S7Object Client,int Start,int Amount,void * pUsrData)661 int S7API Cli_AsCTRead(S7Object Client, int Start, int Amount, void *pUsrData)
662 {
663 if (Client)
664 return PSnap7Client(Client)->AsCTRead(Start, Amount, pUsrData);
665 else
666 return errLibInvalidObject;
667 }
668 //---------------------------------------------------------------------------
Cli_AsCTWrite(S7Object Client,int Start,int Amount,void * pUsrData)669 int S7API Cli_AsCTWrite(S7Object Client, int Start, int Amount, void *pUsrData)
670 {
671 if (Client)
672 return PSnap7Client(Client)->AsCTWrite(Start, Amount, pUsrData);
673 else
674 return errLibInvalidObject;
675 }
676 //---------------------------------------------------------------------------
Cli_AsListBlocksOfType(S7Object Client,int BlockType,TS7BlocksOfType * pUsrData,int & ItemsCount)677 int S7API Cli_AsListBlocksOfType(S7Object Client, int BlockType, TS7BlocksOfType *pUsrData, int &ItemsCount)
678 {
679 if (Client)
680 return PSnap7Client(Client)->AsListBlocksOfType(BlockType, pUsrData, ItemsCount);
681 else
682 return errLibInvalidObject;
683 }
684 //---------------------------------------------------------------------------
Cli_AsReadSZL(S7Object Client,int ID,int Index,TS7SZL * pUsrData,int & Size)685 int S7API Cli_AsReadSZL(S7Object Client, int ID, int Index, TS7SZL *pUsrData, int &Size)
686 {
687 if (Client)
688 return PSnap7Client(Client)->AsReadSZL(ID, Index, pUsrData, Size);
689 else
690 return errLibInvalidObject;
691 }
692 //---------------------------------------------------------------------------
Cli_AsReadSZLList(S7Object Client,TS7SZLList * pUsrData,int & ItemsCount)693 int S7API Cli_AsReadSZLList(S7Object Client, TS7SZLList *pUsrData, int &ItemsCount)
694 {
695 if (Client)
696 return PSnap7Client(Client)->AsReadSZLList(pUsrData, ItemsCount);
697 else
698 return errLibInvalidObject;
699 }
700 //---------------------------------------------------------------------------
Cli_AsUpload(S7Object Client,int BlockType,int BlockNum,void * pUsrData,int & Size)701 int S7API Cli_AsUpload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
702 {
703 if (Client)
704 return PSnap7Client(Client)->AsUpload(BlockType, BlockNum, pUsrData, Size);
705 else
706 return errLibInvalidObject;
707 }
708 //---------------------------------------------------------------------------
Cli_AsFullUpload(S7Object Client,int BlockType,int BlockNum,void * pUsrData,int & Size)709 int S7API Cli_AsFullUpload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
710 {
711 if (Client)
712 return PSnap7Client(Client)->AsFullUpload(BlockType, BlockNum, pUsrData, Size);
713 else
714 return errLibInvalidObject;
715 }
716 //---------------------------------------------------------------------------
Cli_AsDownload(S7Object Client,int BlockNum,void * pUsrData,int Size)717 int S7API Cli_AsDownload(S7Object Client, int BlockNum, void *pUsrData, int Size)
718 {
719 if (Client)
720 return PSnap7Client(Client)->AsDownload(BlockNum, pUsrData, Size);
721 else
722 return errLibInvalidObject;
723 }
724 //---------------------------------------------------------------------------
Cli_AsCopyRamToRom(S7Object Client,int Timeout)725 int S7API Cli_AsCopyRamToRom(S7Object Client, int Timeout)
726 {
727 if (Client)
728 return PSnap7Client(Client)->AsCopyRamToRom(Timeout);
729 else
730 return errLibInvalidObject;
731 }
732 //---------------------------------------------------------------------------
Cli_AsCompress(S7Object Client,int Timeout)733 int S7API Cli_AsCompress(S7Object Client, int Timeout)
734 {
735 if (Client)
736 return PSnap7Client(Client)->Compress(Timeout);
737 else
738 return errLibInvalidObject;
739 }
740 //---------------------------------------------------------------------------
Cli_AsDBGet(S7Object Client,int DBNumber,void * pUsrData,int & Size)741 int S7API Cli_AsDBGet(S7Object Client, int DBNumber, void *pUsrData, int &Size)
742 {
743 if (Client)
744 return PSnap7Client(Client)->AsDBGet(DBNumber, pUsrData, Size);
745 else
746 return errLibInvalidObject;
747 }
748 //---------------------------------------------------------------------------
Cli_AsDBFill(S7Object Client,int DBNumber,int FillChar)749 int S7API Cli_AsDBFill(S7Object Client, int DBNumber, int FillChar)
750 {
751 if (Client)
752 return PSnap7Client(Client)->AsDBFill(DBNumber, FillChar);
753 else
754 return errLibInvalidObject;
755 }
756 //---------------------------------------------------------------------------
Cli_CheckAsCompletion(S7Object Client,int & opResult)757 int S7API Cli_CheckAsCompletion(S7Object Client, int &opResult)
758 {
759 if (Client)
760 {
761 if (PSnap7Client(Client)->CheckAsCompletion(opResult))
762 return JobComplete;
763 else
764 return JobPending;
765 }
766 else
767 return errLibInvalidObject;
768 }
769 //---------------------------------------------------------------------------
Cli_WaitAsCompletion(S7Object Client,int Timeout)770 int S7API Cli_WaitAsCompletion(S7Object Client, int Timeout)
771 {
772 if (Client)
773 return PSnap7Client(Client)->WaitAsCompletion(Timeout);
774 else
775 return errLibInvalidObject;
776 }
777 //***************************************************************************
778 // SERVER
779 //***************************************************************************
Srv_Create()780 S7Object S7API Srv_Create()
781 {
782 return S7Object(new TSnap7Server());
783 }
784 //---------------------------------------------------------------------------
Srv_Destroy(S7Object & Server)785 void S7API Srv_Destroy(S7Object &Server)
786 {
787 if (Server)
788 {
789 delete PSnap7Server(Server);
790 Server=0;
791 }
792 }
793 //---------------------------------------------------------------------------
Srv_GetParam(S7Object Server,int ParamNumber,void * pValue)794 int S7API Srv_GetParam(S7Object Server, int ParamNumber, void *pValue)
795 {
796 if (Server)
797 return PSnap7Server(Server)->GetParam(ParamNumber, pValue);
798 else
799 return errLibInvalidObject;
800 }
801 //---------------------------------------------------------------------------
Srv_SetParam(S7Object Server,int ParamNumber,void * pValue)802 int S7API Srv_SetParam(S7Object Server, int ParamNumber, void *pValue)
803 {
804 if (Server)
805 return PSnap7Server(Server)->SetParam(ParamNumber, pValue);
806 else
807 return errLibInvalidObject;
808 }
809 //---------------------------------------------------------------------------
Srv_StartTo(S7Object Server,const char * Address)810 int S7API Srv_StartTo(S7Object Server, const char *Address)
811 {
812 if (Server)
813 return PSnap7Server(Server)->StartTo(Address);
814 else
815 return errLibInvalidObject;
816 }
817 //---------------------------------------------------------------------------
Srv_Start(S7Object Server)818 int S7API Srv_Start(S7Object Server)
819 {
820 if (Server)
821 return PSnap7Server(Server)->Start();
822 else
823 return errLibInvalidObject;
824 }
825 //---------------------------------------------------------------------------
Srv_Stop(S7Object Server)826 int S7API Srv_Stop(S7Object Server)
827 {
828 if (Server)
829 {
830 PSnap7Server(Server)->Stop();
831 return 0;
832 }
833 else
834 return errLibInvalidObject;
835 }
836 //---------------------------------------------------------------------------
Srv_RegisterArea(S7Object Server,int AreaCode,word Index,void * pUsrData,int Size)837 int S7API Srv_RegisterArea(S7Object Server, int AreaCode, word Index, void *pUsrData, int Size)
838 {
839 if (Server)
840 return PSnap7Server(Server)->RegisterArea(AreaCode, Index, pUsrData, Size);
841 else
842 return errLibInvalidObject;
843 }
844 //---------------------------------------------------------------------------
Srv_UnregisterArea(S7Object Server,int AreaCode,word Index)845 int S7API Srv_UnregisterArea(S7Object Server, int AreaCode, word Index)
846 {
847 if (Server)
848 return PSnap7Server(Server)->UnregisterArea(AreaCode, Index);
849 else
850 return errLibInvalidObject;
851 }
852 //---------------------------------------------------------------------------
Srv_LockArea(S7Object Server,int AreaCode,word Index)853 int S7API Srv_LockArea(S7Object Server, int AreaCode, word Index)
854 {
855 if (Server)
856 return PSnap7Server(Server)->LockArea(AreaCode, Index);
857 else
858 return errLibInvalidObject;
859 }
860 //---------------------------------------------------------------------------
Srv_UnlockArea(S7Object Server,int AreaCode,word Index)861 int S7API Srv_UnlockArea(S7Object Server, int AreaCode, word Index)
862 {
863 if (Server)
864 return PSnap7Server(Server)->UnlockArea(AreaCode, Index);
865 else
866 return errLibInvalidObject;
867 }
868 //---------------------------------------------------------------------------
Srv_GetStatus(S7Object Server,int & ServerStatus,int & CpuStatus,int & ClientsCount)869 int S7API Srv_GetStatus(S7Object Server, int &ServerStatus, int &CpuStatus, int &ClientsCount)
870 {
871 if (Server)
872 {
873 ServerStatus=PSnap7Server(Server)->Status;
874 CpuStatus=PSnap7Server(Server)->CpuStatus;
875 ClientsCount=PSnap7Server(Server)->ClientsCount;
876 return 0;
877 }
878 else
879 return errLibInvalidObject;
880 }
881 //---------------------------------------------------------------------------
Srv_SetCpuStatus(S7Object Server,int CpuStatus)882 int S7API Srv_SetCpuStatus(S7Object Server, int CpuStatus)
883 {
884 if (Server)
885 {
886 PSnap7Server(Server)->CpuStatus=CpuStatus;
887 return 0;
888 }
889 else
890 return errLibInvalidObject;
891 }
892 //---------------------------------------------------------------------------
Srv_ErrorText(int Error,char * Text,int TextLen)893 int S7API Srv_ErrorText(int Error, char *Text, int TextLen)
894 {
895 try{
896 ErrSrvText(Error, Text, TextLen);
897 Text[TextLen-1] = '\0';
898 }
899 catch (...){
900 return errLibInvalidParam;
901 }
902 return 0;
903 }
904 //---------------------------------------------------------------------------
Srv_EventText(TSrvEvent & Event,char * Text,int TextLen)905 int S7API Srv_EventText(TSrvEvent &Event, char *Text, int TextLen)
906 {
907 try{
908 EvtSrvText(Event, Text, TextLen);
909 //Text[TextLen] = '\0';
910 }
911 catch (...){
912 return errLibInvalidParam;
913 }
914 return 0;
915 }
916 //---------------------------------------------------------------------------
Srv_PickEvent(S7Object Server,TSrvEvent * pEvent,int & EvtReady)917 int S7API Srv_PickEvent(S7Object Server, TSrvEvent *pEvent, int &EvtReady)
918 {
919 EvtReady=0;
920 if (Server)
921 {
922 EvtReady=int(PSnap7Server(Server)->PickEvent(pEvent));
923 return 0;
924 }
925 else
926 return errLibInvalidObject;
927 }
928 //---------------------------------------------------------------------------
Srv_ClearEvents(S7Object Server)929 int S7API Srv_ClearEvents(S7Object Server)
930 {
931 if (Server)
932 {
933 PSnap7Server(Server)->EventsFlush();
934 return 0;
935 }
936 else
937 return errLibInvalidObject;
938 }
939 //---------------------------------------------------------------------------
Srv_GetMask(S7Object Server,int MaskKind,longword & Mask)940 int S7API Srv_GetMask(S7Object Server, int MaskKind, longword &Mask)
941 {
942 if (Server)
943 {
944 Mask=0;
945 if ((MaskKind==mkEvent) || (MaskKind==mkLog))
946 {
947 if (MaskKind==mkEvent)
948 Mask=PSnap7Server(Server)->EventMask;
949 else
950 Mask=PSnap7Server(Server)->LogMask;
951 return 0;
952 }
953 else
954 return errLibInvalidParam;
955 }
956 else
957 return errLibInvalidObject;
958 }
959 //---------------------------------------------------------------------------
Srv_SetMask(S7Object Server,int MaskKind,longword Mask)960 int S7API Srv_SetMask(S7Object Server, int MaskKind, longword Mask)
961 {
962 if (Server)
963 {
964 if ((MaskKind==mkEvent) || (MaskKind==mkLog))
965 {
966 if (MaskKind==mkEvent)
967 PSnap7Server(Server)->EventMask=Mask;
968 else
969 PSnap7Server(Server)->LogMask=Mask;
970 return 0;
971 }
972 else
973 return errLibInvalidParam;
974 }
975 else
976 return errLibInvalidObject;
977 }
978 //---------------------------------------------------------------------------
Srv_SetEventsCallback(S7Object Server,pfn_SrvCallBack pCallback,void * usrPtr)979 int S7API Srv_SetEventsCallback(S7Object Server, pfn_SrvCallBack pCallback, void *usrPtr)
980 {
981 if (Server)
982 return PSnap7Server(Server)->SetEventsCallBack(pCallback, usrPtr);
983 else
984 return errLibInvalidObject;
985 }
986 //---------------------------------------------------------------------------
Srv_SetReadEventsCallback(S7Object Server,pfn_SrvCallBack pCallback,void * usrPtr)987 int S7API Srv_SetReadEventsCallback(S7Object Server, pfn_SrvCallBack pCallback, void *usrPtr)
988 {
989 if (Server)
990 return PSnap7Server(Server)->SetReadEventsCallBack(pCallback, usrPtr);
991 else
992 return errLibInvalidObject;
993 }
994 //---------------------------------------------------------------------------
Srv_SetRWAreaCallback(S7Object Server,pfn_RWAreaCallBack pCallback,void * usrPtr)995 int S7API Srv_SetRWAreaCallback(S7Object Server, pfn_RWAreaCallBack pCallback, void *usrPtr)
996 {
997 if (Server)
998 return PSnap7Server(Server)->SetRWAreaCallBack(pCallback, usrPtr);
999 else
1000 return errLibInvalidObject;
1001 }
1002 //***************************************************************************
1003 // PARTNER
1004 //***************************************************************************
Par_Create(int Active)1005 S7Object S7API Par_Create(int Active)
1006 {
1007 return S7Object(new TSnap7Partner(Active!=0));
1008 }
1009 //---------------------------------------------------------------------------
Par_Destroy(S7Object & Partner)1010 void S7API Par_Destroy(S7Object &Partner)
1011 {
1012 if (Partner)
1013 {
1014 delete PSnap7Partner(Partner);
1015 Partner=0;
1016 }
1017 }
1018 //---------------------------------------------------------------------------
Par_GetParam(S7Object Partner,int ParamNumber,void * pValue)1019 int S7API Par_GetParam(S7Object Partner, int ParamNumber, void *pValue)
1020 {
1021 if (Partner)
1022 return PSnap7Partner(Partner)->GetParam(ParamNumber, pValue);
1023 else
1024 return errLibInvalidObject;
1025 }
1026 //---------------------------------------------------------------------------
Par_SetParam(S7Object Partner,int ParamNumber,void * pValue)1027 int S7API Par_SetParam(S7Object Partner, int ParamNumber, void *pValue)
1028 {
1029 if (Partner)
1030 return PSnap7Partner(Partner)->SetParam(ParamNumber, pValue);
1031 else
1032 return errLibInvalidObject;
1033 }
1034 //---------------------------------------------------------------------------
Par_StartTo(S7Object Partner,const char * LocalAddress,const char * RemoteAddress,word LocTsap,word RemTsap)1035 int S7API Par_StartTo(S7Object Partner, const char *LocalAddress, const char *RemoteAddress,
1036 word LocTsap, word RemTsap)
1037 {
1038 if (Partner)
1039 return PSnap7Partner(Partner)->StartTo(LocalAddress, RemoteAddress, LocTsap, RemTsap);
1040 else
1041 return errLibInvalidObject;
1042 }
1043 //---------------------------------------------------------------------------
Par_Start(S7Object Partner)1044 int S7API Par_Start(S7Object Partner)
1045 {
1046 if (Partner)
1047 return PSnap7Partner(Partner)->Start();
1048 else
1049 return errLibInvalidObject;
1050 }
1051 //---------------------------------------------------------------------------
Par_Stop(S7Object Partner)1052 int S7API Par_Stop(S7Object Partner)
1053 {
1054 if (Partner)
1055 return PSnap7Partner(Partner)->Stop();
1056 else
1057 return errLibInvalidObject;
1058 }
1059 //---------------------------------------------------------------------------
Par_BSend(S7Object Partner,longword R_ID,void * pUsrData,int Size)1060 int S7API Par_BSend(S7Object Partner, longword R_ID, void *pUsrData, int Size)
1061 {
1062 if (Partner)
1063 return PSnap7Partner(Partner)->BSend(R_ID, pUsrData, Size);
1064 else
1065 return errLibInvalidObject;
1066 }
1067 //---------------------------------------------------------------------------
Par_AsBSend(S7Object Partner,longword R_ID,void * pUsrData,int Size)1068 int S7API Par_AsBSend(S7Object Partner, longword R_ID, void *pUsrData, int Size)
1069 {
1070 if (Partner)
1071 return PSnap7Partner(Partner)->AsBSend(R_ID, pUsrData, Size);
1072 else
1073 return errLibInvalidObject;
1074 }
1075 //---------------------------------------------------------------------------
Par_CheckAsBSendCompletion(S7Object Partner,int & opResult)1076 int S7API Par_CheckAsBSendCompletion(S7Object Partner, int &opResult)
1077 {
1078 if (Partner)
1079 {
1080 if (PSnap7Partner(Partner)->CheckAsBSendCompletion(opResult))
1081 return JobComplete;
1082 else
1083 return JobPending;
1084 }
1085 else
1086 return errLibInvalidObject;
1087 }
1088 //---------------------------------------------------------------------------
Par_WaitAsBSendCompletion(S7Object Partner,longword Timeout)1089 int S7API Par_WaitAsBSendCompletion(S7Object Partner, longword Timeout)
1090 {
1091 if (Partner)
1092 return PSnap7Partner(Partner)->WaitAsBSendCompletion(Timeout);
1093 else
1094 return errLibInvalidObject;
1095 }
1096 //---------------------------------------------------------------------------
Par_SetSendCallback(S7Object Partner,pfn_ParBSendCompletion pCompletion,void * usrPtr)1097 int S7API Par_SetSendCallback(S7Object Partner, pfn_ParBSendCompletion pCompletion, void *usrPtr)
1098 {
1099 if (Partner)
1100 return PSnap7Partner(Partner)->SetSendCallback(pCompletion, usrPtr);
1101 else
1102 return errLibInvalidObject;
1103 }
1104 //---------------------------------------------------------------------------
Par_BRecv(S7Object Partner,longword & R_ID,void * pData,int & Size,longword Timeout)1105 int S7API Par_BRecv(S7Object Partner, longword &R_ID, void *pData, int &Size, longword Timeout)
1106 {
1107 if (Partner)
1108 return PSnap7Partner(Partner)->BRecv(R_ID, pData, Size, Timeout);
1109 else
1110 return errLibInvalidObject;
1111 }
1112 //---------------------------------------------------------------------------
Par_CheckAsBRecvCompletion(S7Object Partner,int & opResult,longword & R_ID,void * pData,int & Size)1113 int S7API Par_CheckAsBRecvCompletion(S7Object Partner, int &opResult, longword &R_ID,
1114 void *pData, int &Size)
1115 {
1116 if (Partner)
1117 {
1118 if (PSnap7Partner(Partner)->CheckAsBRecvCompletion(opResult, R_ID, pData, Size))
1119 return JobComplete;
1120 else
1121 return JobPending;
1122 }
1123 else
1124 return errLibInvalidObject;
1125 }
1126 //---------------------------------------------------------------------------
Par_SetRecvCallback(S7Object Partner,pfn_ParBRecvCallBack pCompletion,void * usrPtr)1127 int S7API Par_SetRecvCallback(S7Object Partner, pfn_ParBRecvCallBack pCompletion, void *usrPtr)
1128 {
1129 if (Partner)
1130 return PSnap7Partner(Partner)->SetRecvCallback(pCompletion, usrPtr);
1131 else
1132 return errLibInvalidObject;
1133 }
1134 //---------------------------------------------------------------------------
Par_GetTimes(S7Object Partner,longword & SendTime,longword & RecvTime)1135 int S7API Par_GetTimes(S7Object Partner, longword &SendTime, longword &RecvTime)
1136 {
1137 if (Partner)
1138 {
1139 SendTime=PSnap7Partner(Partner)->SendTime;
1140 RecvTime=PSnap7Partner(Partner)->RecvTime;
1141 return 0;
1142 }
1143 else
1144 return errLibInvalidObject;
1145
1146 }
1147 //---------------------------------------------------------------------------
Par_GetStats(S7Object Partner,longword & BytesSent,longword & BytesRecv,longword & SendErrors,longword & RecvErrors)1148 int S7API Par_GetStats(S7Object Partner, longword &BytesSent, longword &BytesRecv,
1149 longword &SendErrors, longword &RecvErrors)
1150 {
1151 if (Partner)
1152 {
1153 BytesSent=PSnap7Partner(Partner)->BytesSent;
1154 BytesRecv=PSnap7Partner(Partner)->BytesRecv;
1155 SendErrors=PSnap7Partner(Partner)->SendErrors;
1156 RecvErrors=PSnap7Partner(Partner)->RecvErrors;
1157 return 0;
1158 }
1159 else
1160 return errLibInvalidObject;
1161 }
1162 //---------------------------------------------------------------------------
Par_GetLastError(S7Object Partner,int & LastError)1163 int S7API Par_GetLastError(S7Object Partner, int &LastError)
1164 {
1165 if (Partner)
1166 {
1167 LastError=PSnap7Partner(Partner)->LastError;
1168 return 0;
1169 }
1170 else
1171 return errLibInvalidObject;
1172 }
1173 //---------------------------------------------------------------------------
Par_GetStatus(S7Object Partner,int & Status)1174 int S7API Par_GetStatus(S7Object Partner, int &Status)
1175 {
1176 if (Partner)
1177 {
1178 Status=PSnap7Partner(Partner)->Status();
1179 return 0;
1180 }
1181 else
1182 return errLibInvalidObject;
1183 }
1184 //---------------------------------------------------------------------------
Par_ErrorText(int Error,char * Text,int TextLen)1185 int S7API Par_ErrorText(int Error, char *Text, int TextLen)
1186 {
1187 try{
1188 ErrParText(Error, Text, TextLen);
1189 Text[TextLen - 1] = '\0';
1190 }
1191 catch (...){
1192 return errLibInvalidParam;
1193 }
1194 return 0;
1195 }
1196
1197