OpcUaCanOpen
CANopen OPC-UA server
UaCanTrace.cpp
Go to the documentation of this file.
1
/******************************************************************************
2
** UaCanTrace.cpp
3
**
4
** Project: C++ OPC SDK base module
5
**
6
** Portable trace functionality class.
7
**
8
******************************************************************************/
9
#include "
UaCanTrace.h
"
10
#include "CanBusAccess.h"
11
//#include <stdarg.h>
12
//#include <stdio.h>
13
//#include <stdlib.h>
14
//#include "opcua_core.h"
15
//#include "opcua_thread.h"
16
//#include "LogIt/LogIt.h"
17
18
//FILE * CanOpen::UaCanTrace::s_pfCanTrace = NULL;
19
//UaString* CanOpen::UaCanTrace::s_pCanAppName = NULL;
20
//UaString* CanOpen::UaCanTrace::s_pCanTraceFile = NULL;
21
//UaMutex * CanOpen::UaCanTrace::s_pCanLock = NULL;
22
//unsigned int CanOpen::UaCanTrace::s_nCanMaxTraceEntries = 100000;
23
//unsigned int CanOpen::UaCanTrace::s_nCanNumBackupFiles = 5;
24
//unsigned int CanOpen::UaCanTrace::s_nCanCountTraceEntries = 0;
25
//bool CanOpen::UaCanTrace::s_IsLocalTimeCanTrace = true;
26
//bool CanOpen::UaCanTrace::s_PrintDateInCanTrace = true;
27
//OpcUa_UInt32 CanOpen::UaCanTrace::s_traceFunction = 0;
28
29
namespace
CanOpen
30
{
31
std::map<int,Log::LogComponentHandle>
UaCanTrace::m_CanTraceComponent
;
32
34
UaCanTrace::UaCanTrace
(
35
const
UaNodeId& nodeId,
36
const
UaString&
name
,
37
OpcUa_UInt16 browseNameNameSpaceIndex,
38
const
UaVariant& initialValue,
39
OpcUa_Byte accessLevel,
40
NodeManagerConfig* pNodeConfig
41
) : OpcUa::BaseVariableType(nodeId,
name
, pNodeConfig->getNameSpaceIndex(),
42
initialValue, Ua_AccessLevel_CurrentRead | Ua_AccessLevel_CurrentWrite, pNodeConfig)
43
44
{
45
setValueHandling(UaVariable_Value_Cache);
46
47
}
48
49
void
UaCanTrace::initTraceComponent
()
50
{
51
Log::initializeLogging
(
Log::INF
);
52
const
std::string
dbgname =
"NoTrace"
;
53
m_CanTraceComponent
[
NoTrace
] =
Log::registerLoggingComponent
(dbgname,
Log::INF
);
54
m_CanTraceComponent
[
lPdoMessage
] =
Log::registerLoggingComponent
(
"PDO Message Trace"
,
Log::INF
);
55
m_CanTraceComponent
[
lSdoMessage
] =
Log::registerLoggingComponent
(
"SDO Message Trace"
,
Log::INF
);
56
m_CanTraceComponent
[
lSegSdoMessage
] =
Log::registerLoggingComponent
(
"Segmented SDO Trace"
,
Log::INF
);
57
m_CanTraceComponent
[
lNGMessage
] =
Log::registerLoggingComponent
(
"Node guarding Trace"
,
Log::INF
);
58
m_CanTraceComponent
[
lEmergMessage
] =
Log::registerLoggingComponent
(
"Emergency message Trace"
,
Log::INF
);
59
m_CanTraceComponent
[
lNMTMessage
] =
Log::registerLoggingComponent
(
"NMT Trace"
,
Log::INF
);
60
m_CanTraceComponent
[
lCanTrace
] =
Log::registerLoggingComponent
(
"CanModule"
,
Log::INF
);
61
m_CanTraceComponent
[
lPdo1Message
] =
Log::registerLoggingComponent
(
"PDO1 Message Trace"
,
Log::INF
);
62
m_CanTraceComponent
[
lPdo2Message
] =
Log::registerLoggingComponent
(
"PDO2 Message Trace"
,
Log::INF
);
63
m_CanTraceComponent
[
lPdo3Message
] =
Log::registerLoggingComponent
(
"PDO3 Message Trace"
,
Log::INF
);
64
m_CanTraceComponent
[
lPdo4Message
] =
Log::registerLoggingComponent
(
"PDO4 Message Trace"
,
Log::INF
);
65
}
66
68
UaCanTrace::~UaCanTrace
()
69
{
70
// s_pCanLock = 0;
71
}
72
/*
73
UaStatus UaCanTrace::setValue(Session *pSession, const UaDataValue& dataValue, OpcUa_Boolean checkAccessLevel)
74
{
75
UaStatus ret;
76
ret = OpcUa::BaseVariableType::setValue(pSession, dataValue, checkAccessLevel);
77
putTraceFunctions(dataValue.value()->Value.Int32);
78
return ret;
79
}
80
*/
88
//long UaCanTrace::initCanTrace(
89
// unsigned int maxTraceEntries,
90
// unsigned int NumBackupFiles,
91
// const UaString& traceFile,
92
// const UaString & appName)
93
//{
94
// if(s_pfCanTrace)
95
// {
96
// return -1;
97
// }
98
99
// if(s_pCanLock == NULL)
100
// {
101
// s_pCanLock = new UaMutex;
102
// }
103
// UaMutexLocker lock(s_pCanLock);
104
105
// if ( s_pCanAppName )
106
// {
107
// *s_pCanAppName = appName;
108
// }
109
// else
110
// {
111
// s_pCanAppName = new UaString(appName);
112
// }
113
// if ( s_pCanTraceFile )
114
// {
115
// *s_pCanTraceFile = traceFile;
116
// }
117
// else
118
// {
119
// s_pCanTraceFile = new UaString(traceFile);
120
// }
121
// s_nCanMaxTraceEntries = maxTraceEntries;
122
// s_nCanNumBackupFiles = NumBackupFiles;
123
// s_nCanCountTraceEntries = 2;
124
// s_traceFunction = 0;
125
// backupTrace();
126
127
// if( s_pfCanTrace == NULL)
128
// {
129
// return -1;
130
// }
131
132
// return 0;
133
//}
134
141
//long UaCanTrace::changeCanTrace(
142
// unsigned int maxTraceEntries,
143
// unsigned int NumBackupFiles,
144
// const UaString& traceFile)
145
//{
146
// if(s_pfCanTrace == NULL || s_pCanTraceFile == NULL)
147
// {
148
// return -1;
149
// }
150
// if(s_pCanLock == NULL)
151
// {
152
// s_pCanLock = new UaMutex;
153
// }
154
// UaMutexLocker lock(s_pCanLock);
155
156
// s_nCanMaxTraceEntries = maxTraceEntries;
157
158
// s_nCanNumBackupFiles = NumBackupFiles;
159
160
// if( traceFile != *s_pCanTraceFile )
161
// {
162
// fclose(s_pfCanTrace);
163
// s_pfCanTrace = NULL;
164
165
// *s_pCanTraceFile = traceFile;
166
167
// if( (s_pfCanTrace = fopen( traceFile.toUtf8(), "w")) == NULL)
168
// {
169
// return -1;
170
// }
171
172
// printHeader(s_pfCanTrace);
173
// }
174
175
// return 0;
176
//}
180
//OpcUa_UInt32 UaCanTrace::getTraceLevel()
181
//{
182
// return s_traceFunction;
183
//}
184
188
//void UaCanTrace::setTraceFunction(CanTraceFunction ctf)
189
//{
190
// s_traceFunction = s_traceFunction | ctf;
191
//}
192
196
void
UaCanTrace::putTraceFunctions
(OpcUa_UInt32 ctf)
197
{
198
for
(
auto
& it :
UaCanTrace::m_CanTraceComponent
) {
199
if
(ctf & it.first)
200
Log::setComponentLogLevel
(it.second,
Log::TRC
);
201
else
202
Log::setComponentLogLevel
(it.second,
Log::INF
);
203
}
204
}
205
209
//void UaCanTrace::setLocalTimeOutput(bool isLocal)
210
//{
211
// s_IsLocalTimeCanTrace = isLocal;
212
//}
213
217
//void UaCanTrace::setPrintDateInTrace(bool printDateInTrace)
218
//{
219
// s_PrintDateInCanTrace = printDateInTrace;
220
//}
221
225
//void UaCanTrace::tPdoMessage(const char * fmt,...)
226
//{
227
// UaMutexLocker lock(s_pCanLock);
228
// if( s_traceFunction & PdoMessage ) {
229
// fprintf( s_pfCanTrace, "Pdo Message " /*,pTraceCanBus->browseName().toString().toUtf8()*/ );
230
// va_list arg_ptr;
231
// va_start(arg_ptr, fmt);
232
// trace(fmt, arg_ptr);
233
// va_end(arg_ptr);
234
// }
235
//}
236
240
//void UaCanTrace::tSdoMessage(const char * fmt,...)
241
//{
242
// UaMutexLocker lock(s_pCanLock);
243
// if( s_traceFunction & SdoMessage ) {
244
// fprintf( s_pfCanTrace, "Sdo Message "/*,pTraceCanBus->browseName().toString().toUtf8()*/ );
245
// va_list arg_ptr;
246
// va_start(arg_ptr, fmt);
247
// trace(fmt, arg_ptr);
248
// va_end(arg_ptr);
249
// }
250
//}
251
255
//void UaCanTrace::tSegSdoMessage(const char * fmt,...)
256
//{
257
// if( s_traceFunction & SegSdoMessage ) {
258
// UaMutexLocker lock(s_pCanLock);
259
// fprintf( s_pfCanTrace, "SegSdo Message "/*,pTraceCanBus->browseName().toString().toUtf8() */);
260
// va_list arg_ptr;
261
// va_start(arg_ptr, fmt);
262
// trace( fmt, arg_ptr);
263
// va_end(arg_ptr);
264
// }
265
//}
266
270
//void UaCanTrace::tNGMessage(const char * fmt,...)
271
//{
272
// if( s_traceFunction & NGMessage ) {
273
// fprintf( s_pfCanTrace, "NG Message "/*,pTraceCanBus->browseName().toString().toUtf8() */);
274
// UaMutexLocker lock(s_pCanLock);
275
// va_list arg_ptr;
276
// va_start(arg_ptr, fmt);
277
// trace( fmt, arg_ptr);
278
// va_end(arg_ptr);
279
// }
280
//}
281
285
//void UaCanTrace::tEmergMessage(const char * fmt,...)
286
//{
287
// if( s_traceFunction & EmergMessage ) {
288
// fprintf( s_pfCanTrace, "Emerg Message "/*,pTraceCanBus->browseName().toString().toUtf8()*/ );
289
// UaMutexLocker lock(s_pCanLock);
290
// va_list arg_ptr;
291
// va_start(arg_ptr, fmt);
292
// trace( fmt, arg_ptr);
293
// va_end(arg_ptr);
294
// }
295
//}
296
301
//void UaCanTrace::trace( const char * fmt,
302
// va_list arg_ptr)
303
//{
304
// char strTemp[1900];
305
// OpcUa_StringA_vsnprintf(strTemp, 1900, (const OpcUa_StringA)fmt, arg_ptr);
306
// strTemp[1899] = 0;
307
// traceOutput( strTemp);
308
//}
309
314
//void UaCanTrace::traceOutput(const char * sContent, int nModule)
315
//{
316
// OpcUa_ReferenceParameter(nModule);
317
// char strTemp[2000];
318
319
// // time information
320
// //
321
// UaDateTime time = UaDateTime::now();
322
323
// s_nCanCountTraceEntries++;
324
// if(s_IsLocalTimeCanTrace)
325
// {
326
// if(s_PrintDateInCanTrace)
327
// {
328
// OpcUa_StringA_snprintf(strTemp, 2000, (OpcUa_StringA)"%s %s|%04X* %s\n", time.toDateString().toUtf8(), time.toTimeString().toUtf8(), OpcUa_Thread_GetCurrentThreadId(), sContent);
329
// //fprintf( s_pfTrace, "%s %s|%d|%04X* %s\n", time.toDateString().toUtf8(), time.toTimeString().toUtf8(), traceLevel, OpcUa_Thread_GetCurrentThreadId(), sContent);
330
// }
331
// else
332
// {
333
// OpcUa_StringA_snprintf(strTemp, 2000, (OpcUa_StringA)"%s|%04X* %s\n", time.toTimeString().toUtf8(), OpcUa_Thread_GetCurrentThreadId(), sContent);
334
// //fprintf( s_pfTrace, "%s|%d|%04X* %s\n", time.toTimeString().toUtf8(), traceLevel, OpcUa_Thread_GetCurrentThreadId(), sContent);
335
// }
336
// }
337
// else
338
// {
339
// if(s_PrintDateInCanTrace)
340
// {
341
// OpcUa_StringA_snprintf(strTemp, 2000, (OpcUa_StringA)"%s %s|%04X* %s\n", time.toDateString().toUtf8(), time.toTimeString().toUtf8(), OpcUa_Thread_GetCurrentThreadId(), sContent);
342
// //fprintf( s_pfTrace, "%s %s|%d|%04X* %s\n", time.toDateString().toUtf8(), time.toTimeString().toUtf8(), traceLevel, OpcUa_Thread_GetCurrentThreadId(), sContent);
343
// }
344
// else
345
// {
346
// OpcUa_StringA_snprintf(strTemp, 2000, (OpcUa_StringA)"%s|%04X* %s\n", time.toTimeString().toUtf8(), OpcUa_Thread_GetCurrentThreadId(), sContent);
347
// }
348
// }
349
// strTemp[1999] = 0;
350
// fprintf( s_pfCanTrace, "%s", strTemp);
351
// fflush( s_pfCanTrace);
352
353
// if( s_nCanCountTraceEntries >= s_nCanMaxTraceEntries )
354
// {
355
// backupTrace();
356
// }
357
//}
358
360
//void UaCanTrace::closeTrace()
361
//{
362
// if(s_pCanLock == NULL)
363
// {
364
// s_pCanLock = new UaMutex;
365
// }
366
367
// s_pCanLock->lock();
368
// if (s_pfCanTrace)
369
// {
370
// fclose( s_pfCanTrace);
371
// s_pfCanTrace = NULL;
372
// }
373
374
// s_pCanLock->unlock();
375
// if(s_pCanLock)
376
// {
377
// delete s_pCanLock;
378
// s_pCanLock = NULL;
379
// }
380
381
// if ( s_pCanAppName )
382
// {
383
// delete s_pCanAppName;
384
// s_pCanAppName = NULL;
385
// }
386
// if ( s_pfCanTrace )
387
// {
388
// delete s_pfCanTrace;
389
// s_pfCanTrace = NULL;
390
// }
391
// if ( s_pCanTraceFile )
392
// {
393
// delete s_pCanTraceFile;
394
// s_pCanTraceFile = NULL;
395
// }
396
//}
397
402
//void UaCanTrace::copyFile(const UaString& oldName, const UaString& newName)
403
//{
404
// UA_unlink(newName.toUtf8());
405
// Ua_rename(oldName.toUtf8(), newName.toUtf8());
406
//}
407
409
//void UaCanTrace::backupTrace()
410
//{
411
// if(s_pfCanTrace)
412
// {
413
// fclose(s_pfCanTrace);
414
// s_pfCanTrace = NULL;
415
// }
416
417
// s_nCanCountTraceEntries = 2;
418
419
// UaString sOldFile;
420
// UaString sNewFile;
421
// unsigned int i;
422
423
// for ( i=s_nCanNumBackupFiles; i>1; i--)
424
// {
425
// buildBackupFileName(*s_pCanTraceFile, i-1, sOldFile);
426
// buildBackupFileName(*s_pCanTraceFile, i, sNewFile);
427
// copyFile(sOldFile, sNewFile);
428
// }
429
430
// buildBackupFileName(*s_pCanTraceFile, 1, sNewFile);
431
// copyFile(*s_pCanTraceFile, sNewFile);
432
433
// if( (s_pfCanTrace = fopen( s_pCanTraceFile->toUtf8(), "w")) == NULL)
434
// {
435
// s_pfCanTrace = NULL;
436
// }
437
// else
438
// {
439
// printHeader(s_pfCanTrace);
440
// }
441
//}
442
446
//void UaCanTrace::printHeader(FILE * pFile)
447
//{
448
// UaDateTime time = UaDateTime::now();
449
// fprintf( pFile, "** %s: start trace\n", s_pCanAppName->toUtf8());
450
// fprintf( pFile, "** Date:\t%s\n**\n", time.toDateString().toUtf8());
451
// fflush( pFile );
452
//}
453
459
//void UaCanTrace::buildBackupFileName( const UaString& originalName, unsigned int index, UaString& backupFileName)
460
//{
461
// char tmpFileName1[2000];
462
// char tmpFileName2[2000];
463
464
// const char* pLastDot = strrchr (originalName.toUtf8(), '.');
465
466
// if (pLastDot != NULL )
467
// {
468
// int nChars = (int)(pLastDot - originalName.toUtf8());
469
// if ( nChars > 1900 )
470
// {
471
// nChars = 1900;
472
// }
473
// strncpy (tmpFileName1, originalName.toUtf8(), nChars );
474
// tmpFileName1[nChars] = '\0';
475
// snprintf(tmpFileName2, 2000, "%s_%d%s", tmpFileName1, index, pLastDot);
476
// backupFileName = tmpFileName2;
477
// }
478
// else
479
// {
480
// UaVariant avTemp;
481
// backupFileName = originalName;
482
// avTemp.setInt32(index);
483
// backupFileName += "_";
484
// backupFileName += avTemp.toString();
485
// backupFileName += ".log";
486
// }
487
//}
488
489
}
CanOpen
src
UaCanTrace.cpp
Generated on Fri Sep 11 2020 14:29:56 for OpcUaCanOpen by
1.8.14