|
@@ -26,13 +26,12 @@ enum UA_AttributeId {
|
|
|
UA_ATTRIBUTEID_USEREXECUTABLE = 22
|
|
|
};
|
|
|
|
|
|
-#define CHECK_NODECLASS(CLASS) do { \
|
|
|
- if((node->nodeClass & (CLASS)) != 0x00) { \
|
|
|
- v.encodingMask = UA_DATAVALUE_ENCODINGMASK_STATUSCODE; \
|
|
|
- v.status = UA_STATUSCODE_BADNOTREADABLE; \
|
|
|
- } \
|
|
|
- break; \
|
|
|
-} while(0)
|
|
|
+#define CHECK_NODECLASS(CLASS) \
|
|
|
+ if(!(node->nodeClass & (CLASS))) { \
|
|
|
+ v.encodingMask = UA_DATAVALUE_ENCODINGMASK_STATUSCODE; \
|
|
|
+ v.status = UA_STATUSCODE_BADNOTREADABLE; \
|
|
|
+ break; \
|
|
|
+ } \
|
|
|
|
|
|
static UA_DataValue service_read_node(Application *app, const UA_ReadValueId *id) {
|
|
|
UA_DataValue v;
|
|
@@ -147,6 +146,7 @@ static UA_DataValue service_read_node(Application *app, const UA_ReadValueId *id
|
|
|
case UA_ATTRIBUTEID_DATATYPE:
|
|
|
CHECK_NODECLASS(UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE);
|
|
|
v.encodingMask = UA_DATAVALUE_ENCODINGMASK_VARIANT;
|
|
|
+ printf("xxxx: %d", node->nodeClass & (UA_NODECLASS_VARIABLE | UA_NODECLASS_VARIABLETYPE));
|
|
|
retval |= UA_Variant_copySetValue(&v.value, &UA_.types[UA_NODEID],
|
|
|
&((UA_VariableTypeNode *)node)->dataType);
|
|
|
break;
|
|
@@ -248,8 +248,7 @@ UA_Int32 Service_Read(UA_Session *session, const UA_ReadRequest *request,
|
|
|
for(UA_Int32 i = 0;i < readsize;i++) {
|
|
|
DBG_VERBOSE(printf("service_read - attributeId=%d\n", request->nodesToRead[i].attributeId));
|
|
|
DBG_VERBOSE(UA_NodeId_printf("service_read - nodeId=", &(request->nodesToRead[i].nodeId)));
|
|
|
- response->results[i] = service_read_node(application,
|
|
|
- &request->nodesToRead[i]);
|
|
|
+ response->results[i] = service_read_node(application, &request->nodesToRead[i]);
|
|
|
}
|
|
|
response->responseHeader.serviceResult = UA_STATUSCODE_GOOD;
|
|
|
response->diagnosticInfosSize = 0;
|
|
@@ -260,182 +259,144 @@ UA_Int32 Service_Write_writeNode(Application *app, UA_WriteValue *writeValue, UA
|
|
|
{
|
|
|
UA_Int32 retval = UA_SUCCESS;
|
|
|
Namespace *ns = UA_indexedList_findValue(app->namespaces, writeValue->nodeId.ns);
|
|
|
- if(ns==UA_NULL)
|
|
|
- {
|
|
|
+ if(ns==UA_NULL) {
|
|
|
*result = UA_STATUSCODE_BADNODEIDINVALID;
|
|
|
return UA_ERROR;
|
|
|
}
|
|
|
|
|
|
const UA_Node *node;
|
|
|
- if(Namespace_get(ns, &writeValue->nodeId, &node) != UA_SUCCESS){
|
|
|
+ if(Namespace_get(ns, &writeValue->nodeId, &node) != UA_SUCCESS) {
|
|
|
return UA_ERROR;
|
|
|
}
|
|
|
|
|
|
switch(writeValue->attributeId) {
|
|
|
case UA_ATTRIBUTEID_NODEID:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_NODECLASS:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_BROWSENAME:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_DISPLAYNAME:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){
|
|
|
- }
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_DESCRIPTION:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_WRITEMASK:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_USERWRITEMASK:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_ISABSTRACT:
|
|
|
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_SYMMETRIC:
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_INVERSENAME:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_CONTAINSNOLOOPS:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_EVENTNOTIFIER:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_VALUE:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-#ifdef RASPI
|
|
|
-
|
|
|
-
|
|
|
- *((UA_Boolean*)((UA_VariableNode *)node)->value.data) = *((UA_Boolean*)(writeValue->value.value.data));
|
|
|
-
|
|
|
-#else
|
|
|
- retval |= UA_Variant_copy(&writeValue->value.value, &((UA_VariableNode *)node)->value);
|
|
|
-#endif
|
|
|
- *result = UA_STATUSCODE_GOOD;
|
|
|
+ if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ retval |= UA_Variant_copy(&writeValue->value.value, &((UA_VariableNode *)node)->value);
|
|
|
+ *result = UA_STATUSCODE_GOOD;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_DATATYPE:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_VALUERANK:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_ARRAYDIMENSIONS:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_ACCESSLEVEL:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_USERACCESSLEVEL:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
return UA_ERROR;
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_HISTORIZING:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_EXECUTABLE:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
case UA_ATTRIBUTEID_USEREXECUTABLE:
|
|
|
-
|
|
|
- if(writeValue->value.encodingMask == UA_DATAVALUE_ENCODINGMASK_VARIANT){}
|
|
|
+
|
|
|
*result = UA_STATUSCODE_BADWRITENOTSUPPORTED;
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
-
|
|
|
*result = UA_STATUSCODE_BADATTRIBUTEIDINVALID;
|
|
|
break;
|
|
|
}
|