Bladeren bron

Merge branch 'master' of https://github.com/acplt/open62541

Conflicts:
	tool/generate_builtin.py
Stasik0 11 jaren geleden
bovenliggende
commit
6b261e3d58
4 gewijzigde bestanden met toevoegingen van 62 en 44 verwijderingen
  1. 14 5
      tool/generate_builtin.py
  2. 20 14
      tool/main.c
  3. 23 20
      tool/opcua_basictypes.c
  4. 5 5
      tool/opcua_basictypes.h

+ 14 - 5
tool/generate_builtin.py

@@ -49,6 +49,15 @@ def skipType(name):
 def stripTypename(tn):
     return tn[tn.find(":")+1:]
 
+def camlCase2AdaCase(item):
+    (newitem, n) = re.subn("(?<!^)(?<![A-Z])([A-Z])", "_\\1", item)
+    return newitem
+    
+def camlCase2CCase(item):
+    if item in ["Float","Double"]:
+        return "my" + item
+    return item[:1].lower() + item[1:] if item else ''
+
 # are the prerequisites in place? if not, postpone.
 def printableStructuredType(element):
     for child in element:
@@ -131,7 +140,7 @@ def createStructured(element):
 
     print("Int32 " + name + "_calcSize(" + name + " const * ptr);", end='\n', file=fh)
     print("Int32 " + name + "_encode(" + name + " const * src, Int32* pos, char* dst);", end='\n', file=fh)
-    print("Int32 " + name + "_decode(char const * src, UInt32* pos, " + name + "* dst);", end='\n', file=fh)
+    print("Int32 " + name + "_decode(char const * src, Int32* pos, " + name + "* dst);", end='\n', file=fh)
 
     if "Response" in name[len(name)-9:]:
 		#Sten: not sure how to get it, actually we need to solve it on a higher level
@@ -160,7 +169,7 @@ def createStructured(element):
             else:
                 print('\n\t + ' + "UA_" + t + "_calcSize(&(ptr->" + n + '))', end='', file=fc)
 
-    print("\n\t;\n};\n", end='\n', file=fc)
+    print("\n\t;\n}\n", end='\n', file=fc)
 
     print("Int32 "+name+"_encode("+name+" const * src, Int32* pos, char* dst) {\n\tInt32 retval = UA_SUCCESS;", end='\n', file=fc)
     # code _encode
@@ -177,9 +186,9 @@ def createStructured(element):
                 print('\tretval |= UA_' + t[0:t.find("*")] + "_encode(src->" + n + ',pos,dst);', end='\n', file=fc)
             else:
                 print('\tretval |= UA_'+t+"_encode(&(src->"+n+"),pos,dst);", end='\n', file=fc)
-    print("\treturn retval;\n};\n", end='\n', file=fc)
+    print("\treturn retval;\n}\n", end='\n', file=fc)
 
-    print("Int32 "+name+"_decode(char const * src, UInt32* pos, " + name + "* dst) {\n\tInt32 retval = UA_SUCCESS;", end='\n', file=fc)
+    print("Int32 "+name+"_decode(char const * src, Int32* pos, " + name + "* dst) {\n\tInt32 retval = UA_SUCCESS;", end='\n', file=fc)
     # code _decode
     for n,t in valuemap.iteritems():
         if t in elementary_size:
@@ -194,7 +203,7 @@ def createStructured(element):
                 print('\tretval |= UA_' + t[0:t.find("*")] + "_decode(src,pos,dst->"+ n +");", end='\n', file=fc)
             else:
                 print('\tretval |= UA_'+t+"_decode(src,pos,&(dst->"+n+"));", end='\n', file=fc)
-    print("\treturn retval;\n};\n", end='\n', file=fc)
+    print("\treturn retval;\n}\n", end='\n', file=fc)
         
 def createOpaque(element):
     name = "UA_" + element.get("Name")

+ 20 - 14
tool/main.c

@@ -5,30 +5,36 @@
  *      Author: mrt
  */
 #include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
 
 #include "opcua.h"
 
