opcua_builtInDatatypes.c 2.4 KB

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