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 
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 
50  {
52  const std::string dbgname = "NoTrace";
65  }
66 
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)
201  else
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 }