Browse Source

fixes for Address Space Model Tests, added constants for WriteMasks

Stasik0 8 years ago
parent
commit
0ca206818a
3 changed files with 69 additions and 0 deletions
  1. 27 0
      examples/server.c
  2. 29 0
      include/ua_constants.h
  3. 13 0
      src/server/ua_server.c

+ 27 - 0
examples/server.c

@@ -341,6 +341,8 @@ int main(int argc, char** argv) {
                             UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "Matrix"),
                             UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
 
+    /** Fill demo nodes of different types **/
+
     UA_UInt32 id = 51000; // running id in namespace 0
     for(UA_UInt32 type = 0; type < UA_TYPES_DIAGNOSTICINFO; type++) {
         if(type == UA_TYPES_VARIANT || type == UA_TYPES_DIAGNOSTICINFO)
@@ -352,6 +354,8 @@ int main(int argc, char** argv) {
         sprintf(name, "%02d", type);
         attr.displayName = UA_LOCALIZEDTEXT("en_US",name);
 		attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
+		attr.writeMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
+		attr.userWriteMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
         UA_QualifiedName qualifiedName = UA_QUALIFIEDNAME(1, name);
 
         /* add a scalar node for every built-in type */
@@ -388,6 +392,29 @@ int main(int argc, char** argv) {
         UA_Variant_deleteMembers(&attr.value);
     }
 
+    /** Hierarchy of depth 10 with forward and inverse references **/
+    /** Enter node "depth9" in CTT configuration - Project->Settings->Server Test->NodeIds->Paths->Starting Node 1 **/
+
+#define DEPTHID 50004
+    object_attr.description = UA_LOCALIZEDTEXT("en_US","DepthDemo");
+    object_attr.displayName = UA_LOCALIZEDTEXT("en_US","DepthDemo");
+    UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, DEPTHID),
+                            UA_NODEID_NUMERIC(1, DEMOID),
+                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), UA_QUALIFIEDNAME(1, "DepthDemo"),
+                            UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
+
+    id = DEPTHID; // running id in namespace 0 - Start with Matrix NODE
+    for(UA_UInt32 i = 1; i <= 20; i++) {
+        char name[15];
+        sprintf(name, "depth%i", i);
+        object_attr.description = UA_LOCALIZEDTEXT("en_US",name);
+        object_attr.displayName = UA_LOCALIZEDTEXT("en_US",name);
+        UA_Server_addObjectNode(server, UA_NODEID_NUMERIC(1, id+i),
+                                UA_NODEID_NUMERIC(1, i==1 ? DEPTHID : id+i-1), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                                UA_QUALIFIEDNAME(1, name),
+                                UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), object_attr, NULL, NULL);
+    }
+
 #ifdef UA_ENABLE_METHODCALLS
     UA_Argument inputArguments;
     UA_Argument_init(&inputArguments);

+ 29 - 0
include/ua_constants.h

@@ -66,6 +66,35 @@ typedef enum {
 #define UA_ACCESSLEVELMASK_HISTORYWRITE 0x08
 #define UA_ACCESSLEVELMASK_SEMANTICCHANGE 0x10
 
+/** Write Masks
+ *  -----------
+ *  The write mask and user write mask is given by the following constants that are
+ *  XORed for the overall write mask.
+ *  Part 3: 5.2.7 Table 2
+ */
+#define UA_WRITEMASK_ACCESSLEVEL                1<<0
+#define UA_WRITEMASK_ARRRAYDIMENSIONS           1<<1
+#define UA_WRITEMASK_BROWSENAME                 1<<2
+#define UA_WRITEMASK_CONTAINSNOLOOPS            1<<3
+#define UA_WRITEMASK_DATATYPE                   1<<4
+#define UA_WRITEMASK_DESCRIPTION                1<<5
+#define UA_WRITEMASK_DISPLAYNAME                1<<6
+#define UA_WRITEMASK_EVENTNOTIFIER              1<<7
+#define UA_WRITEMASK_EXECUTABLE                 1<<8
+#define UA_WRITEMASK_HISTORIZING                1<<9
+#define UA_WRITEMASK_INVERSENAME                1<<10
+#define UA_WRITEMASK_ISABSTRACT                 1<<11
+#define UA_WRITEMASK_MINIMUMSAMPLINGINTERVAL    1<<12
+#define UA_WRITEMASK_NODECLASS                  1<<13
+#define UA_WRITEMASK_NODEID                     1<<14
+#define UA_WRITEMASK_SYMMETRIC                  1<<15
+#define UA_WRITEMASK_USERACCESSLEVEL            1<<16
+#define UA_WRITEMASK_USEREXECUTABLE             1<<17
+#define UA_WRITEMASK_USERWRITEMASK              1<<18
+#define UA_WRITEMASK_VALUERANK                  1<<19
+#define UA_WRITEMASK_WRITEMASK                  1<<20
+#define UA_WRITEMASK_VALUEFORVARIABLETYPE       1<<21
+
 /**
 * Encoding Offsets
 * ----------------

+ 13 - 0
src/server/ua_server.c

@@ -804,6 +804,19 @@ UA_Server * UA_Server_new(const UA_ServerConfig config) {
                                 UA_NS0ID_BASEVARIABLETYPE, false);
     addVariableTypeNode_subtype(server, "PropertyType", UA_NS0ID_PROPERTYTYPE,
                                 UA_NS0ID_BASEVARIABLETYPE, false);
+
+
+    //Event types folder below is needed by CTT
+    /***************/
+    /* Event Types */
+    /***************/
+
+    UA_ObjectNode *eventtypes = UA_NodeStore_newObjectNode();
+    copyNames((UA_Node*)eventtypes, "EventTypes");
+    eventtypes->nodeId.identifier.numeric = UA_NS0ID_EVENTTYPESFOLDER;
+    addNodeInternal(server, (UA_Node*)eventtypes, UA_NODEID_NUMERIC(0, UA_NS0ID_TYPESFOLDER), nodeIdOrganizes);
+    addReferenceInternal(server, UA_NODEID_NUMERIC(0, UA_NS0ID_EVENTTYPESFOLDER), nodeIdHasTypeDefinition,
+            UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE), true);
 #endif
 
 #ifdef UA_ENABLE_GENERATE_NAMESPACE0