ANSI C UA Server SDK  1.5.1.313
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Modules Pages
uaprovider_demo_methods_1.c
/*****************************************************************************
*
* Copyright (c) 2006-2015 Unified Automation GmbH. All rights reserved.
*
* Software License Agreement ("SLA") Version 2.5
*
* Unless explicitly acquired and licensed from Licensor under another
* license, the contents of this file are subject to the Software License
* Agreement ("SLA") Version 2.5, or subsequent versions as allowed by the
* SLA, and You may not copy or use this file in either source code or
* executable form, except in compliance with the terms and conditions of
* the SLA.
*
* All software distributed under the SLA is provided strictly on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* AND LICENSOR HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
* LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, QUIET ENJOYMENT, OR NON-INFRINGEMENT. See the SLA for specific
* language governing rights and limitations under the SLA.
*
* The complete license agreement can be found here:
* http://unifiedautomation.com/License/SLA/2.5/
*
* Project: OPC Ansi C DemoProvider for namespace
* 'http://www.unifiedautomation.com/DemoServer/'
*
****************************************************************************/
#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"
/* dynamic node variables */
static int g_iDynNodeId = 8001;
static OpcUa_Boolean g_bDynNodeIdExists = OpcUa_False;
static OpcUa_UInt32 iNodeVersion = 0;
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences2_Method1(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences2_Method2(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences2_Method3(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Has3ForwardReferences5_ReferencedNode3(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_NodeClasses_Method(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
return ret;
}
OpcUa_StatusCode UaProvider_Demo_DynamicNodes_CreateDynamicNode(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_Property *pNode = OpcUa_Null;
OpcUa_BaseNode *pParentNode = OpcUa_Null;
OpcUa_NodeId nodeId, *pNodeId = OpcUa_Null;
UaServer_AddressSpace *pAddressSpace = &g_pDemoProvider->AddressSpace;
OpcUa_Variant *pValue = OpcUa_Null;
char szVersion[11];
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
if (g_bDynNodeIdExists) return OpcUa_BadInvalidState;
UaBase_SetDefaultNamespace(g_UaProviderDemo_uNamespaceIndex1);
UaBase_CreateNumericNodeId(&nodeId, g_iDynNodeId);
UaServer_GetNode(pAddressSpace, &nodeId, (OpcUa_BaseNode**)&pNode);
UaBase_CreateStringNodeId(&nodeId, Demo_Objects_Demo_DynamicNodes);
UaServer_GetNode(pAddressSpace, &nodeId, (OpcUa_BaseNode**)&pParentNode);
UaServer_CreateProperty(pAddressSpace, &pNode, pParentNode, g_iDynNodeId, g_UaProviderDemo_uNamespaceIndex1, "DynamicNode");
pNodeId = OpcUa_Variable_GetDataType(pNode);
pNodeId->Identifier.Numeric = OpcUaId_UInt32;
pValue = OpcUa_Variable_GetValue(pNode);
pValue->Datatype = OpcUaType_UInt32;
pValue->Value.UInt32 = 100;
#if UASERVER_SUPPORT_EVENTS
/* send ModelChangeEvent */
UaProvider_Demo_SendModelChangeEvent(pParentNode, OpcUa_ModelChangeStructureVerbMask_ReferenceAdded);
#endif /* UASERVER_SUPPORT_EVENTS */
g_bDynNodeIdExists = OpcUa_True;
/* update NodeVersion property */
UaBase_CreateNumericNodeIdEx(&nodeId, Demo_Objects_Demo_DynamicNodes_NodeVersion, g_UaProviderDemo_uNamespaceIndex1);
UaServer_GetNode(pAddressSpace, &nodeId, (OpcUa_BaseNode**)&pNode);
if (pNode)
{
pValue = OpcUa_Variable_GetValue(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(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
UaServer_AddressSpace *pAddressSpace = &g_pDemoProvider->AddressSpace;
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;
UaBase_SetDefaultNamespace(g_UaProviderDemo_uNamespaceIndex1);
UaBase_CreateNumericNodeId(&nodeId, g_iDynNodeId);
UaServer_GetNode(pAddressSpace, &nodeId, (OpcUa_BaseNode**)&pNode);
UaBase_CreateStringNodeId(&nodeId, Demo_Objects_Demo_DynamicNodes);
UaServer_GetNode(pAddressSpace, &nodeId, (OpcUa_BaseNode**)&pParentNode);
/* remove node */
UaServer_RemoveNode(pAddressSpace, (OpcUa_BaseNode*)pNode);
#if UASERVER_SUPPORT_EVENTS
/* send ModelChangeEvent */
UaProvider_Demo_SendModelChangeEvent(pParentNode, OpcUa_ModelChangeStructureVerbMask_ReferenceDeleted);
#endif /* UASERVER_SUPPORT_EVENTS */
g_bDynNodeIdExists = OpcUa_False;
/* update NodeVersion property */
UaBase_CreateNumericNodeIdEx(&nodeId, Demo_Objects_Demo_DynamicNodes_NodeVersion, g_UaProviderDemo_uNamespaceIndex1);
UaServer_GetNode(pAddressSpace, &nodeId, (OpcUa_BaseNode**)&pNode);
if (pNode)
{
pValue = OpcUa_Variable_GetValue(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(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
#if HAVE_DATA_LOGGER
ret = UaProvider_Demo_StartLogging();
#endif /* HAVE_DATA_LOGGER */
return ret;
}
OpcUa_StatusCode UaProvider_Demo_History_StopLogging(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
#if HAVE_DATA_LOGGER
ret = UaProvider_Demo_StopLogging();
#endif /* HAVE_DATA_LOGGER */
return ret;
}
OpcUa_StatusCode UaProvider_Demo_Method_Multiply(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId ,
/* in */ OpcUa_Double a ,
/* in */ OpcUa_Double b ,
/* out */ 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(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId ,
/* in */ Demo_Vector *v1,
/* in */ Demo_Vector *v2,
/* out */ 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(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId ,
/* in */ 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(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ 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(
/* in */ UaServer_ProviderCallContext *a_pCallContext ,
/* in */ OpcUa_NodeId *pObjectId )
{
OpcUa_StatusCode ret = OpcUa_Good;
OpcUa_ReferenceParameter(a_pCallContext);
OpcUa_ReferenceParameter(pObjectId);
ret = UaProvider_Demo_StopSimulation();
return ret;
}