| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #ifndef UA_CLIENT_SUBSCRIPTIONS_H_ |
| #define UA_CLIENT_SUBSCRIPTIONS_H_ |
| |
| #include <open62541/client.h> |
| |
| _UA_BEGIN_DECLS |
| |
| #ifdef UA_ENABLE_SUBSCRIPTIONS |
| |
| /** |
| * .. _client-subscriptions: |
| * |
| * Subscriptions |
| * ------------- |
| * |
| * Subscriptions in OPC UA are asynchronous. That is, the client sends several |
| * PublishRequests to the server. The server returns PublishResponses with |
| * notifications. But only when a notification has been generated. The client |
| * does not wait for the responses and continues normal operations. |
| * |
| * Note the difference between Subscriptions and MonitoredItems. Subscriptions |
| * are used to report back notifications. MonitoredItems are used to generate |
| * notifications. Every MonitoredItem is attached to exactly one Subscription. |
| * And a Subscription can contain many MonitoredItems. |
| * |
| * The client automatically processes PublishResponses (with a callback) in the |
| * background and keeps enough PublishRequests in transit. The PublishResponses |
| * may be recieved during a synchronous service call or in |
| * ``UA_Client_runAsync``. */ |
| |
| /* Callbacks defined for Subscriptions */ |
| typedef void (*UA_Client_DeleteSubscriptionCallback) |
| (UA_Client *client, UA_UInt32 subId, void *subContext); |
| |
| typedef void (*UA_Client_StatusChangeNotificationCallback) |
| (UA_Client *client, UA_UInt32 subId, void *subContext, |
| UA_StatusChangeNotification *notification); |
| |
| /* Provides default values for a new subscription. |
| * |
| * RequestedPublishingInterval: 500.0 [ms] |
| * RequestedLifetimeCount: 10000 |
| * RequestedMaxKeepAliveCount: 10 |
| * MaxNotificationsPerPublish: 0 (unlimited) |
| * PublishingEnabled: true |
| * Priority: 0 */ |
| static UA_INLINE UA_CreateSubscriptionRequest |
| UA_CreateSubscriptionRequest_default(void) { |
| UA_CreateSubscriptionRequest request; |
| UA_CreateSubscriptionRequest_init(&request); |
| |
| request.requestedPublishingInterval = 500.0; |
| request.requestedLifetimeCount = 10000; |
| request.requestedMaxKeepAliveCount = 10; |
| request.maxNotificationsPerPublish = 0; |
| request.publishingEnabled = true; |
| request.priority = 0; |
| return request; |
| } |
| |
| UA_CreateSubscriptionResponse UA_EXPORT |
| UA_Client_Subscriptions_create(UA_Client *client, |
| const UA_CreateSubscriptionRequest request, |
| void *subscriptionContext, |
| UA_Client_StatusChangeNotificationCallback statusChangeCallback, |
| UA_Client_DeleteSubscriptionCallback deleteCallback); |
| |
| UA_ModifySubscriptionResponse UA_EXPORT |
| UA_Client_Subscriptions_modify(UA_Client *client, const UA_ModifySubscriptionRequest request); |
| |
| UA_DeleteSubscriptionsResponse UA_EXPORT |
| UA_Client_Subscriptions_delete(UA_Client *client, |
| const UA_DeleteSubscriptionsRequest request); |
| |
| /* Delete a single subscription */ |
| UA_StatusCode UA_EXPORT |
| UA_Client_Subscriptions_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId); |
| |
| static UA_INLINE UA_SetPublishingModeResponse |
| UA_Client_Subscriptions_setPublishingMode(UA_Client *client, |
| const UA_SetPublishingModeRequest request) { |
| UA_SetPublishingModeResponse response; |
| __UA_Client_Service(client, &request, |
| &UA_TYPES[UA_TYPES_SETPUBLISHINGMODEREQUEST], &response, |
| &UA_TYPES[UA_TYPES_SETPUBLISHINGMODERESPONSE]); |
| return response; |
| } |
| |
| /** |
| * MonitoredItems |
| * -------------- |
| * |
| * MonitoredItems for Events indicate the ``EventNotifier`` attribute. This |
| * indicates to the server not to monitor changes of the attribute, but to |
| * forward Event notifications from that node. |
| * |
| * During the creation of a MonitoredItem, the server may return changed |
| * adjusted parameters. Check the returned ``UA_CreateMonitoredItemsResponse`` |
| * to get the current parameters. */ |
| |
| /* Provides default values for a new monitored item. */ |
| static UA_INLINE UA_MonitoredItemCreateRequest |
| UA_MonitoredItemCreateRequest_default(UA_NodeId nodeId) { |
| UA_MonitoredItemCreateRequest request; |
| UA_MonitoredItemCreateRequest_init(&request); |
| request.itemToMonitor.nodeId = nodeId; |
| request.itemToMonitor.attributeId = UA_ATTRIBUTEID_VALUE; |
| request.monitoringMode = UA_MONITORINGMODE_REPORTING; |
| request.requestedParameters.samplingInterval = 250; |
| request.requestedParameters.discardOldest = true; |
| request.requestedParameters.queueSize = 1; |
| return request; |
| } |
| |
| /** |
| * The clientHandle parameter can't be set by the user, any value will be replaced |
| * by the client before sending the request to the server. */ |
| |
| /* Callback for the deletion of a MonitoredItem */ |
| typedef void (*UA_Client_DeleteMonitoredItemCallback) |
| (UA_Client *client, UA_UInt32 subId, void *subContext, |
| UA_UInt32 monId, void *monContext); |
| |
| /* Callback for DataChange notifications */ |
| typedef void (*UA_Client_DataChangeNotificationCallback) |
| (UA_Client *client, UA_UInt32 subId, void *subContext, |
| UA_UInt32 monId, void *monContext, |
| UA_DataValue *value); |
| |
| /* Callback for Event notifications */ |
| typedef void (*UA_Client_EventNotificationCallback) |
| (UA_Client *client, UA_UInt32 subId, void *subContext, |
| UA_UInt32 monId, void *monContext, |
| size_t nEventFields, UA_Variant *eventFields); |
| |
| /* Don't use to monitor the EventNotifier attribute */ |
| UA_CreateMonitoredItemsResponse UA_EXPORT |
| UA_Client_MonitoredItems_createDataChanges(UA_Client *client, |
| const UA_CreateMonitoredItemsRequest request, void **contexts, |
| UA_Client_DataChangeNotificationCallback *callbacks, |
| UA_Client_DeleteMonitoredItemCallback *deleteCallbacks); |
| |
| UA_MonitoredItemCreateResult UA_EXPORT |
| UA_Client_MonitoredItems_createDataChange(UA_Client *client, UA_UInt32 subscriptionId, |
| UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item, |
| void *context, UA_Client_DataChangeNotificationCallback callback, |
| UA_Client_DeleteMonitoredItemCallback deleteCallback); |
| |
| /* Monitor the EventNotifier attribute only */ |
| UA_CreateMonitoredItemsResponse UA_EXPORT |
| UA_Client_MonitoredItems_createEvents(UA_Client *client, |
| const UA_CreateMonitoredItemsRequest request, void **contexts, |
| UA_Client_EventNotificationCallback *callback, |
| UA_Client_DeleteMonitoredItemCallback *deleteCallback); |
| |
| UA_MonitoredItemCreateResult UA_EXPORT |
| UA_Client_MonitoredItems_createEvent(UA_Client *client, UA_UInt32 subscriptionId, |
| UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item, |
| void *context, UA_Client_EventNotificationCallback callback, |
| UA_Client_DeleteMonitoredItemCallback deleteCallback); |
| |
| UA_DeleteMonitoredItemsResponse UA_EXPORT |
| UA_Client_MonitoredItems_delete(UA_Client *client, const UA_DeleteMonitoredItemsRequest); |
| |
| UA_StatusCode UA_EXPORT |
| UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId, UA_UInt32 monitoredItemId); |
| |
| /* The clientHandle parameter will be filled automatically */ |
| UA_ModifyMonitoredItemsResponse UA_EXPORT |
| UA_Client_MonitoredItems_modify(UA_Client *client, |
| const UA_ModifyMonitoredItemsRequest request); |
| |
| /** |
| * The following service calls go directly to the server. The MonitoredItem settings are |
| * not stored in the client. */ |
| |
| static UA_INLINE UA_SetMonitoringModeResponse |
| UA_Client_MonitoredItems_setMonitoringMode(UA_Client *client, |
| const UA_SetMonitoringModeRequest request) { |
| UA_SetMonitoringModeResponse response; |
| __UA_Client_Service(client, |
| &request, &UA_TYPES[UA_TYPES_SETMONITORINGMODEREQUEST], |
| &response, &UA_TYPES[UA_TYPES_SETMONITORINGMODERESPONSE]); |
| return response; |
| } |
| |
| static UA_INLINE UA_SetTriggeringResponse |
| UA_Client_MonitoredItems_setTriggering(UA_Client *client, |
| const UA_SetTriggeringRequest request) { |
| UA_SetTriggeringResponse response; |
| __UA_Client_Service(client, |
| &request, &UA_TYPES[UA_TYPES_SETTRIGGERINGREQUEST], |
| &response, &UA_TYPES[UA_TYPES_SETTRIGGERINGRESPONSE]); |
| return response; |
| } |
| |
| #endif |
| |
| _UA_END_DECLS |
| |
| #endif /* UA_CLIENT_SUBSCRIPTIONS_H_ */ |