ua_subscription.h 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #ifndef UA_SUBSCRIPTION_H_
  2. #define UA_SUBSCRIPTION_H_
  3. #include "ua_util.h"
  4. #include "ua_types.h"
  5. #include "ua_types_generated.h"
  6. #include "ua_nodes.h"
  7. #include "ua_session.h"
  8. /*****************/
  9. /* MonitoredItem */
  10. /*****************/
  11. typedef enum {
  12. MONITOREDITEM_TYPE_CHANGENOTIFY = 1,
  13. MONITOREDITEM_TYPE_STATUSNOTIFY = 2,
  14. MONITOREDITEM_TYPE_EVENTNOTIFY = 4
  15. } UA_MONITOREDITEM_TYPE;
  16. typedef struct MonitoredItem_queuedValue {
  17. TAILQ_ENTRY(MonitoredItem_queuedValue) listEntry;
  18. UA_DataValue value;
  19. } MonitoredItem_queuedValue;
  20. typedef struct UA_MonitoredItem {
  21. LIST_ENTRY(UA_MonitoredItem) listEntry;
  22. UA_Guid sampleJobGuid;
  23. UA_Boolean sampleJobIsRegistered;
  24. UA_UInt32 itemId;
  25. UA_MONITOREDITEM_TYPE monitoredItemType;
  26. UA_UInt32 timestampsToReturn;
  27. UA_UInt32 monitoringMode;
  28. UA_NodeId monitoredNodeId;
  29. UA_UInt32 attributeID;
  30. UA_UInt32 clientHandle;
  31. UA_UInt32 samplingInterval; // [ms]
  32. UA_Boolean discardOldest;
  33. UA_ByteString lastSampledValue;
  34. // FIXME: indexRange is ignored; array values default to element 0
  35. // FIXME: dataEncoding is hardcoded to UA binary
  36. TAILQ_HEAD(QueueOfQueueDataValues, MonitoredItem_queuedValue) queue;
  37. UA_BoundedUInt32 queueSize;
  38. } UA_MonitoredItem;
  39. UA_MonitoredItem *UA_MonitoredItem_new(void);
  40. void MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem);
  41. void MonitoredItem_QueuePushDataValue(UA_Server *server, UA_MonitoredItem *monitoredItem);
  42. void MonitoredItem_ClearQueue(UA_MonitoredItem *monitoredItem);
  43. UA_Boolean MonitoredItem_CopyMonitoredValueToVariant(UA_UInt32 attributeID, const UA_Node *src,
  44. UA_DataValue *dst);
  45. UA_UInt32 MonitoredItem_QueueToDataChangeNotifications(UA_MonitoredItemNotification *dst,
  46. UA_MonitoredItem *monitoredItem);
  47. UA_StatusCode MonitoredItem_unregisterUpdateJob(UA_Server *server, UA_MonitoredItem *mon);
  48. UA_StatusCode MonitoredItem_registerSampleJob(UA_Server *server, UA_MonitoredItem *mon);
  49. /****************/
  50. /* Subscription */
  51. /****************/
  52. typedef struct UA_unpublishedNotification {
  53. UA_Boolean publishedOnce;
  54. LIST_ENTRY(UA_unpublishedNotification) listEntry;
  55. UA_NotificationMessage notification;
  56. } UA_unpublishedNotification;
  57. struct UA_Subscription {
  58. LIST_ENTRY(UA_Subscription) listEntry;
  59. UA_BoundedUInt32 lifeTime;
  60. UA_BoundedUInt32 keepAliveCount;
  61. UA_Double publishingInterval; // [ms]
  62. UA_DateTime lastPublished;
  63. UA_UInt32 subscriptionID;
  64. UA_UInt32 notificationsPerPublish;
  65. UA_Boolean publishingMode;
  66. UA_UInt32 priority;
  67. UA_UInt32 sequenceNumber;
  68. UA_Guid timedUpdateJobGuid;
  69. UA_Boolean timedUpdateIsRegistered;
  70. LIST_HEAD(UA_ListOfUnpublishedNotifications, UA_unpublishedNotification) unpublishedNotifications;
  71. size_t unpublishedNotificationsSize;
  72. LIST_HEAD(UA_ListOfUAMonitoredItems, UA_MonitoredItem) MonitoredItems;
  73. };
  74. UA_Subscription *UA_Subscription_new(UA_UInt32 subscriptionID);
  75. void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server);
  76. void Subscription_updateNotifications(UA_Subscription *subscription);
  77. UA_UInt32 *Subscription_getAvailableSequenceNumbers(UA_Subscription *sub);
  78. void Subscription_generateKeepAlive(UA_Subscription *subscription);
  79. void Subscription_copyTopNotificationMessage(UA_NotificationMessage *dst, UA_Subscription *sub);
  80. UA_UInt32 Subscription_deleteUnpublishedNotification(UA_UInt32 seqNo, UA_Boolean bDeleteAll, UA_Subscription *sub);
  81. void Subscription_copyNotificationMessage(UA_NotificationMessage *dst, UA_unpublishedNotification *src);
  82. UA_StatusCode Subscription_createdUpdateJob(UA_Server *server, UA_Guid jobId, UA_Subscription *sub);
  83. UA_StatusCode Subscription_registerUpdateJob(UA_Server *server, UA_Subscription *sub);
  84. UA_StatusCode Subscription_unregisterUpdateJob(UA_Server *server, UA_Subscription *sub);
  85. #endif /* UA_SUBSCRIPTION_H_ */