#include <uaserver_config.h>
#include <opcua_statuscodes.h>
#include <uaserver_call.h>
#include <uaserver_basenode.h>
#include <uaserver_utilities.h>
#include <uabase_p_atomic.h>
#include "custom_provider_helper.h"
OPCUA_BEGIN_EXTERN_C
{
if (a_pRequest->NoOfInputArguments == 2)
{
a_pResult->NoOfInputArgumentResults = 2;
a_pResult->
InputArgumentResults = (OpcUa_StatusCode*)OpcUa_Alloc(a_pResult->NoOfInputArgumentResults *
sizeof(OpcUa_StatusCode));
OpcUa_MemSet(a_pResult->
InputArgumentResults, 0, a_pResult->NoOfInputArgumentResults *
sizeof(OpcUa_StatusCode));
|| a_pRequest->
InputArguments[0].ArrayType != OpcUa_VariantArrayType_Scalar)
{
}
|| a_pRequest->
InputArguments[1].ArrayType != OpcUa_VariantArrayType_Scalar)
{
}
{
if (OpcUa_ByteString_Compare(pEventId, &a_pRequest->
InputArguments[0].Value.ByteString) != 0)
{
}
}
{
OpcUa_Variant *pAckedState = (OpcUa_Variant*)
UaBase_Vector_Get(&a_pEvent->EventFields, AcknowledgeableConditionTypeField_AckedState_Id);
a_pResult->
StatusCode = OpcUa_BadConditionBranchAlreadyAcked;
if (pAckedState != OpcUa_Null
&& pAckedState->Datatype == OpcUaType_Boolean
&& pAckedState->ArrayType == OpcUa_VariantArrayType_Scalar
&& pAckedState->Value.Boolean == OpcUa_False)
{
}
}
{
OpcUa_Variant value;
OpcUa_NodeId *pSourceNode;
OpcUa_Variant_Initialize(&value);
value.Datatype = OpcUaType_LocalizedText;
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
OpcUa_String_StrnCat(&value.Value.LocalizedText->Text, OpcUa_String_FromCString("Acknowledged"), OPCUA_STRING_LENDONTCARE);
OpcUa_Variant_Clear(&value);
value.Datatype = OpcUaType_Boolean;
value.Value.Boolean = OpcUa_True;
OpcUa_Variant_Clear(&value);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
OpcUa_Variant_Clear(&value);
value.Datatype = OpcUaType_LocalizedText;
value.Value.LocalizedText = (OpcUa_LocalizedText*)OpcUa_Alloc(sizeof(OpcUa_LocalizedText));
OpcUa_LocalizedText_Initialize(value.Value.LocalizedText);
OpcUa_LocalizedText_CopyTo(a_pRequest->
InputArguments[1].Value.LocalizedText, value.Value.LocalizedText);
OpcUa_Variant_Clear(&value);
value.Datatype = OpcUaType_DateTime;
value.Value.DateTime = OpcUa_DateTime_UtcNow();
OpcUa_Variant_Clear(&value);
pSourceNode = ((OpcUa_Variant*)
UaBase_Vector_Get(&a_pEvent->EventFields, BaseEventTypeField_SourceNode))->Value.NodeId;
if (pSourceNode != OpcUa_Null)
{
OpcUa_BaseNode *pBaseNode;
if (pBaseNode != OpcUa_Null)
{
if (pUserData && pUserData->Type == UserDataMachine)
{
Machine *pMachineData = (Machine*)pUserData;
OpcUa_ReferenceParameter(pMachineData);
}
}
}
}
}
else
{
a_pResult->
StatusCode = OpcUa_BadArgumentsMissing;
}
return OpcUa_Good;
}
IFMETHODIMP(CustomProvider_CallAsync)(UaServer_ProviderCallContext *a_pCallContext)
{
OpcUa_Int32 i;
OpcUa_BaseNode *pNode;
OpcUa_InitializeStatus(OpcUa_Module_Server, "CustomProvider_CallAsync");
OpcUa_ReturnErrorIfArgumentNull(a_pCallContext);
pRequest = a_pCallContext->pRequest;
pResponse = a_pCallContext->pResponse;
for (i = 0; i < pRequest->NoOfMethodsToCall; i++)
{
{
if (pNode != OpcUa_Null)
{
if (pUserData != OpcUa_Null)
{
switch (pUserData->Type)
{
case UserDataMachine:
{
Machine *pMachine = (Machine*)pUserData;
{
break;
}
{
pResult->NoOfInputArgumentResults = 1;
if (pInArg->ArrayType == OpcUa_VariantArrayType_Scalar &&
pInArg->Datatype == OpcUaType_Boolean)
{
*pMachine->pHeaterSwitch->pValue = pInArg->Value.Boolean;
}
else
{
}
pResult->NoOfOutputArguments = 1;
pResult->
OutputArguments = (OpcUa_Variant*)OpcUa_Alloc(
sizeof(OpcUa_Variant));
pResult->
OutputArguments[0].Value.Double = *pMachine->pTemperatureSensor->pValue;
}
else
{
}
break;
}
default:
{
break;
}
}
}
}
}
{
{
case OpcUaId_AcknowledgeableConditionType_Acknowledge:
{
if (pEvent != OpcUa_Null)
{
}
break;
}
default:
break;
}
}
}
OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
OPCUA_END_EXTERN_C