#include "custom_provider.h"
#include <uaserver_utilities.h>
#include "custom_provider_helper.h"
OPCUA_BEGIN_EXTERN_C
OpcUa_UInt16 g_uCustomProvider_NamespaceIndex = OpcUa_UInt16_Max;
IFMETHODIMP(CustomProvider_Cleanup)(OpcUa_Void);
{
OpcUa_DataVariable *pVariable = OpcUa_Null;
OpcUa_uid_t uidAnonymous = 0, uidRoot = 0;
OpcUa_gid_t gidAnonymous = 0, gidRoot = 0;
OpcUa_InitializeStatus(OpcUa_Module_Server, "CustomProvider_CreateSampleNodes");
OpcUa_ReturnErrorIfArgumentNull(a_pOwner);
OpcUa_ReturnErrorIfArgumentNull(a_pStartingNodeId);
OpcUa_NodeId_Initialize(&nodeId);
OpcUa_NodeId_Initialize(&referenceNodeId);
OpcUa_NodeId_Initialize(&typeNodeId);
uStatus =
UaServer_GetUserId(OpcUa_String_FromCString(
"anonymous"), &uidAnonymous, &gidAnonymous);
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_GotoErrorIfBad(uStatus);
a_pStartingNodeId->Identifier.Numeric++;
&pVariable,
a_pOwner,
a_pStartingNodeId->Identifier.Numeric,
g_uCustomProvider_NamespaceIndex,
"Sample_WriteAll_ReadAll");
OpcUa_GotoErrorIfBad(uStatus);
pValue->
Value.UInt32 = 100;
uidAnonymous,
gidAnonymous,
0x0FFF);
a_pStartingNodeId->Identifier.Numeric++;
&pVariable,
a_pOwner,
a_pStartingNodeId->Identifier.Numeric,
g_uCustomProvider_NamespaceIndex,
"Sample_WriteRoot_ReadAll");
OpcUa_GotoErrorIfBad(uStatus);
pValue->
Value.UInt32 = 100;
uidRoot,
gidRoot,
a_pStartingNodeId->Identifier.Numeric++;
&pVariable,
a_pOwner,
a_pStartingNodeId->Identifier.Numeric,
g_uCustomProvider_NamespaceIndex,
"Sample_WriteRoot_ReadRoot");
OpcUa_GotoErrorIfBad(uStatus);
pValue->
Value.UInt32 = 100;
uidRoot,
gidRoot,
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
{
OpcUa_UInt16 uNsIdx = g_uCustomProvider_NamespaceIndex;
OpcUa_Folder *pCustomProvider = OpcUa_Null;
OpcUa_Folder *pFolder = OpcUa_Null;
OpcUa_InitializeStatus(OpcUa_Module_Server, "CustomProvider_CreateAddressSpace");
OpcUa_NodeId_Initialize(&nodeId);
#if UASERVER_ENABLE_MINSAMPLINGINTERVAL
pBaseNode_DefaultValues->MinimumSamplingInterval = 50.0;
#endif
pBaseNode_DefaultValues->AccessLevel = OpcUa_AccessLevels_CurrentReadOrWrite;
#if UASERVER_SUPPORT_AUTHORIZATION == OPCUA_CONFIG_NO
pBaseNode_DefaultValues->UserAccessLevel = OpcUa_AccessLevels_CurrentReadOrWrite;
#endif
nodeId.Identifier.Numeric = OpcUaId_ObjectsFolder;
nodeId.Identifier.Numeric++;
&pCustomProvider,
(OpcUa_BaseNode*)pFolder,
nodeId.Identifier.Numeric,
uNsIdx,
"Custom Provider");
OpcUa_GotoErrorIfBad(uStatus);
uStatus = CustomProvider_CreateSampleNodes((OpcUa_BaseNode*)pCustomProvider, &nodeId);
OpcUa_GotoErrorIfBad(uStatus);
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "CustomProvider_Initialize");
OpcUa_Trace(OPCUA_TRACE_LEVEL_WARNING, "Initialize CustomProvider ...\n");
g_pCustomProvider = a_pProvider;
g_pCustomProviderInterface = a_pProviderInterface;
a_pProviderInterface->Cleanup = CustomProvider_Cleanup;
a_pProviderInterface->ReadAsync = CustomProvider_ReadAsync;
a_pProviderInterface->WriteAsync = CustomProvider_WriteAsync;
a_pProviderInterface->BrowseAsync = CustomProvider_BrowseAsync;
a_pProviderInterface->TranslateAsync = CustomProvider_TranslateAsync;
a_pProviderInterface->AddItem = CustomProvider_AddItem;
a_pProviderInterface->RemoveItem = CustomProvider_RemoveItem;
a_pProviderInterface->Subscribe = CustomProvider_Subscribe;
&g_uCustomProvider_NamespaceIndex,
"http://www.unifiedautomation.com/customprovider/",
1009);
OpcUa_ReturnErrorIfBad(uStatus);
uStatus = CustomProvider_CreateAddressSpace();
OpcUa_ReturnErrorIfBad(uStatus);
uStatus = CustomProvider_Subscription_Initialize();
OpcUa_ReturnErrorIfBad(uStatus);
OpcUa_Trace(OPCUA_TRACE_LEVEL_WARNING, "Initialize CustomProvider DONE!\n");
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
IFMETHODIMP(CustomProvider_Cleanup)()
{
OpcUa_InitializeStatus(OpcUa_Module_Server, "CustomProvider_Cleanup");
OpcUa_Trace(OPCUA_TRACE_LEVEL_WARNING, "Cleanup CustomProvider ...\n");
CustomProvider_Subscription_Cleanup();
OpcUa_Trace(OPCUA_TRACE_LEVEL_WARNING, "Cleanup CustomProvider DONE!\n");
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
#ifdef BUILD_SHARED_LIBS
{
return CustomProvider_Initialize(pProvider, pProviderInterface);
}
#endif
OPCUA_END_EXTERN_C