OpcUaCanOpen
CANopen OPC-UA server
CanOpenObject.h
Go to the documentation of this file.
1 #ifndef __CANOPENOBJECT_H__
2 #define __CANOPENOBJECT_H__
3 
4 #include "uaobjecttypes.h"
5 #include "uasemaphore.h"
7 #include "CanBusAccess.h"
8 
9 #include "CanOpenData.h"
10 #include "CANOpenServerConfig.h"
11 #include "CanBusObject.h"
12 
13 namespace CanOpen
14 {
19  class CanObject;
20 
25  {
26 
30  public:
31 
39  pUserDeviceStruct *parent,::xml_schema::type *conf ,UaNode *blink, int code);
40 
42  virtual ~CanOpenObject(void);
43 
45 
46  const char *getBusName() {
47  CanBusObject * cb = static_cast<CanBusObject *>(getTopInterface()->getDevice());
48  const char *bn = cb->getCanBusName().c_str() ;
49  return bn;
50  }
51 
52  OpcUa_UInt16 getCobId()
53  {
54  return m_cobId;
55  }
56 
57 // virtual UaStatus getDeviceMessage(OpcUa_UInt32) = 0;
58 // virtual UaStatus sendDeviceMessage(OpcUa_UInt32 code, UaDataValue *value = 0) = 0;
59 
60  virtual void pass(const CanMsgStruct *) = 0;
61 
62  virtual bool isMsgForObject(const CanMsgStruct *);
63 
65  UaStatus waitOperation(OpcUa_UInt timeout);
66  UaStatus waitOperation();
67 
68  virtual void messageCame() {
70  }
71 
72  virtual UaStatus releaseOperation();
73  virtual UaStatus signalOperation()
74  {
75  if ((m_iMaxCount - m_iCount) > 0)
76  ++m_iCount;
77  return m_waitMessage.post(1);
78  }
79 
80  UaByteArray m_buffer;
81  UaDateTime m_udt;
82 
83  protected:
84 
85  OpcUa_UInt32 m_iTimeout;
86  UaSemaphore m_waitMessage;
87 
88  OpcUa_UInt16 m_cobId;
90  OpcUa_UInt32 m_iMaxCount;
91  OpcUa_UInt32 m_iCount;
92  };
93 }
94 #endif
95