You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/02/18 10:04:18 UTC

[plc4x] 01/02: Merge branch 'develop' into feature/plc4c-proxy-protocol

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch feature/plc4c-proxy-protocol
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit fe2960b7b79f885bbd6320ca8cf1eb5057ee6d9f
Merge: 605b562 394d759
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Feb 18 11:02:03 2022 +0100

    Merge branch 'develop' into feature/plc4c-proxy-protocol
    
    # Conflicts:
    #	code-generation/language-c/src/main/resources/templates/c/pojo-template.c.ftlh
    #	code-generation/language-c/src/main/resources/templates/c/pojo-template.h.ftlh
    #	plc4c/generated-sources/modbus/src/modbus_pdu.c
    #	plc4c/generated-sources/s7/include/s7_payload_user_data_item.h
    #	plc4c/generated-sources/s7/src/cotp_protocol_class.c
    #	plc4c/generated-sources/s7/src/cotp_tpdu_size.c
    #	plc4c/generated-sources/s7/src/device_group.c
    #	plc4c/generated-sources/s7/src/s7_data_alarm_message.c
    #	plc4c/generated-sources/s7/src/s7_parameter.c
    #	plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
    #	plc4c/generated-sources/s7/src/transport_size.c

 .../BaseFreemarkerLanguageTemplateHelper.java      |   7 +
 .../plc4x/language/c/CLanguageTemplateHelper.java  |   3 +-
 .../resources/templates/c/enum-template.c.ftlh     |  34 ++-
 .../resources/templates/c/pojo-template.c.ftlh     |  24 +-
 .../resources/templates/c/pojo-template.h.ftlh     |   2 +-
 plc4c/generated-sources/modbus/src/modbus_pdu.c    |  24 +-
 .../s7/include/alarm_message_object_ack_type.h     |   2 +-
 .../s7/include/s7_data_alarm_message.h             |   2 +-
 .../s7/include/s7_payload_user_data_item.h         |   4 +-
 .../s7/src/alarm_message_object_ack_type.c         |   8 +-
 plc4c/generated-sources/s7/src/cotp_packet.c       |  14 +-
 plc4c/generated-sources/s7/src/cotp_parameter.c    |  12 +-
 .../generated-sources/s7/src/cotp_protocol_class.c |   4 +-
 plc4c/generated-sources/s7/src/cotp_tpdu_size.c    |   4 +-
 .../generated-sources/s7/src/data_transport_size.c |  10 +-
 plc4c/generated-sources/s7/src/device_group.c      |   4 +-
 plc4c/generated-sources/s7/src/s7_address.c        |   4 +-
 .../s7/src/s7_data_alarm_message.c                 |  10 +-
 plc4c/generated-sources/s7/src/s7_message.c        |  10 +-
 plc4c/generated-sources/s7/src/s7_parameter.c      |   2 +-
 .../s7/src/s7_parameter_user_data_item.c           |   4 +-
 plc4c/generated-sources/s7/src/s7_payload.c        |  10 +-
 .../s7/src/s7_payload_user_data_item.c             |  22 +-
 .../s7/src/s7_var_request_parameter_item.c         |   4 +-
 plc4c/generated-sources/s7/src/transport_size.c    |  51 +---
 .../plc4x/java/bacnetip/RandomPackagesTest.java    |  30 +--
 plc4j/examples/hello-world-kotlin/pom.xml          | 148 +++++++++++
 .../src/main/kotlin/ReadModbusPal.kt               |  43 ++++
 .../src/main/resources/logback.xml                 |   2 +-
 plc4j/examples/pom.xml                             |   1 +
 .../utils/rawsockets/netty/RawSocketChannel.java   |   4 +-
 .../utils/rawsockets/netty/utils/ArpLookup.java    | 132 ----------
 .../utils/rawsockets/netty/utils/ArpUtils.java     | 281 +++++++++++++++++++++
 .../apache/plc4x/test/RequirePcapCondition.java    |   2 +-
 .../apache/plc4x/test/RequirePcapNgCondition.java  |   2 +-
 pom.xml                                            |  96 +++----
 36 files changed, 663 insertions(+), 353 deletions(-)

diff --cc code-generation/language-c/src/main/resources/templates/c/pojo-template.h.ftlh
index 6ef18f4,d377df8..3ed92a5
--- a/code-generation/language-c/src/main/resources/templates/c/pojo-template.h.ftlh
+++ b/code-generation/language-c/src/main/resources/templates/c/pojo-template.h.ftlh
@@@ -154,7 -154,7 +154,7 @@@ struct ${helper.getCTypeName(type.name)
              </#if>
          </#list>
    };
-     <#elseif (field.type.isSimpleTypeReference() || helper.isEnumField(field)) && !field.isConstField() && !field.isOptionalField() && !field.isArrayField() && !field.isManualArrayField()>
 -    <#elseif (field.isTypedField() && field.type.isSimpleTypeReference() || helper.isEnumField(field)) && !field.isOptionalField() && !field.isArrayField() && !field.isManualArrayField()>
++    <#elseif (field.isTypedField() && field.type.isSimpleTypeReference() || helper.isEnumField(field)) && !field.isConstField() && !field.isOptionalField() && !field.isArrayField() && !field.isManualArrayField()>
          <#assign namedField = field.asNamedField().orElseThrow()>
    ${helper.getLanguageTypeNameForField(field)} ${helper.camelCaseToSnakeCase(namedField.name)}${helper.getTypeSizeForField(field.asTypedField().orElseThrow())}<#if field.loopType??>${helper.getLoopExpressionSuffix(field.asTypedField().orElseThrow())}</#if>;
      <#elseif field.isArrayField() || field.isManualArrayField()>
diff --cc plc4c/generated-sources/modbus/src/modbus_pdu.c
index a31aab5,eace41a..f9acbac
--- a/plc4c/generated-sources/modbus/src/modbus_pdu.c
+++ b/plc4c/generated-sources/modbus/src/modbus_pdu.c
@@@ -148,17 -148,18 +148,17 @@@ plc4c_return_code plc4c_modbus_read_wri
      return _res;
    }
  
