-
Notifications
You must be signed in to change notification settings - Fork 3
/
TcAdsDef.h
420 lines (366 loc) · 17.6 KB
/
TcAdsDef.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
///////////////////////////////////////////////////////////////////////////////
// This is a part of the Beckhoff TwinCAT ADS API
// Copyright (C) Beckhoff Automation GmbH
// All rights reserved.
////////////////////////////////////////////////////////////////////////////////
#ifndef __ADSDEF_H__
#define __ADSDEF_H__
#ifndef ANYSIZE_ARRAY
#define ANYSIZE_ARRAY 1
#endif
#define ADS_FIXEDNAMESIZE 16
#define BOOL bool
////////////////////////////////////////////////////////////////////////////////
// AMS Ports
#define AMSPORT_LOGGER 100
#define AMSPORT_R0_RTIME 200
#define AMSPORT_R0_TRACE (AMSPORT_R0_RTIME+90)
#define AMSPORT_R0_IO 300
#define AMSPORT_R0_SPS 400
#define AMSPORT_R0_NC 500
#define AMSPORT_R0_ISG 550
#define AMSPORT_R0_PCS 600
#define AMSPORT_R0_PLC 801
#define AMSPORT_R0_PLC_RTS1 801
#define AMSPORT_R0_PLC_RTS2 811
#define AMSPORT_R0_PLC_RTS3 821
#define AMSPORT_R0_PLC_RTS4 831
#define AMSPORT_R0_PLC_TC3 851
////////////////////////////////////////////////////////////////////////////////
// ADS Cmd Ids
#define ADSSRVID_INVALID 0x00
#define ADSSRVID_READDEVICEINFO 0x01
#define ADSSRVID_READ 0x02
#define ADSSRVID_WRITE 0x03
#define ADSSRVID_READSTATE 0x04
#define ADSSRVID_WRITECTRL 0x05
#define ADSSRVID_ADDDEVICENOTE 0x06
#define ADSSRVID_DELDEVICENOTE 0x07
#define ADSSRVID_DEVICENOTE 0x08
#define ADSSRVID_READWRITE 0x09
////////////////////////////////////////////////////////////////////////////////
// ADS reserved index groups
#define ADSIGRP_SYMTAB 0xF000
#define ADSIGRP_SYMNAME 0xF001
#define ADSIGRP_SYMVAL 0xF002
#define ADSIGRP_SYM_HNDBYNAME 0xF003
#define ADSIGRP_SYM_VALBYNAME 0xF004
#define ADSIGRP_SYM_VALBYHND 0xF005
#define ADSIGRP_SYM_RELEASEHND 0xF006
#define ADSIGRP_SYM_INFOBYNAME 0xF007
#define ADSIGRP_SYM_VERSION 0xF008
#define ADSIGRP_SYM_INFOBYNAMEEX 0xF009
#define ADSIGRP_SYM_DOWNLOAD 0xF00A
#define ADSIGRP_SYM_UPLOAD 0xF00B
#define ADSIGRP_SYM_UPLOADINFO 0xF00C
#define ADSIGRP_SYM_DOWNLOAD2 0xF00D
#define ADSIGRP_SYM_DT_UPLOAD 0xF00E
#define ADSIGRP_SYM_UPLOADINFO2 0xF00F
#define ADSIGRP_SYMNOTE 0xF010 // notification of named handle
#define ADSIGRP_SUMUP_READ 0xF080 // AdsRW IOffs list size or 0 (=0 -> list size == WLength/3*sizeof(ULONG))
// W: {list of IGrp, IOffs, Length}
// if IOffs != 0 then R: {list of results} and {list of data}
// if IOffs == 0 then R: only data (sum result)
#define ADSIGRP_SUMUP_WRITE 0xF081 // AdsRW IOffs list size
// W: {list of IGrp, IOffs, Length} followed by {list of data}
// R: list of results
#define ADSIGRP_SUMUP_READWRITE 0xF082 // AdsRW IOffs list size
// W: {list of IGrp, IOffs, RLength, WLength} followed by {list of data}
// R: {list of results, RLength} followed by {list of data}
#define ADSIGRP_SUMUP_READEX 0xF083 // AdsRW IOffs list size
// W: {list of IGrp, IOffs, Length}
#define ADSIGRP_SUMUP_READEX2 0xF084 // AdsRW IOffs list size
// W: {list of IGrp, IOffs, Length}
// R: {list of results, Length} followed by {list of data (returned lengths)}
#define ADSIGRP_SUMUP_ADDDEVNOTE 0xF085 // AdsRW IOffs list size
// W: {list of IGrp, IOffs, Attrib}
// R: {list of results, handles}
#define ADSIGRP_SUMUP_DELDEVNOTE 0xF086 // AdsRW IOffs list size
// W: {list of handles}
// R: {list of results, Length} followed by {list of data}
#define ADSIGRP_IOIMAGE_RWIB 0xF020 // read/write input byte(s)
#define ADSIGRP_IOIMAGE_RWIX 0xF021 // read/write input bit
#define ADSIGRP_IOIMAGE_RISIZE 0xF025 // read input size (in byte)
#define ADSIGRP_IOIMAGE_RWOB 0xF030 // read/write output byte(s)
#define ADSIGRP_IOIMAGE_RWOX 0xF031 // read/write output bit
#define ADSIGRP_IOIMAGE_CLEARI 0xF040 // write inputs to null
#define ADSIGRP_IOIMAGE_CLEARO 0xF050 // write outputs to null
#define ADSIGRP_IOIMAGE_RWIOB 0xF060 // read input and write output byte(s)
#define ADSIGRP_DEVICE_DATA 0xF100 // state, name, etc...
#define ADSIOFFS_DEVDATA_ADSSTATE 0x0000 // ads state of device
#define ADSIOFFS_DEVDATA_DEVSTATE 0x0002 // device state
////////////////////////////////////////////////////////////////////////////////
// ADS Return codes
#define ADSERR_NOERR 0x00
#define ERR_ADSERRS 0x0700
#define ADSERR_DEVICE_ERROR (0x00+ERR_ADSERRS) // Error class < device error >
#define ADSERR_DEVICE_SRVNOTSUPP (0x01+ERR_ADSERRS) // Service is not supported by server
#define ADSERR_DEVICE_INVALIDGRP (0x02+ERR_ADSERRS) // invalid indexGroup
#define ADSERR_DEVICE_INVALIDOFFSET (0x03+ERR_ADSERRS) // invalid indexOffset
#define ADSERR_DEVICE_INVALIDACCESS (0x04+ERR_ADSERRS) // reading/writing not permitted
#define ADSERR_DEVICE_INVALIDSIZE (0x05+ERR_ADSERRS) // parameter size not correct
#define ADSERR_DEVICE_INVALIDDATA (0x06+ERR_ADSERRS) // invalid parameter value(s)
#define ADSERR_DEVICE_NOTREADY (0x07+ERR_ADSERRS) // device is not in a ready state
#define ADSERR_DEVICE_BUSY (0x08+ERR_ADSERRS) // device is busy
#define ADSERR_DEVICE_INVALIDCONTEXT (0x09+ERR_ADSERRS) // invalid context (must be InWindows)
#define ADSERR_DEVICE_NOMEMORY (0x0A+ERR_ADSERRS) // out of memory
#define ADSERR_DEVICE_INVALIDPARM (0x0B+ERR_ADSERRS) // invalid parameter value(s)
#define ADSERR_DEVICE_NOTFOUND (0x0C+ERR_ADSERRS) // not found (files, ...)
#define ADSERR_DEVICE_SYNTAX (0x0D+ERR_ADSERRS) // syntax error in comand or file
#define ADSERR_DEVICE_INCOMPATIBLE (0x0E+ERR_ADSERRS) // objects do not match
#define ADSERR_DEVICE_EXISTS (0x0F+ERR_ADSERRS) // object already exists
#define ADSERR_DEVICE_SYMBOLNOTFOUND (0x10+ERR_ADSERRS) // symbol not found
#define ADSERR_DEVICE_SYMBOLVERSIONINVALID (0x11+ERR_ADSERRS) // symbol version invalid
#define ADSERR_DEVICE_INVALIDSTATE (0x12+ERR_ADSERRS) // server is in invalid state
#define ADSERR_DEVICE_TRANSMODENOTSUPP (0x13+ERR_ADSERRS) // AdsTransMode not supported
#define ADSERR_DEVICE_NOTIFYHNDINVALID (0x14+ERR_ADSERRS) // Notification handle is invalid
#define ADSERR_DEVICE_CLIENTUNKNOWN (0x15+ERR_ADSERRS) // Notification client not registered
#define ADSERR_DEVICE_NOMOREHDLS (0x16+ERR_ADSERRS) // no more notification handles
#define ADSERR_DEVICE_INVALIDWATCHSIZE (0x17+ERR_ADSERRS) // size for watch to big
#define ADSERR_DEVICE_NOTINIT (0x18+ERR_ADSERRS) // device not initialized
#define ADSERR_DEVICE_TIMEOUT (0x19+ERR_ADSERRS) // device has a timeout
#define ADSERR_DEVICE_NOINTERFACE (0x1A+ERR_ADSERRS) // query interface failed
#define ADSERR_DEVICE_INVALIDINTERFACE (0x1B+ERR_ADSERRS) // wrong interface required
#define ADSERR_DEVICE_INVALIDCLSID (0x1C+ERR_ADSERRS) // class ID is invalid
#define ADSERR_DEVICE_INVALIDOBJID (0x1D+ERR_ADSERRS) // object ID is invalid
#define ADSERR_DEVICE_PENDING (0x1E+ERR_ADSERRS) // request is pending
#define ADSERR_DEVICE_ABORTED (0x1F+ERR_ADSERRS) // request is aborted
#define ADSERR_DEVICE_WARNING (0x20+ERR_ADSERRS) // signal warning
#define ADSERR_DEVICE_INVALIDARRAYIDX (0x21+ERR_ADSERRS) // invalid array index
#define ADSERR_DEVICE_SYMBOLNOTACTIVE (0x22+ERR_ADSERRS) // symbol not active -> release handle and try again
#define ADSERR_DEVICE_ACCESSDENIED (0x23+ERR_ADSERRS) // access denied
#define ADSERR_DEVICE_LICENSENOTFOUND (0x24+ERR_ADSERRS) // no license found
#define ADSERR_DEVICE_LICENSEEXPIRED (0x25+ERR_ADSERRS) // license expired
#define ADSERR_DEVICE_LICENSEEXCEEDED (0x26+ERR_ADSERRS) // license exceeded
#define ADSERR_DEVICE_LICENSEINVALID (0x27+ERR_ADSERRS) // license invalid
#define ADSERR_DEVICE_LICENSESYSTEMID (0x28+ERR_ADSERRS) // license invalid system id
#define ADSERR_DEVICE_LICENSENOTIMELIMIT (0x29+ERR_ADSERRS) // license not time limited
#define ADSERR_DEVICE_LICENSEFUTUREISSUE (0x2A+ERR_ADSERRS) // license issue time in the future
#define ADSERR_DEVICE_LICENSETIMETOLONG (0x2B+ERR_ADSERRS) // license time period to long
#define ADSERR_DEVICE_EXCEPTION (0x2C+ERR_ADSERRS) // exception in device specific code
#define ADSERR_DEVICE_LICENSEDUPLICATED (0x2D+ERR_ADSERRS) // license file read twice
#define ADSERR_DEVICE_SIGNATUREINVALID (0x2E+ERR_ADSERRS) // invalid signature
#define ADSERR_DEVICE_CERTIFICATEINVALID (0x2F+ERR_ADSERRS) // public key certificate
//
#define ADSERR_CLIENT_ERROR (0x40+ERR_ADSERRS) // Error class < client error >
#define ADSERR_CLIENT_INVALIDPARM (0x41+ERR_ADSERRS) // invalid parameter at service call
#define ADSERR_CLIENT_LISTEMPTY (0x42+ERR_ADSERRS) // polling list is empty
#define ADSERR_CLIENT_VARUSED (0x43+ERR_ADSERRS) // var connection already in use
#define ADSERR_CLIENT_DUPLINVOKEID (0x44+ERR_ADSERRS) // invoke id in use
#define ADSERR_CLIENT_SYNCTIMEOUT (0x45+ERR_ADSERRS) // timeout elapsed
#define ADSERR_CLIENT_W32ERROR (0x46+ERR_ADSERRS) // error in win32 subsystem
#define ADSERR_CLIENT_TIMEOUTINVALID (0x47+ERR_ADSERRS) // ?
#define ADSERR_CLIENT_PORTNOTOPEN (0x48+ERR_ADSERRS) // ads dll
#define ADSERR_CLIENT_NOAMSADDR (0x49+ERR_ADSERRS) // ads dll
#define ADSERR_CLIENT_SYNCINTERNAL (0x50+ERR_ADSERRS) // internal error in ads sync
#define ADSERR_CLIENT_ADDHASH (0x51+ERR_ADSERRS) // hash table overflow
#define ADSERR_CLIENT_REMOVEHASH (0x52+ERR_ADSERRS) // key not found in hash table
#define ADSERR_CLIENT_NOMORESYM (0x53+ERR_ADSERRS) // no more symbols in cache
#define ADSERR_CLIENT_SYNCRESINVALID (0x54+ERR_ADSERRS) // invalid response received
#define ADSERR_CLIENT_SYNCPORTLOCKED (0x55+ERR_ADSERRS) // sync port is locked
#pragma pack( push, 1)
typedef struct AmsNetId_
{
unsigned char b[6];
} AmsNetId, *PAmsNetId;
typedef struct
{
AmsNetId netId;
unsigned short port;
} AmsAddr, *PAmsAddr;
typedef struct
{
unsigned char version;
unsigned char revision;
unsigned short build;
} AdsVersion;
typedef AdsVersion* PAdsVersion;
////////////////////////////////////////////////////////////////////////////////
typedef enum nAdsTransMode
{
ADSTRANS_NOTRANS = 0,
ADSTRANS_CLIENTCYCLE = 1,
ADSTRANS_CLIENTONCHA = 2,
ADSTRANS_SERVERCYCLE = 3,
ADSTRANS_SERVERONCHA = 4,
}ADSTRANSMODE;
typedef enum nAdsState
{
ADSSTATE_INVALID = 0,
ADSSTATE_IDLE = 1,
ADSSTATE_RESET = 2,
ADSSTATE_INIT = 3,
ADSSTATE_START = 4,
ADSSTATE_RUN = 5,
ADSSTATE_STOP = 6,
ADSSTATE_SAVECFG = 7,
ADSSTATE_LOADCFG = 8,
ADSSTATE_POWERFAILURE = 9,
ADSSTATE_POWERGOOD = 10,
ADSSTATE_ERROR = 11,
ADSSTATE_SHUTDOWN = 12,
ADSSTATE_SUSPEND = 13,
ADSSTATE_RESUME = 14,
ADSSTATE_CONFIG = 15,
ADSSTATE_RECONFIG = 16,
ADSSTATE_STOPPING = 17,
ADSSTATE_INCOMPATIBLE = 18,
ADSSTATE_EXCEPTION = 19,
ADSSTATE_MAXSTATES
} ADSSTATE;
typedef struct
{
unsigned long cbLength;
ADSTRANSMODE nTransMode;
unsigned long nMaxDelay;
union
{
unsigned long nCycleTime;
unsigned long dwChangeFilter;
};
} AdsNotificationAttrib, *PAdsNotificationAttrib;
////////////////////////////////////////////////////////////////////////////////
typedef struct
{
unsigned long hNotification;
__int64 nTimeStamp;
unsigned long cbSampleSize;
unsigned char data[ANYSIZE_ARRAY];
} AdsNotificationHeader, *PAdsNotificationHeader;
////////////////////////////////////////////////////////////////////////////////
#define ADSNOTIFICATION_PDATA( pAdsNotificationHeader ) \
( (unsigned char*) (((PAdsNotificationHeader)pAdsNotificationHeader->data )
////////////////////////////////////////////////////////////////////////////////
typedef void (__stdcall *PAdsNotificationFuncEx)( AmsAddr* pAddr,
AdsNotificationHeader* pNotification,
unsigned long hUser
);
////////////////////////////////////////////////////////////////////////////////
#define ADSSYMBOLFLAG_PERSISTENT 0x00000001
#define ADSSYMBOLFLAG_BITVALUE 0x00000002
#define ADSSYMBOLFLAG_REFERENCETO 0x0004
#define ADSSYMBOLFLAG_TYPEGUID 0x0008
#define ADSSYMBOLFLAG_TCCOMIFACEPTR 0x0010
#define ADSSYMBOLFLAG_READONLY 0x0020
#define ADSSYMBOLFLAG_CONTEXTMASK 0x0F00
////////////////////////////////////////////////////////////////////////////////
// ADS data types
typedef char ADS_INT8;
typedef unsigned char ADS_UINT8;
typedef short ADS_INT16;
typedef unsigned short ADS_UINT16;
typedef long ADS_INT32;
typedef unsigned long ADS_UINT32;
typedef __int64 ADS_INT64;
typedef unsigned __int64 ADS_UINT64;
typedef float ADS_REAL32;
typedef double ADS_REAL64;
typedef long double ADS_REAL80;
////////////////////////////////////////////////////////////////////////////////
// ADS symbol information
typedef struct
{
unsigned long entryLength; // length of complete symbol entry
unsigned long iGroup; // indexGroup of symbol: input, output etc.
unsigned long iOffs; // indexOffset of symbol
unsigned long size; // size of symbol ( in bytes, 0 = bit )
unsigned long dataType; // adsDataType of symbol
unsigned long flags; // see above
unsigned short nameLength; // length of symbol name (excl. \0)
unsigned short typeLength; // length of type name (excl. \0)
unsigned short commentLength; // length of comment (excl. \0)
} AdsSymbolEntry, *PAdsSymbolEntry, **PPAdsSymbolEntry;
#define PADSSYMBOLNAME(p) ((char*)(((PAdsSymbolEntry)p)+1))
#define PADSSYMBOLTYPE(p) (((char*)(((PAdsSymbolEntry)p)+1))+((PAdsSymbolEntry)p)->nameLength+1)
#define PADSSYMBOLCOMMENT(p) (((char*)(((PAdsSymbolEntry)p)+1))+((PAdsSymbolEntry)p)->nameLength+1+((PAdsSymbolEntry)p)->typeLength+1)
#define PADSNEXTSYMBOLENTRY(pEntry) (*((unsigned long*)(((char*)pEntry)+((PAdsSymbolEntry)pEntry)->entryLength)) \
? ((PAdsSymbolEntry)(((char*)pEntry)+((PAdsSymbolEntry)pEntry)->entryLength)): NULL)
////////////////////////////////////////////////////////////////////////////////
#define ADSDATATYPEFLAG_DATATYPE 0x00000001
#define ADSDATATYPEFLAG_DATAITEM 0x00000002
#define ADSDATATYPE_VERSION_NEWEST 0x00000001
typedef struct
{
unsigned long lBound;
unsigned long elements;
} AdsDatatypeArrayInfo, *PAdsDatatypeArrayInfo;
typedef struct
{
ADS_UINT32 entryLength; // length of complete datatype entry
ADS_UINT32 version; // version of datatype structure
union {
ADS_UINT32 hashValue; // hashValue of datatype to compare datatypes
ADS_UINT32 offsGetCode; // code offset to getter method
};
union {
ADS_UINT32 typeHashValue; // hashValue of base type
ADS_UINT32 offsSetCode; // code offset to setter method
};
ADS_UINT32 size; // size of datatype ( in bytes )
ADS_UINT32 offs; // offs of dataitem in parent datatype ( in bytes )
ADS_UINT32 dataType; // adsDataType of symbol (if alias)
ADS_UINT32 flags; //
ADS_UINT16 nameLength; // length of datatype name (excl. \0)
ADS_UINT16 typeLength; // length of dataitem type name (excl. \0)
ADS_UINT16 commentLength; // length of comment (excl. \0)
ADS_UINT16 arrayDim; //
ADS_UINT16 subItems; //
// ADS_INT8 name[]; // name of datatype with terminating \0
// ADS_INT8 type[]; // type name of dataitem with terminating \0
// ADS_INT8 comment[]; // comment of datatype with terminating \0
// AdsDatatypeArrayInfo array[];
// AdsDatatypeEntry subItems[];
// GUID typeGuid; // typeGuid of this type if ADSDATATYPEFLAG_TYPEGUID is set
// ADS_UINT8 copyMask[]; // "size" bytes containing 0xff or 0x00 - 0x00 means ignore byte (ADSIGRP_SYM_VALBYHND_WITHMASK)
} AdsDatatypeEntry, *PAdsDatatypeEntry, **PPAdsDatatypeEntry;
#define PADSDATATYPENAME(p) ((PCHAR)(((PAdsDatatypeEntry)p)+1))
#define PADSDATATYPETYPE(p) (((PCHAR)(((PAdsDatatypeEntry)p)+1))+((PAdsDatatypeEntry)p)->nameLength+1)
#define PADSDATATYPECOMMENT(p) (((PCHAR)(((PAdsDatatypeEntry)p)+1))+((PAdsDatatypeEntry)p)->nameLength+1+((PAdsDatatypeEntry)p)->typeLength+1)
#define PADSDATATYPEARRAYINFO(p) (PAdsDatatypeArrayInfo)(((PCHAR)(((PAdsDatatypeEntry)p)+1))+((PAdsDatatypeEntry)p)->nameLength+1+((PAdsDatatypeEntry)p)->typeLength+1+((PAdsDatatypeEntry)p)->commentLength+1)
__inline PAdsDatatypeEntry AdsDatatypeStructItem(PAdsDatatypeEntry p, unsigned short iItem)
{
unsigned short i;
PAdsDatatypeEntry pItem;
if ( iItem >= p->subItems )
return NULL;
pItem = (PAdsDatatypeEntry)(((unsigned char*)(p+1))+p->nameLength+p->typeLength+p->commentLength+3+p->arrayDim*sizeof(AdsDatatypeArrayInfo));
for ( i=0; i < iItem; i++ )
pItem = (PAdsDatatypeEntry)(((unsigned char*)pItem)+pItem->entryLength);
return pItem;
}
////////////////////////////////////////////////////////////////////////////////
typedef struct
{
unsigned long nSymbols;
unsigned long nSymSize;
} AdsSymbolUploadInfo, *PAdsSymbolUploadInfo;
////////////////////////////////////////////////////////////////////////////////
typedef struct
{
unsigned long nSymbols;
unsigned long nSymSize;
unsigned long nDatatypes;
unsigned long nDatatypeSize;
unsigned long nMaxDynSymbols;
unsigned long nUsedDynSymbols;
} AdsSymbolUploadInfo2, *PAdsSymbolUploadInfo2;
////////////////////////////////////////////////////////////////////////////////
typedef struct
{
unsigned long indexGroup;
unsigned long indexOffset;
unsigned long cbLength;
} AdsSymbolInfoByName, *PAdsSymbolInfoByName;
////////////////////////////////////////////////////////////////////////////////
// AMS events
typedef enum nAmsRouterEvent
{
AMSEVENT_ROUTERSTOP = 0,
AMSEVENT_ROUTERSTART = 1,
AMSEVENT_ROUTERREMOVED = 2
}AmsRouterEvent;
typedef void (*PAmsRouterNotificationFunc)( long nEvent );
typedef void ( __stdcall *PAmsRouterNotificationFuncEx)( long nEvent );
////////////////////////////////////////////////////////////////////////////////
#pragma pack( pop )
#endif // __ADSDEF_H__