You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by ld...@apache.org on 2020/06/24 08:25:19 UTC

[plc4x] branch feature/bacnet-active updated (146acf6 -> da974fe)

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

ldywicki pushed a change to branch feature/bacnet-active
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


 discard 146acf6  Basic test for bacnet live I/O.
     add 0309396  - Started working on the parser and serializer code ...
     add 4727e19  - Major cleanup after getting the compiler to work in CLion
     add 8799494  - Continued implementing the templates for gnerating C parsers/serializers
     add c4648b9  Merge branches 'develop' and 'feature/c-code-generation' of https://gitbox.apache.org/repos/asf/plc4x into feature/c-code-generation
     add c4ce567  - Switched to union structs for discriminated types
     add d9dffb2  - Finished implementing the handling of discriminated values in expressions
     add 8fa97ef  - Greatly refactored the C template helper and moved a lot of functionality into a new BaseFreemarkerLanguageTemplateHelper - Finished support of array fields - Finished supporting static function calls in expressions - Finished supporting enum properties in expressions
     add 6843ffd  - Backported the major changes in the C code-generation back to the java version - Introduced a BaseFreemarkerLanguageTemplateHelper which contains methods usable for multiple code generations - Updated the mspec definitions to now use the discriminators directly
     add de9ef6c  - Continued working on the C code generation -- Fixed a lot of little issues. -- Cleaned up the usage of pointers and no-pointers
     add 0d23c5d  - Refactored the code generation to use pointers for complex types and arrays/lists - Worked on the expression builders to correctly access indexed items of lists
     add 65a8c40  - Fixed the last syntax-error issue (for now) in the code-generation of the parser code.
     add c3d641a  - Added checks for the return codes of parsed sub-types - Added NULL-checks after the malloc of complex types
     add 8e9cfff  - Fixed a big in the generation of enum property generation
     add 81aba3b  - Added some indentation to the generation of fields inside discriminated types
     add 1899fcf  - Started implementing the different types of serializers for the fields (WIP)
     add 3f9ed1f  - Implemented more field types for the serialization
     add d9e7b3b  - Finished implementing the implicit fields - Fixed the generation of the padding code (which used the "serializer"-arg "lastItem") - Added skeletons for the lengthInBytes code.
     add f2b9cad  - Finished implementing the "get_lengh_in_bits" functionality - Made the switch type also save a reference to the enum constant for that type
     add 694c97c  Merge pull request #168 from apache/feature/c-code-generation-tagged-unions
     add f8a7ed9  - Implemented the "typeSwitch" field in the serializer which was still commented out (And did all the required adjustments this mace necessary)
     add 1849c3f  - Fixed some problems related to the refactoring of the discriminators
     add d96a5e8  - Tried to make the build work on Ubuntu
     add 2b8d914  - Tried to make the build work on Ubuntu
     add d1e568a  - Tried to make the build work on Ubuntu
     new 053c24e  Basic test for bacnet live I/O.
     new f1da80e  Revert changes in mspec.
     new da974fe  Small, yet failing, unit tests to test bacnet structures.

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (146acf6)
            \
             N -- N -- N   refs/heads/feature/bacnet-active (da974fe)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 build-utils/language-base-freemarker/pom.xml       |    5 +
 .../BaseFreemarkerLanguageTemplateHelper.java      |  712 ++++++++
 .../freemarker/FreemarkerLanguageOutput.java       |   10 +-
 build-utils/language-c/pom.xml                     |    5 -
 .../apache/plc4x/language/c/CLanguageOutput.java   |    4 +-
 .../plc4x/language/c/CLanguageTemplateHelper.java  |  813 +++++++--
 .../main/resources/templates/c/enum-template.ftlh  |   15 +-
 .../resources/templates/c/pojo-template-c.ftlh     |  620 ++++++-
 .../resources/templates/c/pojo-template-h.ftlh     |  123 +-
 .../plc4x/language/java/JavaLanguageOutput.java    |    4 +-
 .../language/java/JavaLanguageTemplateHelper.java  |  170 +-
 .../resources/templates/java/data-io-template.ftlh |   94 +-
 .../templates/java/enum-package-info-template.ftlh |    8 +
 .../resources/templates/java/enum-template.ftlh    |   39 +-
 .../main/resources/templates/java/io-template.ftlh |  426 +++--
 .../resources/templates/java/pojo-template.ftlh    |  238 ++-
 .../definitions/DefaultDataIoTypeDefinition.java   |    2 +
 .../model/definitions/DefaultTypeDefinition.java   |    6 +
 .../mspec/model/fields/DefaultSwitchField.java     |   10 +-
 .../mspec/parser/MessageFormatListener.java        |    6 +-
 .../test/resources/testsuite/KNXNetIPTestsuite.xml |    2 -
 .../apache/plc4x/java/s7/utils/StaticHelper.java   |    6 +-
 pom.xml                                            |    2 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    |   17 +-
 .../eip/src/main/resources/protocols/eip/eip.mspec |    4 +-
 .../main/resources/protocols/firmata/firmata.mspec |    4 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |    4 +-
 .../main/resources/protocols/modbus/modbus.mspec   |    8 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |    4 +-
 sandbox/plc4c/api/include/plc4c/types.h            |    2 +
 sandbox/plc4c/api/include/plc4c/utils/list.h       |    4 +
 sandbox/plc4c/drivers/modbus/CMakeLists.txt        |    4 +-
 sandbox/plc4c/drivers/s7/CMakeLists.txt            |    4 +-
 .../examples/hello-subsciptions/CMakeLists.txt     |    5 +-
 sandbox/plc4c/examples/hello-world/CMakeLists.txt  |    5 +-
 .../modbus/includes/modbus_constants.h             |   13 +
 .../generated-sources/modbus/includes/modbus_pdu.h |  239 ++-
 .../includes/modbus_pdu_diagnostic_request.h       |   38 -
 .../includes/modbus_pdu_diagnostic_response.h      |   38 -
 .../modbus/includes/modbus_pdu_error.h             |   38 -
 .../modbus_pdu_get_com_event_counter_request.h     |   37 -
 .../modbus_pdu_get_com_event_counter_response.h    |   39 -
 .../modbus_pdu_get_com_event_log_request.h         |   37 -
 .../modbus_pdu_get_com_event_log_response.h        |   41 -
 ...odbus_pdu_mask_write_holding_register_request.h |   40 -
 ...dbus_pdu_mask_write_holding_register_response.h |   40 -
 .../includes/modbus_pdu_read_coils_request.h       |   39 -
 .../includes/modbus_pdu_read_coils_response.h      |   38 -
 ...modbus_pdu_read_device_identification_request.h |   37 -
 ...odbus_pdu_read_device_identification_response.h |   37 -
 .../modbus_pdu_read_discrete_inputs_request.h      |   39 -
 .../modbus_pdu_read_discrete_inputs_response.h     |   38 -
 .../modbus_pdu_read_exception_status_request.h     |   37 -
 .../modbus_pdu_read_exception_status_response.h    |   38 -
 .../includes/modbus_pdu_read_fifo_queue_request.h  |   38 -
 .../includes/modbus_pdu_read_fifo_queue_response.h |   38 -
 .../includes/modbus_pdu_read_file_record_request.h |   39 -
 .../modbus_pdu_read_file_record_request_item.h     |    9 +
 .../modbus_pdu_read_file_record_response.h         |   39 -
 .../modbus_pdu_read_file_record_response_item.h    |   11 +-
 .../modbus_pdu_read_holding_registers_request.h    |   39 -
 .../modbus_pdu_read_holding_registers_response.h   |   38 -
 .../modbus_pdu_read_input_registers_request.h      |   39 -
 .../modbus_pdu_read_input_registers_response.h     |   38 -
 ...read_write_multiple_holding_registers_request.h |   42 -
 ...ead_write_multiple_holding_registers_response.h |   38 -
 .../includes/modbus_pdu_report_server_id_request.h |   37 -
 .../modbus_pdu_report_server_id_response.h         |   38 -
 .../modbus_pdu_write_file_record_request.h         |   39 -
 .../modbus_pdu_write_file_record_request_item.h    |   11 +-
 .../modbus_pdu_write_file_record_response.h        |   39 -
 .../modbus_pdu_write_file_record_response_item.h   |   11 +-
 .../modbus_pdu_write_multiple_coils_request.h      |   40 -
 .../modbus_pdu_write_multiple_coils_response.h     |   39 -
 ..._pdu_write_multiple_holding_registers_request.h |   40 -
 ...pdu_write_multiple_holding_registers_response.h |   39 -
 .../modbus_pdu_write_single_coil_request.h         |   39 -
 .../modbus_pdu_write_single_coil_response.h        |   39 -
 .../modbus_pdu_write_single_register_request.h     |   39 -
 .../modbus_pdu_write_single_register_response.h    |   39 -
 .../modbus/includes/modbus_serial_adu.h            |   11 +-
 .../modbus/includes/modbus_tcp_adu.h               |   15 +-
 .../modbus/src/modbus_constants.c                  |   45 +-
 .../generated-sources/modbus/src/modbus_pdu.c      | 1884 +++++++++++++++++++-
 .../modbus/src/modbus_pdu_diagnostic_request.c     |   24 -
 .../modbus/src/modbus_pdu_diagnostic_response.c    |   24 -
 .../modbus/src/modbus_pdu_error.c                  |   24 -
 .../src/modbus_pdu_get_com_event_counter_request.c |   24 -
 .../modbus_pdu_get_com_event_counter_response.c    |   24 -
 .../src/modbus_pdu_get_com_event_log_request.c     |   24 -
 .../src/modbus_pdu_get_com_event_log_response.c    |   24 -
 ...odbus_pdu_mask_write_holding_register_request.c |   24 -
 ...dbus_pdu_mask_write_holding_register_response.c |   24 -
 .../modbus/src/modbus_pdu_read_coils_request.c     |   24 -
 .../modbus/src/modbus_pdu_read_coils_response.c    |   24 -
 ...modbus_pdu_read_device_identification_request.c |   24 -
 ...odbus_pdu_read_device_identification_response.c |   24 -
 .../src/modbus_pdu_read_discrete_inputs_request.c  |   24 -
 .../src/modbus_pdu_read_discrete_inputs_response.c |   24 -
 .../src/modbus_pdu_read_exception_status_request.c |   24 -
 .../modbus_pdu_read_exception_status_response.c    |   24 -
 .../src/modbus_pdu_read_fifo_queue_request.c       |   24 -
 .../src/modbus_pdu_read_fifo_queue_response.c      |   24 -
 .../src/modbus_pdu_read_file_record_request.c      |   24 -
 .../src/modbus_pdu_read_file_record_request_item.c |   84 +-
 .../src/modbus_pdu_read_file_record_response.c     |   24 -
 .../modbus_pdu_read_file_record_response_item.c    |   83 +-
 .../modbus_pdu_read_holding_registers_request.c    |   24 -
 .../modbus_pdu_read_holding_registers_response.c   |   24 -
 .../src/modbus_pdu_read_input_registers_request.c  |   24 -
 .../src/modbus_pdu_read_input_registers_response.c |   24 -
 ...read_write_multiple_holding_registers_request.c |   24 -
 ...ead_write_multiple_holding_registers_response.c |   24 -
 .../src/modbus_pdu_report_server_id_request.c      |   24 -
 .../src/modbus_pdu_report_server_id_response.c     |   24 -
 .../src/modbus_pdu_write_file_record_request.c     |   24 -
 .../modbus_pdu_write_file_record_request_item.c    |  109 +-
 .../src/modbus_pdu_write_file_record_response.c    |   24 -
 .../modbus_pdu_write_file_record_response_item.c   |  109 +-
 .../src/modbus_pdu_write_multiple_coils_request.c  |   24 -
 .../src/modbus_pdu_write_multiple_coils_response.c |   24 -
 ..._pdu_write_multiple_holding_registers_request.c |   24 -
 ...pdu_write_multiple_holding_registers_response.c |   24 -
 .../src/modbus_pdu_write_single_coil_request.c     |   24 -
 .../src/modbus_pdu_write_single_coil_response.c    |   24 -
 .../src/modbus_pdu_write_single_register_request.c |   24 -
 .../modbus_pdu_write_single_register_response.c    |   24 -
 .../modbus/src/modbus_serial_adu.c                 |  105 +-
 .../generated-sources/modbus/src/modbus_tcp_adu.c  |  100 +-
 .../generated-sources/s7/includes/cotp_packet.h    |   75 +-
 .../s7/includes/cotp_packet_connection_request.h   |   45 -
 .../s7/includes/cotp_packet_connection_response.h  |   45 -
 .../s7/includes/cotp_packet_data.h                 |   43 -
 .../s7/includes/cotp_packet_disconnect_request.h   |   45 -
 .../s7/includes/cotp_packet_disconnect_response.h  |   43 -
 .../s7/includes/cotp_packet_tpdu_error.h           |   43 -
 .../generated-sources/s7/includes/cotp_parameter.h |   55 +-
 .../s7/includes/cotp_parameter_called_tsap.h       |   38 -
 .../s7/includes/cotp_parameter_calling_tsap.h      |   38 -
 .../s7/includes/cotp_parameter_checksum.h          |   38 -
 ...p_parameter_disconnect_additional_information.h |   38 -
 .../s7/includes/cotp_parameter_tpdu_size.h         |   39 -
 .../generated-sources/s7/includes/cotp_tpdu_size.h |    2 +-
 .../generated-sources/s7/includes/s7_address.h     |   41 +-
 .../generated-sources/s7/includes/s7_address_any.h |   45 -
 .../generated-sources/s7/includes/s7_message.h     |   57 +-
 .../s7/includes/s7_message_request.h               |   42 -
 .../s7/includes/s7_message_response.h              |   44 -
 .../s7/includes/s7_message_response_data.h         |   44 -
 .../s7/includes/s7_message_user_data.h             |   42 -
 .../generated-sources/s7/includes/s7_parameter.h   |   64 +-
 .../s7/includes/s7_parameter_read_var_request.h    |   39 -
 .../s7/includes/s7_parameter_read_var_response.h   |   38 -
 .../s7/includes/s7_parameter_setup_communication.h |   40 -
 .../s7/includes/s7_parameter_user_data.h           |   39 -
 .../s7/includes/s7_parameter_user_data_item.h      |   41 +-
 .../s7_parameter_user_data_item_cpu_functions.h    |   45 -
 .../s7/includes/s7_parameter_write_var_request.h   |   39 -
 .../s7/includes/s7_parameter_write_var_response.h  |   38 -
 .../generated-sources/s7/includes/s7_payload.h     |   54 +-
 .../s7/includes/s7_payload_read_var_response.h     |   39 -
 .../s7/includes/s7_payload_user_data.h             |   39 -
 .../s7/includes/s7_payload_user_data_item.h        |   44 +-
 ..._user_data_item_cpu_function_read_szl_request.h |   44 -
 ...user_data_item_cpu_function_read_szl_response.h |   46 -
 .../s7/includes/s7_payload_write_var_request.h     |   39 -
 .../s7/includes/s7_payload_write_var_response.h    |   39 -
 .../s7/includes/s7_var_payload_data_item.h         |   11 +-
 .../s7/includes/s7_var_payload_status_item.h       |    9 +
 .../s7/includes/s7_var_request_parameter_item.h    |   35 +-
 .../s7_var_request_parameter_item_address.h        |   39 -
 .../s7/includes/szl_data_tree_item.h               |   11 +-
 .../plc4c/generated-sources/s7/includes/szl_id.h   |    9 +
 .../generated-sources/s7/includes/tpkt_packet.h    |   15 +-
 .../plc4c/generated-sources/s7/src/cotp_packet.c   |  450 ++++-
 .../s7/src/cotp_packet_connection_request.c        |   24 -
 .../s7/src/cotp_packet_connection_response.c       |   24 -
 .../generated-sources/s7/src/cotp_packet_data.c    |   24 -
 .../s7/src/cotp_packet_disconnect_request.c        |   24 -
 .../s7/src/cotp_packet_disconnect_response.c       |   24 -
 .../s7/src/cotp_packet_tpdu_error.c                |   24 -
 .../generated-sources/s7/src/cotp_parameter.c      |  223 ++-
 .../s7/src/cotp_parameter_called_tsap.c            |   24 -
 .../s7/src/cotp_parameter_calling_tsap.c           |   24 -
 .../s7/src/cotp_parameter_checksum.c               |   24 -
 ...p_parameter_disconnect_additional_information.c |   24 -
 .../s7/src/cotp_parameter_tpdu_size.c              |   24 -
 .../plc4c/generated-sources/s7/src/s7_address.c    |  186 +-
 .../generated-sources/s7/src/s7_address_any.c      |   24 -
 .../plc4c/generated-sources/s7/src/s7_message.c    |  288 ++-
 .../generated-sources/s7/src/s7_message_request.c  |   24 -
 .../generated-sources/s7/src/s7_message_response.c |   24 -
 .../s7/src/s7_message_response_data.c              |   24 -
 .../s7/src/s7_message_user_data.c                  |   24 -
 .../plc4c/generated-sources/s7/src/s7_parameter.c  |  396 +++-
 .../s7/src/s7_parameter_read_var_request.c         |   24 -
 .../s7/src/s7_parameter_read_var_response.c        |   24 -
 .../s7/src/s7_parameter_setup_communication.c      |   24 -
 .../s7/src/s7_parameter_user_data.c                |   24 -
 .../s7/src/s7_parameter_user_data_item.c           |  240 ++-
 .../s7_parameter_user_data_item_cpu_functions.c    |   24 -
 .../s7/src/s7_parameter_write_var_request.c        |   24 -
 .../s7/src/s7_parameter_write_var_response.c       |   24 -
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  277 ++-
 .../s7/src/s7_payload_read_var_response.c          |   24 -
 .../s7/src/s7_payload_user_data.c                  |   24 -
 .../s7/src/s7_payload_user_data_item.c             |  218 ++-
 ..._user_data_item_cpu_function_read_szl_request.c |   24 -
 ...user_data_item_cpu_function_read_szl_response.c |   24 -
 .../s7/src/s7_payload_write_var_request.c          |   24 -
 .../s7/src/s7_payload_write_var_response.c         |   24 -
 .../s7/src/s7_var_payload_data_item.c              |  124 +-
 .../s7/src/s7_var_payload_status_item.c            |   45 +-
 .../s7/src/s7_var_request_parameter_item.c         |  108 +-
 .../s7/src/s7_var_request_parameter_item_address.c |   24 -
 .../generated-sources/s7/src/szl_data_tree_item.c  |  114 +-
 sandbox/plc4c/generated-sources/s7/src/szl_id.c    |   71 +-
 .../plc4c/generated-sources/s7/src/tpkt_packet.c   |   88 +-
 sandbox/plc4c/spi/CMakeLists.txt                   |    4 +
 .../spi/include/plc4c/spi/evaluation_helper.h      |   22 +-
 sandbox/plc4c/spi/include/plc4c/spi/write_buffer.h |    2 +-
 .../plc4c/spi/src/evaluation_helper.c              |   23 +-
 .../bacnetip/protocol/BacNetIpProtocolLogic.java   |    2 +-
 .../java/bacnetip/BACnetCOVSerializerTest.java}    |    8 +-
 .../bacnetip/BACnetStructuresSerializerTest.java}  |    8 +-
 .../testsuite/BACnetCOVSerializerTest.xml          |   27 +-
 .../testsuite/BACnetStructuresSerializerTest.xml   |   93 +
 .../org/apache/plc4x/java/df1/util/DF1Utils.java   |    5 +-
 228 files changed, 8908 insertions(+), 5258 deletions(-)
 create mode 100644 build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_diagnostic_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_error.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_counter_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_get_com_event_log_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_mask_write_holding_register_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_coils_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_device_identification_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_discrete_inputs_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_exception_status_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_fifo_queue_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_file_record_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_holding_registers_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_input_registers_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_read_write_multiple_holding_registers_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_report_server_id_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_file_record_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_coils_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_multiple_holding_registers_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_coil_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/includes/modbus_pdu_write_single_register_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_diagnostic_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_error.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_counter_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_get_com_event_log_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_mask_write_holding_register_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_coils_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_device_identification_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_discrete_inputs_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_exception_status_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_fifo_queue_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_file_record_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_holding_registers_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_input_registers_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_read_write_multiple_holding_registers_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_report_server_id_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_coils_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_multiple_holding_registers_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_coil_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_single_register_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_packet_connection_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_packet_data.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_packet_disconnect_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_packet_tpdu_error.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_called_tsap.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_calling_tsap.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_checksum.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_disconnect_additional_information.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/cotp_parameter_tpdu_size.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_address_any.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_message_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_message_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_message_response_data.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_message_user_data.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_read_var_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_setup_communication.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_user_data_item_cpu_functions.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_parameter_write_var_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_payload_read_var_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_payload_user_data_item_cpu_function_read_szl_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_request.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_payload_write_var_response.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/includes/s7_var_request_parameter_item_address.h
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_packet_connection_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_packet_data.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_packet_disconnect_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_packet_tpdu_error.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_parameter_called_tsap.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_parameter_calling_tsap.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_parameter_checksum.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_parameter_disconnect_additional_information.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/cotp_parameter_tpdu_size.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_address_any.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_message_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_message_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_message_response_data.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_message_user_data.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_read_var_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_setup_communication.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_user_data_item_cpu_functions.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_parameter_write_var_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_payload_read_var_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item_cpu_function_read_szl_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_request.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_payload_write_var_response.c
 delete mode 100644 sandbox/plc4c/generated-sources/s7/src/s7_var_request_parameter_item_address.c
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcUnsupportedProtocolException.java => sandbox/plc4c/spi/include/plc4c/spi/evaluation_helper.h (65%)
 copy plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperTaskMBean.java => sandbox/plc4c/spi/src/evaluation_helper.c (71%)
 copy sandbox/{test-java-df1-driver/src/test/java/org/apache/plc4x/protocol/df1/Df1ParserSerializerTest.java => test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetCOVSerializerTest.java} (81%)
 copy sandbox/{test-java-df1-driver/src/test/java/org/apache/plc4x/protocol/df1/Df1ParserSerializerTest.java => test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetStructuresSerializerTest.java} (78%)
 copy protocols/proxy/pom.xml => sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetCOVSerializerTest.xml (58%)
 create mode 100644 sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetStructuresSerializerTest.xml