-   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
  if( errorFlag == true ) { /* ModbusPDUError */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_error;
 -                    
 -    // Simple Field (exceptionCode)
 -    plc4c_modbus_read_write_modbus_error_code* exceptionCode;
 -    _res = plc4c_modbus_read_write_modbus_error_code_parse(readBuffer, (void*) &exceptionCode);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_error_exception_code = *exceptionCode;
  
 +  // Simple Field (exceptionCode)
 +  plc4c_modbus_read_write_modbus_error_code exceptionCode;
 +  _res = plc4c_modbus_read_write_modbus_error_code_parse(readBuffer, (void*) &exceptionCode);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_error_exception_code = exceptionCode;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x02 ) && ( response == false ) ) { /* ModbusPDUReadDiscreteInputsRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_request;
@@@ -182,35 -185,37 +182,35 @@@
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x02 ) && ( response == true ) ) { /* ModbusPDUReadDiscreteInputsResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_discrete_inputs_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_read_discrete_inputs_response_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_read_discrete_inputs_response_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x01 ) && ( response == false ) ) { /* ModbusPDUReadCoilsRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_coils_request;
@@@ -234,35 -241,37 +234,35 @@@
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x01 ) && ( response == true ) ) { /* ModbusPDUReadCoilsResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_coils_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_read_coils_response_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_read_coils_response_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x05 ) && ( response == false ) ) { /* ModbusPDUWriteSingleCoilRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_write_single_coil_request;
@@@ -306,53 -319,57 +306,53 @@@ if( ( errorFlag == false ) && ( functio
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x0F ) && ( response == false ) ) { /* ModbusPDUWriteMultipleCoilsRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_request;
 -                    
 -    // Simple Field (startingAddress)
 -    uint16_t startingAddress = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &startingAddress);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_write_multiple_coils_request_starting_address = startingAddress;
 -
 -
 -                    
 -    // Simple Field (quantity)
 -    uint16_t quantity = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &quantity);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_write_multiple_coils_request_quantity = quantity;
 -
 -
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Simple Field (startingAddress)
 +  uint16_t startingAddress = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &startingAddress);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_write_multiple_coils_request_starting_address = startingAddress;
 +
 +
 +  // Simple Field (quantity)
 +  uint16_t quantity = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &quantity);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_write_multiple_coils_request_quantity = quantity;
 +
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_write_multiple_coils_request_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_write_multiple_coils_request_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x0F ) && ( response == true ) ) { /* ModbusPDUWriteMultipleCoilsResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_write_multiple_coils_response;
@@@ -396,35 -417,37 +396,35 @@@ if( ( errorFlag == false ) && ( functio
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x04 ) && ( response == true ) ) { /* ModbusPDUReadInputRegistersResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_input_registers_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_read_input_registers_response_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_read_input_registers_response_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x03 ) && ( response == false ) ) { /* ModbusPDUReadHoldingRegistersRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_holding_registers_request;
@@@ -448,35 -473,37 +448,35 @@@
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x03 ) && ( response == true ) ) { /* ModbusPDUReadHoldingRegistersResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_holding_registers_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_read_holding_registers_response_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_read_holding_registers_response_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x06 ) && ( response == false ) ) { /* ModbusPDUWriteSingleRegisterRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_write_single_register_request;
@@@ -520,53 -551,57 +520,53 @@@ if( ( errorFlag == false ) && ( functio
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x10 ) && ( response == false ) ) { /* ModbusPDUWriteMultipleHoldingRegistersRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_request;
 -                    
 -    // Simple Field (startingAddress)
 -    uint16_t startingAddress = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &startingAddress);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_write_multiple_holding_registers_request_starting_address = startingAddress;
 -
 -
 -                    
 -    // Simple Field (quantity)
 -    uint16_t quantity = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &quantity);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_write_multiple_holding_registers_request_quantity = quantity;
 -
 -
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Simple Field (startingAddress)
 +  uint16_t startingAddress = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &startingAddress);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_write_multiple_holding_registers_request_starting_address = startingAddress;
 +
 +
 +  // Simple Field (quantity)
 +  uint16_t quantity = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &quantity);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_write_multiple_holding_registers_request_quantity = quantity;
 +
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_write_multiple_holding_registers_request_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_write_multiple_holding_registers_request_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x10 ) && ( response == true ) ) { /* ModbusPDUWriteMultipleHoldingRegistersResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_write_multiple_holding_registers_response;
@@@ -590,103 -627,111 +590,103 @@@
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x17 ) && ( response == false ) ) { /* ModbusPDUReadWriteMultipleHoldingRegistersRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_request;
 -                    
 -    // Simple Field (readStartingAddress)
 -    uint16_t readStartingAddress = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &readStartingAddress);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_read_starting_address = readStartingAddress;
  
 +  // Simple Field (readStartingAddress)
 +  uint16_t readStartingAddress = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &readStartingAddress);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_read_starting_address = readStartingAddress;
  
 -                    
 -    // Simple Field (readQuantity)
 -    uint16_t readQuantity = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &readQuantity);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_read_quantity = readQuantity;
  
 +  // Simple Field (readQuantity)
 +  uint16_t readQuantity = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &readQuantity);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_read_quantity = readQuantity;
  
 -                    
 -    // Simple Field (writeStartingAddress)
 -    uint16_t writeStartingAddress = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &writeStartingAddress);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_write_starting_address = writeStartingAddress;
  
 +  // Simple Field (writeStartingAddress)
 +  uint16_t writeStartingAddress = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &writeStartingAddress);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_write_starting_address = writeStartingAddress;
  
 -                    
 -    // Simple Field (writeQuantity)
 -    uint16_t writeQuantity = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &writeQuantity);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_write_quantity = writeQuantity;
  
 +  // Simple Field (writeQuantity)
 +  uint16_t writeQuantity = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &writeQuantity);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_write_quantity = writeQuantity;
  
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
  
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
  
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_read_write_multiple_holding_registers_request_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x17 ) && ( response == true ) ) { /* ModbusPDUReadWriteMultipleHoldingRegistersResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_write_multiple_holding_registers_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_read_write_multiple_holding_registers_response_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_read_write_multiple_holding_registers_response_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x16 ) && ( response == false ) ) { /* ModbusPDUMaskWriteHoldingRegisterRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_mask_write_holding_register_request;
@@@ -759,43 -811,46 +759,43 @@@ if( ( errorFlag == false ) && ( functio
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x18 ) && ( response == true ) ) { /* ModbusPDUReadFifoQueueResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_fifo_queue_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint16_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Implicit Field (fifoCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint16_t fifoCount = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &fifoCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (fifoValue)
 -    plc4c_list* fifoValue = NULL;
 -    plc4c_utils_list_create(&fifoValue);
 -    if(fifoValue == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) fifoCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        uint16_t* _value = malloc(sizeof(uint16_t));
 -        _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(fifoValue, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint16_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Implicit Field (fifoCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint16_t fifoCount = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &fifoCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (fifoValue)
 +  plc4c_list* fifoValue = NULL;
 +  plc4c_utils_list_create(&fifoValue);
 +  if(fifoValue == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) fifoCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      uint16_t* _value = malloc(sizeof(uint16_t));
 +      _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(fifoValue, _value);
      }
 -    (*_message)->modbus_pdu_read_fifo_queue_response_fifo_value = fifoValue;
 -
 +  }
 +  (*_message)->modbus_pdu_read_fifo_queue_response_fifo_value = fifoValue;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x14 ) && ( response == false ) ) { /* ModbusPDUReadFileRecordRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_file_record_request;
@@@ -1007,97 -1077,104 +1007,97 @@@ if( ( errorFlag == false ) && ( functio
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x0C ) && ( response == true ) ) { /* ModbusPDUGetComEventLogResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_get_com_event_log_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Simple Field (status)
 -    uint16_t status = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &status);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_get_com_event_log_response_status = status;
 -
 -
 -                    
 -    // Simple Field (eventCount)
 -    uint16_t eventCount = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &eventCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_get_com_event_log_response_event_count = eventCount;
 -
 -
 -                    
 -    // Simple Field (messageCount)
 -    uint16_t messageCount = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &messageCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->modbus_pdu_get_com_event_log_response_message_count = messageCount;
 -
 -
 -                    
 -    // Array field (events)
 -    plc4c_list* events = NULL;
 -    plc4c_utils_list_create(&events);
 -    if(events == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) (byteCount) - (6);
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(events, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Simple Field (status)
 +  uint16_t status = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &status);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_get_com_event_log_response_status = status;
 +
 +
 +  // Simple Field (eventCount)
 +  uint16_t eventCount = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &eventCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_get_com_event_log_response_event_count = eventCount;
 +
 +
 +  // Simple Field (messageCount)
 +  uint16_t messageCount = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &messageCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->modbus_pdu_get_com_event_log_response_message_count = messageCount;
 +
 +
 +  // Array field (events)
 +  plc4c_list* events = NULL;
 +  plc4c_utils_list_create(&events);
 +  if(events == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) (byteCount) - (6);
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(events, _value);
      }
 -    (*_message)->modbus_pdu_get_com_event_log_response_events = events;
 -
 +  }
 +  (*_message)->modbus_pdu_get_com_event_log_response_events = events;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x11 ) && ( response == false ) ) { /* ModbusPDUReportServerIdRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_report_server_id_request;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x11 ) && ( response == true ) ) { /* ModbusPDUReportServerIdResponse */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_report_server_id_response;
 -                    
 -    // Implicit Field (byteCount) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t byteCount = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -
 -
 -                    
 -    // Array field (value)
 -    plc4c_list* value = NULL;
 -    plc4c_utils_list_create(&value);
 -    if(value == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) byteCount;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        char* _value = malloc(sizeof(char));
 -        _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(value, _value);
 +
 +  // Implicit Field (byteCount) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t byteCount = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &byteCount);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +
 +
 +  // Array field (value)
 +  plc4c_list* value = NULL;
 +  plc4c_utils_list_create(&value);
 +  if(value == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) byteCount;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      char* _value = malloc(sizeof(char));
 +      _res = plc4c_spi_read_char(readBuffer, (char*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(value, _value);
      }
 -    (*_message)->modbus_pdu_report_server_id_response_value = value;
 -
 +  }
 +  (*_message)->modbus_pdu_report_server_id_response_value = value;
    } else 
  if( ( errorFlag == false ) && ( functionFlag == 0x2B ) && ( response == false ) ) { /* ModbusPDUReadDeviceIdentificationRequest */
      (*_message)->_type = plc4c_modbus_read_write_modbus_pdu_type_plc4c_modbus_read_write_modbus_pdu_read_device_identification_request;
diff --cc plc4c/generated-sources/s7/src/cotp_packet.c
index 877437f,53bc913..1269d02
--- a/plc4c/generated-sources/s7/src/cotp_packet.c
+++ b/plc4c/generated-sources/s7/src/cotp_packet.c
@@@ -133,10 -133,10 +133,10 @@@ if( tpduCode == 0xE0 ) { /* COTPPacketC
      if(_res != OK) {
        return _res;
      }
 -    (*_message)->cotp_packet_connection_request_protocol_class = *protocolClass;
 +    (*_message)->cotp_packet_connection_request_protocol_class = protocolClass;
  
    } else 
-   if(tpduCode == 0xD0) { /* COTPPacketConnectionResponse */
+ if( tpduCode == 0xD0 ) { /* COTPPacketConnectionResponse */
      (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_plc4c_s7_read_write_cotp_packet_connection_response;
                      
      // Simple Field (destinationReference)
@@@ -165,10 -165,10 +165,10 @@@
      if(_res != OK) {
        return _res;
      }
 -    (*_message)->cotp_packet_connection_response_protocol_class = *protocolClass;
 +    (*_message)->cotp_packet_connection_response_protocol_class = protocolClass;
  
    } else 
-   if(tpduCode == 0x80) { /* COTPPacketDisconnectRequest */
+ if( tpduCode == 0x80 ) { /* COTPPacketDisconnectRequest */
      (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_plc4c_s7_read_write_cotp_packet_disconnect_request;
                      
      // Simple Field (destinationReference)
@@@ -197,10 -197,10 +197,10 @@@
      if(_res != OK) {
        return _res;
      }
 -    (*_message)->cotp_packet_disconnect_request_protocol_class = *protocolClass;
 +    (*_message)->cotp_packet_disconnect_request_protocol_class = protocolClass;
  
    } else 
-   if(tpduCode == 0xC0) { /* COTPPacketDisconnectResponse */
+ if( tpduCode == 0xC0 ) { /* COTPPacketDisconnectResponse */
      (*_message)->_type = plc4c_s7_read_write_cotp_packet_type_plc4c_s7_read_write_cotp_packet_disconnect_response;
                      
      // Simple Field (destinationReference)
diff --cc plc4c/generated-sources/s7/src/cotp_parameter.c
index 95b7cd4,2bfe285..a3fd60d
--- a/plc4c/generated-sources/s7/src/cotp_parameter.c
+++ b/plc4c/generated-sources/s7/src/cotp_parameter.c
@@@ -89,10 -89,10 +89,10 @@@ if( parameterType == 0xC0 ) { /* COTPPa
      if(_res != OK) {
        return _res;
      }
 -    (*_message)->cotp_parameter_tpdu_size_tpdu_size = *tpduSize;
 +    (*_message)->cotp_parameter_tpdu_size_tpdu_size = tpduSize;
  
    } else 
-   if(parameterType == 0xC1) { /* COTPParameterCallingTsap */
+ if( parameterType == 0xC1 ) { /* COTPParameterCallingTsap */
      (*_message)->_type = plc4c_s7_read_write_cotp_parameter_type_plc4c_s7_read_write_cotp_parameter_calling_tsap;
                      
      // Simple Field (tsapId)
diff --cc plc4c/generated-sources/s7/src/cotp_protocol_class.c
index b0005d0,cd95b14..d7e3d4f
--- a/plc4c/generated-sources/s7/src/cotp_protocol_class.c
+++ b/plc4c/generated-sources/s7/src/cotp_protocol_class.c
@@@ -30,45 -30,17 +30,45 @@@ plc4c_s7_read_write_cotp_protocol_clas
    return plc4c_s7_read_write_cotp_protocol_class_null_const;
  }
  
 -// Parse function.
 -plc4c_return_code plc4c_s7_read_write_cotp_protocol_class_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_cotp_protocol_class** _message) {
 -    plc4c_return_code _res = OK;
 +int8_t plc4c_s7_read_write_cotp_protocol_class_get_value(plc4c_s7_read_write_cotp_protocol_class value) {
 +    switch(value) {
 +        case plc4c_s7_read_write_cotp_protocol_class_CLASS_0:
 +            return (int8_t) 0x00;
 +        case plc4c_s7_read_write_cotp_protocol_class_CLASS_1:
 +            return (int8_t) 0x10;
 +        case plc4c_s7_read_write_cotp_protocol_class_CLASS_2:
 +            return (int8_t) 0x20;
 +        case plc4c_s7_read_write_cotp_protocol_class_CLASS_3:
 +            return (int8_t) 0x30;
 +        case plc4c_s7_read_write_cotp_protocol_class_CLASS_4:
 +            return (int8_t) 0x40;
 +    }
 +    return 0;
 +}
  
 -    // Allocate enough memory to contain this data structure.
 -    (*_message) = malloc(sizeof(plc4c_s7_read_write_cotp_protocol_class));
 -    if(*_message == NULL) {
 -        return NO_MEMORY;
 +plc4c_s7_read_write_cotp_protocol_class plc4c_s7_read_write_cotp_protocol_class_for_value(int8_t value) {
 +    switch(value) {
 +        case (int8_t) 0x00:
 +            return plc4c_s7_read_write_cotp_protocol_class_CLASS_0;
 +        case (int8_t) 0x10:
 +            return plc4c_s7_read_write_cotp_protocol_class_CLASS_1;
 +        case (int8_t) 0x20:
 +            return plc4c_s7_read_write_cotp_protocol_class_CLASS_2;
 +        case (int8_t) 0x30:
 +            return plc4c_s7_read_write_cotp_protocol_class_CLASS_3;
 +        case (int8_t) 0x40:
 +            return plc4c_s7_read_write_cotp_protocol_class_CLASS_4;
      }
 +    return 0;
 +}
 +
 +    // Parse function.
 +plc4c_return_code plc4c_s7_read_write_cotp_protocol_class_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_cotp_protocol_class* _message) {
 +    plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) *_message);
 +    int8_t value;
-     _res = plc4c_spi_read_signed_byte(readBuffer, 8, (int8_t*) &value);
++    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
 +    *_message = plc4c_s7_read_write_cotp_protocol_class_for_value(value);
  
      return _res;
  }
@@@ -76,8 -48,7 +76,8 @@@
  plc4c_return_code plc4c_s7_read_write_cotp_protocol_class_serialize(plc4c_spi_write_buffer* writeBuffer, plc4c_s7_read_write_cotp_protocol_class* _message) {
      plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, *_message);
 +    int8_t value = plc4c_s7_read_write_cotp_protocol_class_get_value(*_message);
-     _res = plc4c_spi_write_signed_byte(writeBuffer, 8, value);
++    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, value);
  
      return _res;
  }
diff --cc plc4c/generated-sources/s7/src/cotp_tpdu_size.c
index c15405e,a3971fe..63f11af
--- a/plc4c/generated-sources/s7/src/cotp_tpdu_size.c
+++ b/plc4c/generated-sources/s7/src/cotp_tpdu_size.c
@@@ -30,53 -30,17 +30,53 @@@ plc4c_s7_read_write_cotp_tpdu_size plc4
    return plc4c_s7_read_write_cotp_tpdu_size_null_const;
  }
  
 -// Parse function.
 -plc4c_return_code plc4c_s7_read_write_cotp_tpdu_size_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_cotp_tpdu_size** _message) {
 -    plc4c_return_code _res = OK;
 +int8_t plc4c_s7_read_write_cotp_tpdu_size_get_value(plc4c_s7_read_write_cotp_tpdu_size value) {
 +    switch(value) {
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_128:
 +            return (int8_t) 0x07;
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_256:
 +            return (int8_t) 0x08;
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_512:
 +            return (int8_t) 0x09;
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_1024:
 +            return (int8_t) 0x0a;
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_2048:
 +            return (int8_t) 0x0b;
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_4096:
 +            return (int8_t) 0x0c;
 +        case plc4c_s7_read_write_cotp_tpdu_size_SIZE_8192:
 +            return (int8_t) 0x0d;
 +    }
 +    return 0;
 +}
  
 -    // Allocate enough memory to contain this data structure.
 -    (*_message) = malloc(sizeof(plc4c_s7_read_write_cotp_tpdu_size));
 -    if(*_message == NULL) {
 -        return NO_MEMORY;
 +plc4c_s7_read_write_cotp_tpdu_size plc4c_s7_read_write_cotp_tpdu_size_for_value(int8_t value) {
 +    switch(value) {
 +        case (int8_t) 0x07:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_128;
 +        case (int8_t) 0x08:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_256;
 +        case (int8_t) 0x09:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_512;
 +        case (int8_t) 0x0a:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_1024;
 +        case (int8_t) 0x0b:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_2048;
 +        case (int8_t) 0x0c:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_4096;
 +        case (int8_t) 0x0d:
 +            return plc4c_s7_read_write_cotp_tpdu_size_SIZE_8192;
      }
 +    return 0;
 +}
 +
 +    // Parse function.
 +plc4c_return_code plc4c_s7_read_write_cotp_tpdu_size_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_cotp_tpdu_size* _message) {
 +    plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) *_message);
 +    int8_t value;
-     _res = plc4c_spi_read_signed_byte(readBuffer, 8, (int8_t*) &value);
++    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
 +    *_message = plc4c_s7_read_write_cotp_tpdu_size_for_value(value);
  
      return _res;
  }
@@@ -84,8 -48,7 +84,8 @@@
  plc4c_return_code plc4c_s7_read_write_cotp_tpdu_size_serialize(plc4c_spi_write_buffer* writeBuffer, plc4c_s7_read_write_cotp_tpdu_size* _message) {
      plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, *_message);
 +    int8_t value = plc4c_s7_read_write_cotp_tpdu_size_get_value(*_message);
-     _res = plc4c_spi_write_signed_byte(writeBuffer, 8, value);
++    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, value);
  
      return _res;
  }
