Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -374,17 +374,6 @@ jobs:
- name: Install Java bindings
shell: bash
run: (cd ffi/bindings/java/dnp3 && sudo mvn install)
- name: Checkout dnp4s
uses: actions/checkout@v6
with:
repository: stepfunc/dnp4s
ssh-key: ${{ secrets.DNP4S_SSH_KEY }}
# a fixed dnp4s commit until dnp4s publishes releases
ref: be35ada4cfa99968cd07b292b9c88c4a36c32111
path: dnp4s
- name: Build dnp4s
working-directory: dnp4s
run: sudo mvn --batch-mode install
- name: Capture packets during the conformance tests
working-directory: conformance
# capturing needs root, which the tests run as; local runs leave it off
Expand Down
2 changes: 1 addition & 1 deletion conformance/device.ini
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ analogInput.analogInputEventsClass = 3
# Unsolicited confirmation timeout value (in ms) min: 1
# The outstation has one confirm timeout, for solicited and unsolicited responses: 2000 ms unless a procedure sets it.
# This and outstation.app.confirm.timeout.ms must match it. It must also be no longer than the response timeout: the
# outstation holds 8.11.2.1's READ until its startup response is confirmed or this timeout expires (dnp4s#7).
# outstation holds 8.11.2.1's READ until its startup response is confirmed or this timeout expires (stepfunc/dnp3c#1).
unsolicited.unsolicitedConfirmTimeoutMs = 2000

# Other Master address where unsolicited responses can be configured to send to min: 0 max: 65519
Expand Down
8 changes: 4 additions & 4 deletions conformance/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<scala.version>3.9.0</scala.version>
<dnp3.version>1.8.0-M1</dnp3.version>
<dnp4s.version>0.1.0-SNAPSHOT</dnp4s.version>
<dnp3c.version>0.1.0</dnp3c.version>
<scala-maven-plugin.version>4.10.0</scala-maven-plugin.version>
</properties>

Expand Down Expand Up @@ -63,9 +63,9 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.stepfunc.dnp4s</groupId>
<artifactId>conformance</artifactId>
<version>${dnp4s.version}</version>
<groupId>io.stepfunc</groupId>
<artifactId>dnp3c</artifactId>
<version>${dnp3c.version}</version>
</dependency>
<dependency>
<groupId>io.stepfunc</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.stepfunc.conformance.dnp3

import io.stepfunc.dnp4s.dnp3.app._
import io.stepfunc.dnp4s.dnp3.app.objects.AttributeValue
import io.stepfunc.dnp4s.dnp3.{ActionResult, ActionTiming, CheckReporter, DeferredCheck, EventExpectation, InputKind, IntegrationPlugin, PluginReporter}
import io.stepfunc.dnp4s.protocol.parsing.UInt8
import io.stepfunc.dnp3c.dnp3.app._
import io.stepfunc.dnp3c.dnp3.app.objects.AttributeValue
import io.stepfunc.dnp3c.dnp3.{ActionResult, ActionTiming, CheckReporter, DeferredCheck, EventExpectation, InputKind, IntegrationPlugin, PluginReporter}
import io.stepfunc.dnp3c.protocol.parsing.UInt8
import io.stepfunc.dnp3.{AddressFilter, AnalogInput, AnalogOutputStatus, BinaryInput, BinaryOutputStatus, Counter, DoubleBit, DoubleBitBinaryInput, EventBufferConfig, FrozenCounter, LinkErrorMode, Outstation, Runtime, RuntimeConfig, OutstationServer}
import org.joou.UInteger
import org.joou.Unsigned.{uint, ushort}
Expand Down Expand Up @@ -620,10 +620,10 @@ class Dnp3IntegrationPlugin extends IntegrationPlugin {
if (expectedValue.idx != receivedValue.idx) throw new Exception("Unknown double-bit binary point event reported")

// Check value
if ((expectedValue.value.value == DoubleBit.DETERMINED_OFF && receivedValue.point.value != io.stepfunc.dnp4s.dnp3.app.DoubleBit.DeterminedOff) ||
(expectedValue.value.value == DoubleBit.DETERMINED_ON && receivedValue.point.value != io.stepfunc.dnp4s.dnp3.app.DoubleBit.DeterminedOn) ||
(expectedValue.value.value == DoubleBit.INDETERMINATE && receivedValue.point.value != io.stepfunc.dnp4s.dnp3.app.DoubleBit.Indeterminate) ||
(expectedValue.value.value == DoubleBit.INTERMEDIATE && receivedValue.point.value != io.stepfunc.dnp4s.dnp3.app.DoubleBit.Intermediate)) {
if ((expectedValue.value.value == DoubleBit.DETERMINED_OFF && receivedValue.point.value != io.stepfunc.dnp3c.dnp3.app.DoubleBit.DeterminedOff) ||
(expectedValue.value.value == DoubleBit.DETERMINED_ON && receivedValue.point.value != io.stepfunc.dnp3c.dnp3.app.DoubleBit.DeterminedOn) ||
(expectedValue.value.value == DoubleBit.INDETERMINATE && receivedValue.point.value != io.stepfunc.dnp3c.dnp3.app.DoubleBit.Indeterminate) ||
(expectedValue.value.value == DoubleBit.INTERMEDIATE && receivedValue.point.value != io.stepfunc.dnp3c.dnp3.app.DoubleBit.Intermediate)) {
throw new Exception(f"Double-bit binary ${receivedValue.idx} did not report proper value")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ package io.stepfunc.conformance.dnp3

object Main {
def main(args: Array[String]): Unit = {
io.stepfunc.dnp4s.conformance.Main.run(args, new Dnp3IntegrationPlugin())
io.stepfunc.dnp3c.conformance.Main.run(args, new Dnp3IntegrationPlugin())
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.stepfunc.conformance.dnp3

import io.stepfunc.dnp4s.dnp3.app.EventClass
import io.stepfunc.dnp4s.dnp3.app.objects.AttributeValue
import io.stepfunc.dnp3c.dnp3.app.EventClass
import io.stepfunc.dnp3c.dnp3.app.objects.AttributeValue
import io.stepfunc.dnp3._
import org.joou.UByte
import org.joou.Unsigned.{ubyte, uint, ushort}
Expand Down
Loading