Przeglądaj źródła

Method call service (Service_call) has been bootstrapped.

ichrispa 9 lat temu
rodzic
commit
6308b62f1f

+ 7 - 0
CMakeLists.txt

@@ -179,6 +179,13 @@ endif()
 ## logging
 set(UA_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported")
 
+# Enable Methodcall service
+option(ENABLE_METHODCALLS "Enable CallMethod/MethodCall service set" OFF)
+if(ENABLE_METHODCALLS)
+    list(APPEND lib_sources ${PROJECT_SOURCE_DIR}/src/server/ua_services_call.c)
+    add_definitions(-DENABLE_METHODCALLS)
+endif()
+
 ## multithreading
 option(ENABLE_MULTITHREADING "Enable multithreading (experimental)" OFF)
 if(ENABLE_MULTITHREADING)

+ 5 - 1
src/server/ua_server_binary.c

@@ -322,7 +322,11 @@ static void processMSG(UA_Connection *connection, UA_Server *server, const UA_By
         INVOKE_SERVICE(DeleteMonitoredItems, UA_TYPES_DELETEMONITOREDITEMSRESPONSE);
         break;
 #endif
-
+#ifdef ENABLE_METHODCALLS
+    case UA_NS0ID_CALLREQUEST:
+        INVOKE_SERVICE(Call, UA_TYPES_CALLRESPONSE);
+        break;
+#endif
     default: {
         if(requestType.namespaceIndex == 0 && requestType.identifier.numeric==787)
             UA_LOG_INFO(server->logger, UA_LOGCATEGORY_COMMUNICATION,

+ 5 - 0
src/server/ua_services.h

@@ -285,4 +285,9 @@ void Service_Publish(UA_Server *server, UA_Session *session,
 /** @} */
 #endif
 
+#ifdef ENABLE_METHODCALLS
+void Service_MethodCall(UA_Server *server, UA_Session *session,
+                        const UA_CallMethodRequest *request,
+                        UA_CallMethodResult *response);
+#endif
 #endif /* UA_SERVICES_H_ */

+ 1 - 1
tools/generate_datatypes.py

@@ -58,7 +58,7 @@ minimal_types = ["InvalidType", "Node", "NodeClass", "ReferenceNode", "Applicati
                  "NodeAttributesMask","DeleteNodesItem", "DeleteNodesRequest", "DeleteNodesResponse",
                  "DeleteReferencesItem", "DeleteReferencesRequest", "DeleteReferencesResponse",
                  "RegisterNodesRequest", "RegisterNodesResponse", "UnregisterNodesRequest", "UnregisterNodesResponse", 
-                 "UserIdentityToken", "UserNameIdentityToken", "AnonymousIdentityToken" ];
+                 "UserIdentityToken", "UserNameIdentityToken", "AnonymousIdentityToken", "CallMethodRequest", "CallMethodResult", "CallResponse", "CallRequest" ];
 
 subscription_types = [ "DeleteMonitoredItemsRequest", "DeleteMonitoredItemsResponse", "NotificationMessage",
                   "MonitoredItemNotification", "DataChangeNotification", "ModifySubscriptionRequest", "ModifySubscriptionResponse" ];

+ 2 - 2
tools/pyUANamespace/generate_open62541CCode.py

@@ -60,7 +60,7 @@ if __name__ == '__main__':
   supressGenerationOfAttribute=[]
 
   GLOBAL_LOG_LEVEL = LOG_LEVEL_DEBUG
-
+  
   arg_isIgnore    = False
   arg_isBlacklist = False
   arg_isSupress   = False
@@ -174,7 +174,7 @@ if __name__ == '__main__':
       else:
         ignoreNodes.append(ns.getNodeByIDString(id))
     ig.close()
-
+  
   # Create the C Code
   log(None, "Generating Header", LOG_LEVEL_INFO)
   # Returns a tuple of (["Header","lines"],["Code","lines","generated"])

+ 4 - 1
tools/pyUANamespace/ua_node_types.py

@@ -134,7 +134,10 @@ class opcua_referencePointer_t():
         retval = retval + "H"
       retval = retval + ">"
     return retval
-
+    
+  def __repr__(self):
+      return self.__str__()
+  
   def __cmp__(self, other):
     if not isinstance(other, opcua_referencePointer_t):
       return -1