diff --cc plc4c/generated-sources/s7/src/device_group.c
index 5c6d0f0,f9d61ec..02ea0e4
--- a/plc4c/generated-sources/s7/src/device_group.c
+++ b/plc4c/generated-sources/s7/src/device_group.c
@@@ -30,37 -30,17 +30,37 @@@ plc4c_s7_read_write_device_group plc4c_
    return plc4c_s7_read_write_device_group_null_const;
  }
  
 -// Parse function.
 -plc4c_return_code plc4c_s7_read_write_device_group_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_device_group** _message) {
 -    plc4c_return_code _res = OK;
 +int8_t plc4c_s7_read_write_device_group_get_value(plc4c_s7_read_write_device_group value) {
 +    switch(value) {
 +        case plc4c_s7_read_write_device_group_PG_OR_PC:
 +            return (int8_t) 0x01;
 +        case plc4c_s7_read_write_device_group_OS:
 +            return (int8_t) 0x02;
 +        case plc4c_s7_read_write_device_group_OTHERS:
 +            return (int8_t) 0x03;
 +    }
 +    return 0;
 +}
  
 -    // Allocate enough memory to contain this data structure.
 -    (*_message) = malloc(sizeof(plc4c_s7_read_write_device_group));
 -    if(*_message == NULL) {
 -        return NO_MEMORY;
 +plc4c_s7_read_write_device_group plc4c_s7_read_write_device_group_for_value(int8_t value) {
 +    switch(value) {
 +        case (int8_t) 0x01:
 +            return plc4c_s7_read_write_device_group_PG_OR_PC;
 +        case (int8_t) 0x02:
 +            return plc4c_s7_read_write_device_group_OS;
 +        case (int8_t) 0x03:
 +            return plc4c_s7_read_write_device_group_OTHERS;
      }
 +    return 0;
 +}
 +
 +    // Parse function.
 +plc4c_return_code plc4c_s7_read_write_device_group_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_device_group* _message) {
 +    plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) *_message);
 +    int8_t value;