[plc4x] 03/03: Small, yet failing, unit tests to test bacnet structures.

Posted by ld...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch feature/bacnet-active
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit da974fe5b80a67eb7958a8203a2db7b01f784fca
Author: Łukasz Dywicki <lu...@code-house.org>
AuthorDate: Wed Jun 24 10:23:45 2020 +0200

    Small, yet failing, unit tests to test bacnet structures.
---
 .../java/bacnetip/BACnetCOVSerializerTest.java     | 30 +++++++
 .../bacnetip/BACnetStructuresSerializerTest.java   | 30 +++++++
 .../testsuite/BACnetCOVSerializerTest.xml          | 38 +++++++++
 .../testsuite/BACnetStructuresSerializerTest.xml   | 93 ++++++++++++++++++++++
 4 files changed, 191 insertions(+)

diff --git a/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetCOVSerializerTest.java b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetCOVSerializerTest.java
new file mode 100644
index 0000000..30a575d
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetCOVSerializerTest.java
@@ -0,0 +1,30 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+
+package org.apache.plc4x.java.bacnetip;
+
+import org.apache.plc4x.test.parserserializer.ParserSerializerTestsuiteRunner;
+
+public class BACnetCOVSerializerTest extends ParserSerializerTestsuiteRunner {
+
+    public BACnetCOVSerializerTest() {
+        super("/testsuite/BACnetCOVSerializerTest.xml");
+    }
+
+}
diff --git a/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetStructuresSerializerTest.java b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetStructuresSerializerTest.java
new file mode 100644
index 0000000..56d6d52
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BACnetStructuresSerializerTest.java
@@ -0,0 +1,30 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+
+package org.apache.plc4x.java.bacnetip;
+
+import org.apache.plc4x.test.parserserializer.ParserSerializerTestsuiteRunner;
+
+public class BACnetStructuresSerializerTest extends ParserSerializerTestsuiteRunner {
+
+    public BACnetStructuresSerializerTest() {
+        super("/testsuite/BACnetStructuresSerializerTest.xml");
+    }
+
+}
diff --git a/sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetCOVSerializerTest.xml b/sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetCOVSerializerTest.xml
new file mode 100644
index 0000000..0908122
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetCOVSerializerTest.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd" bigEndian="true">
+
+  <name>BACnet COV test</name>
+
+  <testcase>
+    <name>COV</name>
+    <raw>0509001c020007d22c020007d239004e09702e91002f09cb2e2ea4770c0b03b40a341d402f2f09c42e91002f4f0000</raw>
+    <root-type>BACnetConfirmedServiceRequest</root-type>
+    <parser-arguments>
+      <length>55</length>
+    </parser-arguments>
+    <xml>
+      <COV className="org.apache.plc4x.java.bacnetip.readwrite.BACnetConfirmedServiceRequestSubscribeCOV">
+      </COV>
+    </xml>
+  </testcase>
+
+
+</test:testsuite>
\ No newline at end of file
diff --git a/sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetStructuresSerializerTest.xml b/sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetStructuresSerializerTest.xml
new file mode 100644
index 0000000..fa40cb8
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/test/resources/testsuite/BACnetStructuresSerializerTest.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  -->
+<test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd" bigEndian="true">
+
+  <name>BACnet structures</name>
+
+  <testcase>
+    <name>Whois Request</name>
+    <raw>080a07ae1a07ae</raw>
+    <root-type>BACnetUnconfirmedServiceRequest</root-type>
+    <parser-arguments>
+      <length>7</length>
+    </parser-arguments>
+    <xml>
+      <BACnetUnconfirmedServiceRequestWhoIs className="org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestWhoIs">
+        <deviceInstanceRangeLowLimitLength>2</deviceInstanceRangeLowLimitLength>
+        <deviceInstanceRangeLowLimit>B64=</deviceInstanceRangeLowLimit>
+        <deviceInstanceRangeHighLimitLength>2</deviceInstanceRangeHighLimitLength>
+        <deviceInstanceRangeHighLimit>B64=</deviceInstanceRangeHighLimit>
+      </BACnetUnconfirmedServiceRequestWhoIs>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Whohas Request</name>
+    <raw>073d15040053004f004d00530032002d004e004100450058002f005300630068006500640075006c0065002e004b0061006c0065006e00640065007200200041004b0053004500200038002e00500072006f006700720061006d006d0065007200620061007200650020006d006f00640075006c00650072002e00440043004f002e00440043004f0035004600310031002e0044006100670042007600690031002d00310031002e004400610067004200760076</raw>
+    <root-type>BACnetUnconfirmedServiceRequest</root-type>
+    <parser-arguments>
+      <length>1000</length>
+    </parser-arguments>
+    <xml>
+      <BVLC className="org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestWhoHas">
+      </BVLC>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Time Synchronization Request</name>
+    <raw>06a4770b1b03b40c0b3939</raw>
+    <root-type>BACnetUnconfirmedServiceRequest</root-type>
+    <parser-arguments>
+      <length>11</length>
+    </parser-arguments>
+    <xml>
+      <BACnetUnconfirmedServiceRequestTimeSynchronization className="org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestTimeSynchronization">
+      </BACnetUnconfirmedServiceRequestTimeSynchronization>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>BACnet IAmRequest</name>
+    <raw>001000c40200020f22040091002105</raw>
+    <root-type>BACnetUnconfirmedServiceRequest</root-type>
+    <parser-arguments>
+      <length>16</length>
+    </parser-arguments>
+    <xml>
+      <BACnetUnconfirmedServiceRequestIAm className="org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestIAm">
+      </BACnetUnconfirmedServiceRequestIAm>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>I have response</name>
+    <raw>01c40200000bc403c000007100</raw>
+    <root-type>BACnetUnconfirmedServiceRequest</root-type>
+    <parser-arguments>
+      <length>13</length>
+    </parser-arguments>
+    <xml>
+      <BACnetUnconfirmedServiceRequestIHave className="org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestIHave">
+      </BACnetUnconfirmedServiceRequestIHave>
+    </xml>
+  </testcase>
+
+</test:testsuite>
\ No newline at end of file


