#include "uaprovider_demo_types_1.h"
#include <opcua_platformdefs.h>
#include <opcua_statuscodes.h>
#include <opcua_errorhandling.h>
#include <opcua_memory.h>
#include <opcua_string.h>
#include <opcua_guid.h>
#include <opcua_encoder.h>
#include <opcua_decoder.h>
#include <opcua_identifiers.h>
#include "uaprovider_demo_identifiers_1.h"
#ifndef OPCUA_EXCLUDE_Demo_HeaterStatus
static struct _OpcUa_EnumeratedValue g_Demo_HeaterStatus_EnumeratedValues[] =
{
{"Demo_HeaterStatus_Off", 0},
{"Demo_HeaterStatus_Heating", 1},
{"Demo_HeaterStatus_Cooling", 2},
{ OpcUa_Null, 0 }
};
struct _OpcUa_EnumeratedType Demo_HeaterStatus_EnumeratedType =
{
"HeaterStatus",
g_Demo_HeaterStatus_EnumeratedValues
};
#endif
#ifndef OPCUA_EXCLUDE_Demo_Vector
OpcUa_Void Demo_Vector_Initialize(Demo_Vector* a_pValue)
{
if (a_pValue != OpcUa_Null)
{
OpcUa_Field_Initialize(Double, x);
OpcUa_Field_Initialize(Double, y);
OpcUa_Field_Initialize(Double, z);
}
}
OpcUa_Void Demo_Vector_Clear(Demo_Vector* a_pValue)
{
if (a_pValue != OpcUa_Null)
{
OpcUa_Field_Clear(Double, x);
OpcUa_Field_Clear(Double, y);
OpcUa_Field_Clear(Double, z);
}
}
OpcUa_StatusCode Demo_Vector_GetSize(Demo_Vector* a_pValue, OpcUa_Encoder* a_pEncoder, OpcUa_Int32* a_pSize)
{
OpcUa_Int32 iSize = 0;
OpcUa_InitializeStatus(OpcUa_Module_Serializer, "Demo_Vector_GetSize");
OpcUa_ReturnErrorIfArgumentNull(a_pValue);
OpcUa_ReturnErrorIfArgumentNull(a_pEncoder);
OpcUa_ReturnErrorIfArgumentNull(a_pSize);
*a_pSize = -1;
OpcUa_Field_GetSize(Double, x);
OpcUa_Field_GetSize(Double, y);
OpcUa_Field_GetSize(Double, z);
*a_pSize = iSize;
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
*a_pSize = -1;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode Demo_Vector_Encode(Demo_Vector* a_pValue, OpcUa_Encoder* a_pEncoder)
{
OpcUa_InitializeStatus(OpcUa_Module_Serializer, "Demo_Vector_Encode");
OpcUa_ReturnErrorIfArgumentNull(a_pValue);
OpcUa_ReturnErrorIfArgumentNull(a_pEncoder);
OpcUa_Field_Write(Double, x);
OpcUa_Field_Write(Double, y);
OpcUa_Field_Write(Double, z);
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
OpcUa_StatusCode Demo_Vector_Decode(Demo_Vector* a_pValue, OpcUa_Decoder* a_pDecoder)
{
OpcUa_InitializeStatus(OpcUa_Module_Serializer, "Demo_Vector_Decode");
OpcUa_ReturnErrorIfArgumentNull(a_pValue);
OpcUa_ReturnErrorIfArgumentNull(a_pDecoder);
Demo_Vector_Initialize(a_pValue);
OpcUa_Field_Read(Double, x);
OpcUa_Field_Read(Double, y);
OpcUa_Field_Read(Double, z);
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
Demo_Vector_Clear(a_pValue);
OpcUa_FinishErrorHandling;
}
#if OPCUA_ENCODEABLE_OBJECT_COMPARE_SUPPORTED
OPCUA_EXPORT OpcUa_Int Demo_Vector_Compare(const Demo_Vector* a_pValue1, const Demo_Vector* a_pValue2)
{
if (a_pValue1 == a_pValue2)
{
return 0;
}
OpcUa_Field_Compare(Double, x);
OpcUa_Field_Compare(Double, y);
OpcUa_Field_Compare(Double, z);
return 0;
}
#endif
#if OPCUA_ENCODEABLE_OBJECT_COPY_SUPPORTED
OPCUA_EXPORT
OpcUa_StatusCode Demo_Vector_Copy(
const Demo_Vector* a_pSource, Demo_Vector** a_ppCopy)
{
OpcUa_InitializeStatus(OpcUa_Module_ProxyStub, "Demo_Vector_Copy");
OpcUa_ReturnErrorIfArgumentNull(a_pSource);
OpcUa_ReturnErrorIfArgumentNull(a_ppCopy);
*a_ppCopy = OpcUa_Alloc(sizeof( Demo_Vector ));
OpcUa_GotoErrorIfAllocFailed((*a_ppCopy));
uStatus = Demo_Vector_CopyTo(a_pSource, *a_ppCopy);
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
if (*a_ppCopy != OpcUa_Null)
{
OpcUa_Free(*a_ppCopy);
*a_ppCopy = OpcUa_Null;
}
OpcUa_FinishErrorHandling;
}
OPCUA_EXPORT
OpcUa_StatusCode Demo_Vector_CopyTo(
const Demo_Vector* a_pSource, Demo_Vector* a_pDestination)
{
OpcUa_InitializeStatus(OpcUa_Module_ProxyStub, "Demo_Vector_CopyTo");
OpcUa_ReturnErrorIfArgumentNull(a_pSource);
OpcUa_ReturnErrorIfArgumentNull(a_pDestination);
Demo_Vector_Initialize(a_pDestination);
OpcUa_Field_CopyToScalar(Double, x);
OpcUa_Field_CopyToScalar(Double, y);
OpcUa_Field_CopyToScalar(Double, z);
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
Demo_Vector_Clear(a_pDestination);
OpcUa_FinishErrorHandling;
}
#endif
OPCUA_EXPORT
OpcUa_StatusCode Demo_Vector_ArrayFromVariant(
OpcUa_Variant* a_pVariant, OpcUa_Int32 *a_pNoOfValues, Demo_Vector **a_ppValues, OpcUa_Boolean a_bDetach)
{
OpcUa_Int32 i;
Demo_Vector *pValue;
Demo_Vector *pValues = OpcUa_Null;
OpcUa_InitializeStatus(OpcUa_Module_ProxyStub, "Demo_Vector_ArrayFromVariant");
OpcUa_ReturnErrorIfArgumentNull(a_pVariant);
OpcUa_ReturnErrorIfArgumentNull(a_pNoOfValues);
OpcUa_ReturnErrorIfArgumentNull(a_ppValues);
if (!a_pVariant || a_pVariant->
ArrayType != OpcUa_VariantArrayType_Array || a_pVariant->
Datatype != OpcUaType_ExtensionObject
|| (a_pVariant->
Value.Array.Length && !a_pVariant->
Value.Array.Value.ExtensionObjectArray) )
{
return OpcUa_BadInvalidArgument;
}
for (i=0; i<a_pVariant->
Value.Array.Length; i++)
{
|| !a_pVariant->
Value.Array.Value.ExtensionObjectArray[i].Body.EncodeableObject.Type
|| a_pVariant->
Value.Array.Value.ExtensionObjectArray[i].Body.EncodeableObject.Type->TypeId != Demo_VectorId)
{
return OpcUa_BadInvalidArgument;
}
}
*a_pNoOfValues = 0;
if (a_pVariant->
Value.Array.Length > 0)
{
pValues = (Demo_Vector*) OpcUa_Alloc(a_pVariant->
Value.Array.Length *
sizeof(Demo_Vector));
OpcUa_GotoErrorIfAllocFailed(pValues);
OpcUa_MemSet(pValues, 0, a_pVariant->
Value.Array.Length *
sizeof(Demo_Vector));
for (i=0; i<a_pVariant->
Value.Array.Length; i++)
{
pValue = (Demo_Vector*) a_pVariant->
Value.Array.Value.ExtensionObjectArray[i].Body.EncodeableObject.Object;
if (a_bDetach)
{
pValues[i] = *pValue;
Demo_Vector_Initialize((Demo_Vector*) a_pVariant->
Value.Array.Value.ExtensionObjectArray[i].Body.EncodeableObject.Object);
OpcUa_ExtensionObject_Clear(&a_pVariant->
Value.Array.Value.ExtensionObjectArray[i]);
}
else
{
uStatus = Demo_Vector_CopyTo(pValue, &pValues[i]);
OpcUa_GotoErrorIfBad(uStatus);
}
}
*a_ppValues = pValues;
*a_pNoOfValues = a_pVariant->
Value.Array.Length;
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
if (pValues)
{
for (i = 0; i < a_pVariant->
Value.Array.Length; i++)
{
Demo_Vector_Clear(&pValues[i]);
}
OpcUa_Free(pValues);
}
OpcUa_FinishErrorHandling;
}
OPCUA_EXPORT
OpcUa_StatusCode Demo_Vector_ArrayToVariant(OpcUa_Int32 *a_pNoOfValues, Demo_Vector **a_ppValues,
OpcUa_Variant* a_pVariant, OpcUa_Boolean a_bAttach)
{
OpcUa_Int32 i;
Demo_Vector *pValue;
OpcUa_InitializeStatus(OpcUa_Module_ProxyStub, "Demo_Vector_ArrayToVariant");
OpcUa_ReturnErrorIfArgumentNull(a_pNoOfValues);
OpcUa_ReturnErrorIfArgumentNull(a_ppValues);
OpcUa_ReturnErrorIfArgumentNull(*a_ppValues);
OpcUa_ReturnErrorIfArgumentNull(a_pVariant);
OpcUa_Variant_Initialize(a_pVariant);
a_pVariant->
Datatype = OpcUaType_ExtensionObject;
a_pVariant->
ArrayType = OpcUa_VariantArrayType_Array;
if (*a_pNoOfValues > 0)
{
OpcUa_ReturnErrorIfAllocFailed(a_pVariant->
Value.Array.Value.ExtensionObjectArray);
a_pVariant->
Value.Array.Length = *a_pNoOfValues;
for (i=0; i<*a_pNoOfValues; i++)
{
uStatus = OpcUa_EncodeableObject_CreateExtension(&Demo_Vector_EncodeableType, &a_pVariant->
Value.Array.Value.ExtensionObjectArray[i], (OpcUa_Void**)&pValue);
OpcUa_GotoErrorIfBad(uStatus);
if (a_bAttach)
{
OpcUa_MemCpy(pValue, sizeof (Demo_Vector), (*a_ppValues)+i, sizeof(Demo_Vector));
}
else
{
uStatus = Demo_Vector_CopyTo(&(*a_ppValues)[i], pValue);
OpcUa_GotoErrorIfBad(uStatus);
}
}
if (a_bAttach)
{
OpcUa_Free(*a_ppValues);
*a_pNoOfValues = 0;
*a_ppValues = OpcUa_Null;
}
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_Variant_Clear(a_pVariant);
OpcUa_FinishErrorHandling;
}
struct _OpcUa_EncodeableType Demo_Vector_EncodeableType =
{
#if !OPCUA_ENCODEABLE_OBJECT_OMIT_TYPE_NAME
"Vector",
#endif
Demo_VectorId,
Demo_Vector_Encoding_DefaultBinary,
Demo_Vector_Encoding_DefaultXml,
(OpcUa_StringA)Demo_NamespaceUri1,
sizeof(Demo_Vector),
(OpcUa_EncodeableObject_PfnInitialize*)Demo_Vector_Initialize,
(OpcUa_EncodeableObject_PfnClear*)Demo_Vector_Clear,
(OpcUa_EncodeableObject_PfnGetSize*)Demo_Vector_GetSize,
(OpcUa_EncodeableObject_PfnEncode*)Demo_Vector_Encode,
(OpcUa_EncodeableObject_PfnDecode*)Demo_Vector_Decode
#if OPCUA_ENCODEABLE_OBJECT_COMPARE_SUPPORTED
,(OpcUa_EncodeableObject_PfnCompare*)Demo_Vector_Compare
#endif
#if OPCUA_ENCODEABLE_OBJECT_COPY_SUPPORTED
,(OpcUa_EncodeableObject_PfnCopy*)Demo_Vector_Copy,
(OpcUa_EncodeableObject_PfnCopyTo*)Demo_Vector_CopyTo
#endif
};
#endif
static OpcUa_EncodeableType* g_Demo_KnownEncodeableTypes1[] =
{
#ifndef OPCUA_EXCLUDE_Demo_Vector
&Demo_Vector_EncodeableType,
#endif
OpcUa_Null
};
OpcUa_EncodeableType** Demo_KnownEncodeableTypes1 = g_Demo_KnownEncodeableTypes1;