-     _res = plc4c_spi_read_signed_byte(readBuffer, 8, (int8_t*) &value);
++    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
 +    *_message = plc4c_s7_read_write_device_group_for_value(value);
  
      return _res;
  }
@@@ -68,8 -48,7 +68,8 @@@
  plc4c_return_code plc4c_s7_read_write_device_group_serialize(plc4c_spi_write_buffer* writeBuffer, plc4c_s7_read_write_device_group* _message) {
      plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, *_message);
 +    int8_t value = plc4c_s7_read_write_device_group_get_value(*_message);
-     _res = plc4c_spi_write_signed_byte(writeBuffer, 8, value);
++    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, value);
  
      return _res;
  }
diff --cc plc4c/generated-sources/s7/src/s7_data_alarm_message.c
index d9d39c9,71cb236..a75f067
--- a/plc4c/generated-sources/s7/src/s7_data_alarm_message.c
+++ b/plc4c/generated-sources/s7/src/s7_data_alarm_message.c
@@@ -98,47 -98,63 +98,47 @@@ plc4c_return_code plc4c_s7_read_write_s
      // throw new ParseException("Expected constant value " + PLC4C_S7_READ_WRITE_S7_DATA_ALARM_MESSAGE_NUMBER_MESSAGE_OBJ + " but got " + numberMessageObj);
    }
  
