The example below enumerates all personalities with application “IDevID”. This can be useful to select personalities usable for onboarding (cf. 5.2.2, Figure 9).

  1. gta_instance_handle_t h_inst;
  2. gta_context_handle_t h_ctx = GTA_HANDLE_INVALID;
  3. gta_errinfo_t errinfo;
  4. bool b_loop_pers = true;
  5. gta_enum_handle_t h_enum_pers = GTA_HANDLE_ENUM_FIRST;
  6. while (b_loop_pers) {
  7. char pers_name[STR_LEN_MAX];
  8. myio_obufstream_t ostream_pers_name = { 0 };
  9. myio_open_obufstream(&ostream_pers_name, pers_name,
  10. sizeof(pers_name), &errinfo);
  11. if (gta_personality_enumerate_application(h_inst,
  12. "IDevID", h_enum_pers, GTA_PERSONALITY_ENUM_ALL,
  13. (gtaio_ostream_t *)&o_pers_name, &errinfo)) {
  14. /*
  15. * do something with personality pers_name
  16. */
  17. }
  18. else {
  19. b_loop_pers = false;
  20. }
  21. myio_close_obufstream(&ostream_pers_name, &errinfo);
  22. }
  23. }

The example below enumerates all personalities and checks for the attribute org.opcfoundation.product_instance_uri

  1. bool b_loop = true;
  2. char identifier_type_buffer[200];
  3. char identifier_value_buffer[200];
  4. myio_obufstream_t ostream_identifier_type = { 0 };
  5. myio_obufstream_t ostream_identifier_value = { 0 };
  6. gta_enum_handle_t h_enum = GTA_HANDLE_ENUM_FIRST;
  7. gta_context_handle_t h_ctx = GTA_HANDLE_INVALID;
  8. bool exit_loops = false;
  9. char selected_personality[100];
  10. /* enumerate all identifiers */
  11. while (b_loop && !exit_loops) {
  12. myio_open_obufstream(&ostream_identifier_type,
  13. identifier_type_buffer,
  14. sizeof(identifier_type_buffer),
  15. &errinfo);
  16. myio_open_obufstream(&ostream_identifier_value,
  17. identifier_value_buffer,
  18. sizeof(identifier_value_buffer),
  19. &errinfo);
  20. b_ret = gta_identifier_enumerate(
  21. h_inst,
  22. &h_enum,
  23. (gtaio_ostream_t *)&ostream_identifier_type,
  24. (gtaio_ostream_t *)&ostream_identifier_value,
  25. &errinfo);
  26. myio_close_obufstream(&ostream_identifier_type, &errinfo);
  27. myio_close_obufstream(&ostream_identifier_value, &errinfo);
  28. if (true == b_ret) {
  29. bool b_inner_loop = true;
  30. char personality_name_buffer[200];
  31. myio_obufstream_t ostream_personality_name = { 0 };
  32. gta_enum_handle_t h_enum_inner_loop = GTA_HANDLE_ENUM_FIRST;
  33. /* enumerate all personalities belonging to identifier */
  34. while (b_inner_loop && !exit_loops) {
  35. myio_open_obufstream(&ostream_personality_name,
  36. personality_name_buffer,
  37. sizeof(personality_name_buffer),
  38. &errinfo);
  39. b_ret = gta_personality_enumerate(
  40. h_inst,
  41. identifier_value_buffer,
  42. &h_enum_inner_loop,
  43. GTA_PERSONALITY_ENUM_ALL,
  44. (gtaio_ostream_t *)&ostream_personality_name,
  45. &errinfo);
  46. myio_close_obufstream(&ostream_personality_name, &errinfo);
  47. if (true == b_ret) {
  48. bool b_innermost_loop = true;
  49. char attribute_type_buffer[200];
  50. char attribute_value_buffer[200];
  51. myio_obufstream_t ostream_attribute_type = { 0 };
  52. myio_obufstream_t ostream_attribute_value = { 0 };
  53. gta_enum_handle_t h_enum_innermost_loop
  54. = GTA_HANDLE_ENUM_FIRST;
  55. /* enumerate all attributes belonging to personality */
  56. while (b_innermost_loop && !exit_loops) {
  57. myio_open_obufstream(
  58. &ostream_attribute_type,
  59. attribute_type_buffer,
  60. sizeof(attribute_type_buffer),
  61. &errinfo);
  62. myio_open_obufstream(
  63. &ostream_attribute_value,
  64. attribute_value_buffer,
  65. sizeof(attribute_value_buffer),
  66. &errinfo);
  67. b_ret = gta_personality_attributes_enumerate(
  68. h_inst,
  69. personality_name_buffer,
  70. &h_enum_innermost_loop,
  71. (gtaio_ostream_t *)&ostream_attribute_type,
  72. (gtaio_ostream_t *)&ostream_attribute_value,
  73. &errinfo);
  74. myio_close_obufstream(&ostream_attribute_type,
  75. &errinfo);
  76. myio_close_obufstream(&ostream_attribute_value,
  77. &errinfo);
  78. if (true == b_ret) {
  79. if (0 == strcmp(
  80. "org.opcfoundation.product_instance_uri",
  81. attribute_type_buffer)) {
  82. exit_loops = true;
  83. strcpy(selected_personality,
  84. personality_name_buffer);
  85. }
  86. }
  87. else {
  88. b_innermost_loop = false;
  89. }
  90. }
  91. }
  92. else {
  93. errinfo = 0;
  94. b_inner_loop = false;
  95. }
  96. }
  97. }
  98. else {
  99. errinfo = 0;
  100. b_loop = false;
  101. }
  102. }
  103. /*
  104. * do something with selected personality
  105. */