ua_pubsub.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /* This Source Code Form is subject to the terms of the Mozilla Public
  2. * License, v. 2.0. If a copy of the MPL was not distributed with this
  3. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  4. *
  5. * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
  6. */
  7. #ifndef UA_PUBSUB_H_
  8. #define UA_PUBSUB_H_
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #include "../deps/queue.h"
  13. #include "ua_plugin_pubsub.h"
  14. #include "ua_pubsub_networkmessage.h"
  15. #include "ua_server.h"
  16. #include "ua_server_pubsub.h"
  17. #ifdef UA_ENABLE_PUBSUB /* conditional compilation */
  18. //forward declarations
  19. struct UA_WriterGroup;
  20. typedef struct UA_WriterGroup UA_WriterGroup;
  21. /* The configuration structs (public part of PubSub entities) are defined in include/ua_plugin_pubsub.h */
  22. /**********************************************/
  23. /* PublishedDataSet */
  24. /**********************************************/
  25. typedef struct{
  26. UA_PublishedDataSetConfig config;
  27. UA_DataSetMetaDataType dataSetMetaData;
  28. LIST_HEAD(UA_ListOfDataSetField, UA_DataSetField) fields;
  29. UA_NodeId identifier;
  30. UA_UInt16 fieldSize;
  31. UA_UInt16 promotedFieldsCount;
  32. } UA_PublishedDataSet;
  33. UA_StatusCode
  34. UA_PublishedDataSetConfig_copy(const UA_PublishedDataSetConfig *src, UA_PublishedDataSetConfig *dst);
  35. UA_PublishedDataSet *
  36. UA_PublishedDataSet_findPDSbyId(UA_Server *server, UA_NodeId identifier);
  37. void
  38. UA_PublishedDataSet_deleteMembers(UA_Server *server, UA_PublishedDataSet *publishedDataSet);
  39. /**********************************************/
  40. /* Connection */
  41. /**********************************************/
  42. //the connection config (public part of connection) object is defined in include/ua_plugin_pubsub.h
  43. typedef struct{
  44. UA_PubSubConnectionConfig *config;
  45. //internal fields
  46. UA_PubSubChannel *channel;
  47. UA_NodeId identifier;
  48. LIST_HEAD(UA_ListOfWriterGroup, UA_WriterGroup) writerGroups;
  49. } UA_PubSubConnection;
  50. UA_StatusCode
  51. UA_PubSubConnectionConfig_copy(const UA_PubSubConnectionConfig *src, UA_PubSubConnectionConfig *dst);
  52. UA_PubSubConnection *
  53. UA_PubSubConnection_findConnectionbyId(UA_Server *server, UA_NodeId connectionIdentifier);
  54. void
  55. UA_PubSubConnectionConfig_deleteMembers(UA_PubSubConnectionConfig *connectionConfig);
  56. void
  57. UA_PubSubConnection_deleteMembers(UA_Server *server, UA_PubSubConnection *connection);
  58. /**********************************************/
  59. /* DataSetWriter */
  60. /**********************************************/
  61. #ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
  62. typedef struct UA_DataSetWriterSample{
  63. UA_Boolean valueChanged;
  64. UA_DataValue value;
  65. } UA_DataSetWriterSample;
  66. #endif
  67. typedef struct UA_DataSetWriter{
  68. UA_DataSetWriterConfig config;
  69. //internal fields
  70. LIST_ENTRY(UA_DataSetWriter) listEntry;
  71. UA_NodeId identifier;
  72. UA_NodeId linkedWriterGroup;
  73. UA_NodeId connectedDataSet;
  74. UA_ConfigurationVersionDataType connectedDataSetVersion;
  75. #ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
  76. UA_UInt16 deltaFrameCounter; //actual count of sent deltaFrames
  77. size_t lastSamplesCount;
  78. UA_DataSetWriterSample *lastSamples;
  79. #endif
  80. UA_UInt16 actualDataSetMessageSequenceCount;
  81. } UA_DataSetWriter;
  82. UA_StatusCode
  83. UA_DataSetWriterConfig_copy(const UA_DataSetWriterConfig *src, UA_DataSetWriterConfig *dst);
  84. UA_DataSetWriter *
  85. UA_DataSetWriter_findDSWbyId(UA_Server *server, UA_NodeId identifier);
  86. void
  87. UA_DataSetWriter_deleteMembers(UA_Server *server, UA_DataSetWriter *dataSetWriter);
  88. /**********************************************/
  89. /* WriterGroup */
  90. /**********************************************/
  91. struct UA_WriterGroup{
  92. UA_WriterGroupConfig config;
  93. //internal fields
  94. LIST_ENTRY(UA_WriterGroup) listEntry;
  95. UA_NodeId identifier;
  96. UA_NodeId linkedConnection;
  97. LIST_HEAD(UA_ListOfDataSetWriter, UA_DataSetWriter) writers;
  98. UA_UInt32 writersCount;
  99. UA_UInt64 publishCallbackId;
  100. UA_Boolean publishCallbackIsRegistered;
  101. };
  102. UA_StatusCode
  103. UA_WriterGroupConfig_copy(const UA_WriterGroupConfig *src, UA_WriterGroupConfig *dst);
  104. UA_WriterGroup *
  105. UA_WriterGroup_findWGbyId(UA_Server *server, UA_NodeId identifier);
  106. void
  107. UA_WriterGroup_deleteMembers(UA_Server *server, UA_WriterGroup *writerGroup);
  108. /**********************************************/
  109. /* DataSetField */
  110. /**********************************************/
  111. typedef struct UA_DataSetField{
  112. UA_DataSetFieldConfig config;
  113. //internal fields
  114. LIST_ENTRY(UA_DataSetField) listEntry;
  115. UA_NodeId identifier;
  116. UA_NodeId publishedDataSet; //ref to parent pds
  117. UA_FieldMetaData fieldMetaData;
  118. UA_UInt64 sampleCallbackId;
  119. UA_Boolean sampleCallbackIsRegistered;
  120. } UA_DataSetField;
  121. UA_StatusCode
  122. UA_DataSetFieldConfig_copy(const UA_DataSetFieldConfig *src, UA_DataSetFieldConfig *dst);
  123. UA_DataSetField *
  124. UA_DataSetField_findDSFbyId(UA_Server *server, UA_NodeId identifier);
  125. void
  126. UA_DataSetField_deleteMembers(UA_DataSetField *field);
  127. /*********************************************************/
  128. /* PublishValues handling */
  129. /*********************************************************/
  130. UA_StatusCode
  131. UA_WriterGroup_addPublishCallback(UA_Server *server, UA_WriterGroup *writerGroup);
  132. void
  133. UA_WriterGroup_publishCallback(UA_Server *server, UA_WriterGroup *writerGroup);
  134. #endif /* UA_ENABLE_PUBSUB */
  135. #ifdef __cplusplus
  136. } // extern "C"
  137. #endif
  138. #endif /* UA_PUBSUB_H_ */