OpcUaCanOpen
CANopen OPC-UA server
UaDeviceMethod.h
Go to the documentation of this file.
1 #ifndef __UACANMETHOD_H__
2 #define __UACANMETHOD_H__
3 
4 #include "uaobjecttypes.h"
5 #include "uabasenodes.h"
6 #include <opcua_dataitemtype.h>
7 #include <opcua_basedatavariabletype.h>
9 #include "NmBuildingAutomation.h"
10 
11 namespace AddressSpace
12 {
16  using namespace UserDevice;
17 
18  template<class T>
19  class UaDeviceMethod : public OpcUa::BaseMethod
20  {
21  UA_DISABLE_COPY(UaDeviceMethod);
22  public:
29  UaDeviceMethod(T* cur , NmBuildingAutomation* pNodeManager,UaMethod* instance,UaMutexRefCounted *pSharedMutex)
30  :OpcUa::BaseMethod(cur,instance,pSharedMutex)
31  {
32 
33  m_iCode = instance->nodeId().identifierNumeric();
34 
35  pUserDeviceStruct *udb = pNodeManager->m_pControlInterface->createInterfaceEntry(static_cast<pUserDeviceStruct*>(cur->getUserData()), m_iCode, 0, this);
36  setUserData(udb); // Open Device hardware channel
37  //if (udb)
38  // udb->addReference();
39  }
40 
41  UaDeviceMethod(T* cur, const UaNodeId& nodeId, const UaString& name, NmBuildingAutomation* pNodeManager, OpcUa_UInt32 icode, UaMutexRefCounted *pSharedMutex)
42  :OpcUa::BaseMethod(nodeId, name, pNodeManager->getNameSpaceIndex(), pSharedMutex)
43  {
44  m_iCode = icode;
45  pUserDeviceStruct *udb = pNodeManager->m_pControlInterface->createInterfaceEntry(static_cast<pUserDeviceStruct*>(cur->getUserData()), m_iCode, 0, this);
46  setUserData(udb); // Open Device hardware channel
47  //if (udb)
48  // udb->addReference();
49  }
50 
52  virtual UaStatus execute()
53  {
54  UaStatus ret = OpcUa_Bad;
55  pUserDeviceStruct* udInterf = static_cast<pUserDeviceStruct *>(getUserData());
56  if (udInterf) {
57  InterfaceUserDataBase* uInterf = static_cast<InterfaceUserDataBase *>(udInterf->getDevice());
58  ret = uInterf->sendDeviceMessage(m_iCode);
59  }
60  return ret;
61  }
62 
64  virtual ~UaDeviceMethod(void)
65  {
66  };
67 
68  OpcUa_UInt32 getFunctionCode() { return m_iCode; }
69 
70  protected:
71  OpcUa_UInt32 m_iCode;
72  };
73 }
74 #endif
75