-typedef union Integer {
-	UA_Int32 i;
-	SByte b[4];
-} Integer;
-
 int main() {
-	Integer a;
-	Integer b;
-	int pos = 0;
+	char* buf;
+	int pos = 0, retval, size;
 
-	UA_Int32 i = -42;
+	// the value to encode
+	UA_Int32 i = -42, j;
 
-	UA_Int32_encode(&i, &pos, &a.b[0]);
-	printf("%d, {%d,%d,%d,%d}\n", a.i, a.b[0], a.b[1], a.b[2], a.b[3]);
+	// get buffer for encoding
+	size = UA_Int32_calcSize(UA_NULL);
+	buf = (char *) malloc(size);
+	printf("buf=%p, size=%d\n", buf, size);
+	if (buf == UA_NULL) return -1;
 
+	// encode
 	pos = 0;
-	UA_Int32_decode((char *) &a.b[0], &pos, &(b.i));
-	printf("%d, {%d,%d,%d,%d}\n", b.i, b.b[0], b.b[1], b.b[2], b.b[3]);
+	retval = UA_Int32_encode(&i, &pos, buf);
+	printf("retval=%d, src=%d, pos=%d, buf={%d,%d,%d,%d}\n", retval, i, pos, buf[0], buf[1], buf[2], buf[3]);
 
-	printf("%i\n", UA_Int32_calcSize(b.i));
+	// decode
+	pos = 0;
+	retval = UA_Int32_decode(buf, &pos, &j);
+	printf("retval=%d, dst=%d, pos=%d, {%d,%d,%d,%d}\n", retval, j, pos, buf[0], buf[1], buf[2], buf[3]);
 
+	// return memory
+	free(buf);
 	return 0;
 }
 

+ 23 - 20
tool/opcua_basictypes.c

@@ -5,7 +5,8 @@
  *      Author: mrt
  */
 #include "opcua.h"
-#include <stdlib.h>
+#include <stdio.h>	// printf
+#include <stdlib.h>	// alloc, free
 #include <string.h>
 
 
@@ -36,12 +37,14 @@ Int32 UA_Array_decode(char const * src, Int32 noElements, Int32 type, Int32* pos
 }
 
 Int32 UA_free(void * ptr){
+	printf("UA_free - ptr=%p\n",ptr);
 	free(ptr);
 	return UA_SUCCESS;
 }
 
 Int32 UA_alloc(void ** ptr, int size){
 	*ptr = malloc(size);
+	printf("UA_alloc - ptr=%p, size=%d\n",*ptr,size);
 	if(*ptr == UA_NULL) return UA_ERR_NO_MEMORY;
 	return UA_SUCCESS;
 }