[plc4x] 02/03: Revert changes in mspec.

Posted by ld...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch feature/bacnet-active
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit f1da80e1ba76367124afc332f8b7097ccf89a0b6
Author: Łukasz Dywicki <lu...@code-house.org>
AuthorDate: Wed Jun 24 09:49:24 2020 +0200

    Revert changes in mspec.
---
 .../main/resources/protocols/bacnetip/bacnetip.mspec    | 17 ++++++-----------
 .../java/bacnetip/protocol/BacNetIpProtocolLogic.java   |  2 +-
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 150cb1d..eb001e9 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -316,20 +316,20 @@
         ['0x07' BACnetUnconfirmedServiceRequestWhoHas
             [const uint 8 'deviceInstanceLowLimitHeader' '0x0B']
             [simple uint 24 'deviceInstanceLowLimit']
-
             [const uint 8 'deviceInstanceHighLimitHeader' '0x1B']
             [simple uint 24 'deviceInstanceHighLimit']
-
             [const uint 8 'objectNameHeader' '0x3D']
             [implicit uint 8 'objectNameLength' 'COUNT(objectName) + 1']
-
             [simple uint 8 'objectNameCharacterSet']
             [array int 8 'objectName' length 'objectNameLength - 1']
         ]
         ['0x08' BACnetUnconfirmedServiceRequestWhoIs
-            [optional uint 5 'header'  'len > 12']
-            [optional BACnetDeviceInstanceRange 'low' 'header != null && == 0x01']
-            [optional BACnetDeviceInstanceRange 'high' 'header != null && == 0x03']
+            [const uint 5 'deviceInstanceRangeLowLimitHeader' '0x01']
+            [simple uint 3 'deviceInstanceRangeLowLimitLength']
+            [array int 8 'deviceInstanceRangeLowLimit' count 'deviceInstanceRangeLowLimitLength']
+            [const uint 5 'deviceInstanceRangeHighLimitHeader' '0x03']
+            [simple uint 3 'deviceInstanceRangeHighLimitLength']
+            [array int 8 'deviceInstanceRangeHighLimit' count 'deviceInstanceRangeHighLimitLength']
         ]
         ['0x09' BACnetUnconfirmedServiceRequestUTCTimeSynchronization
         ]
