summaryrefslogtreecommitdiffstats
path: root/src/patches/0001-open62541-fix-monitored-items-modify.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/patches/0001-open62541-fix-monitored-items-modify.patch')
-rw-r--r--src/patches/0001-open62541-fix-monitored-items-modify.patch126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/patches/0001-open62541-fix-monitored-items-modify.patch b/src/patches/0001-open62541-fix-monitored-items-modify.patch
new file mode 100644
index 0000000..b5cc41a
--- /dev/null
+++ b/src/patches/0001-open62541-fix-monitored-items-modify.patch
@@ -0,0 +1,126 @@
+diff --git a/src/3rdparty/open62541/open62541.c b/src/3rdparty/open62541/open62541.c
+index 217137a..411b267 100644
+--- a/src/3rdparty/open62541/open62541.c
++++ b/src/3rdparty/open62541/open62541.c
+@@ -1,6 +1,6 @@
+ /* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
+ * visit http://open62541.org/ for information about this software
+- * Git-Revision: v0.3.0
++ * Git-Revision: v0.3.0-1-g1bcad96
+ */
+
+ /*
+@@ -38175,6 +38175,44 @@ UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionI
+ return retval;
+ }
+
++UA_ModifyMonitoredItemsResponse UA_EXPORT
++UA_Client_MonitoredItems_modify(UA_Client *client,
++ const UA_ModifyMonitoredItemsRequest request) {
++ UA_ModifyMonitoredItemsResponse response;
++
++ UA_Client_Subscription *sub = 0;
++ LIST_FOREACH(sub, &client->subscriptions, listEntry) {
++ if (sub->subscriptionId == request.subscriptionId)
++ break;
++ }
++
++ if (!sub) {
++ UA_ModifyMonitoredItemsResponse_init(&response);
++ response.responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
++ return response;
++ }
++
++ UA_ModifyMonitoredItemsRequest modifiedRequest;
++ UA_ModifyMonitoredItemsRequest_copy(&request, &modifiedRequest);
++
++ for (size_t i = 0; i < modifiedRequest.itemsToModifySize; ++i) {
++ UA_Client_MonitoredItem *mon = 0;
++ LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
++ if(mon->monitoredItemId == modifiedRequest.itemsToModify[i].monitoredItemId) {
++ modifiedRequest.itemsToModify[i].requestedParameters.clientHandle = mon->clientHandle;
++ break;
++ }
++ }
++ }
++
++ __UA_Client_Service(client,
++ &modifiedRequest, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
++ &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
++
++ UA_ModifyMonitoredItemsRequest_deleteMembers(&modifiedRequest);
++ return response;
++}
++
+ /*************************************/
+ /* Async Processing of Notifications */
+ /*************************************/
+diff --git a/src/3rdparty/open62541/open62541.h b/src/3rdparty/open62541/open62541.h
+index f53419f..67200cb 100644
+--- a/src/3rdparty/open62541/open62541.h
++++ b/src/3rdparty/open62541/open62541.h
+@@ -1,6 +1,6 @@
+ /* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
+ * visit http://open62541.org/ for information about this software
+- * Git-Revision: v0.3.0
++ * Git-Revision: v0.3.0-1-g1bcad96
+ */
+
+ /*
+@@ -36,7 +36,7 @@ extern "C" {
+ #define UA_OPEN62541_VER_MINOR 3
+ #define UA_OPEN62541_VER_PATCH 0
+ #define UA_OPEN62541_VER_LABEL "" /* Release candidate label, etc. */
+-#define UA_OPEN62541_VER_COMMIT "v0.3.0"
++#define UA_OPEN62541_VER_COMMIT "v0.3.0-1-g1bcad96"
+
+ /**
+ * Feature Options
+@@ -15022,8 +15022,8 @@ UA_Client_Subscriptions_setPublishingMode(UA_Client *client,
+ * forward Event notifications from that node.
+ *
+ * During the creation of a MonitoredItem, the server may return changed
+- * adjusted parameters. Use ``UA_Client_MonitoredItem_getParameters`` to get the
+- * current parameters. */
++ * 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
+@@ -15039,6 +15039,10 @@ UA_MonitoredItemCreateRequest_default(UA_NodeId nodeId) {
+ 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,
+@@ -15088,20 +15092,15 @@ UA_Client_MonitoredItems_delete(UA_Client *client, const UA_DeleteMonitoredItems
+ 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_ModifyMonitoredItemsResponse
+-UA_Client_MonitoredItems_modify(UA_Client *client,
+- const UA_ModifyMonitoredItemsRequest request) {
+- UA_ModifyMonitoredItemsResponse response;
+- __UA_Client_Service(client,
+- &request, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
+- &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
+- return response;
+-}
+-
+ static UA_INLINE UA_SetMonitoringModeResponse
+ UA_Client_MonitoredItems_setMonitoringMode(UA_Client *client,
+ const UA_SetMonitoringModeRequest request) {