Skip to content

Commit 86334e0

Browse files
committed
feat: Complete rewrite of the S7 driver (merging together the s7 and s7-light)
refactor: Updated the Browse api slightly to also support returing which type of subscription a tag supports: EVENT, CYCLIC, ON_VALUE_CHANGE. feat: Adjusted plc4c, plc4py and plc4net to compile with my mspec updates. Work on plc4go is still a work in progress.
1 parent a282533 commit 86334e0

312 files changed

Lines changed: 31817 additions & 18974 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

code-generation/language/c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReferenc
495495
}
496496
throw new FreemarkerException("Unsupported float type with " + floatTypeReference.getSizeInBits() + " bits");
497497
case STRING: {
498-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
498+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
499499
if (!(encodingTerm instanceof StringLiteral)) {
500500
throw new FreemarkerException("Encoding must be a quoted string value");
501501
}
@@ -505,7 +505,7 @@ public String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReferenc
505505
encoding + "\"" + ", (char**) " + valueString + ")";
506506
}
507507
case VSTRING: {
508-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
508+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
509509
if (!(encodingTerm instanceof StringLiteral)) {
510510
throw new FreemarkerException("Encoding must be a quoted string value");
511511
}
@@ -566,16 +566,18 @@ public String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeRefere
566566
}
567567
throw new FreemarkerException("Unsupported float type with " + floatTypeReference.getSizeInBits() + " bits");
568568
case STRING: {
569-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
569+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
570570
if (!(encodingTerm instanceof StringLiteral)) {
571571
throw new FreemarkerException("Encoding must be a quoted string value");
572572
}
573573
String encoding = ((StringLiteral) encodingTerm).getValue();
574574
String length = Integer.toString(simpleTypeReference.getSizeInBits());
575575
int numChars;
576-
if("UTF-8".equalsIgnoreCase(encoding)) {
576+
if ("UTF8".equalsIgnoreCase(encoding)) {
577577
numChars = simpleTypeReference.getSizeInBits() / 8;
578-
} else if("UTF-16".equalsIgnoreCase(encoding)) {
578+
} else if ("UTF16".equalsIgnoreCase(encoding)) {
579+
numChars = simpleTypeReference.getSizeInBits() / 16;
580+
} else if ("UTF16BE".equalsIgnoreCase(encoding)) {
579581
numChars = simpleTypeReference.getSizeInBits() / 16;
580582
} else {
581583
throw new FreemarkerException("Unsupported encoding " + encoding);
@@ -584,7 +586,7 @@ public String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeRefere
584586
encoding + "\", (const uint8_t*) " + (numChars == 1 ? "&" : "") + fieldName + ")";
585587
}
586588
case VSTRING: {
587-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
589+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
588590
if (!(encodingTerm instanceof StringLiteral)) {
589591
throw new FreemarkerException("Encoding must be a quoted string value");
590592
}
@@ -907,7 +909,7 @@ private String toTypeVariableParseExpression(Field field, VariableLiteral variab
907909
tracer = tracer.dive("type");
908910
if (variableLiteral.getChild().isPresent() && "encoding".equals(variableLiteral.getChild().get().getName()) && (field instanceof TypedField) && ((((TypedField) field).getType() instanceof StringTypeReference) || (((TypedField) field).getType() instanceof VstringTypeReference))) {
909911
// TODO: replace with map join
910-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
912+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
911913
if (!(encodingTerm instanceof StringLiteral)) {
912914
throw new FreemarkerException("Encoding must be a quoted string value");
913915
}
@@ -1096,7 +1098,7 @@ private String toVariableSerializationExpression(TypeDefinition baseType, Field
10961098
if (!(typedField.getType() instanceof StringTypeReference)) {
10971099
throw new FreemarkerException("Can only access 'encoding' for string types.");
10981100
}
1099-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
1101+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
11001102
if (!(encodingTerm instanceof StringLiteral)) {
11011103
throw new FreemarkerException("Encoding must be a quoted string value");
11021104
}
@@ -1188,7 +1190,7 @@ private String toUppercaseSerializationExpression(TypeDefinition baseType, Field
11881190
if (!(typedField.getType() instanceof StringTypeReference)) {
11891191
throw new FreemarkerException("Can only access 'encoding' for string types.");
11901192
}
1191-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
1193+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
11921194
if (!(encodingTerm instanceof StringLiteral)) {
11931195
throw new FreemarkerException("Encoding must be a quoted string value");
11941196
}
@@ -1265,7 +1267,7 @@ private String toStaticCallSerializationExpression(TypeDefinition baseType, Fiel
12651267
if (!(typedField.getType() instanceof StringTypeReference)) {
12661268
throw new FreemarkerException("Can only access 'encoding' for string types.");
12671269
}
1268-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
1270+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
12691271
if (!(encodingTerm instanceof StringLiteral)) {
12701272
throw new FreemarkerException("Encoding must be a quoted string value");
12711273
}

code-generation/language/go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ public String getReadBufferReadMethodCall(String logicalName, SimpleTypeReferenc
427427
}
428428
return "/*TODO: migrate me*/" + "readBuffer.ReadBigFloat(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ")";
429429
case STRING: {
430-
String encoding = "UTF-8";
430+
String encoding = "UTF8";
431431
if (field != null) {
432432
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral(encoding));
433433
encoding = encodingTerm.asLiteral()
@@ -439,7 +439,7 @@ public String getReadBufferReadMethodCall(String logicalName, SimpleTypeReferenc
439439
return "/*TODO: migrate me*/" + "readBuffer.ReadString(\"" + logicalName + "\", uint32(" + length + "), utils.WithEncoding(\"" + encoding + "\"))";
440440
}
441441
case VSTRING: {
442-
String encoding = "UTF-8";
442+
String encoding = "UTF8";
443443
VstringTypeReference vstringTypeReference = (VstringTypeReference) simpleTypeReference;
444444
if (field != null) {
445445
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral(encoding));
@@ -711,9 +711,9 @@ public String getWriteBufferWriteMethodCall(String logicalName, SimpleTypeRefere
711711
return "/*TODO: migrate me*/" + "writeBuffer.WriteBigFloat(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
712712
case STRING: {
713713
StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
714-
String encoding = "UTF-8";
714+
String encoding = "UTF8";
715715
if (field != null) {
716-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
716+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
717717
encoding = encodingTerm.asLiteral()
718718
.orElseThrow(() -> new FreemarkerException("Encoding must be a literal"))
719719
.asStringLiteral()
@@ -724,9 +724,9 @@ public String getWriteBufferWriteMethodCall(String logicalName, SimpleTypeRefere
724724
}
725725
case VSTRING: {
726726
VstringTypeReference vstringTypeReference = (VstringTypeReference) simpleTypeReference;
727-
String encoding = "UTF-8";
727+
String encoding = "UTF8";
728728
if (field != null) {
729-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
729+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
730730
encoding = encodingTerm.asLiteral()
731731
.orElseThrow(() -> new FreemarkerException("Encoding must be a literal"))
732732
.asStringLiteral()
@@ -1323,7 +1323,7 @@ else if (isTypeArg) {
13231323
sb.append("\"").append(((SimpleTypeReference) typeReference).getSizeInBits()).append("\"");
13241324
break;
13251325
case "encoding":
1326-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
1326+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
13271327
if (!(encodingTerm instanceof StringLiteral)) {
13281328
throw new FreemarkerException("Encoding must be a quoted string value");
13291329
}
@@ -1862,13 +1862,19 @@ public String getEndiannessOptions(boolean read, boolean separatorPrefix, List<A
18621862
Optional<Term> byteOrder = thisType.getAttribute("byteOrder");
18631863
if (byteOrder.isPresent()) {
18641864
emitRequiredImport("encoding/binary");
1865+
String byteOrderTranslated = switch (byteOrder.orElseThrow().stringRepresentation()) {
1866+
case "\"BIG_ENDIAN\"" -> "binary.BigEndian";
1867+
case "\"LITTLE_ENDIAN\"" -> "binary.LittleEndian";
1868+
default ->
1869+
throw new RuntimeException("unmapped bytes order " + byteOrder.orElseThrow().stringRepresentation());
1870+
};
18651871
if (read) {
18661872
return (separatorPrefix ? ", " : "") + "utils.WithByteOrderForReadBufferByteBased(" +
1867-
toParseExpression(null, new DefaultByteOrderTypeReference(), byteOrder.orElseThrow(), parserArguments) +
1873+
byteOrderTranslated +
18681874
")";
18691875
} else {
18701876
return (separatorPrefix ? ", " : "") + "utils.WithByteOrderForByteBasedBuffer(" +
1871-
toSerializationExpression(null, new DefaultByteOrderTypeReference(), byteOrder.orElseThrow(), parserArguments) +
1877+
byteOrderTranslated +
18721878
")";
18731879
}
18741880
}
@@ -1886,17 +1892,11 @@ public String getFieldOptions(TypedField field, List<Argument> parserArguments)
18861892
field.getByteOrder().ifPresent(term -> {
18871893
emitCodegenRequiredImports();
18881894
emitRequiredImport("encoding/binary");
1889-
String byteOrder = "binary.BigEndian";
1890-
switch (term.stringRepresentation()) {
1891-
case "BIG_ENDIAN":
1892-
byteOrder = "binary.BigEndian";
1893-
break;
1894-
case "LITTLE_ENDIAN":
1895-
byteOrder = "binary.LittleEndian";
1896-
break;
1897-
default:
1898-
throw new RuntimeException("unmapped bytes order " + term.stringRepresentation());
1899-
}
1895+
String byteOrder = switch (term.stringRepresentation()) {
1896+
case "\"BIG_ENDIAN\"" -> "binary.BigEndian";
1897+
case "\"LITTLE_ENDIAN\"" -> "binary.LittleEndian";
1898+
default -> throw new RuntimeException("unmapped bytes order " + term.stringRepresentation());
1899+
};
19001900
sb.append(", codegen.WithByteOrder(").append(byteOrder).append(")");
19011901
});
19021902

code-generation/language/java-jp/src/main/java/org/apache/plc4x/codegeneration/language/java/generators/BaseGenerator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ else if (isTypeArg) {
839839
case "name" -> CodeBlock.of("\"" + field.getTypeName() + "\"");
840840
case "length" -> CodeBlock.of("\"" + ((SimpleTypeReference) field).getSizeInBits() + "\"");
841841
case "encoding" -> {
842-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
842+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
843843
yield CodeBlock.of("\"" + encoding + "\"");
844844
}
845845
default -> CodeBlock.of("");
@@ -912,7 +912,7 @@ private CodeBlock toStaticCallParseExpression(TypeDefinition typeDefinition, Str
912912
sb.append("\"").append(((SimpleTypeReference) field).getSizeInBits()).append("\"");
913913
break;
914914
case "encoding":
915-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
915+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
916916
sb.append("\"").append(encoding).append("\"");
917917
break;
918918
}
@@ -1009,7 +1009,7 @@ else if (isVariableLiteralDiscriminatorField(typeDefinition, variableLiteral) ||
10091009
case "name" -> "\"" + field.getTypeName() + "\"";
10101010
case "length" -> "\"" + ((SimpleTypeReference) field).getSizeInBits() + "\"";
10111011
case "encoding" -> {
1012-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
1012+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
10131013
yield "\"" + encoding + "\"";
10141014
}
10151015
default -> "";
@@ -1090,7 +1090,7 @@ private CodeBlock toStaticCallSerializationExpression(TypeDefinition typeDefinit
10901090
sb.append("\"").append(((SimpleTypeReference) field).getSizeInBits()).append("\"");
10911091
break;
10921092
case "encoding":
1093-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
1093+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
10941094
sb.append("\"").append(encoding).append("\"");
10951095
break;
10961096
}

code-generation/language/java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ public String getReadBufferReadMethodCall(String logicalName, SimpleTypeReferenc
349349
case STRING:
350350
case VSTRING:
351351
String stringType = "String";
352-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
352+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
353353
if (!(encodingTerm instanceof StringLiteral)) {
354354
throw new IllegalArgumentException("Encoding must be a quoted string value");
355355
}
@@ -576,7 +576,7 @@ public String getWriteBufferWriteMethodCall(String logicalName, SimpleTypeRefere
576576
}
577577
case STRING:
578578
case VSTRING:
579-
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"));
579+
final Term encodingTerm = field.getEncoding().orElse(new DefaultStringLiteral("UTF8"));
580580
if (!(encodingTerm instanceof StringLiteral)) {
581581
throw new RuntimeException("Encoding must be a quoted string value");
582582
}
@@ -932,7 +932,7 @@ else if (variableLiteral.getName().equals(variableLiteral.getName().toUpperCase(
932932
case "length":
933933
return tracer + "\"" + ((SimpleTypeReference) field).getSizeInBits() + "\"";
934934
case "encoding":
935-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
935+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
936936
return tracer + "\"" + encoding + "\"";
937937
default:
938938
return tracer + "";
@@ -1018,7 +1018,7 @@ private String toStaticCallParseExpression(Field field, TypeReference resultType
10181018
sb.append("\"").append(((SimpleTypeReference) field).getSizeInBits()).append("\"");
10191019
break;
10201020
case "encoding":
1021-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
1021+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
10221022
sb.append("\"").append(encoding).append("\"");
10231023
break;
10241024
}
@@ -1100,7 +1100,7 @@ else if (variableLiteral.getName().equals(variableLiteral.getName().toUpperCase(
11001100
case "length":
11011101
return tracer + "\"" + ((SimpleTypeReference) field).getSizeInBits() + "\"";
11021102
case "encoding":
1103-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
1103+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
11041104
return tracer + "\"" + encoding + "\"";
11051105
default:
11061106
return tracer + "";
@@ -1147,7 +1147,7 @@ private String toGlobalFunctionCallSerializationExpression(Field field, TypeRefe
11471147
sb.append("\"").append(((SimpleTypeReference) field).getSizeInBits()).append("\"");
11481148
break;
11491149
case "encoding":
1150-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
1150+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
11511151
sb.append("\"").append(encoding).append("\"");
11521152
break;
11531153
}
@@ -1211,7 +1211,7 @@ private String toStaticCallSerializationExpression(Field field, TypeReference re
12111211
sb.append("\"").append(((SimpleTypeReference) field).getSizeInBits()).append("\"");
12121212
break;
12131213
case "encoding":
1214-
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF-8"))).getValue();
1214+
String encoding = ((StringLiteral) field.getEncoding().orElse(new DefaultStringLiteral("UTF8"))).getValue();
12151215
sb.append("\"").append(encoding).append("\"");
12161216
break;
12171217
}

0 commit comments

Comments
 (0)