Sfoglia il codice sorgente

call methods today with the number of input and output arguments

Julius Pfrommer 9 anni fa
parent
commit
99e81fe736
2 ha cambiato i file con 8 aggiunte e 6 eliminazioni
  1. 3 2
      include/ua_server.h
  2. 5 4
      src/server/ua_services_call.c

+ 3 - 2
include/ua_server.h

@@ -331,8 +331,9 @@ UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requested
                                     UA_NodeId *outNewNodeId);
 
 #ifdef ENABLE_METHODCALLS
-typedef UA_StatusCode (*UA_MethodCallback)(const UA_NodeId objectId, const UA_Variant *input,
-                                           UA_Variant *output, void *handle);
+typedef UA_StatusCode (*UA_MethodCallback)(void *methodHandle, const UA_NodeId objectId,
+                                           size_t inputSize, const UA_Variant *input,
+                                           size_t outputSize, UA_Variant *output);
 
 UA_StatusCode UA_EXPORT
 UA_Server_addMethodNode(UA_Server *server, const UA_NodeId requestedNewNodeId,

+ 5 - 4
src/server/ua_services_call.c

@@ -155,8 +155,8 @@ callMethod(UA_Server *server, UA_Session *session, UA_CallMethodRequest *request
     }
 
     /* Verify Input Argument count, types and sizes */
-    const UA_VariableNode *inputArguments =
-        getArgumentsVariableNode(server, methodCalled, UA_STRING("InputArguments"));
+    const UA_VariableNode *inputArguments;
+    inputArguments = getArgumentsVariableNode(server, methodCalled, UA_STRING("InputArguments"));
     if(inputArguments) {
         result->statusCode = argConformsToDefinition(inputArguments, request->inputArgumentsSize,
                                                      request->inputArguments);
@@ -180,8 +180,9 @@ callMethod(UA_Server *server, UA_Session *session, UA_CallMethodRequest *request
         result->outputArguments = UA_Array_new(outputArguments->value.variant.value.arrayLength,
                                                &UA_TYPES[UA_TYPES_VARIANT]);
         result->outputArgumentsSize = outputArguments->value.variant.value.arrayLength;
-        result->statusCode = methodCalled->attachedMethod(withObject->nodeId, request->inputArguments,
-                                                          result->outputArguments, methodCalled->methodHandle);
+        result->statusCode = methodCalled->attachedMethod(methodCalled->methodHandle, withObject->nodeId,
+                                                          request->inputArgumentsSize, request->inputArguments,
+                                                          result->outputArgumentsSize, result->outputArguments);
     }
     else
         result->statusCode = UA_STATUSCODE_BADNOTWRITABLE; // There is no NOTEXECUTABLE?