@@ -340,11 +340,6 @@
     ]
 ]
 
-[type 'BACnetDeviceInstanceRange'
-    [simple uint 3 'deviceInstanceRangeLowLimitLength']
-    [array int 8 'deviceInstanceRangeLowLimit' count 'deviceInstanceRangeLowLimitLength']
-]
-
 [discriminatedType 'BACnetServiceAck'
     [discriminator   uint 8 'serviceChoice']
     [typeSwitch 'serviceChoice'
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
index 1a67496..66d01a4 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
@@ -98,7 +98,7 @@ public class BacNetIpProtocolLogic extends Plc4xProtocolBase<BVLC> implements Ha
         context.fireConnected();
 
         APDUUnconfirmedRequest apdu = new APDUUnconfirmedRequest(
-            new BACnetUnconfirmedServiceRequestWhoIs((short) 0x08, null, null)
+            new BACnetUnconfirmedServiceRequestWhoIs((byte) 0x00, new byte[0], (byte) 0x00, new byte[0])
         );
 
         BVLCOriginalBroadcastNPDU broadcastNPDU = new BVLCOriginalBroadcastNPDU(


[plc4x] 01/03: Basic test for bacnet live I/O.

Posted by ld...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ldywicki pushed a commit to branch feature/bacnet-active
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 053c24ed0dc6c13d463a0d116ba6636762ea580b
Author: Łukasz Dywicki <lu...@code-house.org>
AuthorDate: Wed Jun 17 13:43:40 2020 +0200

    Basic test for bacnet live I/O.
---
 .../resources/protocols/bacnetip/bacnetip.mspec    |  17 +-
 ...etIpDriver.java => AbstractBacNetIpDriver.java} |  38 +---
 .../plc4x/java/bacnetip/ActiveBacNetIpDriver.java  |  65 ++++++
 .../plc4x/java/bacnetip/PassiveBacNetIpDriver.java |  49 +----
 .../configuration/BacNetIpConfiguration.java       |  43 ++++
 .../bacnetip/protocol/BacNetIpProtocolLogic.java   | 237 +++++++++++++++++++++
 .../services/org.apache.plc4x.java.api.PlcDriver   |   1 +
 .../plc4x/java/bacnetip/BacNetDriverMain.java      |  50 +++++
 8 files changed, 412 insertions(+), 88 deletions(-)

diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index eb001e9..150cb1d 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -316,20 +316,20 @@
         ['0x07' BACnetUnconfirmedServiceRequestWhoHas
             [const uint 8 'deviceInstanceLowLimitHeader' '0x0B']
             [simple uint 24 'deviceInstanceLowLimit']
+
             [const uint 8 'deviceInstanceHighLimitHeader' '0x1B']
             [simple uint 24 'deviceInstanceHighLimit']
+
             [const uint 8 'objectNameHeader' '0x3D']
             [implicit uint 8 'objectNameLength' 'COUNT(objectName) + 1']
+
             [simple uint 8 'objectNameCharacterSet']
             [array int 8 'objectName' length 'objectNameLength - 1']
         ]
         ['0x08' BACnetUnconfirmedServiceRequestWhoIs
-            [const uint 5 'deviceInstanceRangeLowLimitHeader' '0x01']
-            [simple uint 3 'deviceInstanceRangeLowLimitLength']
-            [array int 8 'deviceInstanceRangeLowLimit' count 'deviceInstanceRangeLowLimitLength']
-            [const uint 5 'deviceInstanceRangeHighLimitHeader' '0x03']
-            [simple uint 3 'deviceInstanceRangeHighLimitLength']
-            [array int 8 'deviceInstanceRangeHighLimit' count 'deviceInstanceRangeHighLimitLength']
+            [optional uint 5 'header'  'len > 12']
+            [optional BACnetDeviceInstanceRange 'low' 'header != null && == 0x01']
+            [optional BACnetDeviceInstanceRange 'high' 'header != null && == 0x03']
         ]
         ['0x09' BACnetUnconfirmedServiceRequestUTCTimeSynchronization
         ]
@@ -340,6 +340,11 @@
     ]
 ]
 
