==============================================================
(Unreleased) Apache PLC4X 0.12.0-SNAPSHOT
==============================================================

New Features
------------

- API: Made several bits of information available via the API
  allowing tools to provide more content assist when dealing
  with PLC4X connections.
- S7: The S7 driver now supports reading of STRING and
  WSTRING data-types without providing a maximum length.
- Build: Worked on making PLC4X provide reproducible builds.
- Added "Ping" functionality to: ADS, EIP, KNX, Mock, Modbus
  and Simulated drivers.
- The OPC-UA Java driver now support certificate-based
  authentication and encryption.

Incompatible changes
--------------------

- Java 8 is no longer officially supported and Java 11 is the
  new base-line.
- Renamed the PlcDriverManager method `listDrivers` to
  `getProtocolCodes`
- Renamed the PlcDriverMetadata method `canDiscover` to
  `isDiscoverySupported`
- Renamed the PlcConnectionMetadata methods `canRead`, `canWrite`
  `canSubscribe` and `canBrowse` to `isReadSupported`,
  `isWriteSupported`, `isSubscribeSupported` and `isBrowseSupported`
- The configuration syntax for configuring transport-related
  config options in the connection-string was updated to be
  now prefixed with the transport name the option belongs to.

Bug Fixes
---------

- S7: Several bugs and issues regarding supporting various
  duration, date and time data-types.
- S7: Implemented the missing 64bit (L-) types.
- KNX: Fixed an issue with decoding 16 bit floating point
  numbers.
- NiFi-Integration: The NiFi integration module was greatly
  improved.
- Core: Fixed several leaks of open threads.

==============================================================
Apache PLC4X 0.11.0
==============================================================

New Features
------------

- IEC-60870-5-104 driver
- Completely rewritten EIP driver that should now support
  Allen-Bradley controllers
- Completely rewritten the ADS driver that now supports
  Auto-Discovery, Browse, UDOs and auto-configuration of
  remote AMS routes
- Support for S7 200 subscriptions
- Added a docker-compose setup in a preparation for reproducible
  builds
- Added SBOM generation
- Improved Apache NiFi support
- Added support for the latest ETS version in KNX
- Started implementing the ping() method for some drivers
- Greatly updated Apache NiFi integration

Incompatible changes
--------------------

- Java 1.8 is no longer supported and Java 11 is now the new
  baseline version we support.
- We've updated the APIs of both PLC4J and PLC4Go to be more in
  sync. We also refined some of the terminology.
- We've also re-written the `connection-cache`, which now replaces
  both the old `connection-pool` and the old `connection-cache`.
- The UI module has been removed as it relied on JavaFX, which is
  no longer bundled with the JDK and therefore the LGPL license
  renders is dad for Apache projects.
- The Apache Camel integration was moved over to the Apache Camel
  project.
- The prototype-driver for PROFINET was completely updated
- Due to the extreme refactoring of S7, ADS and EIP, the Go versions
  of these drivers are currently not going to work as well as before
  (We're going to address these issues in the next phase after the
  release)
- Changed the return type of the PLC4J Ping method to return more
  information on if the ping was successful

Bug Fixes
---------

Fixed issues with memory leaks in the ConnectionManager

Fixed multiple issues reported for the handling of data-types in
S7, Modbus and ADS protocols when reading and writing.

==============================================================
Apache PLC4X 0.10.0
==============================================================

A lot of the work in this version went into refactoring and
cleaning up our code generation. The code generation itself is
now a lot cleaner and simpler as well as the code generated
for Java. We also added a number of new field-types to allow
implementing more sophisticated protocols. PLC4C now should
also support all of the constructs mspec has to offer.

New Features
------------

- Implemented a `PLC4X-Server` and `PLC4X-Driver` that allows
  using the server as a proxy for communicating with PLCs.

- The Modbus driver is now also available in the variants:
  "modbus-rtu" and "modbus-ascii" (Both using Serial
  communication, which however can be tunneled through a
  "tcp" and "udp" transport)

- The KNX driver in Java now supports reading "knxproj" files
  exported from the new ETS version 6.

Incompatible changes
--------------------

- The name of the Modbus TCP driver was changed from "modbus"
  to "modbus-tcp".

- Removed the Apache Edgent (incubating) integration and
  examples related, as Edgent is abandoned and there were
  CVEs reported, which will not be fixed.

- We have replaced the BitString types with BYTE, WORD, DWORD,
  and LWORD which generally match their unsigned integer
  counterparts. So we are no longer returning lists of boolean
  values for any of these types.