-   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
  if( cpuFunctionType == 0x04 ) { /* S7MessageObjectRequest */
      (*_message)->_type = plc4c_s7_read_write_s7_data_alarm_message_type_plc4c_s7_read_write_s7_message_object_request;
 -                    
 -    // Const Field (variableSpec)
 -    uint8_t variableSpec = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &variableSpec);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    if(variableSpec != PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_VARIABLE_SPEC()) {
 -      return PARSE_ERROR;
 -      // throw new ParseException("Expected constant value " + PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_VARIABLE_SPEC + " but got " + variableSpec);
 -    }
  
 +  // Const Field (variableSpec)
 +  uint8_t variableSpec = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &variableSpec);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  if(variableSpec != PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_VARIABLE_SPEC()) {
 +    return PARSE_ERROR;
 +    // throw new ParseException("Expected constant value " + PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_VARIABLE_SPEC + " but got " + variableSpec);
 +  }
  
 -                    
 -    // Const Field (length)
 -    uint8_t length = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &length);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    if(length != PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_LENGTH()) {
 -      return PARSE_ERROR;
 -      // throw new ParseException("Expected constant value " + PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_LENGTH + " but got " + length);
 -    }
  
 +  // Const Field (length)
 +  uint8_t length = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &length);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  if(length != PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_LENGTH()) {
 +    return PARSE_ERROR;
 +    // throw new ParseException("Expected constant value " + PLC4C_S7_READ_WRITE_S7_MESSAGE_OBJECT_REQUEST_LENGTH + " but got " + length);
 +  }
  
 -                    
 -    // Simple Field (syntaxId)
 -    plc4c_s7_read_write_syntax_id_type* syntaxId;
 -    _res = plc4c_s7_read_write_syntax_id_type_parse(readBuffer, (void*) &syntaxId);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_message_object_request_syntax_id = *syntaxId;
 -
 -
 -                    
 -    // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 -    {
 -      uint8_t _reserved = 0;
 -      _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &_reserved);
 -      if(_res != OK) {
 -        return _res;
 -      }
 -      if(_reserved != 0x00) {
 -        printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, _reserved);
 -      }
 -    }
  
 +  // Simple Field (syntaxId)
 +  plc4c_s7_read_write_syntax_id_type syntaxId;
 +  _res = plc4c_s7_read_write_syntax_id_type_parse(readBuffer, (void*) &syntaxId);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_message_object_request_syntax_id = syntaxId;
  
 -                    
 -    // Simple Field (queryType)
 -    plc4c_s7_read_write_query_type* queryType;
 -    _res = plc4c_s7_read_write_query_type_parse(readBuffer, (void*) &queryType);
 +
 +  // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 +  {
 +    uint8_t _reserved = 0;
 +    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &_reserved);
      if(_res != OK) {
        return _res;
      }
