You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/06/18 15:53:55 UTC
[plc4x] branch feature/c-code-generation-tagged-unions updated: -
Started implementing the different types of serializers for the fields
(WIP)
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/c-code-generation-tagged-unions
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/c-code-generation-tagged-unions by this push:
new 1899fcf - Started implementing the different types of serializers for the fields (WIP)
1899fcf is described below
commit 1899fcf4227966f3b928c3f078495d22e63d10f3
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Jun 18 17:53:47 2020 +0200
- Started implementing the different types of serializers for the fields (WIP)
---
.../BaseFreemarkerLanguageTemplateHelper.java | 2 +-
.../plc4x/language/c/CLanguageTemplateHelper.java | 55 ++++++-
.../resources/templates/c/pojo-template-c.ftlh | 169 ++++++++++++++++++++-
.../language/java/JavaLanguageTemplateHelper.java | 2 +-
.../resources/templates/java/data-io-template.ftlh | 8 +-
.../main/resources/templates/java/io-template.ftlh | 20 +--
sandbox/plc4c/api/include/plc4c/utils/list.h | 2 +
.../modbus/src/modbus_constants.c | 6 +-
.../generated-sources/modbus/src/modbus_pdu.c | 9 +-
.../src/modbus_pdu_read_file_record_request_item.c | 3 +-
.../modbus_pdu_read_file_record_response_item.c | 12 +-
.../modbus_pdu_write_file_record_request_item.c | 12 +-
.../modbus_pdu_write_file_record_response_item.c | 12 +-
.../modbus/src/modbus_serial_adu.c | 3 +-
.../generated-sources/modbus/src/modbus_tcp_adu.c | 6 +-
.../plc4c/generated-sources/s7/src/cotp_packet.c | 27 +++-
.../generated-sources/s7/src/cotp_parameter.c | 6 +-
.../plc4c/generated-sources/s7/src/s7_address.c | 6 +-
.../plc4c/generated-sources/s7/src/s7_message.c | 27 +++-
.../plc4c/generated-sources/s7/src/s7_parameter.c | 6 +-
.../s7/src/s7_parameter_user_data_item.c | 6 +-
.../plc4c/generated-sources/s7/src/s7_payload.c | 3 +-
.../s7/src/s7_payload_user_data_item.c | 9 +-
.../s7/src/s7_var_payload_data_item.c | 18 ++-
.../s7/src/s7_var_payload_status_item.c | 6 +-
.../s7/src/s7_var_request_parameter_item.c | 6 +-
.../generated-sources/s7/src/szl_data_tree_item.c | 12 +-
sandbox/plc4c/generated-sources/s7/src/szl_id.c | 9 +-
.../plc4c/generated-sources/s7/src/tpkt_packet.c | 6 +-
29 files changed, 426 insertions(+), 42 deletions(-)
diff --git a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
index 093e726..ee16231 100644
--- a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
+++ b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
@@ -115,7 +115,7 @@ public abstract class BaseFreemarkerLanguageTemplateHelper implements Freemarker
public abstract String getReadBufferReadMethodCall(SimpleTypeReference simpleTypeReference);
- public abstract String getWriteBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String fieldName);
+ public abstract String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeReference, String fieldName);
public abstract String getNullValueForTypeReference(TypeReference typeReference);
diff --git a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
index bc3d686..90465a2 100644
--- a/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
+++ b/build-utils/language-c/src/main/java/org/apache/plc4x/language/c/CLanguageTemplateHelper.java
@@ -19,7 +19,6 @@ under the License.
package org.apache.plc4x.language.c;
import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.commons.text.WordUtils;
import org.apache.plc4x.plugins.codegenerator.protocol.freemarker.BaseFreemarkerLanguageTemplateHelper;
import org.apache.plc4x.plugins.codegenerator.types.definitions.*;
import org.apache.plc4x.plugins.codegenerator.types.enums.EnumValue;
@@ -395,8 +394,58 @@ public class CLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelpe
}
@Override
- public String getWriteBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String fieldName) {
- return null;
+ public String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeReference, String fieldName) {
+ switch (simpleTypeReference.getBaseType()) {
+ case BIT: {
+ return "plc4c_spi_write_bit(buf, " + fieldName + ")";
+ }
+ case UINT: {
+ IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
+ if (integerTypeReference.getSizeInBits() <= 4) {
+ return "plc4c_spi_write_unsigned_byte(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ if (integerTypeReference.getSizeInBits() <= 8) {
+ return "plc4c_spi_write_unsigned_short(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ if (integerTypeReference.getSizeInBits() <= 16) {
+ return "plc4c_spi_write_unsigned_int(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ if (integerTypeReference.getSizeInBits() <= 32) {
+ return "plc4c_spi_write_unsigned_long(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ return "plc4c_spi_write_unsigned_big_integer(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ case INT: {
+ IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
+ if (integerTypeReference.getSizeInBits() <= 8) {
+ return "plc4c_spi_write_byte(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ if (integerTypeReference.getSizeInBits() <= 16) {
+ return "plc4c_spi_write_short(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ if (integerTypeReference.getSizeInBits() <= 32) {
+ return "plc4c_spi_write_int(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ if (integerTypeReference.getSizeInBits() <= 64) {
+ return "plc4c_spi_write_long(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ return "plc4c_spi_write_big_integer(buf, " + integerTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ case FLOAT: {
+ FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
+ if (floatTypeReference.getSizeInBits() <= 32) {
+ return "plc4c_spi_write_float(buf, " + floatTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ } else {
+ return "plc4c_spi_write_double(buf, " + floatTypeReference.getSizeInBits() + ", " + fieldName + ")";
+ }
+ }
+ case STRING: {
+ StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
+ return "plc4c_spi_write_string(buf, " + stringTypeReference.getSizeInBits() + ", \"" +
+ stringTypeReference.getEncoding() + "\", " + fieldName + ")";
+ }
+ }
+ throw new RuntimeException("Unsupported type");
}
@Override
diff --git a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
index 0b7f6f2..28d6226 100644
--- a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
+++ b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
@@ -342,7 +342,174 @@ plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_b
return OK;
}
-plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_write_buffer* buf, plc4c_${helper.getCTypeName(type.name)}* message) {
+plc4c_return_code plc4c_${helper.getCTypeName(type.name)}_serialize(plc4c_spi_write_buffer* buf, plc4c_${helper.getCTypeName(type.name)}* _message) {
+<#macro fieldSerializer baseType field indentContent>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+
+<#if indentContent> </#if> // Array field (${arrayField.name})
+<#if indentContent> </#if> {
+<#if indentContent> </#if> uint8_t itemCount = plc4c_utils_list_size(_message-><@fieldName baseType=baseType field=arrayField/>);
+<#if indentContent> </#if> for(int curItem = 0; curItem < itemCount; curItem++) {
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForTypeReference(arrayField.type)}* _value = (${helper.getLanguageTypeNameForTypeReference(arrayField.type)}*) plc4c_utils_list_get_value(_message-><@fieldName baseType=baseType field=arrayField/>, curItem);
+ <#if helper.isSimpleTypeReference(arrayField.type)>
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(arrayField.type, "*_value")};
+ <#else>
+<#if indentContent> </#if> plc4c_return_code _res = plc4c_${helper.getCTypeName(arrayField.type.name)}_serialize(buf, (void*) &_value);
+<#if indentContent> </#if> if(_res != OK) {
+<#if indentContent> </#if> return _res;
+<#if indentContent> </#if> }
+ </#if>
+<#if indentContent> </#if> }
+<#if indentContent> </#if> }
+ <#break>
+ <#--case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+<#if indentContent> </#if> // Checksum Field (${checksumField.name})
+<#if indentContent> </#if> {
+<#if indentContent> </#if> // Create an array of all the bytes read in this message element so far.
+<#if indentContent> </#if> byte[] checksumRawData = plc4c_spi_read_get_bytes(buf, startPos, plc4c_spi_read_get_pos(buf));
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)} _checksumRef = ${helper.getReadBufferReadMethodCall(checksumField.type)};
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)} _checksum = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(baseType, checksumField, checksumField.checksumExpression, type.parserArguments)});
+<#if indentContent> </#if> if(_checksum != _checksumRef) {
+<#if indentContent> </#if> return PARSE_ERROR;
+<#if indentContent> </#if> // throw new ParseException(String.format("Checksum verification failed. Expected %04X but got %04X",_checksumRef & 0xFFFF, _checksum & 0xFFFF));
+<#if indentContent> </#if> }
+<#if indentContent> </#if> }
+ <#break-->
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+<#if indentContent> </#if> // Const Field (${constField.name})
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(constField.type, helper.getCTypeName(baseType.name)?upper_case + "_" + helper.camelCaseToSnakeCase(constField.name)?upper_case)};
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+<#if indentContent> </#if> // Discriminator Field (${discriminatorField.name})
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(discriminatorField.type, "plc4c_" + helper.getCTypeName(baseType.name) + "_get_discriminator(_message->_type)." + discriminatorField.name)};
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+<#if indentContent> </#if> // Enum field (${enumField.name})
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(enumField.type), "_message->" + helper.camelCaseToSnakeCase(enumField.name))};
+ <#break>
+ <#--case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+<#if indentContent> </#if> // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)} ${implicitField.name} = ${helper.getReadBufferReadMethodCall(implicitField.type)};
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ <- TODO: Implement ->
+ <#break-->
+ <#case "manual">
+ <#assign manualField = field>
+
+<#if indentContent> </#if> // Manual Field (${manualField.name})
+<#if indentContent> </#if> {
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForTypeReference(manualField.type)}* _value = (${helper.getLanguageTypeNameForTypeReference(arrayField.type)}*) plc4c_utils_list_get_value(_message-><@fieldName baseType=baseType field=arrayField/>, curItem);
+ <#if helper.isSimpleTypeReference(manualField.type)>
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(manualField.type, "*_value")};
+ <#else>
+<#if indentContent> </#if> plc4c_return_code _res = plc4c_${helper.getCTypeName(manualField.type.name)}_serialize(buf, (void*) &_value);
+<#if indentContent> </#if> if(_res != OK) {
+<#if indentContent> </#if> return _res;
+<#if indentContent> </#if> }
+ </#if>
+<#if indentContent> </#if> }
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+<#if indentContent> </#if> // Optional Field (${optionalField.name})
+<#if indentContent> </#if> if(_message-><@fieldName baseType=baseType field=optionalField/> != NULL) {
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForTypeReference(optionalField.type)}* _value = (${helper.getLanguageTypeNameForTypeReference(optionalField.type)}*) _message-><@fieldName baseType=baseType field=optionalField/>;
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(optionalField.type, "*_value")};
+ <#else>
+<#if indentContent> </#if> plc4c_return_code _res = plc4c_${helper.getCTypeName(optionalField.type.name)}_serialize(buf, (void*) &_value);
+<#if indentContent> </#if> if(_res != OK) {
+<#if indentContent> </#if> return _res;
+<#if indentContent> </#if> }
+ </#if>
+<#if indentContent> </#if> }
+ <#break>
+ <#--case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+<#if indentContent> </#if> // Padding Field (padding)
+<#if indentContent> </#if> {
+<#if indentContent> </#if> bool _needsPadding = (bool) ((plc4c_spi_read_has_more(buf, ${helper.getNumBits(paddingField.type)})) && (${helper.toParseExpression(baseType, paddingField, paddingField.paddingCondition, type.parserArguments)}));
+<#if indentContent> </#if> if(_needsPadding) {
+<#if indentContent> </#if> // Just read the padding data and ignore it
+<#if indentContent> </#if> ${helper.getReadBufferReadMethodCall(paddingField.type)};
+<#if indentContent> </#if> }
+<#if indentContent> </#if> }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+<#if indentContent> </#if> // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+<#if indentContent> </#if> {
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)} _reserved = ${helper.getReadBufferReadMethodCall(reservedField.type)};
+<#if indentContent> </#if> if(_reserved != ${reservedField.referenceValue}) {
+<#if indentContent> </#if> printf("Expected constant value '%d' but got '%d' for reserved field.", ${reservedField.referenceValue}, _reserved);
+<#if indentContent> </#if> }
+<#if indentContent> </#if> }
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+<#if indentContent> </#if> // Simple Field (${simpleField.name})
+ <#if helper.isSimpleTypeReference(simpleField.type)>
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)} ${simpleField.name} = ${helper.getReadBufferReadMethodCall(simpleField.type)};
+ <#else>
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)}* ${simpleField.name};
+<#if indentContent> </#if> plc4c_return_code _res = plc4c_${helper.getCTypeName(simpleField.type.name)}_parse(buf<#if simpleField.params?has_content>, <#list simpleField.params as parserTerm>${helper.toParseExpression(baseType, simpleField, parserTerm, type.parserArguments)}<#sep>, </#sep></#list></#if>, (void*) &${simpleField.name});
+<#if indentContent> </#if> if(_res != OK) {
+<#if indentContent> </#if> return _res;
+<#if indentContent> </#if> }
+ </#if>
+<#if indentContent> </#if> (*_message)-><@fieldName baseType=baseType field=simpleField/> = ${simpleField.name};
+ <#break>
+ <#case "switch">
+ <#assign switchField = field>
+
+<#if indentContent> </#if> // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+ <#list switchField.cases as case>
+<#if indentContent> </#if> <#if case.discriminatorValues?has_content>if(<#list case.discriminatorValues as discriminatorValue><#if case.discriminatorValues?size > 1>(</#if>${helper.toVariableParseExpression(baseType, switchField, switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == ${discriminatorValue}<#if case.discriminatorValues?size > 1>)</#if><#sep> && </#sep></#list>) </#if>{ /* ${case.name} */
+ <#list case.fields as caseField>
+<#if indentContent> </#if> <@fieldParser baseType=case field=caseField indentContent=true/>
+ <#sep >
+
+ </#list>
+<#if indentContent> </#if> }<#sep> else </#sep>
+ </#list>
+ <#break>
+ <#case "virtual">
+ <#assign virtualField = field>
+
+<#if indentContent> </#if> // Virtual field (Just declare a local variable so we can access it in the parser)
+<#if indentContent> </#if> ${helper.getLanguageTypeNameForField(field)} ${virtualField.name} = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(baseType, virtualField, virtualField.valueExpression, type.parserArguments)});
+ <#break-->
+ </#switch>
+</#macro>
+<#list type.fields as field>
+ <@fieldSerializer baseType=type field=field indentContent=false/>
+</#list>
+
return OK;
}
</#if>
diff --git a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index 5a3d58b..dce14cf 100644
--- a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@ -293,7 +293,7 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
}
@Override
- public String getWriteBufferReadMethodCall(SimpleTypeReference simpleTypeReference, String fieldName) {
+ public String getWriteBufferWriteMethodCall(SimpleTypeReference simpleTypeReference, String fieldName) {
switch (simpleTypeReference.getBaseType()) {
case BIT: {
return "io.writeBit((boolean) " + fieldName + ")";
diff --git a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
index 7148dee..fbb9571 100644
--- a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
@@ -258,12 +258,12 @@ public class ${type.name}IO {
<#break>
<#case "const">
// Const Field (${field.name})
- ${helper.getWriteBufferReadMethodCall(field.type, field.referenceValue)};
+ ${helper.getWriteBufferWriteMethodCall(field.type, field.referenceValue)};
<#break>
<#case "enum">
// Enum field (${field.name})
${helper.getLanguageTypeNameForField(field)} ${field.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${field.name?cap_first}();
- ${helper.getWriteBufferReadMethodCall(helper.getEnumBaseTypeReference(field.type), "(" + field.name + ".getValue())")};
+ ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(field.type), "(" + field.name + ".getValue())")};
<#break>
<#case "manual">
// Manual Field (${field.name})
@@ -271,7 +271,7 @@ public class ${type.name}IO {
<#break>
<#case "reserved">
// Reserved Field
- ${helper.getWriteBufferReadMethodCall(field.type, helper.getReservedValue(field))};
+ ${helper.getWriteBufferWriteMethodCall(field.type, helper.getReservedValue(field))};
<#break>
<#case "simple">
// Simple Field (${field.name})
@@ -286,7 +286,7 @@ public class ${type.name}IO {
</#if>
</#if>
<#if helper.isSimpleTypeReference(field.type)>
- ${helper.getWriteBufferReadMethodCall(field.type, "(" + field.name + ")")};
+ ${helper.getWriteBufferWriteMethodCall(field.type, "(" + field.name + ")")};
<#else>
${field.type.name}IO.staticSerialize(io, ${field.name});
</#if>
diff --git a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
index 9fc2a4d..2098fad 100644
--- a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
@@ -414,7 +414,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
for(${helper.getLanguageTypeNameForField(field)} element : _value.get${arrayField.name?cap_first}()) {
<#if helper.isSimpleTypeReference(arrayField.type)>
<#assign simpleTypeReference = arrayField.type>
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "element")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "element")};
<#else>
<#assign complexTypeReference = arrayField.type>
boolean lastItem = curItem == (itemCount - 1);
@@ -434,7 +434,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
// Create an array of all the bytes written in this message element so far.
byte[] checksumRawData = io.getBytes(startPos, io.getPos());
_checksum = (${helper.getLanguageTypeNameForField(field)}) (${helper.toSerializationExpression(checksumField, checksumField.checksumExpression, type.parserArguments)});
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "(_checksum)")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(_checksum)")};
}
<#break>
<#case "const">
@@ -442,7 +442,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
<#assign simpleTypeReference = constField.type>
// Const Field (${constField.name})
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, constField.referenceValue)};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, constField.referenceValue)};
<#break>
<#case "discriminator">
<#assign discriminatorField = field>
@@ -450,14 +450,14 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
// Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
${helper.getLanguageTypeNameForField(field)} ${discriminatorField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${discriminatorField.name?cap_first}();
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "(" + discriminatorField.name + ")")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + discriminatorField.name + ")")};
<#break>
<#case "enum">
<#assign enumField = field>
// Enum field (${enumField.name})
${helper.getLanguageTypeNameForField(field)} ${enumField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${enumField.name?cap_first}();
- ${helper.getWriteBufferReadMethodCall(helper.getEnumBaseTypeReference(enumField.type), "(" + enumField.name + ".getValue())")};
+ ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(enumField.type), "(" + enumField.name + ".getValue())")};
<#break>
<#case "implicit">
<#assign implicitField = field>
@@ -465,7 +465,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
// Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
${helper.getLanguageTypeNameForField(field)} ${implicitField.name} = (${helper.getLanguageTypeNameForField(field)}) (${helper.toSerializationExpression(implicitField, implicitField.serializeExpression, type.parserArguments)});
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "(" + implicitField.name + ")")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + implicitField.name + ")")};
<#break>
<#case "manualArray">
<#assign manualArrayField = field>
@@ -492,7 +492,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
${optionalField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${optionalField.name?cap_first}();
<#if helper.isSimpleTypeReference(optionalField.type)>
<#assign simpleTypeReference = optionalField.type>
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "(" + optionalField.name + ")")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + optionalField.name + ")")};
<#else>
<#assign complexTypeReference = optionalField.type>
${complexTypeReference.name}IO.staticSerialize(io, ${optionalField.name});
@@ -508,7 +508,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
boolean _needsPadding = (boolean) (${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)});
if(_needsPadding) {
${helper.getLanguageTypeNameForField(field)} _paddingValue = (${helper.getLanguageTypeNameForField(field)}) (${helper.toSerializationExpression(paddingField, paddingField.paddingValue, type.parserArguments)});
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "(_paddingValue)")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(_paddingValue)")};
}
}
<#break>
@@ -517,7 +517,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
<#assign simpleTypeReference = reservedField.type>
// Reserved Field (reserved)
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, helper.getReservedValue(field))};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, helper.getReservedValue(field))};
<#break>
<#case "simple">
<#assign simpleField = field>
@@ -526,7 +526,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
${helper.getLanguageTypeNameForField(field)} ${simpleField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${simpleField.name?cap_first}();
<#if helper.isSimpleTypeReference(simpleField.type)>
<#assign simpleTypeReference = simpleField.type>
- ${helper.getWriteBufferReadMethodCall(simpleTypeReference, "(" + simpleField.name + ")")};
+ ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + simpleField.name + ")")};
<#else>
<#assign complexTypeReference = simpleField.type>
${complexTypeReference.name}IO.staticSerialize(io, ${simpleField.name});
diff --git a/sandbox/plc4c/api/include/plc4c/utils/list.h b/sandbox/plc4c/api/include/plc4c/utils/list.h
index 2d0724c..013097c 100644
--- a/sandbox/plc4c/api/include/plc4c/utils/list.h
+++ b/sandbox/plc4c/api/include/plc4c/utils/list.h
@@ -51,6 +51,8 @@ bool plc4c_utils_list_contains(plc4c_list *list, plc4c_list_element *element);
bool plc4c_utils_list_get(plc4c_list *list, size_t element_index);
+void* plc4c_utils_list_get_value(plc4c_list *list, size_t element_index);
+
void plc4c_utils_list_insert_head(plc4c_list *list,
plc4c_list_element *element);
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
index 15b15f0..3112267 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_constants.c
@@ -44,6 +44,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_constants_parse(plc4c_spi_read_
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_constants_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_constants* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_constants_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_constants* _message) {
+
+ // Const Field (modbusTcpDefaultPort)
+ plc4c_spi_write_unsigned_int(buf, 16, MODBUS_READ_WRITE_MODBUS_CONSTANTS_MODBUS_TCP_DEFAULT_PORT);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
index 81b3be3..97b0b06 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
@@ -798,6 +798,13 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu* _message) {
+
+ // Discriminator Field (error)
+ plc4c_spi_write_bit(buf, plc4c_modbus_read_write_modbus_pdu_get_discriminator(_message->_type).error);
+
+ // Discriminator Field (function)
+ plc4c_spi_write_unsigned_short(buf, 7, plc4c_modbus_read_write_modbus_pdu_get_discriminator(_message->_type).function);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c
index 31e6b67..913c0cb 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request_item.c
@@ -54,6 +54,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_it
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* _message) {
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c
index 686c4d3..d821804 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response_item.c
@@ -61,6 +61,16 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_i
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* _message) {
+
+ // Array field (data)
+ {
+ uint8_t itemCount = plc4c_utils_list_size(_message->data);
+ for(int curItem = 0; curItem < itemCount; curItem++) {
+ uint16_t* _value = (uint16_t*) plc4c_utils_list_get_value(_message->data, curItem);
+ plc4c_spi_write_unsigned_int(buf, 16, *_value);
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
index 33b8e9a..6f49b0e 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
@@ -69,6 +69,16 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* _message) {
+
+ // Array field (recordData)
+ {
+ uint8_t itemCount = plc4c_utils_list_size(_message->record_data);
+ for(int curItem = 0; curItem < itemCount; curItem++) {
+ uint16_t* _value = (uint16_t*) plc4c_utils_list_get_value(_message->record_data, curItem);
+ plc4c_spi_write_unsigned_int(buf, 16, *_value);
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
index 21f3113..a41c330 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
@@ -69,6 +69,16 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* _message) {
+
+ // Array field (recordData)
+ {
+ uint8_t itemCount = plc4c_utils_list_size(_message->record_data);
+ for(int curItem = 0; curItem < itemCount; curItem++) {
+ uint16_t* _value = (uint16_t*) plc4c_utils_list_get_value(_message->record_data, curItem);
+ plc4c_spi_write_unsigned_int(buf, 16, *_value);
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
index c284a6d..08dcaaa 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_serial_adu.c
@@ -66,6 +66,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_parse(plc4c_spi_read
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_serial_adu* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_serial_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_serial_adu* _message) {
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
index 96d17ab..a22948b 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_tcp_adu.c
@@ -64,6 +64,10 @@ plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_parse(plc4c_spi_read_bu
return OK;
}
-plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_tcp_adu* message) {
+plc4c_return_code plc4c_modbus_read_write_modbus_tcp_adu_serialize(plc4c_spi_write_buffer* buf, plc4c_modbus_read_write_modbus_tcp_adu* _message) {
+
+ // Const Field (protocolIdentifier)
+ plc4c_spi_write_unsigned_int(buf, 16, MODBUS_READ_WRITE_MODBUS_TCP_ADU_PROTOCOL_IDENTIFIER);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
index 110facd..d71ec5e 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
@@ -202,6 +202,31 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
return OK;
}
-plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_packet* _message) {
+
+ // Discriminator Field (tpduCode)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_cotp_packet_get_discriminator(_message->_type).tpduCode);
+
+ // Array field (parameters)
+ {
+ uint8_t itemCount = plc4c_utils_list_size(_message->parameters);
+ for(int curItem = 0; curItem < itemCount; curItem++) {
+ plc4c_s7_read_write_cotp_parameter* _value = (plc4c_s7_read_write_cotp_parameter*) plc4c_utils_list_get_value(_message->parameters, curItem);
+ plc4c_return_code _res = plc4c_s7_read_write_cotp_parameter_serialize(buf, (void*) &_value);
+ if(_res != OK) {
+ return _res;
+ }
+ }
+ }
+
+ // Optional Field (payload)
+ if(_message->payload != NULL) {
+ plc4c_s7_read_write_s7_message* _value = (plc4c_s7_read_write_s7_message*) _message->payload;
+ plc4c_return_code _res = plc4c_s7_read_write_s7_message_serialize(buf, (void*) &_value);
+ if(_res != OK) {
+ return _res;
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
index 92b7411..d565a67 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
@@ -114,6 +114,10 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
return OK;
}
-plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter* message) {
+plc4c_return_code plc4c_s7_read_write_cotp_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_cotp_parameter* _message) {
+
+ // Discriminator Field (parameterType)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_cotp_parameter_get_discriminator(_message->_type).parameterType);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_address.c b/sandbox/plc4c/generated-sources/s7/src/s7_address.c
index 1d9659a..b60d64b 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_address.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_address.c
@@ -102,6 +102,10 @@ plc4c_return_code plc4c_s7_read_write_s7_address_parse(plc4c_spi_read_buffer* bu
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address* message) {
+plc4c_return_code plc4c_s7_read_write_s7_address_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_address* _message) {
+
+ // Discriminator Field (addressType)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_address_get_discriminator(_message->_type).addressType);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_message.c b/sandbox/plc4c/generated-sources/s7/src/s7_message.c
index ec32324..d837ef0 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_message.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_message.c
@@ -145,6 +145,31 @@ plc4c_return_code plc4c_s7_read_write_s7_message_parse(plc4c_spi_read_buffer* bu
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message* message) {
+plc4c_return_code plc4c_s7_read_write_s7_message_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_message* _message) {
+
+ // Const Field (protocolId)
+ plc4c_spi_write_unsigned_short(buf, 8, S7_READ_WRITE_S7_MESSAGE_PROTOCOL_ID);
+
+ // Discriminator Field (messageType)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_message_get_discriminator(_message->_type).messageType);
+
+ // Optional Field (parameter)
+ if(_message->parameter != NULL) {
+ plc4c_s7_read_write_s7_parameter* _value = (plc4c_s7_read_write_s7_parameter*) _message->parameter;
+ plc4c_return_code _res = plc4c_s7_read_write_s7_parameter_serialize(buf, (void*) &_value);
+ if(_res != OK) {
+ return _res;
+ }
+ }
+
+ // Optional Field (payload)
+ if(_message->payload != NULL) {
+ plc4c_s7_read_write_s7_payload* _value = (plc4c_s7_read_write_s7_payload*) _message->payload;
+ plc4c_return_code _res = plc4c_s7_read_write_s7_payload_serialize(buf, (void*) &_value);
+ if(_res != OK) {
+ return _res;
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
index 72c1b75..eb6ef05 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
@@ -192,6 +192,10 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter* _message) {
+
+ // Discriminator Field (parameterType)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_parameter_get_discriminator(_message->_type).parameterType);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
index 360b806..649c8ba 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
@@ -130,6 +130,10 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_parse(plc4c_sp
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_parameter_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_parameter_user_data_item* _message) {
+
+ // Discriminator Field (itemType)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_parameter_user_data_item_get_discriminator(_message->_type).itemType);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
index 438f013..bb27e35 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
@@ -150,6 +150,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_payload_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload* _message) {
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
index 1644afc..b7d6a0e 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
@@ -117,6 +117,13 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_payload_user_data_item* _message) {
+
+ // Enum field (returnCode)
+ plc4c_spi_write_byte(buf, 8, _message->return_code);
+
+ // Enum field (transportSize)
+ plc4c_spi_write_byte(buf, 8, _message->transport_size);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
index 46fe0ba..07ec009 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
@@ -76,6 +76,22 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_data_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_data_item* _message) {
+
+ // Enum field (returnCode)
+ plc4c_spi_write_byte(buf, 8, _message->return_code);
+
+ // Enum field (transportSize)
+ plc4c_spi_write_byte(buf, 8, _message->transport_size);
+
+ // Array field (data)
+ {
+ uint8_t itemCount = plc4c_utils_list_size(_message->data);
+ for(int curItem = 0; curItem < itemCount; curItem++) {
+ int8_t* _value = (int8_t*) plc4c_utils_list_get_value(_message->data, curItem);
+ plc4c_spi_write_byte(buf, 8, *_value);
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c
index 420006a..099742a 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_status_item.c
@@ -42,6 +42,10 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_parse(plc4c_spi
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_status_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_payload_status_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_payload_status_item* _message) {
+
+ // Enum field (returnCode)
+ plc4c_spi_write_byte(buf, 8, _message->return_code);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
index a381720..3d8800f 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
@@ -71,6 +71,10 @@ plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_parse(plc4c_
return OK;
}
-plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item* message) {
+plc4c_return_code plc4c_s7_read_write_s7_var_request_parameter_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_s7_var_request_parameter_item* _message) {
+
+ // Discriminator Field (itemType)
+ plc4c_spi_write_unsigned_short(buf, 8, plc4c_s7_read_write_s7_var_request_parameter_item_get_discriminator(_message->_type).itemType);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
index 423d163..45471c4 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
@@ -71,6 +71,16 @@ plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_bu
return OK;
}
-plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_data_tree_item* message) {
+plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_data_tree_item* _message) {
+
+ // Array field (mlfb)
+ {
+ uint8_t itemCount = plc4c_utils_list_size(_message->mlfb);
+ for(int curItem = 0; curItem < itemCount; curItem++) {
+ int8_t* _value = (int8_t*) plc4c_utils_list_get_value(_message->mlfb, curItem);
+ plc4c_spi_write_byte(buf, 8, *_value);
+ }
+ }
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/szl_id.c b/sandbox/plc4c/generated-sources/s7/src/szl_id.c
index 532015d..bb1c06d 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_id.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_id.c
@@ -50,6 +50,13 @@ plc4c_return_code plc4c_s7_read_write_szl_id_parse(plc4c_spi_read_buffer* buf, p
return OK;
}
-plc4c_return_code plc4c_s7_read_write_szl_id_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_id* message) {
+plc4c_return_code plc4c_s7_read_write_szl_id_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_szl_id* _message) {
+
+ // Enum field (typeClass)
+ plc4c_spi_write_byte(buf, 4, _message->type_class);
+
+ // Enum field (sublistList)
+ plc4c_spi_write_byte(buf, 8, _message->sublist_list);
+
return OK;
}
diff --git a/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c b/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
index 324d1f7..6152816 100644
--- a/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/tpkt_packet.c
@@ -64,6 +64,10 @@ plc4c_return_code plc4c_s7_read_write_tpkt_packet_parse(plc4c_spi_read_buffer* b
return OK;
}
-plc4c_return_code plc4c_s7_read_write_tpkt_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_tpkt_packet* message) {
+plc4c_return_code plc4c_s7_read_write_tpkt_packet_serialize(plc4c_spi_write_buffer* buf, plc4c_s7_read_write_tpkt_packet* _message) {
+
+ // Const Field (protocolId)
+ plc4c_spi_write_unsigned_short(buf, 8, S7_READ_WRITE_TPKT_PACKET_PROTOCOL_ID);
+
return OK;
}