diff options
Diffstat (limited to 'src/patches/0001-open62541-fix-monitored-items-modify.patch')
-rw-r--r-- | src/patches/0001-open62541-fix-monitored-items-modify.patch | 126 |
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) { |