ua_subscription.h 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. UA_DataValue value;
  18. TAILQ_ENTRY(MonitoredItem_queuedValue) listEntry;
  19. } MonitoredItem_queuedValue;
  20. typedef struct UA_MonitoredItem {
  21. LIST_ENTRY(UA_MonitoredItem) listEntry;
  22. UA_UInt32 itemId;
  23. UA_MONITOREDITEM_TYPE monitoredItemType;
  24. UA_UInt32 timestampsToReturn;
  25. UA_UInt32 monitoringMode;
  26. UA_NodeId monitoredNodeId;
  27. UA_UInt32 attributeID;
  28. UA_UInt32 clientHandle;
  29. UA_UInt32 samplingInterval; // [ms]
  30. UA_BoundedUInt32 queueSize;
  31. UA_Boolean discardOldest;
  32. UA_DateTime lastSampled;
  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_MonitoredItem;
  38. UA_MonitoredItem *UA_MonitoredItem_new(void);
  39. void MonitoredItem_delete(UA_MonitoredItem *monitoredItem);
  40. void MonitoredItem_QueuePushDataValue(UA_Server *server, UA_MonitoredItem *monitoredItem);
  41. void MonitoredItem_ClearQueue(UA_MonitoredItem *monitoredItem);
  42. UA_Boolean MonitoredItem_CopyMonitoredValueToVariant(UA_UInt32 attributeID, const UA_Node *src,
  43. UA_DataValue *dst);
  44. UA_UInt32 MonitoredItem_QueueToDataChangeNotifications(UA_MonitoredItemNotification *dst,
  45. UA_MonitoredItem *monitoredItem);
  46. /****************/
  47. /* Subscription */
  48. /****************/
  49. typedef struct UA_unpublishedNotification {
  50. UA_Boolean publishedOnce;
  51. LIST_ENTRY(UA_unpublishedNotification) listEntry;
  52. UA_NotificationMessage notification;
  53. } UA_unpublishedNotification;
  54. typedef struct UA_Subscription {
  55. LIST_ENTRY(UA_Subscription) listEntry;
  56. UA_BoundedUInt32 lifeTime;
  57. UA_BoundedUInt32 keepAliveCount;
  58. UA_Double publishingInterval; // [ms]
  59. UA_DateTime lastPublished;
  60. UA_UInt32 subscriptionID;
  61. UA_UInt32 notificationsPerPublish;
  62. UA_Boolean publishingMode;
  63. UA_UInt32 priority;
  64. UA_UInt32 sequenceNumber;
  65. UA_Guid timedUpdateJobGuid;
  66. UA_Boolean timedUpdateIsRegistered;
  67. LIST_HEAD(UA_ListOfUnpublishedNotifications, UA_unpublishedNotification) unpublishedNotifications;
  68. size_t unpublishedNotificationsSize;
  69. LIST_HEAD(UA_ListOfUAMonitoredItems, UA_MonitoredItem) MonitoredItems;
  70. } UA_Subscription;
  71. UA_Subscription *UA_Subscription_new(UA_UInt32 subscriptionID);
  72. void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server);
  73. void Subscription_updateNotifications(UA_Subscription *subscription);
  74. UA_UInt32 *Subscription_getAvailableSequenceNumbers(UA_Subscription *sub);
  75. void Subscription_generateKeepAlive(UA_Subscription *subscription);
  76. void Subscription_copyTopNotificationMessage(UA_NotificationMessage *dst, UA_Subscription *sub);
  77. UA_UInt32 Subscription_deleteUnpublishedNotification(UA_UInt32 seqNo, UA_Boolean bDeleteAll, UA_Subscription *sub);
  78. void Subscription_copyNotificationMessage(UA_NotificationMessage *dst, UA_unpublishedNotification *src);
  79. UA_StatusCode Subscription_createdUpdateJob(UA_Server *server, UA_Guid jobId, UA_Subscription *sub);
  80. UA_StatusCode Subscription_registerUpdateJob(UA_Server *server, UA_Subscription *sub);
  81. UA_StatusCode Subscription_unregisterUpdateJob(UA_Server *server, UA_Subscription *sub);
  82. #endif /* UA_SUBSCRIPTION_H_ */