diff --cc plc4c/generated-sources/s7/src/s7_parameter.c
index 62f0908,9b0aec7..ccff44e
--- a/plc4c/generated-sources/s7/src/s7_parameter.c
+++ b/plc4c/generated-sources/s7/src/s7_parameter.c
@@@ -76,14 -76,27 +76,14 @@@ plc4c_return_code plc4c_s7_read_write_s
      return _res;
    }
  
-   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
  if( parameterType == 0xF0 ) { /* S7ParameterSetupCommunication */
      (*_message)->_type = plc4c_s7_read_write_s7_parameter_type_plc4c_s7_read_write_s7_parameter_setup_communication;
 -                    
 -    // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 -    {
 -      uint8_t _reserved = 0;
 -      _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &_reserved);
 -      if(_res != OK) {
 -        return _res;
 -      }
 -      if(_reserved != 0x00) {
 -        printf("Expected constant value '%d' but got '%d' for reserved field.", 0x00, _reserved);
 -      }
 -    }
 -
  
 -                    
 -    // Simple Field (maxAmqCaller)
 -    uint16_t maxAmqCaller = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &maxAmqCaller);
 +  // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 +  {
 +    uint8_t _reserved = 0;
 +    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &_reserved);
      if(_res != OK) {
        return _res;
      }
diff --cc plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
index 6aa74cb,2565395..399c51e
--- a/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
+++ b/plc4c/generated-sources/s7/src/s7_parameter_user_data_item.c
@@@ -64,11 -64,11 +64,11 @@@ plc4c_return_code plc4c_s7_read_write_s
      return _res;
    }
  
