namespace ZB.MOM.WW.OtOpcUa.Driver.AbLegacy;
///
/// Wire-layer abstraction over a single PCCC tag. Mirrors IAbCipTagRuntime's shape so
/// the same test-fake pattern applies; the only meaningful difference is the protocol layer
/// underneath (ab_pccc vs ab_eip).
///
public interface IAbLegacyTagRuntime : IDisposable
{
Task InitializeAsync(CancellationToken cancellationToken);
Task ReadAsync(CancellationToken cancellationToken);
Task WriteAsync(CancellationToken cancellationToken);
int GetStatus();
object? DecodeValue(AbLegacyDataType type, int? bitIndex);
void EncodeValue(AbLegacyDataType type, int? bitIndex, object? value);
///
/// PR 7 — decode element of an N-element contiguous
/// block read. Implementations call the same per-element accessors used by
/// at offset elementIndex × elementBytes. Default
/// implementation throws so existing fakes that don't override remain explicit.
///
object? DecodeArrayElement(AbLegacyDataType type, int elementIndex)
=> throw new NotSupportedException(
"Array decoding requires an IAbLegacyTagRuntime that overrides DecodeArrayElement.");
}
public interface IAbLegacyTagFactory
{
IAbLegacyTagRuntime Create(AbLegacyTagCreateParams createParams);
}
public sealed record AbLegacyTagCreateParams(
string Gateway,
int Port,
string CipPath,
string LibplctagPlcAttribute,
string TagName,
TimeSpan Timeout,
int ElementCount = 1);