ua_pubsub.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. #include <open62541/plugin/pubsub.h>
  10. #include <open62541/server.h>
  11. #include <open62541/server_pubsub.h>
  12. #include "open62541_queue.h"
  13. #include "ua_pubsub_networkmessage.h"
  14. _UA_BEGIN_DECLS
  15. #ifdef UA_ENABLE_PUBSUB /* conditional compilation */
  16. //forward declarations
  17. struct UA_WriterGroup;
  18. typedef struct UA_WriterGroup UA_WriterGroup;
  19. /* The configuration structs (public part of PubSub entities) are defined in include/ua_plugin_pubsub.h */
  20. /**********************************************/
  21. /* PublishedDataSet */
  22. /**********************************************/
  23. typedef struct{
  24. UA_PublishedDataSetConfig config;
  25. UA_DataSetMetaDataType dataSetMetaData;
  26. LIST_HEAD(UA_ListOfDataSetField, UA_DataSetField) fields;
  27. UA_NodeId identifier;
  28. UA_UInt16 fieldSize;
  29. UA_UInt16 promotedFieldsCount;
  30. } UA_PublishedDataSet;
  31. UA_StatusCode
  32. UA_PublishedDataSetConfig_copy(const UA_PublishedDataSetConfig *src, UA_PublishedDataSetConfig *dst);
  33. UA_PublishedDataSet *
  34. UA_PublishedDataSet_findPDSbyId(UA_Server *server, UA_NodeId identifier);
  35. void
  36. UA_PublishedDataSet_deleteMembers(UA_Server *server, UA_PublishedDataSet *publishedDataSet);
  37. /**********************************************/
  38. /* Connection */
  39. /**********************************************/
  40. //the connection config (public part of connection) object is defined in include/ua_plugin_pubsub.h
  41. typedef struct{
  42. UA_PubSubConnectionConfig *config;
  43. //internal fields
  44. UA_PubSubChannel *channel;
  45. UA_NodeId identifier;
  46. LIST_HEAD(UA_ListOfWriterGroup, UA_WriterGroup) writerGroups;
  47. } UA_PubSubConnection;
  48. UA_StatusCode
  49. UA_PubSubConnectionConfig_copy(const UA_PubSubConnectionConfig *src, UA_PubSubConnectionConfig *dst);
  50. UA_PubSubConnection *
  51. UA_PubSubConnection_findConnectionbyId(UA_Server *server, UA_NodeId connectionIdentifier);
  52. void
  53. UA_PubSubConnectionConfig_deleteMembers(UA_PubSubConnectionConfig *connectionConfig);
  54. void
  55. UA_PubSubConnection_deleteMembers(UA_Server *server, UA_PubSubConnection *connection);
  56. /**********************************************/
  57. /* DataSetWriter */
  58. /**********************************************/
  59. #ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
  60. typedef struct UA_DataSetWriterSample{
  61. UA_Boolean valueChanged;
  62. UA_DataValue value;
  63. } UA_DataSetWriterSample;
  64. #endif
  65. typedef struct UA_DataSetWriter{
  66. UA_DataSetWriterConfig config;
  67. //internal fields
  68. LIST_ENTRY(UA_DataSetWriter) listEntry;
  69. UA_NodeId identifier;
  70. UA_NodeId linkedWriterGroup;
  71. UA_NodeId connectedDataSet;
  72. UA_ConfigurationVersionDataType connectedDataSetVersion;
  73. #ifdef UA_ENABLE_PUBSUB_DELTAFRAMES
  74. UA_UInt16 deltaFrameCounter; //actual count of sent deltaFrames
  75. size_t lastSamplesCount;
  76. UA_DataSetWriterSample *lastSamples;
  77. #endif
  78. UA_UInt16 actualDataSetMessageSequenceCount;
  79. } UA_DataSetWriter;
  80. UA_StatusCode
  81. UA_DataSetWriterConfig_copy(const UA_DataSetWriterConfig *src, UA_DataSetWriterConfig *dst);
  82. UA_DataSetWriter *
  83. UA_DataSetWriter_findDSWbyId(UA_Server *server, UA_NodeId identifier);
  84. /**********************************************/
  85. /* WriterGroup */
  86. /**********************************************/
  87. struct UA_WriterGroup{
  88. UA_WriterGroupConfig config;
  89. //internal fields
  90. LIST_ENTRY(UA_WriterGroup) listEntry;
  91. UA_NodeId identifier;
  92. UA_NodeId linkedConnection;
  93. LIST_HEAD(UA_ListOfDataSetWriter, UA_DataSetWriter) writers;
  94. UA_UInt32 writersCount;
  95. UA_UInt64 publishCallbackId;
  96. UA_Boolean publishCallbackIsRegistered;
  97. };
  98. UA_StatusCode
  99. UA_WriterGroupConfig_copy(const UA_WriterGroupConfig *src, UA_WriterGroupConfig *dst);
  100. UA_WriterGroup *
  101. UA_WriterGroup_findWGbyId(UA_Server *server, UA_NodeId identifier);
  102. /**********************************************/
  103. /* DataSetField */
  104. /**********************************************/
  105. typedef struct UA_DataSetField{
  106. UA_DataSetFieldConfig config;
  107. //internal fields
  108. LIST_ENTRY(UA_DataSetField) listEntry;
  109. UA_NodeId identifier;
  110. UA_NodeId publishedDataSet; //ref to parent pds
  111. UA_FieldMetaData fieldMetaData;
  112. UA_UInt64 sampleCallbackId;
  113. UA_Boolean sampleCallbackIsRegistered;
  114. } UA_DataSetField;
  115. UA_StatusCode
  116. UA_DataSetFieldConfig_copy(const UA_DataSetFieldConfig *src, UA_DataSetFieldConfig *dst);
  117. UA_DataSetField *
  118. UA_DataSetField_findDSFbyId(UA_Server *server, UA_NodeId identifier);
  119. /*********************************************************/
  120. /* PublishValues handling */
  121. /*********************************************************/
  122. UA_StatusCode
  123. UA_WriterGroup_addPublishCallback(UA_Server *server, UA_WriterGroup *writerGroup);
  124. void
  125. UA_WriterGroup_publishCallback(UA_Server *server, UA_WriterGroup *writerGroup);
  126. #endif /* UA_ENABLE_PUBSUB */
  127. _UA_END_DECLS
  128. #endif /* UA_PUBSUB_H_ */