ua_nodes.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #ifndef UA_NODES_H_
  2. #define UA_NODES_H_
  3. #include "ua_server.h"
  4. #include "ua_types_generated.h"
  5. #include "ua_types_encoding_binary.h"
  6. #define UA_TYPE_HANDLING_FUNCTIONS(TYPE) \
  7. TYPE UA_EXPORT * TYPE##_new(void); \
  8. void UA_EXPORT TYPE##_init(TYPE * p); \
  9. void UA_EXPORT TYPE##_delete(TYPE * p); \
  10. void UA_EXPORT TYPE##_deleteMembers(TYPE * p); \
  11. UA_StatusCode UA_EXPORT TYPE##_copy(const TYPE *src, TYPE *dst);
  12. #define UA_STANDARD_NODEMEMBERS \
  13. UA_NodeId nodeId; \
  14. UA_NodeClass nodeClass; \
  15. UA_QualifiedName browseName; \
  16. UA_LocalizedText displayName; \
  17. UA_LocalizedText description; \
  18. UA_UInt32 writeMask; \
  19. UA_UInt32 userWriteMask; \
  20. size_t referencesSize; \
  21. UA_ReferenceNode *references;
  22. typedef struct {
  23. UA_STANDARD_NODEMEMBERS
  24. } UA_Node;
  25. void UA_Node_deleteAnyNodeClass(UA_Node *node);
  26. void UA_Node_deleteMembersAnyNodeClass(UA_Node *node);
  27. UA_Node * UA_Node_copyAnyNodeClass(const UA_Node *node);
  28. /**************/
  29. /* ObjectNode */
  30. /**************/
  31. typedef struct {
  32. UA_STANDARD_NODEMEMBERS
  33. UA_Byte eventNotifier;
  34. void *instanceHandle;
  35. } UA_ObjectNode;
  36. UA_TYPE_HANDLING_FUNCTIONS(UA_ObjectNode)
  37. /******************/
  38. /* ObjectTypeNode */
  39. /******************/
  40. typedef struct {
  41. UA_STANDARD_NODEMEMBERS
  42. UA_Boolean isAbstract;
  43. UA_ObjectLifecycleManagement lifecycleManagement;
  44. } UA_ObjectTypeNode;
  45. UA_TYPE_HANDLING_FUNCTIONS(UA_ObjectTypeNode)
  46. typedef enum {
  47. UA_VALUESOURCE_VARIANT,
  48. UA_VALUESOURCE_DATASOURCE
  49. } UA_ValueSource;
  50. /****************/
  51. /* VariableNode */
  52. /****************/
  53. typedef struct {
  54. UA_STANDARD_NODEMEMBERS
  55. UA_Int32 valueRank; /**< n >= 1: the value is an array with the specified number of dimensions.
  56. n = 0: the value is an array with one or more dimensions.
  57. n = -1: the value is a scalar.
  58. n = -2: the value can be a scalar or an array with any number of dimensions.
  59. n = -3: the value can be a scalar or a one dimensional array. */
  60. UA_ValueSource valueSource;
  61. union {
  62. struct {
  63. UA_Variant value;
  64. UA_ValueCallback callback;
  65. } variant;
  66. UA_DataSource dataSource;
  67. } value;
  68. /* <--- similar to variabletypenodes up to there--->*/
  69. UA_Byte accessLevel;
  70. UA_Byte userAccessLevel;
  71. UA_Double minimumSamplingInterval;
  72. UA_Boolean historizing;
  73. } UA_VariableNode;
  74. UA_TYPE_HANDLING_FUNCTIONS(UA_VariableNode)
  75. /** Make a copy but leave out the references and the variable */
  76. UA_StatusCode UA_VariableNode_copyWithoutRefsAndVariable(const UA_VariableNode *src, UA_VariableNode *dst);
  77. /********************/
  78. /* VariableTypeNode */
  79. /********************/
  80. typedef struct {
  81. UA_STANDARD_NODEMEMBERS
  82. UA_Int32 valueRank;
  83. UA_ValueSource valueSource;
  84. union {
  85. struct {
  86. UA_Variant value;
  87. UA_ValueCallback callback;
  88. } variant;
  89. UA_DataSource dataSource;
  90. } value;
  91. /* <--- similar to variablenodes up to there--->*/
  92. UA_Boolean isAbstract;
  93. } UA_VariableTypeNode;
  94. UA_TYPE_HANDLING_FUNCTIONS(UA_VariableTypeNode)
  95. /*********************/
  96. /* ReferenceTypeNode */
  97. /*********************/
  98. typedef struct {
  99. UA_STANDARD_NODEMEMBERS
  100. UA_Boolean isAbstract;
  101. UA_Boolean symmetric;
  102. UA_LocalizedText inverseName;
  103. } UA_ReferenceTypeNode;
  104. UA_TYPE_HANDLING_FUNCTIONS(UA_ReferenceTypeNode)
  105. /**************/
  106. /* MethodNode */
  107. /**************/
  108. typedef struct {
  109. UA_STANDARD_NODEMEMBERS
  110. UA_Boolean executable;
  111. UA_Boolean userExecutable;
  112. #ifdef ENABLE_METHODCALLS
  113. void *methodHandle;
  114. UA_MethodCallback attachedMethod;
  115. #endif
  116. } UA_MethodNode;
  117. UA_TYPE_HANDLING_FUNCTIONS(UA_MethodNode)
  118. /************/
  119. /* ViewNode */
  120. /************/
  121. typedef struct {
  122. UA_STANDARD_NODEMEMBERS
  123. UA_Byte eventNotifier;
  124. /* <-- the same as objectnode until here --> */
  125. UA_Boolean containsNoLoops;
  126. } UA_ViewNode;
  127. UA_TYPE_HANDLING_FUNCTIONS(UA_ViewNode)
  128. /****************/
  129. /* DataTypeNode */
  130. /****************/
  131. typedef struct {
  132. UA_STANDARD_NODEMEMBERS
  133. UA_Boolean isAbstract;
  134. } UA_DataTypeNode;
  135. UA_TYPE_HANDLING_FUNCTIONS(UA_DataTypeNode)
  136. #endif /* UA_NODES_H_ */