opcua_builtInDatatypes.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * opcua_BuiltInDatatypes.c
  3. *
  4. * Created on: Dec 19, 2013
  5. * Author: opcua
  6. */
  7. #include "opcua_builtInDatatypes.h"
  8. #include <stdio.h>
  9. UA_ExtensionObject the_empty_UA_ExtensionObject = { { NIEVT_TWO_BYTE, 0 }, NO_BODY_IS_ENCODED};
  10. UA_DiagnosticInfo the_empty_UA_DiagnosticInfo = { 0x00 };
  11. Int32 UA_String_compare(UA_String *string1, UA_String *string2) {
  12. Int32 i;
  13. Boolean equal;
  14. if (string1->Length == string2->Length&&
  15. string1->Length > 0 &&
  16. string1->Data != NULL && string2->Data != NULL) {for(i = 0; i < string1->Length; i++)
  17. {
  18. if(string1->Data[i] != string2->Data[i])
  19. {
  20. return UA_NOT_EQUAL;
  21. }
  22. }
  23. }
  24. else
  25. {
  26. return UA_NOT_EQUAL;
  27. }
  28. return UA_EQUAL;
  29. }
  30. Int32 UA_ByteString_compare(UA_ByteString *string1, UA_ByteString *string2) {
  31. return UA_String_compare((UA_String*) string1, (UA_String*) string2);
  32. }
  33. void UA_String_printf(char* label, UA_ByteString* string) {
  34. printf("%s {Length=%d, Data=%.*s}\n", label, string->Length, string->Length,
  35. (char*) string->Data);
  36. }
  37. void UA_ByteString_printx(char* label, UA_ByteString* string) {
  38. int i;
  39. printf("%s {Length=%d, Data=", label, string->Length);
  40. if (string->Length > 0) {
  41. for (i = 0; i < string->Length; i++) {
  42. printf("%c%d", i == 0 ? '{' : ',', (string->Data)[i]);
  43. if (i > 0 && !(i%20)) { printf("\n\t"); }
  44. }
  45. } else {
  46. printf("{");
  47. }
  48. printf("}}\n");
  49. }
  50. void UA_ByteString_printx_hex(char* label, UA_ByteString* string) {
  51. int i;
  52. printf("%s {Length=%d, Data=", label, string->Length);
  53. if (string->Length > 0) {
  54. for (i = 0; i < string->Length; i++) {
  55. printf("%c%x", i == 0 ? '{' : ',', (string->Data)[i]);
  56. }
  57. } else {
  58. printf("{");
  59. }
  60. printf("}}\n");
  61. }
  62. void UA_NodeId_printf(char* label, UA_NodeId* node) {
  63. printf("%s {EncodingByte=%d, Namespace=%d, ", label,
  64. (int) node->EncodingByte, (int) node->Namespace);
  65. switch (node->EncodingByte) {
  66. case NIEVT_TWO_BYTE:
  67. case NIEVT_FOUR_BYTE:
  68. case NIEVT_NUMERIC:
  69. printf("Identifier=%d", node->Identifier.Numeric);
  70. break;
  71. case NIEVT_STRING:
  72. case NIEVT_BYTESTRING:
  73. // TODO: This implementation does not distinguish between String and Bytestring. Error?
  74. printf("Identifier={Length=%d, Data=%.*s}",
  75. node->Identifier.String.Length, node->Identifier.String.Length,
  76. (char*) (node->Identifier.String.Data));
  77. break;
  78. case NIEVT_GUID:
  79. printf(
  80. "Guid={Data1=%d, Data2=%d, Data3=%d, Data4=={Length=%d, Data=%.*s}}",
  81. node->Identifier.Guid.Data1, node->Identifier.Guid.Data2,
  82. node->Identifier.Guid.Data3, node->Identifier.Guid.Data4.Length,
  83. node->Identifier.Guid.Data4.Length,
  84. (char*) (node->Identifier.Guid.Data4.Data));
  85. break;
  86. default:
  87. printf("ups! shit happens");
  88. break;
  89. }
  90. printf("}\n");
  91. }