//
//  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.
//

== Download

Be sure to verify your downloads by these https://www.apache.org/info/verification[procedures] using these https://www.apache.org/dist/plc4x/KEYS[KEYS] for any Apache release.

=== Current Releases

[#release-0.5.0]
==== 0.5.0 Official https://www.apache.org/dyn/closer.lua/plc4x/0.5.0/apache-plc4x-0.5.0-source-release.zip[source release] [ https://www.apache.org/dist/plc4x/0.5.0/apache-plc4x-0.5.0-source-release.zip.sha512[SHA512] ] [ https://www.apache.org/dist/plc4x/0.5.0/apache-plc4x-0.5.0-source-release.zip.asc[ASC] ]

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

=== Previous Releases

[#release-0.4.0]
==== 0.4.0 Official https://archive.apache.org/dist/plc4x/0.4.0/apache-plc4x-0.4.0-source-release.zip[source release] [ https://archive.apache.org/dist/plc4x/0.4.0/apache-plc4x-0.4.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/plc4x/0.4.0/apache-plc4x-0.4.0-source-release.zip.asc[ASC] ]

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

=== Incubating Releases

==== 0.3.1 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.3.1-incubating/apache-plc4x-incubating-0.3.1-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.3.1-incubating/apache-plc4x-incubating-0.3.1-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.3.1-incubating/apache-plc4x-incubating-0.3.1-source-release.zip.asc[ASC] ]

===== New Features

- No new features

===== Incompatible changes

- No incompatible changes.

===== Bug Fixes

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

[#release-0.3.0]
==== 0.3.0 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.3.0-incubating/apache-plc4x-incubating-0.3.0-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.3.0-incubating/apache-plc4x-incubating-0.3.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.3.0-incubating/apache-plc4x-incubating-0.3.0-source-release.zip.asc[ASC] ]

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

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

[#release-0.2.0]
==== 0.2.0 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.2.0-incubating/apache-plc4x-incubating-0.2.0-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.2.0-incubating/apache-plc4x-incubating-0.2.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.2.0-incubating/apache-plc4x-incubating-0.2.0-source-release.zip.asc[ASC] ]

===== Changes:

* Changed API: instead of passing request object to `read({read-request})`, `write({write-request})` or `subscribe({subscribe-request})` methods now the `execute()` method is called on the request itself
* New Connection Pool component
* New OPM (Object PLC Mapping) component (JPA for PLCs)
* Bug fixes

[#release-0.1.0]
==== 0.1.0 (incubating) Official https://archive.apache.org/dist/incubator/plc4x/0.1.0-incubating/apache-plc4x-incubating-0.1.0-source-release.zip[source release] [ https://archive.apache.org/dist/incubator/plc4x/0.1.0-incubating/apache-plc4x-incubating-0.1.0-source-release.zip.sha512[SHA512] ] [ https://archive.apache.org/dist/incubator/plc4x/0.1.0-incubating/apache-plc4x-incubating-0.1.0-source-release.zip.asc[ASC] ]
