static scalar_value_t int_value_ds = static_cast<int16_t>(1);
scalar_value_read_callback read_cb = []()
{
return int_value;
};
Specific Node Callback Function (--> DataSourceNode is rejected)
static scalar_value_t int_value_ds = static_cast<int16_t>(1);
static uint16_t counter = 0;
scalar_value_read_callback read_cb = []()
{
counter_ds++;
if(counter_ds > 1)
{
return std::optional<scalar_value_t>{int_value_ds};
}
else
{
return std::optional<scalar_value_t>{};
}
};
with
static UA_StatusCode
scalar_value_node_read_callback(UA_Server * i_server,
const UA_NodeId * /*i_session_id*/,
void * /*i_session_context*/,
const UA_NodeId * i_node_id,
void * i_node_context,
UA_Boolean i_include_timestamp,
const UA_NumericRange * /*i_limits*/,
UA_DataValue * i_data)
{
// […]
auto * callbacks = reinterpret_cast<value_callbacks_t *>(i_node_context);
auto cb = callbacks->before_read_cb;
scalar_value_read_callback before_read_callback = cb.value();
std::optional<scalar_value_t> rc = before_read_callback();
if(!rc.has_value())
{
return UA_STATUSCODE_BADNODATAAVAILABLE;
}
// […]
return UA_STATUSCODE_GOOD;
}
Error message: "add_data_source_node
name: data source int_read_only, error: BadWaitingForInitialData”