OpcUaCanOpen
CANopen OPC-UA server
UaCanTrace.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** uacantrace.h
3 **
4 ** ** Project: C++ OPC SDK base module
5 **
6 ** Class provides trace functionality.
7 **
8 ******************************************************************************/
9 #ifndef UACANTRACE_H
10 #define UACANTRACE_H
11 
12 #include "NmBuildingAutomation.h"
13 #include <iomanip>
14 #include "uatrace.h"
15 #include "uavariant.h"
16 #include "opcua_basevariabletype.h"
17 #include "uaplatformdefs.h"
18 #include "LogIt.h"
19 #include <list>
20 #include "CCanAccess.h"
21 #include "CanTraceFunction.h"
22 
23 namespace CanOpen
24 {
28  class UaCanTrace : UaTrace, public OpcUa::BaseVariableType
29  {
30  public:
32 
33  //enum CanTraceFunction {
34  // NoTrace = 0, /*!< Trace_Function: No Trace */
35  // PdoMessage = 1, /*!< Trace_Function: PdoMessages */
36  // SdoMessage = 2, /*!< Trace_Function: SdoMessages */
37  // SegSdoMessage = 4, /*!< Trace_Function: SegSdoMessages */
38  // NGMessage = 8, /*!< Trace_Function: NG Messages */
39  // EmergMessage = 16, /*!< Trace_Function: Emergency Messages */
40  // NMTMessage = 32, /*!< Trace_Function: MNT Messages */
41  // allMessage = 64
42  //};
43 
44  UaCanTrace(
45  const UaNodeId& nodeId,
46  const UaString& name,
47  OpcUa_UInt16 browseNameNameSpaceIndex,
48  const UaVariant& initialValue,
49  OpcUa_Byte accessLevel,
50  NodeManagerConfig* pNodeConfig
51  );
52  virtual ~UaCanTrace();
53 
54  struct pdomes
55  {
57  pdomes(const CanMsgStruct& cms) : c(cms) {}
58  };
59 
60  struct sdomes
61  {
62  UaByteArray buf;
63  sdomes(const UaByteArray& cms) : buf(cms) {}
64  };
65 
66 // virtual UaStatus setValue(Session *pSession, const UaDataValue &dataValue, OpcUa_Boolean checkAccessLevel = OpcUa_True);
67 
68  friend inline std::ostream& operator<<(std::ostream& o, const pdomes& ps)
69  {
70  int len = (int)ps.c.c_dlc;
71  o << std::hex << "cobId=" << ps.c.c_id << " length=" << len << " data=";
72  for (int i = 0; i < len; i++)
73  { o << " " << std::hex << std::setfill('0') << std::setw(2) << (int)(ps.c.c_data[i]); };
74  return(o);
75  }
76 
77  friend inline std::ostream& operator<<(std::ostream& o, const sdomes& ps)
78  {
79  o << " data=";
80  for (int i = 4; i < 8; i++)
81  {
82  o << " " << std::setfill('0') << std::setw(2) << std::hex << (int)(ps.buf.data()[i]);
83  };
84  return(o);
85  }
86 
87  static void putTraceFunctions(OpcUa_UInt32);
88 
89  static void initTraceComponent();
90  static std::map<int,Log::LogComponentHandle> m_CanTraceComponent;
91 
92  private:
93 
94  };
95 }
96 #endif // UACANTRACE_H