A.1.2 Discover DeviceIdentity personality using attribute org.opcfoundation.product_instance_uri
The example below enumerates all personalities and checks for the attribute org.opcfoundation.product_instance_uri
bool b_loop = true;
char identifier_type_buffer[200];
char identifier_value_buffer[200];
myio_obufstream_t ostream_identifier_type = { 0 };
myio_obufstream_t ostream_identifier_value = { 0 };
gta_enum_handle_t h_enum = GTA_HANDLE_ENUM_FIRST;
gta_context_handle_t h_ctx = GTA_HANDLE_INVALID;
bool exit_loops = false;
char selected_personality[100];
/* enumerate all identifiers */
while (b_loop && !exit_loops) {
myio_open_obufstream(&ostream_identifier_type,
identifier_type_buffer,
sizeof(identifier_type_buffer),
&errinfo);
myio_open_obufstream(&ostream_identifier_value,
identifier_value_buffer,
sizeof(identifier_value_buffer),
&errinfo);
b_ret = gta_identifier_enumerate(
h_inst,
&h_enum,
(gtaio_ostream_t *)&ostream_identifier_type,
(gtaio_ostream_t *)&ostream_identifier_value,
&errinfo);
myio_close_obufstream(&ostream_identifier_type, &errinfo);
myio_close_obufstream(&ostream_identifier_value, &errinfo);
if (true == b_ret) {
bool b_inner_loop = true;
char personality_name_buffer[200];
myio_obufstream_t ostream_personality_name = { 0 };
gta_enum_handle_t h_enum_inner_loop = GTA_HANDLE_ENUM_FIRST;
/* enumerate all personalities belonging to identifier */
while (b_inner_loop && !exit_loops) {
myio_open_obufstream(&ostream_personality_name,
personality_name_buffer,
sizeof(personality_name_buffer),
&errinfo);
b_ret = gta_personality_enumerate(
h_inst,
identifier_value_buffer,
&h_enum_inner_loop,
GTA_PERSONALITY_ENUM_ALL,
(gtaio_ostream_t *)&ostream_personality_name,
&errinfo);
myio_close_obufstream(&ostream_personality_name, &errinfo);
if (true == b_ret) {
bool b_innermost_loop = true;
char attribute_type_buffer[200];
char attribute_value_buffer[200];
myio_obufstream_t ostream_attribute_type = { 0 };
myio_obufstream_t ostream_attribute_value = { 0 };
gta_enum_handle_t h_enum_innermost_loop
= GTA_HANDLE_ENUM_FIRST;
/* enumerate all attributes belonging to personality */
while (b_innermost_loop && !exit_loops) {
myio_open_obufstream(
&ostream_attribute_type,
attribute_type_buffer,
sizeof(attribute_type_buffer),
&errinfo);
myio_open_obufstream(
&ostream_attribute_value,
attribute_value_buffer,
sizeof(attribute_value_buffer),
&errinfo);
b_ret = gta_personality_attributes_enumerate(
h_inst,
personality_name_buffer,
&h_enum_innermost_loop,
(gtaio_ostream_t *)&ostream_attribute_type,
(gtaio_ostream_t *)&ostream_attribute_value,
&errinfo);
myio_close_obufstream(&ostream_attribute_type,
&errinfo);
myio_close_obufstream(&ostream_attribute_value,
&errinfo);
if (true == b_ret) {
if (0 == strcmp(
"org.opcfoundation.product_instance_uri",
attribute_type_buffer)) {
exit_loops = true;
strcpy(selected_personality,
personality_name_buffer);
}
}
else {
b_innermost_loop = false;
}
}
}
else {
errinfo = 0;
b_inner_loop = false;
}
}
}
else {
errinfo = 0;
b_loop = false;
}
}
/*
* do something with selected personality
*/