==============================================================
(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
