#include <memory/memory.h>
#include <uabase/statuscodes.h>
#include <uabase/nodeid.h>
#include <uabase/variant.h>
#include <uabase/accesslevel.h>
#include <uabase/structure/nodeclass.h>
#include <uabase/structure/range.h>
#include <uabase/identifiers.h>
#include <uabase/valuerank.h>
#include <uaserver/addressspace/addressspace.h>
#include <uaserver/addressspace/object.h>
#include <uaserver/addressspace/variable.h>
#include "custom_provider.h"
#include "custom_provider_store.h"
#include "custom_provider_nodes.h"
#include "custom_provider_identifiers.h"
static int custom_provider_create_eurange(
ua_node_t parent, uint32_t identifier,
double low,
double high)
{
int ret;
unsigned int valueidx;
&nodeid,
UA_NODECLASS_VARIABLE,
0,
"EURange",
NULL,
UA_NODE_PROPERTYTYPE,
parent,
UA_NODE_HASPROPERTY);
if (ret != 0) goto out;
if (eurange == NULL) return UA_EBADNOMEM;
if (ret != 0) goto out;
if (ret != 0) goto out;
if (ret != 0) goto out;
ret = custom_store_set_range(valueidx, (uint32_t)low, (uint32_t)high);
if (ret != 0) goto out;
return 0;
out:
return -1;
}
static ua_node_t custom_provider_create_variable(uint32_t identifier,
ua_node_t parent,
const char *name,
unsigned int valueidx, uint32_t initial_value)
{
int ret;
&nodeid,
UA_NODECLASS_VARIABLE,
nodeid.nsindex,
name,
NULL,
UA_NODE_BASEDATAVARIABLETYPE,
parent,
UA_NODE_ORGANIZES);
node,
&datatype,
false);
ret = custom_store_set_initial_value(valueidx, initial_value);
return node;
}
int custom_provider_create_nodes(void)
{
int ret;
node = custom_provider_create_variable(CUSTOM_VARIABLE1_ID, folder, "Variable1", 0, 0);
ret = custom_provider_create_eurange(node, CUSTOM_EURANGE_VAR1_ID, 0.0, 50.0);
if (ret != 0) return ret;
node = custom_provider_create_variable(CUSTOM_VARIABLE2_ID, folder, "Variable2", 1, 5);
ret = custom_provider_create_eurange(node, CUSTOM_EURANG_VAR2_ID, 0.0, 100.0);
if (ret != 0) return ret;
node = custom_provider_create_variable(CUSTOM_VARIABLE3_ID, folder, "Variable3", 2, 93738);
ret = custom_provider_create_eurange(node, CUSTOM_VARIABLE3_ID, 0.0, 100000.0);
if (ret != 0) return ret;
return 0;
}