Bug Fixes
---------

- Fixed a big bug in the KNX Datapoint decoding, which caused
  byte-aligned data types to parse with an offset of 8 bit.
  (This bug affected both the Java and the Go driver)

==============================================================
Apache PLC4X 0.9.0
==============================================================

New Features
------------

- The OPC UA driver has been replaced with a native driver. Previously
  Eclipse Milo was being used.

- Permit customized package names for code generation

- Added an initial draft of a Discover and Browse API to PLC4J

- PLC4Go now supports many more drivers

- PLC4Go received a huge internal refactoring and cleanup

- Major cleanup of PLC4C

- S7 Driver now supports event and alarm handling on some S7 models

Incompatible changes
--------------------

Bug Fixes
---------

PLC4X-200   OPC-UA Driver not connecting if params string is not provided
PLC4X-201   OPC-UA PlcList underlying type not compatible with Eclipse Milo
PLC4X-202   OPC-UA Driver cannot write Unsigned Types
PLC4X-276   [S7] The most of the supported types don't work correctly
PLC4X-278   Double Reading Error
PLC4X-279   nioEventLoopGroup thread proliferation
PLC4X-280   ADS route request swapped positions of route name and address
PLC4X-291   DefaultPlcSubscriptionField cannot be cast to class OpcuaField
PLC4X-298   [S7] When writing REAL values the Write
            operation fails with an internal error
PLC4X-299   Modbus - Kafka Connect Configuration
PLC4X-312   CAN NOT READ STRING FROM S7 PLC
PLC4X-314   CAN NOT WRITING MANY DATA TO S7 ONE TIME

==============================================================
Apache PLC4X 0.8.0
==============================================================

This is an ordinary PLC4X release, containing changes that
accumulated over time. It doesn't have an explicit focus on
a particular topic.

New Features
------------

- The KNXnet/IP Driver now supports writing of values.

- The Modbus driver now supports more common notations of
  Modbus addresses using a pure-numeric notation.

- The ADS, KNX, Modbus, S7 and simulated drivers have been
  updated to support the IEC 61131-3 data-types.

- We are now including PLC4Go as PLC4X implementation in
  the programming language Go(lang)

- Integration with the Milo OPC UA Server is now available.

- Kafka Connect workers have been updated source and sink connectors
  are now included.

Incompatible changes
--------------------

- The syntax of the S7 addresses changed slightly allowing to
  provide a string length. Without this, a STRING datatype will
  read 254 characters, by adding the size in round brackets to
  the type name will use the specified number.

  Examples:

  Read one String which is max 10 chars long:
  %DB2:30:STRING(10)

  Read an array of 3 Strings where each is max 10 chars long:
  %DB2:30:STRING(10)[3]

