Skip to content
Draft
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
9dce63a
chore: Started defining the new buffer-api kicking off the SPI3 refac…
chrisdutz Dec 8, 2025
f7d048c
chore: Removed some accidentally committed files.
chrisdutz Dec 8, 2025
2c419f9
feat: Implemented a first version of the byte-based buffers along wit…
chrisdutz Dec 12, 2025
5b57048
feat: Implemented a first version of the xml-based and ported the asc…
chrisdutz Dec 22, 2025
0b03d7f
refactor: Updated the box-based buffer to operate without external de…
chrisdutz Dec 22, 2025
dc6553d
refactor: Updated the box-based buffer to operate without external de…
chrisdutz Dec 22, 2025
5cafd70
refactor: Updated the box-based buffer to operate without external de…
chrisdutz Dec 22, 2025
f27d930
build(deps): bump org.sonarsource.scanner.maven:sonar-maven-plugin (#…
dependabot[bot] Dec 8, 2025
9b81b90
build(deps): bump org.apache.commons:commons-text from 1.14.0 to 1.15…
dependabot[bot] Dec 8, 2025
44b5829
build(deps): bump com.google.googlejavaformat:google-java-format (#2379)
dependabot[bot] Dec 8, 2025
f48224b
build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 in /plc4go (…
dependabot[bot] Dec 9, 2025
3b797ff
build(deps): bump golang.org/x/tools from 0.39.0 to 0.40.0 in /plc4go…
dependabot[bot] Dec 9, 2025
4c42c11
chore(build): use different sdk site
sruehl Dec 9, 2025
3ccf206
build(deps): bump com.igormaznitsa:gosdk-wrapper-maven-plugin (#2390)
dependabot[bot] Dec 10, 2025
cb4d5a4
build(deps): bump mockito.version from 5.20.0 to 5.21.0 (#2389)
dependabot[bot] Dec 10, 2025
558d10b
build(deps): bump com.gradle:develocity-maven-extension (#2391)
dependabot[bot] Dec 11, 2025
aba0b90
doc: Added documentation for a set of test-structures and initializta…
chrisdutz Dec 12, 2025
1171940
build(deps): bump org.apache.maven.plugins:maven-release-plugin (#2397)
dependabot[bot] Dec 15, 2025
2a8d433
build(deps): bump actions/upload-artifact from 5 to 6 (#2396)
dependabot[bot] Dec 15, 2025
fa2a9ae
build(deps): bump io.vavr:vavr from 0.10.7 to 0.11.0 (#2395)
dependabot[bot] Dec 15, 2025
3d78a51
build(deps): bump actions/cache from 4 to 5 (#2393)
dependabot[bot] Dec 15, 2025
d21f9b3
build(deps): bump logback.version from 1.5.21 to 1.5.22 (#2392)
dependabot[bot] Dec 15, 2025
1a584f2
build(deps-dev): bump org.testcontainers:testcontainers (#2400)
dependabot[bot] Dec 16, 2025
8577a39
build(deps-dev): bump org.testcontainers:junit-jupiter (#2399)
dependabot[bot] Dec 16, 2025
c9eea1b
build(deps): bump org.apache.karaf.tooling:karaf-maven-plugin (#2398)
dependabot[bot] Dec 16, 2025
8d2016e
build(deps): bump org.jetbrains.kotlin:kotlin-stdlib (#2402)
dependabot[bot] Dec 17, 2025
9044d32
build(deps): bump org.apache.maven:maven-artifact from 3.9.11 to 3.9.…
dependabot[bot] Dec 17, 2025
2db73b9
refactor: Added the queryName to the browse request interceptor inter…
chrisdutz Dec 31, 2025
464d081
build(deps): bump dorny/test-reporter from 2.3.0 to 2.5.0 (#2409)
dependabot[bot] Jan 5, 2026
ead9032
build(deps): bump org.codehaus.mojo:exec-maven-plugin (#2405)
dependabot[bot] Jan 5, 2026
e1b6c37
build(deps): bump net.bytebuddy:byte-buddy from 1.18.2 to 1.18.3 (#2404)
dependabot[bot] Jan 5, 2026
708e7be
build(deps): bump logback.version from 1.5.22 to 1.5.23 (#2403)
dependabot[bot] Jan 5, 2026
89ecceb
build(deps): bump nl.jqno.equalsverifier:equalsverifier (#2412)
dependabot[bot] Jan 6, 2026
51b0fa2
build(deps): bump com.github.eirslett:frontend-maven-plugin (#2411)
dependabot[bot] Jan 6, 2026
b0de760
build(deps-dev): bump org.json:json from 20250517 to 20251224 (#2410)
dependabot[bot] Jan 6, 2026
9add874
build(deps): bump org.junit:junit-bom from 6.0.1 to 6.0.2 (#2415)
dependabot[bot] Jan 7, 2026
e8da04a
build(deps): bump logback.version from 1.5.23 to 1.5.24 (#2414)
dependabot[bot] Jan 7, 2026
3b90dd3
build(deps): bump org.apache:apache from 35 to 36 (#2413)
dependabot[bot] Jan 7, 2026
d710b53
feat: Added a new PlcCertificateAuthentication type to the API module.
chrisdutz Jan 9, 2026
a1877c9
feat: Add github link to header
hutcheb Jan 10, 2026
76c4360
refactor: Refactored the ConnectionStateListener to allow reporting m…
chrisdutz Jan 11, 2026
d958bed
fix: Updated the prereqisiteCheck to also deal with new versions of l…
chrisdutz Jan 11, 2026
2547ef6
build(deps): bump golang.org/x/text from 0.32.0 to 0.33.0 in /plc4go …
dependabot[bot] Jan 12, 2026
8986f19
chore: Cleanup after merging in changes from develop
chrisdutz Jan 12, 2026
d8e188c
chore: Added updated "values", "fields" and "utlis" modules, which ar…
chrisdutz Jan 12, 2026
780995a
chore: Added a new code-generation module based on JavaPoet and integ…
chrisdutz Jan 12, 2026
a150791
chore: Updated the mspecs for the new style of handling encoding, byt…
chrisdutz Jan 12, 2026
23ad80f
fix: Resolved some build issues related to missing apache headers.
chrisdutz Jan 12, 2026
ff35305
chore: Updated the utils and tools to handle the updated api
chrisdutz Jan 12, 2026
a2fbbac
chore: Finished implementing support for referencing DataIo types in …
chrisdutz Jan 13, 2026
4633b1f
chore: Fine-tuned the generator for some of the mspecs I added back r…
chrisdutz Jan 13, 2026
05b5104
chore: Fine-tuned the mspecs, I recently added back to be compatible …
chrisdutz Jan 13, 2026
de511c5
chore: Updated the code generated by the code-generator as proof that…
chrisdutz Jan 13, 2026
26d9b6d
feat: Added the config code in a separate spi module.
chrisdutz Jan 28, 2026
6e1c800
feat: Added the audit-log functionality.
chrisdutz Jan 28, 2026
4602b8a
chore: Update of the knx vendor ids.
chrisdutz Jan 28, 2026
a2cbfeb
feat: Added the API module for the new transports.
chrisdutz Feb 2, 2026
4e8bd26
Merge remote-tracking branch 'refs/remotes/origin/develop' into refac…
chrisdutz Feb 2, 2026
99a83bb
chore: Added missing Apache headers to the README.md
chrisdutz Feb 2, 2026
cee1472
feat: Added a first version of a new TCP transport including comprehe…
chrisdutz Feb 2, 2026
428b9fe
feat: Added a first version of a new TCP transport including comprehe…
chrisdutz Feb 4, 2026
4adb74d
feat: Added a first version of a new Serial transport including compr…
chrisdutz Feb 6, 2026
65dadba
fix: Updated the code to not fail the build, if "socat" is not instal…
chrisdutz Feb 6, 2026
3e0d37f
chore: Fine tuned the tcp transport a bit more.
chrisdutz Feb 6, 2026
0238c9f
feat: Re-Implemented the pcap-replay transport.
chrisdutz Mar 20, 2026
51890d1
feat: Re-Implemented the raw-socket transport.
chrisdutz Mar 20, 2026
b154325
feat: Re-Implemented the test transport.
chrisdutz Mar 20, 2026
9c7d800
feat: Implemented a new TLS transport (using pre-shared-keys, self-si…
chrisdutz Mar 20, 2026
593e4de
feat: Re-Implemented the can transports.
chrisdutz Mar 20, 2026
65cf9a9
chore: Added some optimizations for parsing temporal values.
chrisdutz Apr 2, 2026
84f1b54
chore: Disabled the tools that will be replaced anyway later in the p…
chrisdutz Apr 9, 2026
a75c01d
feat: Aded some additonal methods and default NullAuthentication to t…
chrisdutz Apr 9, 2026
d43d909
test: Completely cleaned up and rewrote a lot of the old test-utils m…
chrisdutz Apr 9, 2026
ecd898c
chore: Updated the KNX and the BacNet vendor ids.
chrisdutz Apr 9, 2026
9408c67
feat: Defined a "cotp" protocol (stripped down version of the S7 mspe…
chrisdutz Apr 9, 2026
4bb5327
chore: Ported the logic of the old Modbus driver to the new SPI3 (Add…
chrisdutz Apr 14, 2026
847f247
chore: Addressed some performance issues, that were causing the new M…
chrisdutz Apr 14, 2026
37ccfc0
chore: Renamed all transports artifactIds to use the plural form of "…
chrisdutz Apr 15, 2026
66e80ad
feat: Officially added support for ModbusTCP via TLS.
chrisdutz Apr 16, 2026
c509b1d
feat: Added real configuration types after finding out there's a form…
chrisdutz Apr 16, 2026
66ba7f9
chore: Updated the KNX and the BacNet vendor ids.
chrisdutz Apr 16, 2026
ca01eb8
test: Added Integration Tests that test all 3 Modbus variants with TC…
chrisdutz Apr 16, 2026
f2c5c54
test: Added DriverTestsuite tests for each supported types (both sing…
chrisdutz Apr 19, 2026
f825fda
chore: Updated the KNX and the BacNet vendor ids.
chrisdutz Apr 19, 2026
c2e842b
chore: Finetuning the format of the xml-based testsuites.
chrisdutz Apr 28, 2026
ee9badf
chore: Successfully ported the ADS driver to SPI3 (Discovery still ha…
chrisdutz Apr 29, 2026
a51d16f
chore: Got the Discovery working too.
chrisdutz Apr 29, 2026
c188d84
refactor: Minor updates to the syntax of the ParserSerializerTest and…
chrisdutz May 4, 2026
e41b9c0
feat: Added two new response codes for situations from the Profinet e…
chrisdutz May 4, 2026
4337b95
chore: Updated the KNX vendor ids and minor updates to the OPC-UA spec.
chrisdutz May 4, 2026
58aec26
chore: Continued updating and testing the ADS driver (Found some new …
chrisdutz May 4, 2026
3df49d3
Merge branch 'develop' into refactor/spi3
chrisdutz May 4, 2026
8bcbeb4
chore: Merged in all changes from develop.
chrisdutz May 4, 2026
72aaff5
chore: Updated the configuration of the new umas protocol to wait to …
chrisdutz May 4, 2026
a282533
fix: Addressed the complex tag address issues. Now the full testsuite…
chrisdutz May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
56 changes: 56 additions & 0 deletions plc4j/drivers/firmata/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,62 @@
<scope>test</scope>
</dependency>

<!-- Testcontainers for integration testing -->
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-junit-jupiter</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.pfichtner</groupId>
<artifactId>testcontainers-virtualavr</artifactId>
<version>0.0.2-SNAPSHOT</version>
<scope>test</scope>
</dependency>

<!-- serial communication -->
<dependency>
<groupId>io.github.java-native</groupId>
<artifactId>jssc</artifactId>
<version>2.10.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.27.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>

<!-- WebSocket client for controlling VirtualAVR pins -->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.6.0</version>
<scope>test</scope>
</dependency>

<!-- JSON for WebSocket messages -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-utils-test-utils</artifactId>
Expand Down
4 changes: 2 additions & 2 deletions plc4j/drivers/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
</properties>

<modules>
<module>ab-eth</module>
<!--module>ab-eth</module>
<module>ads</module>
<module>bacnet</module>
<module>c-bus</module>
Expand All @@ -58,7 +58,7 @@
<module>profinet-ng</module>
<module>s7</module>
<module>simulated</module>
<module>all</module>
<module>all</module-->
</modules>

</project>
25 changes: 22 additions & 3 deletions plc4j/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,15 @@
<goals>
<goal>report</goal>
</goals>
<configuration>
<!-- Exclude multi-release classes and generated code -->
<excludes>
<exclude>META-INF/versions/**</exclude>
<exclude>module-info.class</exclude>
<!-- Exclude generated protocol code packages (all readwrite packages are generated) -->
<exclude>**/readwrite/*.class</exclude>
</excludes>
</configuration>
</execution>
<!--
Check if the unit-test-coverage is at least a certain minimum.
Expand All @@ -171,8 +180,18 @@
<goal>check</goal>
</goals>
<configuration>
<!-- TODO: Turn this on as soon as possible. -->
<haltOnFailure>false</haltOnFailure>
<haltOnFailure>true</haltOnFailure>
<!-- Exclude multi-release classes, functional interfaces, and generated code -->
<excludes>
<exclude>META-INF/versions/**</exclude>
<exclude>module-info.class</exclude>
<!-- Exclude functional interfaces that can't be directly covered -->
<exclude>**/*$*Listener.class</exclude>
<!-- Exclude generated protocol code packages (all readwrite packages are generated) -->
<exclude>**/readwrite/*.class</exclude>
<!-- Exclude functional marker interfaces (hard to test directly) -->
<exclude>**/with*.class</exclude>
</excludes>
<rules>
<rule implementation="org.jacoco.maven.RuleConfiguration">
<element>BUNDLE</element>
Expand All @@ -181,7 +200,7 @@
<limit implementation="org.jacoco.report.check.Limit">
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.50</minimum>
<minimum>0.80</minimum>
</limit>
<!-- Fail the build if there are classes without any coverage. -->
<limit implementation="org.jacoco.report.check.Limit">
Expand Down
41 changes: 41 additions & 0 deletions plc4j/spi/buffers/api/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?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

https://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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-spi-buffers</artifactId>
<version>0.14.0-SNAPSHOT</version>
</parent>

<artifactId>plc4j-spi-buffers-api</artifactId>

<name>PLC4J: SPI: Buffers: API</name>

<properties>
<project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
</properties>

<dependencies>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* 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
*
* https://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.spi.buffers.api;

import org.apache.plc4x.java.spi.buffers.api.exceptions.BufferException;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public abstract class AbstractBuffer implements Buffer {

protected final Stack<WithOption[]> context;

public AbstractBuffer(WithOption... options) {
context = new Stack<>();
context.push(options);
}

@Override
public void pushContext(WithOption... options) throws BufferException {
Map<Class<?>, WithOption> newOptions = new HashMap<>();

// Add all new options.
for (WithOption option : options) {
newOptions.put(option.getClass(), option);
}

// Add all inherited options.
if (!context.isEmpty()) {
for (WithOption option : context.peek()) {
if (option.isSticky() && !newOptions.containsKey(option.getClass())) {
newOptions.put(option.getClass(), option);
}
}
}

// Switch the context to the next one.
context.push(newOptions.values().toArray(new WithOption[0]));
}

@Override
public void popContext(WithOption... options) throws BufferException {
if (!context.isEmpty()) {
context.pop();
}
}

@Override
public WithOption[] getContext() {
if (!context.isEmpty()) {
return context.peek();
}
return new WithOption[0];
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.plc4x.java.spi.codegen.io;
package org.apache.plc4x.java.spi.buffers.api;

import org.apache.plc4x.java.api.value.PlcValue;
import org.apache.plc4x.java.spi.generation.SerializationException;
import org.apache.plc4x.java.spi.buffers.api.exceptions.BufferException;

@FunctionalInterface
public interface DataIoSerializerFunction<T> {
public interface Buffer {

void apply(T t, PlcValue value) throws SerializationException;
void pushContext(WithOption... options) throws BufferException;

void popContext(WithOption... options) throws BufferException;

WithOption[] getContext();

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.plc4x.java.spi.generation;

import org.apache.plc4x.java.spi.utils.Serializable;
package org.apache.plc4x.java.spi.buffers.api;

public interface Message extends Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.plc4x.java.spi.generation;
package org.apache.plc4x.java.spi.buffers.api;


import org.apache.plc4x.java.spi.buffers.api.exceptions.BufferException;

@FunctionalInterface
public interface MessageInput<PARSER_TYPE> {

PARSER_TYPE parse(ReadBuffer io) throws ParseException;
PARSER_TYPE parse(ReadBuffer io) throws BufferException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.plc4x.java.spi.generation;
package org.apache.plc4x.java.spi.buffers.api;

public interface MessageOutput<SERIALIZER_TYPE> {

WriteBufferByteBased serialize(SERIALIZER_TYPE value) throws SerializationException;
import org.apache.plc4x.java.spi.buffers.api.exceptions.BufferException;

public interface MessageOutput<PARSER_TYPE, SERIALIZER_TYPE> {

PARSER_TYPE serialize(SERIALIZER_TYPE value) throws BufferException;

}
Loading