-   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-   if(itemType == 0x12) { /* S7ParameterUserDataItemCPUFunctions */
+     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+ if( itemType == 0x12 ) { /* S7ParameterUserDataItemCPUFunctions */
      (*_message)->_type = plc4c_s7_read_write_s7_parameter_user_data_item_type_plc4c_s7_read_write_s7_parameter_user_data_item_cpu_functions;
                      
 -    // Implicit Field (itemLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 +    // Implicit Field (itemLength) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
      uint8_t itemLength = 0;
      _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &itemLength);
      if(_res != OK) {
diff --cc plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
index 3dde04e,92f2173..a8848c5
--- a/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
+++ b/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
@@@ -100,6 -100,14 +100,10 @@@ static const uint8_t PLC4C_S7_READ_WRIT
  uint8_t PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_LENGTH() {
    return PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_LENGTH_const;
  }
+ static const uint8_t PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_RESPONSE_NUMBER_MESSAGE_OBJ_const = 0x01;
+ uint8_t PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_RESPONSE_NUMBER_MESSAGE_OBJ() {
+   return PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_RESPONSE_NUMBER_MESSAGE_OBJ_const;
+ }
 -static const uint8_t PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_VARIABLE_SPEC_const = 0x12;
 -uint8_t PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_VARIABLE_SPEC() {
 -  return PLC4C_S7_READ_WRITE_S7_PAYLOAD_USER_DATA_ITEM_CPU_FUNCTION_ALARM_QUERY_VARIABLE_SPEC_const;
 -}
  
  // Parse function.
  plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_read_buffer* readBuffer, uint8_t cpuFunctionType, uint8_t cpuSubfunction, plc4c_s7_read_write_s7_payload_user_data_item** _message) {
@@@ -135,71 -143,78 +139,71 @@@
      return _res;
    }
  
-   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
  if( ( cpuFunctionType == 0x00 ) && ( cpuSubfunction == 0x03 ) ) { /* S7PayloadDiagnosticMessage */
      (*_message)->_type = plc4c_s7_read_write_s7_payload_user_data_item_type_plc4c_s7_read_write_s7_payload_diagnostic_message;
 -                    
 -    // Simple Field (EventId)
 -    uint16_t EventId = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &EventId);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_event_id = EventId;
  
 +  // Simple Field (EventId)
 +  uint16_t EventId = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &EventId);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_event_id = EventId;
  
 -                    
 -    // Simple Field (PriorityClass)
 -    uint8_t PriorityClass = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &PriorityClass);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_priority_class = PriorityClass;
  
 +  // Simple Field (PriorityClass)
 +  uint8_t PriorityClass = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &PriorityClass);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_priority_class = PriorityClass;
  
 -                    
 -    // Simple Field (ObNumber)
 -    uint8_t ObNumber = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &ObNumber);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_ob_number = ObNumber;
  
 +  // Simple Field (ObNumber)
 +  uint8_t ObNumber = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &ObNumber);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_ob_number = ObNumber;
  
 -                    
 -    // Simple Field (DatId)
 -    uint16_t DatId = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &DatId);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_dat_id = DatId;
  
 +  // Simple Field (DatId)
 +  uint16_t DatId = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &DatId);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_dat_id = DatId;
  
 -                    
 -    // Simple Field (Info1)
 -    uint16_t Info1 = 0;
 -    _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &Info1);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_info1 = Info1;
  
 +  // Simple Field (Info1)
 +  uint16_t Info1 = 0;
 +  _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &Info1);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_info1 = Info1;
  
 -                    
 -    // Simple Field (Info2)
 -    uint32_t Info2 = 0;
 -    _res = plc4c_spi_read_unsigned_int(readBuffer, 32, (uint32_t*) &Info2);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_info2 = Info2;
  
 +  // Simple Field (Info2)
 +  uint32_t Info2 = 0;
 +  _res = plc4c_spi_read_unsigned_int(readBuffer, 32, (uint32_t*) &Info2);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_info2 = Info2;
  
 -                    
 -    // Simple Field (TimeStamp)
 -    plc4c_s7_read_write_date_and_time* TimeStamp;
 -    _res = plc4c_s7_read_write_date_and_time_parse(readBuffer, (void*) &TimeStamp);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_diagnostic_message_time_stamp = TimeStamp;
  
 +  // Simple Field (TimeStamp)
 +  plc4c_s7_read_write_date_and_time* TimeStamp;
 +  _res = plc4c_s7_read_write_date_and_time_parse(readBuffer, (void*) &TimeStamp);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_diagnostic_message_time_stamp = TimeStamp;
    } else 
  if( ( cpuFunctionType == 0x00 ) && ( cpuSubfunction == 0x05 ) ) { /* S7PayloadAlarm8 */
      (*_message)->_type = plc4c_s7_read_write_s7_payload_user_data_item_type_plc4c_s7_read_write_s7_payload_alarm8;
@@@ -537,44 -581,47 +541,44 @@@ if( ( cpuFunctionType == 0x04 ) && ( cp
    } else 
  if( ( cpuFunctionType == 0x08 ) && ( cpuSubfunction == 0x0b ) ) { /* S7PayloadUserDataItemCpuFunctionAlarmAckResponse */
      (*_message)->_type = plc4c_s7_read_write_s7_payload_user_data_item_type_plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_alarm_ack_response;
 -                    
 -    // Simple Field (functionId)
 -    uint8_t functionId = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &functionId);
 -    if(_res != OK) {
 -      return _res;
 -    }
 -    (*_message)->s7_payload_user_data_item_cpu_function_alarm_ack_response_function_id = functionId;
 +
 +  // Simple Field (functionId)
 +  uint8_t functionId = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &functionId);
 +  if(_res != OK) {
 +    return _res;
 +  }
 +  (*_message)->s7_payload_user_data_item_cpu_function_alarm_ack_response_function_id = functionId;
  
  
 -                    
 -    // Implicit Field (numberOfObjects) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 -    uint8_t numberOfObjects = 0;
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &numberOfObjects);
 -    if(_res != OK) {
 -      return _res;
 -    }
 +  // Implicit Field (numberOfObjects) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 +  uint8_t numberOfObjects = 0;
 +  _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &numberOfObjects);
 +  if(_res != OK) {
 +    return _res;
 +  }
  
  
 -                    
 -    // Array field (messageObjects)
 -    plc4c_list* messageObjects = NULL;
 -    plc4c_utils_list_create(&messageObjects);
 -    if(messageObjects == NULL) {
 -      return NO_MEMORY;
 -    }
 -    {
 -      // Count array
 -      uint16_t itemCount = (uint16_t) numberOfObjects;
 -      for(int curItem = 0; curItem < itemCount; curItem++) {
 -        
 -        uint8_t* _value = malloc(sizeof(uint8_t));
 -        _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) _value);
 -        if(_res != OK) {
 -          return _res;
 -        }
 -        plc4c_utils_list_insert_head_value(messageObjects, _value);
 +  // Array field (messageObjects)
 +  plc4c_list* messageObjects = NULL;
 +  plc4c_utils_list_create(&messageObjects);
 +  if(messageObjects == NULL) {
 +    return NO_MEMORY;
 +  }
 +  {
 +    // Count array
 +    uint16_t itemCount = (uint16_t) numberOfObjects;
 +    for(int curItem = 0; curItem < itemCount; curItem++) {
-       
++
 +      uint8_t* _value = malloc(sizeof(uint8_t));
 +      _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) _value);
 +      if(_res != OK) {
 +        return _res;
        }
 +      plc4c_utils_list_insert_head_value(messageObjects, _value);
      }
 -    (*_message)->s7_payload_user_data_item_cpu_function_alarm_ack_response_message_objects = messageObjects;
 -
 +  }
 +  (*_message)->s7_payload_user_data_item_cpu_function_alarm_ack_response_message_objects = messageObjects;
    } else 
  if( ( cpuFunctionType == 0x04 ) && ( cpuSubfunction == 0x13 ) ) { /* S7PayloadUserDataItemCpuFunctionAlarmQuery */
      (*_message)->_type = plc4c_s7_read_write_s7_payload_user_data_item_type_plc4c_s7_read_write_s7_payload_user_data_item_cpu_function_alarm_query;
diff --cc plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
index 33beaa0,13589f7..0460f7f
--- a/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
+++ b/plc4c/generated-sources/s7/src/s7_var_request_parameter_item.c
@@@ -64,11 -64,11 +64,11 @@@ plc4c_return_code plc4c_s7_read_write_s
      return _res;
    }
  