- The PLCValue types have been refactored to align with the types
  defined in IEC 61131-3 (https://en.wikipedia.org/wiki/IEC_61131-3)
  directly using the older Java types (PlcBoolean) is no longer
  possible.

Bug Fixes
---------

A lot of testing was done regarding the IEC 61131-3 data-types.
This resulted in numerous bugfixes in many protocols.

PLC4X-132   [S7] Communication to S7 PLC dies in some situations
PLC4X-206   When writing short values exceptions are thrown
            while preparing the write request.
PLC4X-207   No registered handler found for message TPKTPacket[],
            using default decode method - Communication with S7
            and Modbus device hangs
PLC4X-209   [S7] When writing INT and DINT values the Write
            operation fails with an internal error
PLC4X-210   [KNX] When running a KNX Tunneling Subscription
            for a longer time there are packets that kill
            the connection
PLC4X-211   PlcValues seem to always return "true" on the
            isXYZ" checks.
PLC4X-212   When writing multiple values in one request the
            item status is not correctly set
PLC4X-213   [Modbus] The Modbus driver doesn't handle error
            responses gracefully
PLC4X-214   [Modbus] Holding register addresses have an offset
            of 1 (Not reading the correct address)
PLC4X-215   Drivers using the BaseOptimizer
            (SingleFieldOptimizer) don't handle error responses
            gracefully
PLC4X-218   [Scraper] After stopping the scraper still the
            statistics are logged and the application doesn't
            terminate
PLC4X-239   Read DTL (Date and Time)
PLC4X-240   Protocol error in reading string
PLC4X-246	S7 driver hangs on read
PLC4X-245   [Modbus] Apache NiFi processor throws
            java.io.IOException after a while
PLC4X-255   Kafka Connector Source Task doesn't block within poll()
            resulting in high CPU usage.
PLC4X-261   Pooled connection manager returns a connection that isn't
            connected in some situations.
PLC4X-272   When splitting up large requests, too big sub-requests
            are generated (S7)
PLC4X-256	ReadBuffer truncate last byte of even small payloads
PLC4X-262	Error in reading Array
PLC4X-270	Ads driver does not accept double-digit array indexes

==============================================================
Apache PLC4X 0.7.0
==============================================================

This version is the first after a major refactoring of the driver
core. All previous driver versions are now considered deprecated
and have been replaced by versions using the new driver structure
and generated driver codebase.

New Features
------------

- Drivers now support structured types using PlcValues
- The EIP (EtherNet/IP) driver no longer requires an external
  library and is implemented fully in the PLC4X project
- The Modbus driver no longer requires an external library
  and is implemented fully in the PLC4X project
- The new S7 Driver supports writing multiple entries in one
  request (The API allowed this from the beginning now not
  every item is wrapped in a single request. It should bring
  significant performance gains when writing multiple values)
- S7 Driver now supports String datatypes.
- OSGi : Implementation of Drivers/Transports as OSGi services
  to be able to use them in an OSGi container.
- New Firmata protocol driver

Incompatible changes
--------------------

- Due to the refactoring of the driver core there might be issues
  running drivers built against older core versions.
- This version doesn't provide a Beckhoff AMS/ADS driver as this
  driver is still being ported to the new mspec format.
- All drivers connection strings now follow the same pattern:
  {protocol-code:(transport-code:)?//{transport-config}(?{params})?
  Please check the drivers documentation on our website:
  https://plc4x.apache.org/users/protocols/s7.html
- The karaf-feature modules are removed as the drivers now all
  provide both a feature.xml as well as a `kar` bundled archive

Bug Fixes
---------

PLC4X-174	UDP Transport does not accept ports containing 0
PLC4X-134   S7 is terminating the connection during handshake
PLC4X-192   Support for conversion of complex connection string
            parameters

==============================================================
Apache PLC4X 0.6.0
==============================================================

This is the last release of PLC4X with the "handwritten" drivers.
This Minor release will thus receive updates and fixes until
most users have switched to 0.7 and above (with generated drivers).

If you are using the S7 Driver you should update to this Version
as the critical (memory leak) bug PLC4X-163 is fixed.

New Features
------------
- PLC4X-168 A shorter S7 Field Syntax is Introduced.
This release contains no further features and mostly stabilization.

Incompatible changes
--------------------
- Moved the C++, C# and Python drivers into the `sandbox`

Bug Fixes
---------
- Fixed Promise Chain for InternalPlcWriteRequest
- PLC4X-45 Add float support to Modbus Protocol
- PLC4X-164 Fix wrong NOT FOUND exception in OPC UA Driver
- PLC4X-166 Fixed Download Page
- PLC4X-163 Fixed Netty ByteBuf Leaks for S7 Driver
- PLC4X-158 Added Warning if no Pooled Driver is used for Scraper

==============================================================
Apache PLC4X 0.5.0
==============================================================

This is the first release containing our new generated drivers (AB-ETH)

New Features
------------

- Implemented a new Apache Kafka Connect integration module
- Implemented a new Apache NiFi integration module
- Implemented a new Logstash integration module
- Implemented a driver for the AB-ETH protocol
- Implemented Apache Karaf features for S7 OSGI drivers
- PLC4X-121	Develop Code Generation to allow Generated Drivers in multiple Languages

Sandbox (Beta-Features)
- Implemented a new BACnet/IP passive mode driver
- Implemented a new Serial DF1 driver

Incompatible changes
--------------------

Bug Fixes
---------

- PLC4X-104	S7 Driver Datatype TIME_OF_DAY causes ArrayOutOfBoundException
- PLC4X-134	S7 is terminating the connection during handshake
- PLC4X-139	PLC4X leaks sockets in case of connection problems
- PLC4X-141	String with real length of greater 127 throw an exception
- PLC4X-144	When requesting invalid addresses, the DefaultS7MessageProcessor produces errors

==============================================================
Apache PLC4X 0.4.0
==============================================================

This is the first release of Apache PLC4X as top-level project.

New Features
------------

- The PlcConnection now supports a `ping` method to allow checking if an existing connection is still alive.
- Support of the OPC-UA protocol with the `opc-ua-driver`.
- Other Languages Support:
-- Added first versions of a C# .Net PLC4X API (`plc4net`)
-- Added first versions of a Python PLC4X API (`plc4py`)
- Added an Interop server which allows to relay requests from other languages to a Java Server

Incompatible changes
--------------------

- ElasticSearch example was updated to use ElasticSearch 7.0.1, this might cause problems with older Kibana versions.

Bug Fixes
---------


==============================================================
Apache PLC4X (incubating) 0.3.1
==============================================================

This is a bugfix-release, that fixes some problems with S7 driver.

Bug Fixes
---------

- The S7 driver didn't correctly handle "fill-bytes" in multi-item read-responses and multi-item write-requests
- PLC4X-83: fixed NPE when reading odd-length array of one-byte base types
- PLC4X-82: renamed flags "F" to Siemens Standard "M" (Marker)
- PLC4X-84: Fixed a bug in the DefaultS7MessageProcessor which didn't correctly merge together split up items


==============================================================
Apache PLC4X (incubating) 0.3.0
==============================================================

This is the third official release of Apache PLC4X.

Some new features have been added (e.g. plc-scraper) multiple
new integrations are included (apache-karaf, apache-calcite)
and a lot of (technical) refactoring has been done to prepare
future work on adapters in different languages.

New Features
------------

- Object PLC Mapping (OPM) now has a Alias Registry to allow
  variable substitution at runtime and write support
- New module `plc-scraper` for applications that have to
  scrape a lot of sps fields with high frequency
- New integration `apache-karaf` to enable plc4j in a karaf
  runtime environment

Incompatible changes
--------------------
- The 'plc4j-core' module has been merged into 'plc4j-api'.
  So there is no 'plc4j-core' module anymore. Just remove that
  dependency.
- The driver artifact names have changed so if you were using
  a `plc4j-protocol-{name}` you now need to change this to
  `plc4j-driver-{name}`

Bug Fixes
---------

PLC4X-75    Fixing dependency to the wrap url-handler
PLC4X-76    When receiving responses with more than 512 byte,
            the IsoOnTcp protocol doesn't work
PLC4X-77    When the last item in a request is a DINT, the
            DefaultS7MessageProcessor dies
PLC4X-78    Write operations seem to fail
-           Fixed a Bug where S7 was not able to read arrays.


==============================================================
Apache PLC4X (incubating) 0.2.0
==============================================================

This is the second official release of Apache PLC4X.

Especially have we addressed all issues reported during
our first release, that were of non-technical nature.
These were tracked in:

PLC4X-60	Fix findings by the last release

New Features
------------
A new connection-pool was added, which allows automatic
pooling and reuse of PLC connections.

A new OPM module was added, which allows JPA like read-
communication using POJOs, very similar to JPA.

A stub of a new driver for the Emerson DeltaV protocol
has been added, but is not yet a fully functional PLC4X
driver. This is also a first test of our new `passive-
mode-driver` concept.

Incompatible changes
--------------------

We have refactored the API in order to eliminate the
need of passing `x-requests` to `x-methods` and added
an `execute` method to each request type. This greatly
simplifies the client code. However this requires
refactoring of applications using the direct PLC4X API.

Miscellaneous changes
---------------------

We have increased the test coverage greatly and fixed
a lot of little errors we found on the way.

Known Issues
------------

Bug Fixes
---------

PLC4X-56	[S7] S7Field does not recognize addresses
            with numElements present
PLC4X-57	[S7] Response for address with numElements
            contains only first item
PLC4X-61	Installation fails plc4j-protocoll-ethernetip
            needs license
PLC4X-62	Modbus results deliver null-Value due to missing
            implementation of getShort, getLong ...



==============================================================
Apache PLC4X (incubating) 0.1.0
==============================================================

This is the first official release of Apache PLC4X.
It contains drivers for the following protocols:
- Siemens S7comm (0x32)
- Beckhoff ADS
- Modbus
- EtherNet/IP

However the Siemens driver definitely is the most
mature driver, the rest should be treated experimental.

New Features
------------

PLC4X-29	[S7] Implement PDU Fragmentation
PLC4X-39	Extend the Edgent integration with the new Subscription features of PLC4X

Incompatible changes
--------------------

- NONE -

Miscellaneous changes
---------------------

- NONE -

Known Issues
------------

- NONE -

Most drivers should be treated experimental and are not near production ready.
The S7 driver is probably the furthest implemented and tested driver and hereby can be
considered to be the most mature.

Bug Fixes
---------

PLC4X-20	Jacoco doesn't seem to be working at all
PLC4X-21	Code coverage doesn't seem to work
PLC4X-47	S7 driver silently ignores surplus ReadRequestItems
PLC4X-48	S7 driver fails to parse response with multiple items