feat(s7): byte-buffer codec dispatch + Int64/UInt64/LReal scalar read+write

This commit is contained in:
Joseph Doherty
2026-06-17 05:38:18 -04:00
parent 06b858eb02
commit 286be5df88
7 changed files with 453 additions and 128 deletions
@@ -171,23 +171,7 @@ public sealed class S7ArrayReadTests
// ── Discovery — IsArray / ArrayDim flip ───────────────────────────────────────────────
private sealed class RecordingBuilder : IAddressSpaceBuilder
{
public readonly List<(string Name, DriverAttributeInfo Attr)> Variables = new();
public IAddressSpaceBuilder Folder(string browseName, string displayName) => this;
public IVariableHandle Variable(string browseName, string displayName, DriverAttributeInfo attr)
{
Variables.Add((browseName, attr));
return new Handle();
}
public void AddProperty(string browseName, DriverDataType dataType, object? value) { }
public void AttachAlarmCondition(IVariableHandle sourceVariable, string alarmName, DriverAttributeInfo alarmInfo) { }
private sealed class Handle : IVariableHandle
{
public string FullReference => "stub";
public IAlarmConditionSink MarkAsAlarmCondition(AlarmConditionInfo info) => throw new NotImplementedException();
}
}
// RecordingAddressSpaceBuilder lives in S7TestBuilders.cs — shared across the S7 test suite.
/// <summary>Verifies an array tag is discovered with IsArray=true and ArrayDim=count.</summary>
[Fact]
@@ -204,7 +188,7 @@ public sealed class S7ArrayReadTests
};
using var drv = new S7Driver(opts, "s7-arr-disco");
var builder = new RecordingBuilder();
var builder = new RecordingAddressSpaceBuilder();
await drv.DiscoverAsync(builder, TestContext.Current.CancellationToken);
var scalar = builder.Variables.Single(v => v.Name == "Scalar").Attr;
@@ -229,7 +213,7 @@ public sealed class S7ArrayReadTests
};
using var drv = new S7Driver(opts, "s7-arr-one");
var builder = new RecordingBuilder();
var builder = new RecordingAddressSpaceBuilder();
await drv.DiscoverAsync(builder, TestContext.Current.CancellationToken);
var one = builder.Variables.Single().Attr;
@@ -248,7 +232,7 @@ public sealed class S7ArrayReadTests
};
using var drv = new S7Driver(opts, "s7-arr-null");
var builder = new RecordingBuilder();
var builder = new RecordingAddressSpaceBuilder();
await drv.DiscoverAsync(builder, TestContext.Current.CancellationToken);
var scalar = builder.Variables.Single().Attr;