-   // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-   if(itemType == 0x12) { /* S7VarRequestParameterItemAddress */
+     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+ if( itemType == 0x12 ) { /* S7VarRequestParameterItemAddress */
      (*_message)->_type = plc4c_s7_read_write_s7_var_request_parameter_item_type_plc4c_s7_read_write_s7_var_request_parameter_item_address;
                      
 -    // Implicit Field (itemLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 +    // Implicit Field (itemLength) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
      uint8_t itemLength = 0;
      _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &itemLength);
      if(_res != OK) {
diff --cc plc4c/generated-sources/s7/src/transport_size.c
index 7a1f4fb,c6e3738..eceb20b
--- a/plc4c/generated-sources/s7/src/transport_size.c
+++ b/plc4c/generated-sources/s7/src/transport_size.c
@@@ -31,129 -31,17 +31,129 @@@ plc4c_s7_read_write_transport_size plc4
    return plc4c_s7_read_write_transport_size_null_const;
  }
  
 -// Parse function.
 -plc4c_return_code plc4c_s7_read_write_transport_size_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_transport_size** _message) {
 -    plc4c_return_code _res = OK;
 +int8_t plc4c_s7_read_write_transport_size_get_value(plc4c_s7_read_write_transport_size value) {
 +    switch(value) {
 +        case plc4c_s7_read_write_transport_size_BOOL:
 +            return (int8_t) 0x01;
 +        case plc4c_s7_read_write_transport_size_BYTE:
 +            return (int8_t) 0x02;
 +        case plc4c_s7_read_write_transport_size_WORD:
 +            return (int8_t) 0x03;
 +        case plc4c_s7_read_write_transport_size_DWORD:
 +            return (int8_t) 0x04;
 +        case plc4c_s7_read_write_transport_size_LWORD:
 +            return (int8_t) 0x05;
 +        case plc4c_s7_read_write_transport_size_INT:
 +            return (int8_t) 0x06;
 +        case plc4c_s7_read_write_transport_size_UINT:
 +            return (int8_t) 0x07;
 +        case plc4c_s7_read_write_transport_size_SINT:
 +            return (int8_t) 0x08;
 +        case plc4c_s7_read_write_transport_size_USINT:
 +            return (int8_t) 0x09;
 +        case plc4c_s7_read_write_transport_size_DINT:
 +            return (int8_t) 0x0A;
 +        case plc4c_s7_read_write_transport_size_UDINT:
 +            return (int8_t) 0x0B;
 +        case plc4c_s7_read_write_transport_size_LINT:
 +            return (int8_t) 0x0C;
 +        case plc4c_s7_read_write_transport_size_ULINT:
 +            return (int8_t) 0x0D;
 +        case plc4c_s7_read_write_transport_size_REAL:
 +            return (int8_t) 0x0E;
 +        case plc4c_s7_read_write_transport_size_LREAL:
 +            return (int8_t) 0x0F;
 +        case plc4c_s7_read_write_transport_size_CHAR:
 +            return (int8_t) 0x10;
 +        case plc4c_s7_read_write_transport_size_WCHAR:
 +            return (int8_t) 0x11;
 +        case plc4c_s7_read_write_transport_size_STRING:
 +            return (int8_t) 0x12;
 +        case plc4c_s7_read_write_transport_size_WSTRING:
 +            return (int8_t) 0x13;
 +        case plc4c_s7_read_write_transport_size_TIME:
 +            return (int8_t) 0x14;
 +        case plc4c_s7_read_write_transport_size_LTIME:
 +            return (int8_t) 0x16;
 +        case plc4c_s7_read_write_transport_size_DATE:
 +            return (int8_t) 0x17;
 +        case plc4c_s7_read_write_transport_size_TIME_OF_DAY:
 +            return (int8_t) 0x18;
 +        case plc4c_s7_read_write_transport_size_TOD:
 +            return (int8_t) 0x19;
 +        case plc4c_s7_read_write_transport_size_DATE_AND_TIME:
 +            return (int8_t) 0x1A;
 +        case plc4c_s7_read_write_transport_size_DT:
 +            return (int8_t) 0x1B;
 +    }
 +    return 0;
 +}
  
 -    // Allocate enough memory to contain this data structure.
 -    (*_message) = malloc(sizeof(plc4c_s7_read_write_transport_size));
 -    if(*_message == NULL) {
 -        return NO_MEMORY;
 +plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_for_value(int8_t value) {
 +    switch(value) {
 +        case (int8_t) 0x01:
 +            return plc4c_s7_read_write_transport_size_BOOL;
 +        case (int8_t) 0x02:
 +            return plc4c_s7_read_write_transport_size_BYTE;
 +        case (int8_t) 0x03:
 +            return plc4c_s7_read_write_transport_size_WORD;
 +        case (int8_t) 0x04:
 +            return plc4c_s7_read_write_transport_size_DWORD;
 +        case (int8_t) 0x05:
 +            return plc4c_s7_read_write_transport_size_LWORD;
 +        case (int8_t) 0x06:
 +            return plc4c_s7_read_write_transport_size_INT;
 +        case (int8_t) 0x07:
 +            return plc4c_s7_read_write_transport_size_UINT;
 +        case (int8_t) 0x08:
 +            return plc4c_s7_read_write_transport_size_SINT;
 +        case (int8_t) 0x09:
 +            return plc4c_s7_read_write_transport_size_USINT;
 +        case (int8_t) 0x0A:
 +            return plc4c_s7_read_write_transport_size_DINT;
 +        case (int8_t) 0x0B:
 +            return plc4c_s7_read_write_transport_size_UDINT;
 +        case (int8_t) 0x0C:
 +            return plc4c_s7_read_write_transport_size_LINT;
 +        case (int8_t) 0x0D:
 +            return plc4c_s7_read_write_transport_size_ULINT;
 +        case (int8_t) 0x0E:
 +            return plc4c_s7_read_write_transport_size_REAL;
 +        case (int8_t) 0x0F:
 +            return plc4c_s7_read_write_transport_size_LREAL;
 +        case (int8_t) 0x10:
 +            return plc4c_s7_read_write_transport_size_CHAR;
 +        case (int8_t) 0x11:
 +            return plc4c_s7_read_write_transport_size_WCHAR;
 +        case (int8_t) 0x12:
 +            return plc4c_s7_read_write_transport_size_STRING;
 +        case (int8_t) 0x13:
 +            return plc4c_s7_read_write_transport_size_WSTRING;
 +        case (int8_t) 0x14:
 +            return plc4c_s7_read_write_transport_size_TIME;
 +        case (int8_t) 0x16:
 +            return plc4c_s7_read_write_transport_size_LTIME;
 +        case (int8_t) 0x17:
 +            return plc4c_s7_read_write_transport_size_DATE;
 +        case (int8_t) 0x18:
 +            return plc4c_s7_read_write_transport_size_TIME_OF_DAY;
 +        case (int8_t) 0x19:
 +            return plc4c_s7_read_write_transport_size_TOD;
 +        case (int8_t) 0x1A:
 +            return plc4c_s7_read_write_transport_size_DATE_AND_TIME;
 +        case (int8_t) 0x1B:
 +            return plc4c_s7_read_write_transport_size_DT;
      }
 +    return 0;
 +}
 +
 +    // Parse function.
 +plc4c_return_code plc4c_s7_read_write_transport_size_parse(plc4c_spi_read_buffer* readBuffer, plc4c_s7_read_write_transport_size* _message) {
 +    plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) *_message);
 +    int8_t value;
-     _res = plc4c_spi_read_signed_byte(readBuffer, 8, (int8_t*) &value);
++    _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
 +    *_message = plc4c_s7_read_write_transport_size_for_value(value);
  
      return _res;
  }
@@@ -161,8 -49,7 +161,8 @@@
  plc4c_return_code plc4c_s7_read_write_transport_size_serialize(plc4c_spi_write_buffer* writeBuffer, plc4c_s7_read_write_transport_size* _message) {
      plc4c_return_code _res = OK;
  
 -    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, *_message);
 +    int8_t value = plc4c_s7_read_write_transport_size_get_value(*_message);
-     _res = plc4c_spi_write_signed_byte(writeBuffer, 8, value);
++    _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, value);
  
      return _res;
  }