@@ -257,7 +260,7 @@ Int32 UA_String_decode(char const * src, Int32* pos, UA_String * dst) {
 	Int32 retval = UA_SUCCESS;
 	retval |= UA_Int32_decode(src,pos,&(dst->length));
 	if (dst->length > 0) {
-		retval |= UA_alloc(&(dst->data),dst->length);
+		retval |= UA_alloc((void**)&(dst->data),dst->length);
 		retval |= UA_memcpy((void*)&(src[*pos]),dst->data,dst->length);
 		*pos += dst->length;
 	} else {
@@ -266,13 +269,13 @@ Int32 UA_String_decode(char const * src, Int32* pos, UA_String * dst) {
 	return retval;
 }
 UA_TYPE_METHOD_DELETE_STRUCT(UA_String)
-Int32 UA_String_deleteMembers(UA_String* p) { return UA_free(p->data); };
+Int32 UA_String_deleteMembers(UA_String* p) { return UA_free(p->data); }
 Int32 UA_String_copy(UA_String const * src, UA_String* dst) {
 	Int32 retval = UA_SUCCESS;
 	dst->length = src->length;
 	dst->data = UA_NULL;
 	if (src->length > 0) {
-		retval |= UA_alloc(&(dst->data), src->length);
+		retval |= UA_alloc((void**)&(dst->data), src->length);
 		if (retval == UA_SUCCESS) {
 			retval |= UA_memcpy((void*)dst->data, src->data, src->length);
 		}
@@ -312,14 +315,14 @@ Int32 UA_Guid_encode(UA_Guid const *src, Int32* pos, char *dst) {
 }
 Int32 UA_Guid_decode(char const * src, Int32* pos, UA_Guid *dst) {
 	Int32 retval = UA_SUCCESS;
-	retval |= UA_Int32_decode(src,pos,&(dst->data1));
-	retval |= UA_Int16_decode(src,pos,&(dst->data2));
-	retval |= UA_Int16_decode(src,pos,&(dst->data3));
+	retval |= UA_UInt32_decode(src,pos,&(dst->data1));
+	retval |= UA_UInt16_decode(src,pos,&(dst->data2));
+	retval |= UA_UInt16_decode(src,pos,&(dst->data3));
 	retval |= UA_ByteString_decode(src,pos,&(dst->data4));
 	return retval;
 }
 UA_TYPE_METHOD_DELETE_STRUCT(UA_Guid)
-Int32 UA_Guid_deleteMembers(UA_Guid* p) { return UA_ByteString_delete(&(p->data4)); };
+Int32 UA_Guid_deleteMembers(UA_Guid* p) { return UA_ByteString_delete(&(p->data4)); }
 
 Int32 UA_LocalizedText_calcSize(UA_LocalizedText const * p) {
 	Int32 length = 0;
@@ -371,7 +374,7 @@ Int32 UA_LocalizedText_deleteMembers(UA_LocalizedText* p) {
 			|| UA_String_deleteMembers(&(p->locale))
 			|| UA_String_deleteMembers(&(p->text))
 	;
-};
+}
 
 /* Serialization of UA_NodeID is specified in 62541-6, §5.2.2.9 */
 Int32 UA_NodeId_calcSize(UA_NodeId const *p) {
@@ -444,8 +447,8 @@ Int32 UA_NodeId_encode(UA_NodeId const * src, Int32* pos, char *dst) {
 Int32 UA_NodeId_decode(char const * src, Int32* pos, UA_NodeId *dst) {
 	int retval = UA_SUCCESS;
 	// temporary variables to overcome decoder's non-endian-saveness for datatypes
-	Byte   dstByte;
-	UInt16 dstUInt16;
+	UA_Byte   dstByte;
+	UA_UInt16 dstUInt16;
 
 	retval |= UA_Byte_decode(src,pos,&(dst->encodingByte));
 	switch (dst->encodingByte) {
@@ -461,19 +464,19 @@ Int32 UA_NodeId_decode(char const * src, Int32* pos, UA_NodeId *dst) {
 		dst->identifier.numeric = dstUInt16;
 		break;
 	case UA_NodeIdType_Numeric: // Table 6, first entry
-		retval |=UA_Int16_decode(src,pos,&(dst->namespace));
-		retval |=UA_Int32_decode(src,pos,&(dst->identifier.numeric));
+		retval |=UA_UInt16_decode(src,pos,&(dst->namespace));
+		retval |=UA_UInt32_decode(src,pos,&(dst->identifier.numeric));
 		break;
 	case UA_NodeIdType_String: // Table 6, second entry
-		retval |=UA_Int16_decode(src,pos,&(dst->namespace));
+		retval |=UA_UInt16_decode(src,pos,&(dst->namespace));
 		retval |=UA_String_decode(src,pos,&(dst->identifier.string));
 		break;
 	case UA_NodeIdType_Guid: // Table 6, third entry
-		retval |=UA_Int16_decode(src,pos,&(dst->namespace));
+		retval |=UA_UInt16_decode(src,pos,&(dst->namespace));
 		retval |=UA_Guid_decode(src,pos,&(dst->identifier.guid));
 		break;
 	case UA_NodeIdType_ByteString: // Table 6, "OPAQUE"
-		retval |=UA_Int16_decode(src,pos,&(dst->namespace));
+		retval |=UA_UInt16_decode(src,pos,&(dst->namespace));
 		retval |=UA_ByteString_decode(src,pos,&(dst->identifier.byteString));
 		break;
 	}
@@ -897,13 +900,13 @@ Int32 UA_DataValue_decode(char const * src, Int32* pos, UA_DataValue* dst) {
 		retval |= UA_DateTime_decode(src,pos,&(dst->serverTimestamp));
 	}
 	if (dst->encodingMask & 0x10) {
-		retval |= UA_UInt16_decode(src,pos,&(dst->sourcePicoseconds));
+		retval |= UA_Int16_decode(src,pos,&(dst->sourcePicoseconds));
 		if (dst->sourcePicoseconds > MAX_PICO_SECONDS) {
 			dst->sourcePicoseconds = MAX_PICO_SECONDS;
 		}
 	}
 	if (dst->encodingMask & 0x20) {
-		retval |= UA_UInt16_decode(src,pos,&(dst->serverPicoseconds));
+		retval |= UA_Int16_decode(src,pos,&(dst->serverPicoseconds));
 		if (dst->serverPicoseconds > MAX_PICO_SECONDS) {
 			dst->serverPicoseconds = MAX_PICO_SECONDS;
 		}
@@ -926,10 +929,10 @@ Int32 UA_DataValue_encode(UA_DataValue const * src, Int32* pos, char *dst) {
 		retval |= UA_DateTime_encode(&(src->serverTimestamp),pos,dst);
 	}
 	if (src->encodingMask & 0x10) {
-		retval |= UA_UInt16_encode(&(src->sourcePicoseconds),pos,dst);
+		retval |= UA_Int16_encode(&(src->sourcePicoseconds),pos,dst);
 	}
 	if (src->encodingMask & 0x10) {
-		retval |= UA_UInt16_encode(&(src->serverPicoseconds),pos,dst);
+		retval |= UA_Int16_encode(&(src->serverPicoseconds),pos,dst);
 	}
 	return retval;
 }

+ 5 - 5
tool/opcua_basictypes.h

@@ -65,10 +65,10 @@ Int32 TYPE##_calcSize(TYPE const * p) { return sizeof(TYPE); }
 Int32 TYPE##_calcSize(TYPE const * p) { return TYPE_AS##_calcSize((TYPE_AS*) p); }
 
 #define UA_TYPE_METHOD_DELETE_FREE(TYPE) \
-Int32 TYPE##_delete(TYPE * p) { return UA_free(p); };
+Int32 TYPE##_delete(TYPE * p) { return UA_free(p); }
 
 #define UA_TYPE_METHOD_DELETE_AS(TYPE, TYPE_AS) \
-Int32 TYPE##_delete(TYPE * p) { return TYPE_AS##_delete((TYPE_AS*) p);};
+Int32 TYPE##_delete(TYPE * p) { return TYPE_AS##_delete((TYPE_AS*) p);}
 
 #define UA_TYPE_METHOD_DELETE_STRUCT(TYPE) \
 Int32 TYPE##_delete(TYPE *p) { \
@@ -79,10 +79,10 @@ Int32 TYPE##_delete(TYPE *p) { \
 }
 
 #define UA_TYPE_METHOD_DELETEMEMBERS_NOACTION(TYPE) \
-Int32 TYPE##_deleteMembers(TYPE * p) { return UA_SUCCESS; };
+Int32 TYPE##_deleteMembers(TYPE * p) { return UA_SUCCESS; }
 
 #define UA_TYPE_METHOD_DELETEMEMBERS_AS(TYPE, TYPE_AS) \
-Int32 TYPE##_deleteMembers(TYPE * p) { return TYPE_AS##_deleteMembers((TYPE_AS*) p);};
+Int32 TYPE##_deleteMembers(TYPE * p) { return TYPE_AS##_deleteMembers((TYPE_AS*) p);}
 
 #define UA_TYPE_METHOD_DECODE_AS(TYPE,TYPE_AS) \
 Int32 TYPE##_decode(char const * src, Int32* pos, TYPE *dst) { \
@@ -279,7 +279,7 @@ UA_TYPE_METHOD_PROTOTYPES(UA_DataValue)
 
 /* DiagnosticInfo - Part: 6, Chapter: 5.2.2.12, Page: 20 */
 typedef struct T_UA_DiagnosticInfo {
-	Byte encodingMask; //Type of the Enum UA_DiagnosticInfoEncodingMaskType
+	UA_Byte encodingMask; //Type of the Enum UA_DiagnosticInfoEncodingMaskType
 	UA_Int32 symbolicId;
 	UA_Int32 namespaceUri;
 	UA_Int32 localizedText;