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