+[type 'BACnetDeviceInstanceRange'
+    [simple uint 3 'deviceInstanceRangeLowLimitLength']
+    [array int 8 'deviceInstanceRangeLowLimit' count 'deviceInstanceRangeLowLimitLength']
+]
+
 [discriminatedType 'BACnetServiceAck'
     [discriminator   uint 8 'serviceChoice']
     [typeSwitch 'serviceChoice'
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/AbstractBacNetIpDriver.java
similarity index 76%
copy from sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java
copy to sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/AbstractBacNetIpDriver.java
index a4c472c..4932716 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/AbstractBacNetIpDriver.java
@@ -18,7 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.bacnetip;
 
-import io.netty.buffer.ByteBuf;
+import java.util.function.Consumer;
+import java.util.function.ToIntFunction;
 import org.apache.plc4x.java.api.PlcDriver;
 import org.apache.plc4x.java.bacnetip.configuration.PassiveBacNetIpConfiguration;
 import org.apache.plc4x.java.bacnetip.field.BacNetIpFieldHandler;
@@ -31,11 +32,9 @@ import org.apache.plc4x.java.spi.connection.ProtocolStackConfigurer;
 import org.apache.plc4x.java.spi.connection.SingleProtocolStackConfigurer;
 import org.osgi.service.component.annotations.Component;
 
-import java.util.function.Consumer;
-import java.util.function.ToIntFunction;
+import io.netty.buffer.ByteBuf;
 
-@Component(service = PlcDriver.class, immediate = true)
-public class PassiveBacNetIpDriver extends GeneratedDriverBase<BVLC> {
+public abstract class AbstractBacNetIpDriver extends GeneratedDriverBase<BVLC> {
 
     public static final int BACNET_IP_PORT = 47808;
 
@@ -50,44 +49,15 @@ public class PassiveBacNetIpDriver extends GeneratedDriverBase<BVLC> {
     }
 
     @Override
-    protected Class<? extends Configuration> getConfigurationType() {
-        return PassiveBacNetIpConfiguration.class;
-    }
-
-    @Override
     protected String getDefaultTransport() {
         return "udp";
     }
 
     @Override
-    protected boolean canRead() {
-        return false;
-    }
-
-    @Override
-    protected boolean canWrite() {
-        return false;
-    }
-
-    @Override
-    protected boolean canSubscribe() {
-        return true;
-    }
-
-    @Override
     protected BacNetIpFieldHandler getFieldHandler() {
         return new BacNetIpFieldHandler();
     }
 
-    @Override
-    protected ProtocolStackConfigurer<BVLC> getStackConfigurer() {
-        return SingleProtocolStackConfigurer.builder(BVLC.class, BVLCIO.class)
-            .withProtocol(PassiveBacNetIpProtocolLogic.class)
-            .withPacketSizeEstimator(ByteLengthEstimator.class)
-            .withCorruptPacketRemover(CorruptPackageCleaner.class)
-            .build();
-    }
-
     /** Estimate the Length of a Packet */
     public static class ByteLengthEstimator implements ToIntFunction<ByteBuf> {
         @Override
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ActiveBacNetIpDriver.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ActiveBacNetIpDriver.java
new file mode 100644
index 0000000..d0d72fc
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ActiveBacNetIpDriver.java
@@ -0,0 +1,65 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+package org.apache.plc4x.java.bacnetip;
+
+import org.apache.plc4x.java.bacnetip.configuration.BacNetIpConfiguration;
+import org.apache.plc4x.java.bacnetip.protocol.BacNetIpProtocolLogic;
+import org.apache.plc4x.java.bacnetip.readwrite.BVLC;
+import org.apache.plc4x.java.bacnetip.readwrite.io.BVLCIO;
+import org.apache.plc4x.java.spi.configuration.Configuration;
+import org.apache.plc4x.java.spi.connection.ProtocolStackConfigurer;
+import org.apache.plc4x.java.spi.connection.SingleProtocolStackConfigurer;
+
+public class ActiveBacNetIpDriver extends AbstractBacNetIpDriver {
+
+    @Override
+    protected Class<? extends Configuration> getConfigurationType() {
+        return BacNetIpConfiguration.class;
+    }
+
+    @Override
+    protected boolean canRead() {
+        return true;
+    }
+
+    @Override
+    protected boolean canWrite() {
+        return true;
+    }
+
+    @Override
+    protected boolean canSubscribe() {
+        return true;
+    }
+
+    @Override
+    public String getProtocolCode() {
+        return "bacnet-ip-active";
+    }
+
+    @Override
+    protected ProtocolStackConfigurer<BVLC> getStackConfigurer() {
+        return SingleProtocolStackConfigurer.builder(BVLC.class, BVLCIO.class)
+            .withProtocol(BacNetIpProtocolLogic.class)
+            .withPacketSizeEstimator(ByteLengthEstimator.class)
+            .withCorruptPacketRemover(CorruptPackageCleaner.class)
+            .build();
+    }
+
+}
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java
index a4c472c..a6020fe 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/PassiveBacNetIpDriver.java
@@ -18,36 +18,15 @@ under the License.
 */
 package org.apache.plc4x.java.bacnetip;
 
-import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.api.PlcDriver;
 import org.apache.plc4x.java.bacnetip.configuration.PassiveBacNetIpConfiguration;
-import org.apache.plc4x.java.bacnetip.field.BacNetIpFieldHandler;
 import org.apache.plc4x.java.bacnetip.protocol.PassiveBacNetIpProtocolLogic;
 import org.apache.plc4x.java.bacnetip.readwrite.BVLC;
 import org.apache.plc4x.java.bacnetip.readwrite.io.BVLCIO;
 import org.apache.plc4x.java.spi.configuration.Configuration;
-import org.apache.plc4x.java.spi.connection.GeneratedDriverBase;
 import org.apache.plc4x.java.spi.connection.ProtocolStackConfigurer;
 import org.apache.plc4x.java.spi.connection.SingleProtocolStackConfigurer;
-import org.osgi.service.component.annotations.Component;
 
-import java.util.function.Consumer;
-import java.util.function.ToIntFunction;
-
-@Component(service = PlcDriver.class, immediate = true)
-public class PassiveBacNetIpDriver extends GeneratedDriverBase<BVLC> {
-
-    public static final int BACNET_IP_PORT = 47808;
-
-    @Override
-    public String getProtocolCode() {
-        return "bacnet-ip";
-    }
-
-    @Override
-    public String getProtocolName() {
-        return "BACnet/IP";
-    }
+public class PassiveBacNetIpDriver extends AbstractBacNetIpDriver {
 
     @Override
     protected Class<? extends Configuration> getConfigurationType() {
@@ -75,11 +54,6 @@ public class PassiveBacNetIpDriver extends GeneratedDriverBase<BVLC> {
     }
 
     @Override
-    protected BacNetIpFieldHandler getFieldHandler() {
-        return new BacNetIpFieldHandler();
-    }
-
-    @Override
     protected ProtocolStackConfigurer<BVLC> getStackConfigurer() {
         return SingleProtocolStackConfigurer.builder(BVLC.class, BVLCIO.class)
             .withProtocol(PassiveBacNetIpProtocolLogic.class)
@@ -88,26 +62,5 @@ public class PassiveBacNetIpDriver extends GeneratedDriverBase<BVLC> {
             .build();
     }
 
-    /** Estimate the Length of a Packet */
-    public static class ByteLengthEstimator implements ToIntFunction<ByteBuf> {
-        @Override
-        public int applyAsInt(ByteBuf byteBuf) {
-            if (byteBuf.readableBytes() >= 4) {
-                return byteBuf.getUnsignedShort(byteBuf.readerIndex() + 2);
-            }
-            return -1;
-        }
-    }
-
-    /** Consumes all Bytes till another Magic Byte is found */
-    public static class CorruptPackageCleaner implements Consumer<ByteBuf> {
-        @Override
-        public void accept(ByteBuf byteBuf) {
-            while (byteBuf.getUnsignedByte(0) != BVLC.BACNETTYPE) {
-                // Just consume the bytes till the next possible start position.
-                byteBuf.readByte();
-            }
-        }
-    }
 
 }
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/configuration/BacNetIpConfiguration.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/configuration/BacNetIpConfiguration.java
new file mode 100644
index 0000000..99732d4
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/configuration/BacNetIpConfiguration.java
@@ -0,0 +1,43 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+package org.apache.plc4x.java.bacnetip.configuration;
+
+import org.apache.plc4x.java.bacnetip.AbstractBacNetIpDriver;
+import org.apache.plc4x.java.bacnetip.PassiveBacNetIpDriver;
+import org.apache.plc4x.java.spi.configuration.Configuration;
+import org.apache.plc4x.java.spi.configuration.annotations.ConfigurationParameter;
+import org.apache.plc4x.java.spi.configuration.annotations.defaults.DoubleDefaultValue;
+import org.apache.plc4x.java.transport.pcapreplay.PcapReplayTransportConfiguration;
+import org.apache.plc4x.java.transport.rawsocket.RawSocketTransportConfiguration;
+import org.apache.plc4x.java.transport.udp.UdpTransportConfiguration;
+import org.apache.plc4x.java.utils.pcap.netty.handlers.PacketHandler;
+import org.pcap4j.packet.Dot1qVlanTagPacket;
+
+public class BacNetIpConfiguration implements Configuration, UdpTransportConfiguration {
+
+    @Override
+    public int getDefaultPort() {
+        return AbstractBacNetIpDriver.BACNET_IP_PORT;
+    }
+
+    @Override
+    public String toString() {
+        return "port=" + getDefaultPort();
+    }
+}
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
new file mode 100644
index 0000000..1a67496
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
@@ -0,0 +1,237 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+package org.apache.plc4x.java.bacnetip.protocol;
+
+import java.time.Instant;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.api.value.PlcInteger;
+import org.apache.plc4x.java.api.value.PlcLong;
+import org.apache.plc4x.java.api.value.PlcString;
+import org.apache.plc4x.java.api.value.PlcStruct;
+import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.bacnetip.configuration.BacNetIpConfiguration;
+import org.apache.plc4x.java.bacnetip.ede.model.Datapoint;
+import org.apache.plc4x.java.bacnetip.ede.model.EdeModel;
+import org.apache.plc4x.java.bacnetip.field.BacNetIpField;
+import org.apache.plc4x.java.bacnetip.readwrite.APDU;
+import org.apache.plc4x.java.bacnetip.readwrite.APDUComplexAck;
+import org.apache.plc4x.java.bacnetip.readwrite.APDUConfirmedRequest;
+import org.apache.plc4x.java.bacnetip.readwrite.APDUError;
+import org.apache.plc4x.java.bacnetip.readwrite.APDUSimpleAck;
+import org.apache.plc4x.java.bacnetip.readwrite.APDUUnconfirmedRequest;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetConfirmedServiceRequest;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetConfirmedServiceRequestConfirmedCOVNotification;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetConfirmedServiceRequestReadProperty;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetConfirmedServiceRequestSubscribeCOV;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetConfirmedServiceRequestWriteProperty;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetTag;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetTagWithContent;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequest;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestIAm;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestWhoHas;
+import org.apache.plc4x.java.bacnetip.readwrite.BACnetUnconfirmedServiceRequestWhoIs;
+import org.apache.plc4x.java.bacnetip.readwrite.BVLC;
+import org.apache.plc4x.java.bacnetip.readwrite.BVLCForwardedNPDU;
+import org.apache.plc4x.java.bacnetip.readwrite.BVLCOriginalBroadcastNPDU;
+import org.apache.plc4x.java.bacnetip.readwrite.BVLCOriginalUnicastNPDU;
+import org.apache.plc4x.java.bacnetip.readwrite.NPDU;
+import org.apache.plc4x.java.spi.ConversationContext;
+import org.apache.plc4x.java.spi.Plc4xProtocolBase;
+import org.apache.plc4x.java.spi.configuration.HasConfiguration;
+import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionEvent;
+import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionResponse;
+import org.apache.plc4x.java.spi.messages.InternalPlcSubscriptionRequest;
+import org.apache.plc4x.java.spi.messages.PlcSubscriber;
+import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
+import org.apache.plc4x.java.spi.model.DefaultPlcConsumerRegistration;
+import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionHandle;
+import org.apache.plc4x.java.spi.model.InternalPlcSubscriptionHandle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BacNetIpProtocolLogic extends Plc4xProtocolBase<BVLC> implements HasConfiguration<BacNetIpConfiguration>, PlcSubscriber {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(BacNetIpProtocolLogic.class);
+
+    private AtomicInteger requestId = new AtomicInteger();
+
+    private Map<Integer, Consumer<PlcSubscriptionEvent>> consumerIdMap = new ConcurrentHashMap<>();
+
+    @Override
+    public void setConfiguration(BacNetIpConfiguration configuration) {
+
+    }
+
+    @Override
+    public void onConnect(ConversationContext<BVLC> context) {
+        context.fireConnected();
+
+        APDUUnconfirmedRequest apdu = new APDUUnconfirmedRequest(
+            new BACnetUnconfirmedServiceRequestWhoIs((short) 0x08, null, null)
+        );
+
+        BVLCOriginalBroadcastNPDU broadcastNPDU = new BVLCOriginalBroadcastNPDU(
+            new NPDU(
+                (short) 0,
+                true,
+                false,
+                false,
+                false,
+                (byte) 0x0,
+                0,
+                (short) 0,
+                new short[] {},
+                0,
+                (short) 0,
+                new short[] {},
+                (short) 0,
+                null,
+                apdu
+            )
+        );
+        context.sendToWire(broadcastNPDU);
+    }
+
+    @Override
+    public void close(ConversationContext<BVLC> context) {
+        // Nothing to do here ...
+    }
+
+    @Override
+    protected void decode(ConversationContext<BVLC> context, BVLC msg) throws Exception {
+        NPDU npdu = null;
+        if(msg instanceof BVLCOriginalUnicastNPDU) {
+            BVLCOriginalUnicastNPDU bvlcOriginalUnicastNPDU = (BVLCOriginalUnicastNPDU) msg;
+            npdu = bvlcOriginalUnicastNPDU.getNpdu();
+        } else if (msg instanceof BVLCForwardedNPDU) {
+            BVLCForwardedNPDU bvlcForwardedNPDU = (BVLCForwardedNPDU) msg;
+            npdu = bvlcForwardedNPDU.getNpdu();
+        } else if (msg instanceof BVLCOriginalBroadcastNPDU) {
+            BVLCOriginalBroadcastNPDU bvlcOriginalBroadcastNPDU = (BVLCOriginalBroadcastNPDU) msg;
+            npdu = bvlcOriginalBroadcastNPDU.getNpdu();
+        }
+
+        if(npdu != null) {
+            if(npdu.getApdu() instanceof APDUConfirmedRequest) {
+                APDUConfirmedRequest apduConfirmedRequest = (APDUConfirmedRequest) npdu.getApdu();
+                final BACnetConfirmedServiceRequest serviceRequest = apduConfirmedRequest.getServiceRequest();
+                // A value change subscription event.
+                if(serviceRequest instanceof BACnetConfirmedServiceRequestConfirmedCOVNotification) {
+                    BACnetConfirmedServiceRequestConfirmedCOVNotification valueChange =
+                        (BACnetConfirmedServiceRequestConfirmedCOVNotification) serviceRequest;
+
+                }
+                // Someone read a value.
+                else if(serviceRequest instanceof BACnetConfirmedServiceRequestReadProperty) {
+                    // Ignore this ...
+                }
+                // Someone wrote a value.
+                else if(serviceRequest instanceof BACnetConfirmedServiceRequestWriteProperty) {
+                    // Ignore this ...
+                } else if(serviceRequest instanceof BACnetConfirmedServiceRequestSubscribeCOV) {
+                    // Ignore this ...
+                } else {
+                    LOGGER.debug(String.format("Unexpected ConfirmedServiceRequest type: %s", serviceRequest.getClass().getName()));
+                }
+            } else if(npdu.getApdu() instanceof APDUUnconfirmedRequest) {
+                APDUUnconfirmedRequest unconfirmedRequest = (APDUUnconfirmedRequest) npdu.getApdu();
+                final BACnetUnconfirmedServiceRequest serviceRequest = unconfirmedRequest.getServiceRequest();
+                if(serviceRequest instanceof BACnetUnconfirmedServiceRequestWhoHas) {
+                    // Ignore this ...
+                } else if(serviceRequest instanceof BACnetUnconfirmedServiceRequestWhoIs){
+                    // Ignore this ...
+                } else if(serviceRequest instanceof BACnetUnconfirmedServiceRequestIAm){
+                    // Ignore this ...
+                } else if(serviceRequest instanceof BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer){
+                    // Ignore this ...
+                } else {
+                    LOGGER.debug(String.format("Unexpected UnconfirmedServiceRequest type: %s", serviceRequest.getClass().getName()));
+                }
+            } else if(npdu.getApdu() instanceof APDUError) {
+                APDUError apduError = (APDUError) npdu.getApdu();
+            } else if(npdu.getApdu() instanceof APDUSimpleAck) {
+                // Ignore this ...
+            } else if(npdu.getApdu() instanceof APDUComplexAck) {
+                // Ignore this ...
+            } else if((npdu.getApdu() == null) && (npdu.getNlm() != null)){
+                // "Who is router?" & "I am router" messages.
+                // Ignore this ...
+            } else {
+                LOGGER.debug(String.format("Unexpected NPDU type: %s", npdu.getClass().getName()));
+            }
+        }
+    }
+
+    @Override
+    public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest) {
+        Map<String, ResponseItem<PlcSubscriptionHandle>> values = new HashMap<>();
+        for (String fieldName : subscriptionRequest.getFieldNames()) {
+            values.put(fieldName, new ResponseItem<>(PlcResponseCode.OK, new DefaultPlcSubscriptionHandle(this)));
+        }
+
+        return CompletableFuture.completedFuture(
+            new DefaultPlcSubscriptionResponse((InternalPlcSubscriptionRequest) subscriptionRequest, values));
+    }
+
+    @Override
+    public PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> collection) {
+        final DefaultPlcConsumerRegistration consumerRegistration =
+            new DefaultPlcConsumerRegistration(this, consumer, collection.toArray(new InternalPlcSubscriptionHandle[0]));
+        consumerIdMap.put(consumerRegistration.getConsumerHash(), consumer);
+        return consumerRegistration;
+    }
+
+    @Override
+    public void unregister(PlcConsumerRegistration plcConsumerRegistration) {
+        DefaultPlcConsumerRegistration consumerRegistration = (DefaultPlcConsumerRegistration) plcConsumerRegistration;
+        consumerIdMap.remove(consumerRegistration.getConsumerHash());
+    }
+
+    protected void publishEvent(BacNetIpField field, PlcValue plcValue) {
+        // Create a subscription event from the input.
+        final PlcSubscriptionEvent event = new DefaultPlcSubscriptionEvent(Instant.now(),
+            Collections.singletonMap("event", new ResponseItem(PlcResponseCode.OK, plcValue)));
+
+        // Send the subscription event to all listeners.
+        for (Consumer<PlcSubscriptionEvent> consumer : consumerIdMap.values()) {
+            // TODO: Check if the subscription matches the current field ..
+            consumer.accept(event);
+        }
+    }
+
+    private String toString(BacNetIpField field) {
+        return field.getDeviceIdentifier() + "/" + field.getObjectType() + "/" + field.getObjectInstance();
+    }
+
+}
diff --git a/sandbox/test-java-bacnetip-driver/src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver b/sandbox/test-java-bacnetip-driver/src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver
index 9c311c9..b240d8a 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver
+++ b/sandbox/test-java-bacnetip-driver/src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver
@@ -17,3 +17,4 @@
 # under the License.
 #
 org.apache.plc4x.java.bacnetip.PassiveBacNetIpDriver
+org.apache.plc4x.java.bacnetip.ActiveBacNetIpDriver
diff --git a/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BacNetDriverMain.java b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BacNetDriverMain.java
new file mode 100644
index 0000000..18d50c7
--- /dev/null
+++ b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/BacNetDriverMain.java
@@ -0,0 +1,50 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+package org.apache.plc4x.java.bacnetip;
+
+import java.util.function.Consumer;
+import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.api.value.PlcStruct;
+import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionEvent;
+
+public class BacNetDriverMain {
+
+    public static void main(String[] args) throws Exception {
+        final PlcConnection connection = new PlcDriverManager().getConnection("bacnet-ip-active:udp://192.168.2.106");
+        connection.connect();
+        PlcSubscriptionRequest plcSubscriptionRequest = connection.subscriptionRequestBuilder()
+            .addEventField("Hurz", "*/*/*")
+            .build();
+
+        final PlcSubscriptionResponse subscriptionResponse = plcSubscriptionRequest.execute().get();
+        subscriptionResponse.getSubscriptionHandle("Hurz").register(new Consumer<PlcSubscriptionEvent>() {
+            @Override
+            public void accept(PlcSubscriptionEvent plcSubscriptionEvent) {
+                PlcStruct plcStruct = (PlcStruct) ((DefaultPlcSubscriptionEvent) plcSubscriptionEvent).getValues()
+                    .get("event").getValue();
+                System.out.println(plcStruct);
+            }
+        });
+    }
+
+}