#include "uaprovider_demo_methods_1.h"
#include <opcua_guid.h>
#include <opcua_statuscodes.h>
#include "uaprovider_demo_simulation.h"
#include "uaprovider_demo_identifiers_1.h"
static int g_iDynNodeId = 8001;
static OpcUa_Boolean g_bDynNodeIdExists = OpcUa_False;
static OpcUa_UInt32 iNodeVersion = 0;
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences2_Method1(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences2_Method2(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences2_Method3(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences5_ReferencedNode3(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_NodeClasses_Method(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_DynamicNodes_CreateDynamicNode(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_Property *pNode = OpcUa_Null;
OpcUa_BaseNode *pParentNode = OpcUa_Null;
OpcUa_NodeId nodeId, *pNodeId = OpcUa_Null;
OpcUa_Variant *pValue = OpcUa_Null;
char szVersion[11];
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
if (g_bDynNodeIdExists) return OpcUa_BadInvalidState;
UaServer_CreateProperty(pAddressSpace, &pNode, pParentNode, g_iDynNodeId, g_UaProviderDemo_uNamespaceIndex1,
"DynamicNode");
pNodeId->Identifier.Numeric = OpcUaId_UInt32;
pValue->Datatype = OpcUaType_UInt32;
pValue->Value.UInt32 = 100;
#if UASERVER_SUPPORT_EVENTS
UaProvider_Demo_SendModelChangeEvent(pParentNode, OpcUa_ModelChangeStructureVerbMask_ReferenceAdded);
#endif
g_bDynNodeIdExists = OpcUa_True;
if (pNode)
{
OpcUa_String_Clear(&pValue->Value.String);
OpcUa_SnPrintfA(szVersion, 11, "%u", iNodeVersion++);
szVersion[10] = 0;
OpcUa_String_AttachCopy(&pValue->Value.String, szVersion);
}
return ret;
}
OpcUa_StatusCode UaProvider_Demo_DynamicNodes_DeleteDynamicNode(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_Property *pNode = OpcUa_Null;
OpcUa_BaseNode *pParentNode = OpcUa_Null;
OpcUa_NodeId nodeId;
OpcUa_Variant *pValue = OpcUa_Null;
char szVersion[11];
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
if (!g_bDynNodeIdExists) return OpcUa_BadInvalidState;
#if UASERVER_SUPPORT_EVENTS
UaProvider_Demo_SendModelChangeEvent(pParentNode, OpcUa_ModelChangeStructureVerbMask_ReferenceDeleted);
#endif
g_bDynNodeIdExists = OpcUa_False;
if (pNode)
{
OpcUa_String_Clear(&pValue->Value.String);
OpcUa_SnPrintfA(szVersion, 11, "%u", iNodeVersion++);
szVersion[10] = 0;
OpcUa_String_AttachCopy(&pValue->Value.String, szVersion);
}
return ret;
}
OpcUa_StatusCode UaProvider_Demo_History_StartLogging(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
#if HAVE_DATA_LOGGER
ret = UaProvider_Demo_StartLogging();
#endif
return ret;
}
OpcUa_StatusCode UaProvider_Demo_History_StopLogging(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
#if HAVE_DATA_LOGGER
ret = UaProvider_Demo_StopLogging();
#endif
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Method_Multiply(
OpcUa_NodeId *pObjectId ,
OpcUa_Double a ,
OpcUa_Double b ,
OpcUa_Double *result )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
*result = a * b;
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Method_VectorAdd(
OpcUa_NodeId *pObjectId ,
Demo_Vector *v1,
Demo_Vector *v2,
Demo_Vector *result)
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
result->x = v1->x + v2->x;
result->y = v1->y + v2->y;
result->z = v1->z + v2->z;
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Demo_SetSimulationSpeed(
OpcUa_NodeId *pObjectId ,
OpcUa_UInt32 speed )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
ret = UaProvider_Demo_SetSimulationSpeed(speed);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Demo_StartSimulation(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
ret = UaProvider_Demo_StartSimulation();
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Demo_StopSimulation(
OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
ret = UaProvider_Demo_StopSimulation();
return ret;
}