Ver código fonte

Replace ValueRanks by defines (#2124)

* Replace ValueRanks by defines

* Update tests/client/check_client_highlevel.c
Martin Lang 5 anos atrás
pai
commit
4b9cb3c034

+ 2 - 2
examples/custom_datatype/server_types_custom.c

@@ -18,7 +18,7 @@ add3PointDataType(UA_Server *server) {
     dattr.description = UA_LOCALIZEDTEXT("en-US", "3D Point");
     dattr.displayName = UA_LOCALIZEDTEXT("en-US", "3D Point");
     dattr.dataType = PointType.typeId;
-    dattr.valueRank = -1;
+    dattr.valueRank = UA_VALUERANK_SCALAR;
 
     Point p;
     p.x = 0.0;
@@ -45,7 +45,7 @@ add3DPointVariable(UA_Server *server) {
     vattr.description = UA_LOCALIZEDTEXT("en-US", "3D Point");
     vattr.displayName = UA_LOCALIZEDTEXT("en-US", "3D Point");
     vattr.dataType = PointType.typeId;
-    vattr.valueRank = -1;
+    vattr.valueRank = UA_VALUERANK_SCALAR;
     UA_Variant_setScalar(&vattr.value, &p, &PointType);
 
     UA_Server_addVariableNode(server, UA_NODEID_STRING(1, "3D.Point"),

+ 12 - 12
examples/server_ctt.c

@@ -103,7 +103,7 @@ setInformationModel(UA_Server *server) {
     myVar.displayName = UA_LOCALIZEDTEXT("en-US", "the answer");
     myVar.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
     myVar.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    myVar.valueRank = -1;
+    myVar.valueRank = UA_VALUERANK_SCALAR;
     UA_Int32 myInteger = 42;
     UA_Variant_setScalar(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
     const UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
@@ -119,7 +119,7 @@ setInformationModel(UA_Server *server) {
     myVar.displayName = UA_LOCALIZEDTEXT("en-US", "the answer - not readable");
     myVar.accessLevel = UA_ACCESSLEVELMASK_WRITE;
     myVar.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    myVar.valueRank = -1;
+    myVar.valueRank = UA_VALUERANK_SCALAR;
     UA_Variant_setScalar(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
     const UA_QualifiedName myInteger2Name = UA_QUALIFIEDNAME(1, "the answer - not readable");
     const UA_NodeId myInteger2NodeId = UA_NODEID_STRING(1, "the.answer.no.read");
@@ -132,7 +132,7 @@ setInformationModel(UA_Server *server) {
     myVar.displayName = UA_LOCALIZEDTEXT("en-US", "the answer - not current user");
     myVar.accessLevel = UA_ACCESSLEVELMASK_WRITE;
     myVar.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    myVar.valueRank = -1;
+    myVar.valueRank = UA_VALUERANK_SCALAR;
     myVar.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
     UA_Variant_setScalar(&myVar.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
     const UA_QualifiedName accessDeniedName = UA_QUALIFIEDNAME(1, "the answer - not current user");
@@ -148,7 +148,7 @@ setInformationModel(UA_Server *server) {
     v_attr.displayName = UA_LOCALIZEDTEXT("en-US", "current time");
     v_attr.accessLevel = UA_ACCESSLEVELMASK_READ;
     v_attr.dataType = UA_TYPES[UA_TYPES_DATETIME].typeId;
-    v_attr.valueRank = -1;
+    v_attr.valueRank = UA_VALUERANK_SCALAR;
     const UA_QualifiedName dateName = UA_QUALIFIEDNAME(1, "current time");
     UA_Server_addDataSourceVariableNode(server, UA_NODEID_NULL, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
                                         UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), dateName,
@@ -159,7 +159,7 @@ setInformationModel(UA_Server *server) {
     myVar.description = UA_LOCALIZEDTEXT("", "");
     myVar.displayName = UA_LOCALIZEDTEXT("", "example bytestring");
     myVar.dataType = UA_TYPES[UA_TYPES_BYTESTRING].typeId;
-    myVar.valueRank = -1;
+    myVar.valueRank = UA_VALUERANK_SCALAR;
     myVar.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
     UA_ByteString myByteString = UA_BYTESTRING("test123\0test123");
     UA_Variant_setScalar(&myVar.value, &myByteString, &UA_TYPES[UA_TYPES_BYTESTRING]);
@@ -177,7 +177,7 @@ setInformationModel(UA_Server *server) {
     inputArguments.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
     inputArguments.description = UA_LOCALIZEDTEXT("en-US", "Say your name");
     inputArguments.name = UA_STRING("Name");
-    inputArguments.valueRank = -1; /* scalar argument */
+    inputArguments.valueRank = UA_VALUERANK_SCALAR; /* scalar argument */
 
     UA_Argument outputArguments;
     UA_Argument_init(&outputArguments);
@@ -186,7 +186,7 @@ setInformationModel(UA_Server *server) {
     outputArguments.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
     outputArguments.description = UA_LOCALIZEDTEXT("en-US", "Receive a greeting");
     outputArguments.name = UA_STRING("greeting");
-    outputArguments.valueRank = -1;
+    outputArguments.valueRank = UA_VALUERANK_SCALAR;
 
     UA_MethodAttributes addmethodattributes = UA_MethodAttributes_default;
     addmethodattributes.displayName = UA_LOCALIZEDTEXT("en-US", "Hello World");
@@ -258,7 +258,7 @@ setInformationModel(UA_Server *server) {
         attr.userWriteMask = UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_DESCRIPTION;
 
         /* add a scalar node for every built-in type */
-        attr.valueRank = -1;
+        attr.valueRank = UA_VALUERANK_SCALAR;
         void *value = UA_new(&UA_TYPES[type]);
         UA_Variant_setScalar(&attr.value, value, &UA_TYPES[type]);
         UA_Server_addVariableNode(server, UA_NODEID_NUMERIC(1, ++id),
@@ -268,7 +268,7 @@ setInformationModel(UA_Server *server) {
 
         /* add an array node for every built-in type */
         UA_UInt32 arrayDims = 0;
-        attr.valueRank = 1;
+        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
         attr.arrayDimensions = &arrayDims;
         attr.arrayDimensionsSize = 1;
         UA_Variant_setArray(&attr.value, UA_Array_new(10, &UA_TYPES[type]), 10, &UA_TYPES[type]);
@@ -278,7 +278,7 @@ setInformationModel(UA_Server *server) {
         UA_Variant_deleteMembers(&attr.value);
 
         /* add an matrix node for every built-in type */
-        attr.valueRank = 2;
+        attr.valueRank = UA_VALUERANK_TWO_DIMENSIONS;
         attr.arrayDimensions = matrixDims;
         attr.arrayDimensionsSize = 2;
         void *myMultiArray = UA_Array_new(9, &UA_TYPES[type]);
@@ -360,7 +360,7 @@ setInformationModel(UA_Server *server) {
     inputArguments.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
     inputArguments.description = UA_LOCALIZEDTEXT("en-US", "Input");
     inputArguments.name = UA_STRING("Input");
-    inputArguments.valueRank = -1; //uaexpert will crash if set to 0 ;)
+    inputArguments.valueRank = UA_VALUERANK_SCALAR; //uaexpert will crash if set to 0 ;)
 
     UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, INARGID),
                             UA_NODEID_NUMERIC(1, DEMOID),
@@ -379,7 +379,7 @@ setInformationModel(UA_Server *server) {
     outputArguments.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
     outputArguments.description = UA_LOCALIZEDTEXT("en-US", "Output");
     outputArguments.name = UA_STRING("Output");
-    outputArguments.valueRank = -1;
+    outputArguments.valueRank = UA_VALUERANK_SCALAR;
 
     UA_Server_addMethodNode(server, UA_NODEID_NUMERIC(1, OUTARGID),
                             UA_NODEID_NUMERIC(1, DEMOID),

+ 5 - 5
examples/tutorial_server_method.c

@@ -60,14 +60,14 @@ addHellWorldMethod(UA_Server *server) {
     inputArgument.description = UA_LOCALIZEDTEXT("en-US", "A String");
     inputArgument.name = UA_STRING("MyInput");
     inputArgument.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
-    inputArgument.valueRank = -1; /* scalar */
+    inputArgument.valueRank = UA_VALUERANK_SCALAR;
 
     UA_Argument outputArgument;
     UA_Argument_init(&outputArgument);
     outputArgument.description = UA_LOCALIZEDTEXT("en-US", "A String");
     outputArgument.name = UA_STRING("MyOutput");
     outputArgument.dataType = UA_TYPES[UA_TYPES_STRING].typeId;
-    outputArgument.valueRank = -1; /* scalar */
+    outputArgument.valueRank = UA_VALUERANK_SCALAR;
 
     UA_MethodAttributes helloAttr = UA_MethodAttributes_default;
     helloAttr.description = UA_LOCALIZEDTEXT("en-US","Say `Hello World`");
@@ -120,7 +120,7 @@ addIncInt32ArrayMethod(UA_Server *server) {
     inputArguments[0].description = UA_LOCALIZEDTEXT("en-US", "int32[5] array");
     inputArguments[0].name = UA_STRING("int32 array");
     inputArguments[0].dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    inputArguments[0].valueRank = 1;
+    inputArguments[0].valueRank = UA_VALUERANK_ONE_DIMENSION;
     UA_UInt32 pInputDimension = 5;
     inputArguments[0].arrayDimensionsSize = 1;
     inputArguments[0].arrayDimensions = &pInputDimension;
@@ -129,7 +129,7 @@ addIncInt32ArrayMethod(UA_Server *server) {
     inputArguments[1].description = UA_LOCALIZEDTEXT("en-US", "int32 delta");
     inputArguments[1].name = UA_STRING("int32 delta");
     inputArguments[1].dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    inputArguments[1].valueRank = -1; /* scalar */
+    inputArguments[1].valueRank = UA_VALUERANK_SCALAR;
 
     /* One output argument */
     UA_Argument outputArgument;
@@ -137,7 +137,7 @@ addIncInt32ArrayMethod(UA_Server *server) {
     outputArgument.description = UA_LOCALIZEDTEXT("en-US", "int32[5] array");
     outputArgument.name = UA_STRING("each entry is incremented by the delta");
     outputArgument.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-    outputArgument.valueRank = 1;
+    outputArgument.valueRank = UA_VALUERANK_ONE_DIMENSION;
     UA_UInt32 pOutputDimension = 5;
     outputArgument.arrayDimensionsSize = 1;
     outputArgument.arrayDimensions = &pOutputDimension;

+ 2 - 2
examples/tutorial_server_object.c

@@ -207,7 +207,7 @@ defineObjectTypes(UA_Server *server) {
 
     UA_VariableAttributes statusAttr = UA_VariableAttributes_default;
     statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status");
-    statusAttr.valueRank = -1;
+    statusAttr.valueRank = UA_VALUERANK_SCALAR;
     UA_NodeId statusId;
     UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
                               UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
@@ -220,7 +220,7 @@ defineObjectTypes(UA_Server *server) {
 
     UA_VariableAttributes rpmAttr = UA_VariableAttributes_default;
     rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM");
-    rpmAttr.valueRank = -1;
+    rpmAttr.valueRank = UA_VALUERANK_SCALAR;
     UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
                               UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
                               UA_QUALIFIEDNAME(1, "MotorRPMs"),

+ 4 - 4
examples/tutorial_server_variabletype.c

@@ -27,7 +27,7 @@ static void
 addVariableType2DPoint(UA_Server *server) {
     UA_VariableTypeAttributes vtAttr = UA_VariableTypeAttributes_default;
     vtAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vtAttr.valueRank = 1; /* array with one dimension */
+    vtAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
     UA_UInt32 arrayDims[1] = {2};
     vtAttr.arrayDimensions = arrayDims;
     vtAttr.arrayDimensionsSize = 1;
@@ -57,7 +57,7 @@ addVariable(UA_Server *server) {
     /* Prepare the node attributes */
     UA_VariableAttributes vAttr = UA_VariableAttributes_default;
     vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = 1; /* array with one dimension */
+    vAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
     UA_UInt32 arrayDims[1] = {2};
     vAttr.arrayDimensions = arrayDims;
     vAttr.arrayDimensionsSize = 1;
@@ -84,7 +84,7 @@ addVariableFail(UA_Server *server) {
     /* Prepare the node attributes */
     UA_VariableAttributes vAttr = UA_VariableAttributes_default;
     vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = -1; /* a scalar. this is not allowed per the variable type */
+    vAttr.valueRank = UA_VALUERANK_SCALAR; /* a scalar. this is not allowed per the variable type */
     vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable (fail)");
     UA_String s = UA_STRING("2dpoint?");
     UA_Variant_setScalar(&vAttr.value, &s, &UA_TYPES[UA_TYPES_STRING]);
@@ -104,7 +104,7 @@ addVariableFail(UA_Server *server) {
 
 static void
 writeVariable(UA_Server *server) {
-    UA_StatusCode retval = UA_Server_writeValueRank(server, pointVariableId, 0);
+    UA_StatusCode retval = UA_Server_writeValueRank(server, pointVariableId, UA_VALUERANK_ONE_OR_MORE_DIMENSIONS);
     UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,
                 "Setting the Value Rank failed with Status Code %s",
                 UA_StatusCode_name(retval));

+ 8 - 0
include/ua_constants.h

@@ -96,6 +96,14 @@ typedef enum {
 #define UA_WRITEMASK_WRITEMASK               (0x01<<20)
 #define UA_WRITEMASK_VALUEFORVARIABLETYPE    (0x01<<21)
 
+#define UA_VALUERANK_SCALAR_OR_ONE_DIMENSION  -3
+#define UA_VALUERANK_ANY                      -2
+#define UA_VALUERANK_SCALAR                   -1
+#define UA_VALUERANK_ONE_OR_MORE_DIMENSIONS    0
+#define UA_VALUERANK_ONE_DIMENSION             1
+#define UA_VALUERANK_TWO_DIMENSIONS            2
+#define UA_VALUERANK_THREE_DIMENSIONS          3
+
 _UA_END_DECLS
 
 #endif /* UA_CONSTANTS_H_ */

+ 2 - 2
src/server/ua_server_ns0.c

@@ -162,7 +162,7 @@ UA_Server_createNS0_base(UA_Server *server) {
     UA_VariableTypeAttributes basevar_attr = UA_VariableTypeAttributes_default;
     basevar_attr.displayName = UA_LOCALIZEDTEXT("", "BaseVariableType");
     basevar_attr.isAbstract = true;
-    basevar_attr.valueRank = -2;
+    basevar_attr.valueRank = UA_VALUERANK_ANY;
     basevar_attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
     ret |= addNode_raw(server, UA_NODECLASS_VARIABLETYPE, UA_NS0ID_BASEVARIABLETYPE, "BaseVariableType",
                        &basevar_attr, &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES]);
@@ -170,7 +170,7 @@ UA_Server_createNS0_base(UA_Server *server) {
     UA_VariableTypeAttributes bdv_attr = UA_VariableTypeAttributes_default;
     bdv_attr.displayName = UA_LOCALIZEDTEXT("", "BaseDataVariableType");
     bdv_attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATATYPE);
-    bdv_attr.valueRank = -2;
+    bdv_attr.valueRank = UA_VALUERANK_ANY;
     ret |= UA_Server_addVariableTypeNode(server, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
                                          UA_NODEID_NUMERIC(0, UA_NS0ID_BASEVARIABLETYPE),
                                          UA_NODEID_NULL, UA_QUALIFIEDNAME(0, "BaseDataVariableType"),

+ 2 - 2
src/server/ua_server_utils.c

@@ -400,7 +400,7 @@ const UA_VariableAttributes UA_VariableAttributes_default = {
      0, NULL, 0, NULL},          /* value */
     {0, UA_NODEIDTYPE_NUMERIC,
      {UA_NS0ID_BASEDATATYPE}},   /* dataType */
-    -2,                          /* valueRank */
+    UA_VALUERANK_ANY,            /* valueRank */
     0, NULL,                     /* arrayDimensions */
     UA_ACCESSLEVELMASK_READ, 0,  /* accessLevel (userAccessLevel) */
     0.0,                         /* minimumSamplingInterval */
@@ -432,7 +432,7 @@ const UA_VariableTypeAttributes UA_VariableTypeAttributes_default = {
      0, NULL, 0, NULL},          /* value */
     {0, UA_NODEIDTYPE_NUMERIC,
      {UA_NS0ID_BASEDATATYPE}},   /* dataType */
-    -2,                          /* valueRank */
+    UA_VALUERANK_ANY,            /* valueRank */
     0, NULL,                     /* arrayDimensions */
     false                        /* isAbstract */
 };

+ 19 - 19
src/server/ua_services_attribute.c

@@ -636,16 +636,16 @@ UA_Boolean
 compatibleValueRankArrayDimensions(UA_Server *server, UA_Session *session,
                                    UA_Int32 valueRank, size_t arrayDimensionsSize) {
     /* ValueRank invalid */
-    if(valueRank < -3) {
+    if(valueRank < UA_VALUERANK_SCALAR_OR_ONE_DIMENSION) {
         UA_LOG_INFO_SESSION(server->config.logger, session, "The ValueRank is invalid (< -3)");
         return false;
     }
 
-    /* case -3: the value can be a scalar or a one dimensional array */
-    /* case -2: the value can be a scalar or an array with any number of dimensions */
-    /* case -1: the value is a scalar */
-    /* case 0:  the value is an array with one or more dimensions */
-    if(valueRank <= 0) {
+    /* case -3, UA_VALUERANK_SCALAR_OR_ONE_DIMENSION: the value can be a scalar or a one dimensional array */
+    /* case -2, UA_VALUERANK_ANY: the value can be a scalar or an array with any number of dimensions */
+    /* case -1, UA_VALUERANK_SCALAR: the value is a scalar */
+    /* case  0, UA_VALUERANK_ONE_OR_MORE_DIMENSIONS:  the value is an array with one or more dimensions */
+    if(valueRank <= UA_VALUERANK_ONE_OR_MORE_DIMENSIONS) {
         if(arrayDimensionsSize > 0) {
             UA_LOG_INFO_SESSION(server->config.logger, session,
                                 "No ArrayDimensions can be defined for a ValueRank <= 0");
@@ -654,7 +654,7 @@ compatibleValueRankArrayDimensions(UA_Server *server, UA_Session *session,
         return true;
     }
     
-    /* case >= 1: the value is an array with the specified number of dimensions */
+    /* case >= 1, UA_VALUERANK_ONE_DIMENSION: the value is an array with the specified number of dimensions */
     if(arrayDimensionsSize != (size_t)valueRank) {
         UA_LOG_INFO_SESSION(server->config.logger, session,
                             "The number of ArrayDimensions is not equal to the (positive) ValueRank");
@@ -667,18 +667,18 @@ UA_Boolean
 compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank) {
     /* Check if the valuerank of the variabletype allows the change. */
     switch(constraintValueRank) {
-    case -3: /* the value can be a scalar or a one dimensional array */
-        if(valueRank != -1 && valueRank != 1)
+    case UA_VALUERANK_SCALAR_OR_ONE_DIMENSION: /* the value can be a scalar or a one dimensional array */
+        if(valueRank != UA_VALUERANK_SCALAR && valueRank != UA_VALUERANK_ONE_DIMENSION)
             return false;
         break;
-    case -2: /* the value can be a scalar or an array with any number of dimensions */
+    case UA_VALUERANK_ANY: /* the value can be a scalar or an array with any number of dimensions */
         break;
-    case -1: /* the value is a scalar */
-        if(valueRank != -1)
+    case UA_VALUERANK_SCALAR: /* the value is a scalar */
+        if(valueRank != UA_VALUERANK_SCALAR)
             return false;
         break;
-    case 0: /* the value is an array with one or more dimensions */
-        if(valueRank < (UA_Int32) 0)
+    case UA_VALUERANK_ONE_OR_MORE_DIMENSIONS: /* the value is an array with one or more dimensions */
+        if(valueRank < (UA_Int32) UA_VALUERANK_ONE_OR_MORE_DIMENSIONS)
             return false;
         break;
     default: /* >= 1: the value is an array with the specified number of dimensions */
@@ -695,7 +695,7 @@ compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank) {
 static UA_Boolean
 compatibleValueRankValue(UA_Int32 valueRank, const UA_Variant *value) {
     /* Invalid ValueRank */
-    if(valueRank < -3)
+    if(valueRank < UA_VALUERANK_SCALAR_OR_ONE_DIMENSION)
         return false;
 
     /* Empty arrays (-1) always match */
@@ -709,17 +709,17 @@ compatibleValueRankValue(UA_Int32 valueRank, const UA_Variant *value) {
     /* We cannot simply use compatibleValueRankArrayDimensions since we can have
      * defined ArrayDimensions for the value if the ValueRank is -2 */
     switch(valueRank) {
-    case -3: /* The value can be a scalar or a one dimensional array */
+    case UA_VALUERANK_SCALAR_OR_ONE_DIMENSION: /* The value can be a scalar or a one dimensional array */
         return (arrayDims <= 1);
-    case -2: /* The value can be a scalar or an array with any number of dimensions */
+    case UA_VALUERANK_ANY: /* The value can be a scalar or an array with any number of dimensions */
         return true;
-    case -1: /* The value is a scalar */
+    case UA_VALUERANK_SCALAR: /* The value is a scalar */
         return (arrayDims == 0);
     default:
         break;
     }
 
-    UA_assert(valueRank >= 0);
+    UA_assert(valueRank >= UA_VALUERANK_ONE_OR_MORE_DIMENSIONS);
 
     /* case 0:  the value is an array with one or more dimensions */
     return (arrayDims == (UA_UInt32)valueRank);

+ 2 - 2
src/server/ua_services_nodemanagement.c

@@ -1604,7 +1604,7 @@ UA_Server_addMethodNodeEx_finish(UA_Server *server, const UA_NodeId nodeId,
         char *name = "InputArguments";
         attr.displayName = UA_LOCALIZEDTEXT("", name);
         attr.dataType = UA_TYPES[UA_TYPES_ARGUMENT].typeId;
-        attr.valueRank = 1;
+        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
         UA_UInt32 inputArgsSize32 = (UA_UInt32)inputArgumentsSize;
         attr.arrayDimensions = &inputArgsSize32;
         attr.arrayDimensionsSize = 1;
@@ -1623,7 +1623,7 @@ UA_Server_addMethodNodeEx_finish(UA_Server *server, const UA_NodeId nodeId,
         char *name = "OutputArguments";
         attr.displayName = UA_LOCALIZEDTEXT("", name);
         attr.dataType = UA_TYPES[UA_TYPES_ARGUMENT].typeId;
-        attr.valueRank = 1;
+        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
         UA_UInt32 outputArgsSize32 = (UA_UInt32)outputArgumentsSize;
         attr.arrayDimensions = &outputArgsSize32;
         attr.arrayDimensionsSize = 1;

+ 6 - 6
tests/client/check_client_highlevel.c

@@ -130,7 +130,7 @@ START_TEST(Node_Add) {
     {
         UA_VariableTypeAttributes attr = UA_VariableTypeAttributes_default;
         attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.valueRank = 1; /* array with one dimension */
+        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
         UA_UInt32 arrayDims[1] = {2};
         attr.arrayDimensions = arrayDims;
         attr.arrayDimensionsSize = 1;
@@ -167,7 +167,7 @@ START_TEST(Node_Add) {
         UA_Int32 values[2] = {10, 20};
         UA_Variant_setArray(&attr.value, values, 2, &UA_TYPES[UA_TYPES_INT32]);
         attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.valueRank = 1; /* array with one dimension */
+        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
         UA_UInt32 arrayDims[1] = {2};
         attr.arrayDimensions = arrayDims;
         attr.arrayDimensionsSize = 1;
@@ -390,7 +390,7 @@ START_TEST(Node_AddReadWriteNodes) {
 
         UA_Variant_setArray(&attr.value, values, 2, &UA_TYPES[UA_TYPES_INT32]);
         attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
-        attr.valueRank = 1; /* array with one dimension */
+        attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
         UA_UInt32 arrayDims[1] = {2};
         attr.arrayDimensions = arrayDims;
         attr.arrayDimensionsSize = 1;
@@ -835,10 +835,10 @@ END_TEST
 
 START_TEST(Node_ReadWrite_ValueRank) {
 
-    UA_Int32 valueRank = 0;
+    UA_Int32 valueRank = UA_VALUERANK_ONE_OR_MORE_DIMENSIONS;
     UA_StatusCode retval = UA_Client_readValueRankAttribute(client, nodeReadWriteGeneric, &valueRank);
     ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
-    ck_assert_int_eq(valueRank, -2);
+    ck_assert_int_eq(valueRank, UA_VALUERANK_ANY);
 
     // set the value to a scalar
     UA_Double val = 0.0;
@@ -848,7 +848,7 @@ START_TEST(Node_ReadWrite_ValueRank) {
     ck_assert_uint_eq(retval, UA_STATUSCODE_GOOD);
 
     // we want an array
-    UA_Int32 newValueRank = 1;
+    UA_Int32 newValueRank = UA_VALUERANK_ONE_DIMENSION;
 
     // shall fail when the value is not compatible
     retval = UA_Client_writeValueRankAttribute(client, nodeReadWriteGeneric, &newValueRank);

+ 1 - 1
tests/server/check_node_inheritance.c

@@ -74,7 +74,7 @@ START_TEST(Nodes_createCustomStateType)
         attr.minimumSamplingInterval = 0.000000;
         attr.userAccessLevel = 1;
         attr.accessLevel = 1;
-        attr.valueRank = -2;
+        attr.valueRank = UA_VALUERANK_ANY;
         attr.dataType = UA_NODEID_NUMERIC(0, UA_NS0ID_UINT32);
         UA_UInt32 val = 0;
         UA_Variant_setScalar(&attr.value, &val, &UA_TYPES[UA_TYPES_UINT32]);

+ 2 - 2
tests/server/check_services_attributes.c

@@ -50,7 +50,7 @@ static void setup(void) {
     UA_Variant_setScalar(&vattr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
     vattr.description = UA_LOCALIZEDTEXT("locale","the answer");
     vattr.displayName = UA_LOCALIZEDTEXT("locale","the answer");
-    vattr.valueRank = -2;
+    vattr.valueRank = UA_VALUERANK_ANY;
     UA_QualifiedName myIntegerName = UA_QUALIFIEDNAME(1, "the answer");
     UA_NodeId myIntegerNodeId = UA_NODEID_STRING(1, "the.answer");
     UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
@@ -81,7 +81,7 @@ static void setup(void) {
     vattr = UA_VariableAttributes_default;
     UA_Int32 myIntegerArray[9] = {1,2,3,4,5,6,7,8,9};
     UA_Variant_setArray(&vattr.value, &myIntegerArray, 9, &UA_TYPES[UA_TYPES_INT32]);
-    vattr.valueRank = -2;
+    vattr.valueRank = UA_VALUERANK_ANY;
     UA_UInt32 myIntegerDimensions[2] = {3,3};
     vattr.value.arrayDimensions = myIntegerDimensions;
     vattr.value.arrayDimensionsSize = 2;

+ 4 - 4
tests/server/check_services_nodemanagement.c

@@ -61,7 +61,7 @@ START_TEST(AddVariableNode) {
 START_TEST(InstantiateVariableTypeNode) {
     UA_VariableTypeAttributes vtAttr = UA_VariableTypeAttributes_default;
     vtAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vtAttr.valueRank = 1; /* array with one dimension */
+    vtAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
     UA_UInt32 arrayDims[1] = {2};
     vtAttr.arrayDimensions = arrayDims;
     vtAttr.arrayDimensionsSize = 1;
@@ -83,7 +83,7 @@ START_TEST(InstantiateVariableTypeNode) {
     /* Prepare the node attributes */
     UA_VariableAttributes vAttr = UA_VariableAttributes_default;
     vAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
-    vAttr.valueRank = 1; /* array with one dimension */
+    vAttr.valueRank = UA_VALUERANK_ONE_DIMENSION;
     vAttr.arrayDimensions = arrayDims;
     vAttr.arrayDimensionsSize = 1;
     vAttr.displayName = UA_LOCALIZEDTEXT("en-US", "2DPoint Variable");
@@ -365,7 +365,7 @@ START_TEST(InstantiateObjectType) {
 
     UA_VariableAttributes statusAttr = UA_VariableAttributes_default;
     statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status");
-    statusAttr.valueRank = -1;
+    statusAttr.valueRank = UA_VALUERANK_SCALAR;
     UA_NodeId statusId;
     retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
                                        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
@@ -382,7 +382,7 @@ START_TEST(InstantiateObjectType) {
 
     UA_VariableAttributes rpmAttr = UA_VariableAttributes_default;
     rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM");
-    rpmAttr.valueRank = -1;
+    rpmAttr.valueRank = UA_VALUERANK_SCALAR;
     retval = UA_Server_addVariableNode(server, UA_NODEID_NULL, pumpTypeId,
                                        UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
                                        UA_QUALIFIEDNAME(1, "MotorRPMs"),