Releases: smdn/Smdn.Net.EchonetLite
Releases · smdn/Smdn.Net.EchonetLite
Smdn.Net.SmartMeter version 2.0.0
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-01-12 update assembly version
- 2025-01-08 disable waring CS0419
- 2025-01-04 add SmartMeterDataAggregator.IsRunning
- 2024-12-17 add SmartMeterDataAggregator.HandleAggregationTaskException
- 2024-12-17 avoid refering disconnected smart meter object
- 2024-12-10 rename from Smdn.Net.EchonetLite.RouteB.DataAggregation to Smdn.Net.SmartMeter
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.SmartMeter/Smdn.Net.SmartMeter-net8.0.apilist.cs b/doc/api-list/Smdn.Net.SmartMeter/Smdn.Net.SmartMeter-net8.0.apilist.cs
new file mode 100644
index 0000000..71ae204
--- /dev/null
+++ b/doc/api-list/Smdn.Net.SmartMeter/Smdn.Net.SmartMeter-net8.0.apilist.cs
@@ -0,0 +1,140 @@
+// Smdn.Net.SmartMeter.dll (Smdn.Net.SmartMeter-2.0.0)
+// Name: Smdn.Net.SmartMeter
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0+1702d101b7d7da969b9b6258406b4aea5a1b98b4
+// TargetFramework: .NETCoreApp,Version=v8.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Smdn.Net.EchonetLite, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Polly.Registry;
+using Smdn.Net.EchonetLite.RouteB;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.SmartMeter;
+
+namespace Smdn.Net.SmartMeter {
+ public sealed class CumulativeElectricEnergyAggregation : PeriodicCumulativeElectricEnergyAggregation {
+ public CumulativeElectricEnergyAggregation(bool aggregateNormalDirection, bool aggregateReverseDirection) {}
+
+ public override TimeSpan DurationOfMeasurementPeriod { get; }
+ public override DateTime StartOfMeasurementPeriod { get; }
+
+ protected override bool TryGetBaselineValue(bool normalOrReverseDirection, out MeasurementValue<ElectricEnergyValue> @value) {}
+ }
+
+ public sealed class DailyCumulativeElectricEnergyAggregation : PeriodicCumulativeElectricEnergyAggregation {
+ public DailyCumulativeElectricEnergyAggregation(bool aggregateNormalDirection, bool aggregateReverseDirection) {}
+
+ public override TimeSpan DurationOfMeasurementPeriod { get; }
+ public override DateTime StartOfMeasurementPeriod { get; }
+ }
+
+ [TupleElementNames(new string[] { "RPhase", "TPhase" })]
+ public class InstantaneousCurrentAggregation : MeasurementValueAggregation<(ElectricCurrentValue, ElectricCurrentValue)> {
+ public static readonly TimeSpan DefaultAggregationInterval; // = "00:01:00"
+
+ public InstantaneousCurrentAggregation() {}
+ public InstantaneousCurrentAggregation(TimeSpan aggregationInterval) {}
+ }
+
+ public class InstantaneousElectricPowerAggregation : MeasurementValueAggregation<int> {
+ public static readonly TimeSpan DefaultAggregationInterval; // = "00:01:00"
+
+ public InstantaneousElectricPowerAggregation() {}
+ public InstantaneousElectricPowerAggregation(TimeSpan aggregationInterval) {}
+ }
+
+ public abstract class MeasurementValueAggregation<TMeasurementValue> : SmartMeterDataAggregation {
+ public TimeSpan AggregationInterval { get; }
+ public DateTime LatestMeasurementTime { get; }
+ public TMeasurementValue LatestValue { get; }
+
+ internal protected virtual void OnLatestValueUpdated() {}
+ }
+
+ public sealed class MonthlyCumulativeElectricEnergyAggregation : PeriodicCumulativeElectricEnergyAggregation {
+ public MonthlyCumulativeElectricEnergyAggregation(bool aggregateNormalDirection, bool aggregateReverseDirection) {}
+
+ public override TimeSpan DurationOfMeasurementPeriod { get; }
+ public override DateTime StartOfMeasurementPeriod { get; }
+ }
+
+ public abstract class PeriodicCumulativeElectricEnergyAggregation : SmartMeterDataAggregation {
+ protected PeriodicCumulativeElectricEnergyAggregation(bool aggregateNormalDirection, bool aggregateReverseDirection) {}
+
+ public bool AggregateNormalDirection { get; }
+ public bool AggregateReverseDirection { get; }
+ public abstract TimeSpan DurationOfMeasurementPeriod { get; }
+ public decimal NormalDirectionValueInKiloWattHours { get; }
+ public decimal ReverseDirectionValueInKiloWattHours { get; }
+ public abstract DateTime StartOfMeasurementPeriod { get; }
+
+ protected virtual void OnNormalDirectionBaselineValueUpdated() {}
+ internal protected virtual void OnNormalDirectionLatestValueUpdated() {}
+ protected virtual void OnNormalDirectionValueChanged() {}
+ protected virtual void OnReverseDirectionBaselineValueUpdated() {}
+ internal protected virtual void OnReverseDirectionLatestValueUpdated() {}
+ protected virtual void OnReverseDirectionValueChanged() {}
+ protected virtual bool TryGetBaselineValue(bool normalOrReverseDirection, out MeasurementValue<ElectricEnergyValue> @value) {}
+ public virtual bool TryGetCumulativeValue(bool normalOrReverseDirection, out decimal valueInKiloWattHours, out DateTime measuredAt) {}
+ }
+
+ public abstract class SmartMeterDataAggregation : INotifyPropertyChanged {
+ public event PropertyChangedEventHandler? PropertyChanged;
+
+ protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) {}
+ }
+
+ public class SmartMeterDataAggregator : HemsController {
+ public static readonly string ResiliencePipelineKeyForAcquirePropertyValuesForAggregatingData = "SmartMeterDataAggregator.resiliencePipelineAcquirePropertyValuesForAggregatingData";
+ public static readonly string ResiliencePipelineKeyForRunAggregationTask = "SmartMeterDataAggregator.resiliencePipelineRunAggregationTask";
+ public static readonly string ResiliencePipelineKeyForSmartMeterConnection = "SmartMeterDataAggregator.resiliencePipelineConnectToSmartMeter";
+ public static readonly string ResiliencePipelineKeyForSmartMeterPropertyValueReadService = "SmartMeterDataAggregator.ResiliencePipelineReadSmartMeterPropertyValue";
+ public static readonly string ResiliencePipelineKeyForSmartMeterPropertyValueWriteService = "SmartMeterDataAggregator.ResiliencePipelineWriteSmartMeterPropertyValue";
+ public static readonly string ResiliencePipelineKeyForSmartMeterReconnection = "SmartMeterDataAggregator.resiliencePipelineReconnectToSmartMeter";
+ public static readonly string ResiliencePipelineKeyForUpdatePeriodicCumulativeElectricEnergyBaselineValue = "SmartMeterDataAggregator.resiliencePipelineUpdatePeriodicCumulativeElectricEnergyBaselineValue";
+
+ public SmartMeterDataAggregator(IEnumerable<SmartMeterDataAggregation> dataAggregations, IRouteBEchonetLiteHandlerFactory echonetLiteHandlerFactory, IRouteBCredentialProvider routeBCredentialProvider, ResiliencePipelineProvider<string>? resiliencePipelineProvider, ILogger? logger, ILoggerFactory? loggerFactoryForEchonetClient) {}
+ public SmartMeterDataAggregator(IEnumerable<SmartMeterDataAggregation> dataAggregations, IServiceProvider serviceProvider) {}
+
+ public IReadOnlyCollection<SmartMeterDataAggregation> DataAggregations { get; }
+ public bool IsRunning { get; }
+
+ protected override void Dispose(bool disposing) {}
+ protected virtual bool HandleAggregationTaskException(Exception exception) {}
+ public ValueTask StartAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask StartAsync(TaskFactory? aggregationTaskFactory, CancellationToken cancellationToken = default) {}
+ public async ValueTask StopAsync(CancellationToken cancellationToken) {}
+ }
+
+ public sealed class WeeklyCumulativeElectricEnergyAggregation : PeriodicCumulativeElectricEnergyAggregation {
+ public WeeklyCumulativeElectricEnergyAggregation(bool aggregateNormalDirection, bool aggregateReverseDirection, DayOfWeek firstDayOfWeek)...
Smdn.Net.EchonetLite.RouteB.Primitives version 2.0.0
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-01-12 update assembly version
- 2025-01-09 add cancellation point
- 2025-01-09 fix not to call StartReceiving() when already started receiving
- 2024-12-04 drop target framework net6.0
- 2024-11-08 fix to call StopReceivingAsync before disconnection
- 2024-11-06 fix to call StopReceivingAsync only if receiving task is running
- 2024-11-02 improve object construction to have ILogger in EchonetLiteHandler
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs
deleted file mode 100644
index b9ba083..0000000
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
-// Name: Smdn.Net.EchonetLite.RouteB.Primitives
-// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
-// TargetFramework: .NETCoreApp,Version=v6.0
-// Configuration: Release
-// Referenced assemblies:
-// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
-// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
-// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-#nullable enable annotations
-
-using System;
-using System.Buffers;
-using System.Net;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.Extensions.DependencyInjection;
-using Smdn.Net.EchonetLite.RouteB.Credentials;
-using Smdn.Net.EchonetLite.RouteB.Transport;
-using Smdn.Net.EchonetLite.Transport;
-
-namespace Smdn.Net.EchonetLite.RouteB.Credentials {
- public interface IRouteBCredential : IDisposable {
- void WriteIdTo(IBufferWriter<byte> buffer);
- void WritePasswordTo(IBufferWriter<byte> buffer);
- }
-
- public interface IRouteBCredentialIdentity {
- }
-
- public interface IRouteBCredentialProvider {
- IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
- }
-
- public static class RouteBCredentials {
- public const int AuthenticationIdLength = 32;
- public const int PasswordLength = 12;
- }
-}
-
-namespace Smdn.Net.EchonetLite.RouteB.Transport {
- public interface IRouteBEchonetLiteHandlerBuilder {
- IServiceCollection Services { get; }
- }
-
- public interface IRouteBEchonetLiteHandlerFactory {
- ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
- }
-
- public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
- protected RouteBEchonetLiteHandler() {}
-
- public abstract IPAddress? PeerAddress { get; }
-
- public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
- protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
- public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
- protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
- }
-}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
index 6ad7338..69197c3 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
@@ -1,65 +1,68 @@
-// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0)
// Name: Smdn.Net.EchonetLite.RouteB.Primitives
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// InformationalVersion: 2.0.0+7829b96052cff6b82bd3e68fb0ced5454037c338
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Buffers;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite.RouteB.Credentials;
using Smdn.Net.EchonetLite.RouteB.Transport;
using Smdn.Net.EchonetLite.Transport;
namespace Smdn.Net.EchonetLite.RouteB.Credentials {
public interface IRouteBCredential : IDisposable {
void WriteIdTo(IBufferWriter<byte> buffer);
void WritePasswordTo(IBufferWriter<byte> buffer);
}
public interface IRouteBCredentialIdentity {
}
public interface IRouteBCredentialProvider {
IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
}
public static class RouteBCredentials {
public const int AuthenticationIdLength = 32;
public const int PasswordLength = 12;
}
}
namespace Smdn.Net.EchonetLite.RouteB.Transport {
public interface IRouteBEchonetLiteHandlerBuilder {
IServiceCollection Services { get; }
}
public interface IRouteBEchonetLiteHandlerFactory {
ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
}
public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
- protected RouteBEchonetLiteHandler() {}
+ protected RouteBEchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
public abstract IPAddress? PeerAddress { get; }
public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.5.0.0.
// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
index 23438af..6bd7124 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
@@ -1,63 +1,65 @@
-// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0)
// Name: Smdn.Net.EchonetLite.RouteB.Primitives
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// InformationalVersion: 2.0.0+7829b96052cff6b82bd3e68fb0ced5454037c338
// TargetFramework: .NETStandard,Version=v2.1
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKey...
Smdn.Net.EchonetLite.RouteB version 2.0.0
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-01-12 update assembly version
- 2025-01-10 fix conversion from [kWh] to [Wh]
- 2025-01-10 expose public ctor
- 2024-12-17 minor refactor
- 2024-12-17 suppress warning CS8602
- 2024-12-17 add HemsController.IsConnected
- 2024-12-04 drop target framework net6.0
- 2024-11-19 add EchonetObjectExtensions.AcquirePropertyMapsAsync
- 2024-11-16 use types that derived from System.EventArgs for event arguments
- 2024-11-08 improve to reuse controller object and self node
- 2024-11-08 ensure to dispose EchonetClient
- 2024-11-07 introduce EchonetNodeRegistry
- 2024-11-05 use generic version of ServiceDescriptor.Singleton
- 2024-11-02 introduce ResiliencePipeline into HemsController.ConnectAsync
- 2024-11-02 add HemsController.SynchronizingObject to share ISynchronizeInvoke with inner EchonetClient
- 2024-11-02 add method for invoking actions with response wait timer
- 2024-11-02 fix to refer the proper CancellationToken
- 2024-11-02 add utility method for creating CancellationTokenSource of TimeoutWaitingResponse1/2
- 2024-11-02 expose HemsController.ThrowIfDisposed to derived classes
- 2024-11-02 expose HemsController.Logger to derived classes
- 2024-11-02 introduce ResiliencePipeline to be able to configure the recovery behavior from exceptions in SendFrameAsync
- 2024-10-18 remove unnecessary CLSCompliantAttribute
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs
deleted file mode 100644
index 1282c31..0000000
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-// Smdn.Net.EchonetLite.RouteB.dll (Smdn.Net.EchonetLite.RouteB-2.0.0-preview3)
-// Name: Smdn.Net.EchonetLite.RouteB
-// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview3+2612dc0eb7dba458048cbe65c5e156d272f8ee87
-// TargetFramework: .NETCoreApp,Version=v6.0
-// Configuration: Release
-// Referenced assemblies:
-// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Smdn.Net.EchonetLite, Version=2.0.0.0, Culture=neutral
-// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
-// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
-// System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
-// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-#nullable enable annotations
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Smdn.Net.EchonetLite;
-using Smdn.Net.EchonetLite.ObjectModel;
-using Smdn.Net.EchonetLite.RouteB;
-using Smdn.Net.EchonetLite.RouteB.Credentials;
-using Smdn.Net.EchonetLite.RouteB.Transport;
-
-namespace Smdn.Net.EchonetLite.RouteB {
- public class HemsController :
- IAsyncDisposable,
- IDisposable,
- IRouteBCredentialIdentity
- {
- public HemsController(IRouteBEchonetLiteHandlerFactory echonetLiteHandlerFactory, IRouteBCredentialProvider routeBCredentialProvider, ILoggerFactory? loggerFactory = null) {}
- public HemsController(IServiceProvider serviceProvider) {}
-
- protected EchonetClient Client { get; }
- public EchonetObject Controller { get; }
- [MemberNotNullWhen(false, "echonetLiteHandler")]
- protected bool IsDisposed { [MemberNotNullWhen(false, "echonetLiteHandler")] get; }
- public LowVoltageSmartElectricEnergyMeter SmartMeter { get; }
- public TimeSpan TimeoutWaitingProactiveNotification { get; set; }
- public TimeSpan TimeoutWaitingResponse1 { get; set; }
- public TimeSpan TimeoutWaitingResponse2 { get; set; }
-
- public ValueTask ConnectAsync(CancellationToken cancellationToken = default) {}
- public async ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
- protected virtual void Dispose(bool disposing) {}
- public void Dispose() {}
- public async ValueTask DisposeAsync() {}
- protected virtual async ValueTask DisposeAsyncCore() {}
- [MemberNotNull("client")]
- [MemberNotNull("Client")]
- [MemberNotNull("smartMeterObject")]
- [MemberNotNull("controllerObject")]
- protected void ThrowIfDisconnected() {}
- }
-
- public sealed class LowVoltageSmartElectricEnergyMeter : DeviceSuperClass {
- public IEchonetPropertyGetAccessor<int> Coefficient { get; }
- public IEchonetPropertyGetAccessor<IReadOnlyList<(MeasurementValue<ElectricEnergyValue> NormalDirection, MeasurementValue<ElectricEnergyValue> ReverseDirection)>> CumulativeElectricEnergyLog2 { get; }
- public IEchonetPropertySetGetAccessor<DateTime> DayForTheHistoricalDataOfCumulativeElectricEnergy1 { get; }
- public IEchonetPropertySetGetAccessor<(DateTime DateAndTime, int NumberOfItems)> DayForTheHistoricalDataOfCumulativeElectricEnergy2 { get; }
- public IEchonetPropertyGetAccessor<(ElectricCurrentValue RPhase, ElectricCurrentValue TPhase)> InstantaneousCurrent { get; }
- public IEchonetPropertyGetAccessor<int> InstantaneousElectricPower { get; }
- public IEchonetPropertyGetAccessor<ElectricEnergyValue> NormalDirectionCumulativeElectricEnergy { get; }
- public IEchonetPropertyGetAccessor<MeasurementValue<ElectricEnergyValue>> NormalDirectionCumulativeElectricEnergyAtEvery30Min { get; }
- public IEchonetPropertyGetAccessor<IReadOnlyList<MeasurementValue<ElectricEnergyValue>>> NormalDirectionCumulativeElectricEnergyLog1 { get; }
- public IEchonetPropertyGetAccessor<int> NumberOfEffectiveDigitsCumulativeElectricEnergy { get; }
- public IEchonetPropertyGetAccessor<(MeasurementValue<ElectricEnergyValue> NormalDirection, MeasurementValue<ElectricEnergyValue> ReverseDirection)> OneMinuteMeasuredCumulativeAmountsOfElectricEnergy { get; }
- public IEchonetPropertyGetAccessor<ElectricEnergyValue> ReverseDirectionCumulativeElectricEnergy { get; }
- public IEchonetPropertyGetAccessor<MeasurementValue<ElectricEnergyValue>> ReverseDirectionCumulativeElectricEnergyAtEvery30Min { get; }
- public IEchonetPropertyGetAccessor<IReadOnlyList<MeasurementValue<ElectricEnergyValue>>> ReverseDirectionCumulativeElectricEnergyLog1 { get; }
- public IEchonetPropertyGetAccessor<ReadOnlyMemory<byte>> RouteBIdentificationNumber { get; }
- public IEchonetPropertyGetAccessor<decimal> UnitForCumulativeElectricEnergy { get; }
- }
-
- public static class MeasurementValue {
- public static MeasurementValue<TValue> Create<TValue>(TValue @value, DateTime measuredAt) where TValue : struct {}
- }
-
- public sealed class RouteBDeviceFactory : IEchonetDeviceFactory {
- public static RouteBDeviceFactory Instance { get; }
-
- public RouteBDeviceFacto...
Smdn.Net.EchonetLite.Primitives version 2.0.0
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-01-12 update assembly version
- 2024-12-09 throw exception if ReceiveAsyncCore returns null IPAddress
- 2024-12-08 add EchonetLiteHandler.HandleReceiveTaskException
- 2024-12-08 add cancellation point before sending
- 2024-12-04 improve implementation
- 2024-12-04 drop target framework net6.0
- 2024-12-04 modify to provide individual methods for unicast and multicast
- 2024-12-01 add EchonetLiteHandler.DefaultPort
- 2024-11-16 add overload to be able to start receiving with specified TaskFactory
- 2024-11-16 replace event IEchonetLiteHandler.Received with callback delegate ReceiveCallback
- 2024-11-02 improve object construction to have ILogger in EchonetLiteHandler
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net6.0.apilist.cs
deleted file mode 100644
index 118bf2b..0000000
--- a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net6.0.apilist.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.0-preview1)
-// Name: Smdn.Net.EchonetLite.Primitives
-// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview1+a49cbd05bcf92f5f6205892f53982b36f3d6b0e2
-// TargetFramework: .NETCoreApp,Version=v6.0
-// Configuration: Release
-// Referenced assemblies:
-// System.ComponentModel.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
-// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Threading, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-#nullable enable annotations
-
-using System;
-using System.Buffers;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Net;
-using System.Threading;
-using System.Threading.Tasks;
-using Smdn.Net.EchonetLite;
-
-namespace Smdn.Net.EchonetLite {
- public interface IEchonetLiteHandler {
- event EventHandler<(IPAddress Address, ReadOnlyMemory<byte> Data)> Received;
-
- ISynchronizeInvoke? SynchronizingObject { get; set; }
-
- ValueTask SendAsync(IPAddress? address, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
- }
-
- public interface IEchonetObjectSpecification {
- byte ClassCode { get; }
- byte ClassGroupCode { get; }
- IEnumerable<IEchonetPropertySpecification> Properties { get; }
- }
-
- public interface IEchonetPropertySpecification {
- bool CanAnnounceStatusChange { get; }
- bool CanGet { get; }
- bool CanSet { get; }
- byte Code { get; }
-
- bool IsAcceptableValue(ReadOnlySpan<byte> edt);
- }
-}
-
-namespace Smdn.Net.EchonetLite.Transport {
- public abstract class EchonetLiteHandler :
- IAsyncDisposable,
- IDisposable,
- IEchonetLiteHandler
- {
- public event EventHandler<(IPAddress, ReadOnlyMemory<byte>)> Received { add; remove; }
-
- protected EchonetLiteHandler() {}
-
- protected bool IsDisposed { get; }
- protected bool IsReceiving { get; }
- public abstract IPAddress? LocalAddress { get; }
- public abstract ISynchronizeInvoke? SynchronizingObject { get; set; }
-
- protected virtual void Dispose(bool disposing) {}
- public void Dispose() {}
- public async ValueTask DisposeAsync() {}
- protected virtual async ValueTask DisposeAsyncCore() {}
- protected abstract ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken);
- public async ValueTask SendAsync(IPAddress? address, ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
- protected abstract ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
- protected abstract ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
- protected void StartReceiving() {}
- protected async ValueTask StopReceivingAsync() {}
- protected virtual void ThrowIfDisposed() {}
- protected void ThrowIfReceiving() {}
- }
-}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
index 60ceee1..a27e627 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
@@ -1,79 +1,92 @@
-// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.0-preview1)
+// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.0)
// Name: Smdn.Net.EchonetLite.Primitives
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview1+a49cbd05bcf92f5f6205892f53982b36f3d6b0e2
+// InformationalVersion: 2.0.0+e711220aebaba7dfe17051eed5e6dd8890ffd4d1
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Referenced assemblies:
-// System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-// System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Buffers;
using System.Collections.Generic;
-using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite;
namespace Smdn.Net.EchonetLite {
public interface IEchonetLiteHandler {
- event EventHandler<(IPAddress Address, ReadOnlyMemory<byte> Data)> Received;
+ Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
- ISynchronizeInvoke? SynchronizingObject { get; set; }
-
- ValueTask SendAsync(IPAddress? address, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
+ ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
+ ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
}
public interface IEchonetObjectSpecification {
byte ClassCode { get; }
byte ClassGroupCode { get; }
IEnumerable<IEchonetPropertySpecification> Properties { get; }
}
public interface IEchonetPropertySpecification {
bool CanAnnounceStatusChange { get; }
bool CanGet { get; }
bool CanSet { get; }
byte Code { get; }
bool IsAcceptableValue(ReadOnlySpan<byte> edt);
}
}
namespace Smdn.Net.EchonetLite.Transport {
public abstract class EchonetLiteHandler :
IAsyncDisposable,
IDisposable,
IEchonetLiteHandler
{
- public event EventHandler<(IPAddress, ReadOnlyMemory<byte>)> Received { add; remove; }
+ protected class ReceivedFromUnknownAddressException : InvalidOperationException {
+ public ReceivedFromUnknownAddressException() {}
+ public ReceivedFromUnknownAddressException(string message) {}
+ public ReceivedFromUnknownAddressException(string message, Exception? innerException) {}
+ }
+
+ public const int DefaultPort = 3610;
- protected EchonetLiteHandler() {}
+ protected EchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
protected bool IsDisposed { get; }
- protected bool IsReceiving { get; }
+ [MemberNotNullWhen(true, "taskReceiveEchonetLite")]
+ protected bool IsReceiving { [Memb...
Smdn.Net.EchonetLite version 2.0.0
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-01-12 update assembly version
- 2025-01-08 remove Codes
- 2025-01-08 add InstanceListSerializer.MaxDataLength
- 2025-01-08 split PropertyContentSerializer into PropertyMapSerializer and InstanceListSerializer
- 2024-12-04 drop target framework net6.0
- 2024-12-04 disable untested UdpEchonetLiteHandler
- 2024-12-04 reimplement UdpEchonetLiteHandler
- 2024-12-04 modify to provide individual methods for unicast and multicast
- 2024-12-01 include self node address in log message for sending/receiving frames
- 2024-12-01 reduce duplicate xml doc comments
- 2024-12-01 add extension method for requesting get properties by multicast
- 2024-12-01 fix not to perform short-circuit evaluation for the processing of the Get property even if the SetGet_SNA service
- 2024-12-01 modify to process received instance list notification on service Get_Res/Get_SNA/SetGet_Res/SetGet_SNA, as well as INF/INFC
- 2024-11-30 fix using directives to refer ServiceProviderServiceExtensions
- 2024-11-25 improve EchonetClient.ctor overloads to accept IServiceProvider
- 2024-11-25 minor improvements
- 2024-11-25 modify Format1Message.ToString to include ESV in hex format
- 2024-11-24 implement RequestReadMulticastAsync
- 2024-11-23 reduce duplicate code
- 2024-11-23 commonize response handlings and improve requesting
- 2024-11-23 fix warning IDE0005
- 2024-11-23 fix modification state setting before writing for a property value
- 2024-11-23 fix naming of FrameSerializer.IsESVWriteAndReadService
- 2024-11-21 separate multicast operations into individual methods
- 2024-11-21 return per-property result for service requests
- 2024-11-21 reimplement RequestWriteOneWayAsync
- 2024-11-21 make EchonetProperty.ctor private
- 2024-11-20 fix not to contain node profiles into EchonetNode.Devices
- 2024-11-20 use more lightweight collection view
- 2024-11-20 fix wrong service codes
- 2024-11-20 make ctor parameters optional
- 2024-11-20 fix to send actually written size of data
- 2024-11-19 add EchonetObjectExtensions.AcquirePropertyMapsAsync
- 2024-11-19 modify AcquirePropertyMapsAsync to return EchonetServiceResponse instead of bool
- 2024-11-19 add extension point for handling format 2 messages
- 2024-11-19 fix xml doc comments
- 2024-11-18 add PropertyContentSerializer.(Try)SerializePropertyMap
- 2024-11-18 fix throwing exception type
- 2024-11-18 expose EchonetObject.EOJ
- 2024-11-18 refactor overloads of EchonetClient.ctor
- 2024-11-17 improve method naming
- 2024-11-17 add EchonetClient.RequestNotifyInstanceListAsync overload that does not require callback state
- 2024-11-17 clarify intension of comparison
- 2024-11-17 modify one-way operation methods to only increment the TID and not to manage transactions
- 2024-11-17 add PropertyContentSerializer.SerializeInstanceListNotification
- 2024-11-16 deprecate IEventInvoker
- 2024-11-16 modify to handle received format-1 messages with async methods instead of individually started tasks
- 2024-11-16 replace event IEchonetLiteHandler.Received with callback delegate ReceiveCallback
- 2024-11-16 expose EchonetClient.OnFormat1MessageReceived
- 2024-11-16 use types that derived from System.EventArgs for event arguments
- 2024-11-12 fix typo
- 2024-11-10 add event EchonetObject.PropertyValueUpdated
- 2024-11-10 add EchonetPropertyValueUpdatedEventArgs that provides event data for EchonetProperty.ValueUpdated
- 2024-11-10 change the type of EchonetProperty.LastUpdatedTime to DateTime instead of DateTimeOffset
- 2024-11-10 fix EchonetObject.OwnerNode to allow unset state
- 2024-11-08 add EchonetNode.TryFindDevice
- 2024-11-08 add EchonetNodeRegistry.TryFind
- 2024-11-08 use more primitive type for EchonetServiceResponse
- 2024-11-08 improve to be able to reuse EchonetProperty
- 2024-11-07 introduce EchonetNodeRegistry
- 2024-11-07 [fix to copy ValueUpdate event](ca0cc224c82abf545da...
Smdn.Net.EchonetLite.RouteB.SkStackIP version 2.0.0-preview3
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2024-10-16 update package version
- 2024-10-16 add Smdn.Net.EchonetLite.RouteB.Primitives to isolate the Route-B abstraction APIs and to prepare the upcoming works
- 2024-09-14 add API for configuring created SkStackClient via ISkStackRouteBEchonetLiteHandlerFactory
- 2024-07-04 modify to be able to perform PANA authentication via the ResiliencePipeline
- 2024-07-04 improve to use the local method instead of delegates
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs
index df2879e..d6a2c77 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net6.0.apilist.cs
@@ -1,101 +1,107 @@
-// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview2)
+// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview3)
// Name: Smdn.Net.EchonetLite.RouteB.SkStackIP
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview2+4d034f0903ea62ea00625815ef039b64f3ec2917
+// InformationalVersion: 2.0.0-preview3+370bdac018b42e5e04f531669d50f03b3bb6922f
// TargetFramework: .NETCoreApp,Version=v6.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
-// Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
-// Smdn.Net.EchonetLite.Transport, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
// Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
// System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.ComponentModel.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.NetworkInformation, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Threading, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Buffers;
using System.ComponentModel;
using System.Net;
using System.Net.NetworkInformation;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
+using Polly;
using Smdn.Net.EchonetLite.RouteB.Credentials;
using Smdn.Net.EchonetLite.RouteB.Transport;
using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
using Smdn.Net.SkStackIP;
namespace Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP {
public interface ISkStackRouteBEchonetLiteHandlerFactory : IRouteBEchonetLiteHandlerFactory {
Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
+ Action<SkStackClient>? ConfigureSkStackClient { get; set; }
}
public enum SkStackRouteBTransportProtocol : int {
Tcp = 0,
Udp = 1,
}
public abstract class SkStackRouteBEchonetLiteHandler : RouteBEchonetLiteHandler {
+ public static readonly string ResiliencePipelineKeyForAuthenticate = "SkStackRouteBEchonetLiteHandler.resiliencePipelineAuthenticate";
public static readonly string ResiliencePipelineKeyForSend = "SkStackRouteBEchonetLiteHandler.resiliencePipelineSend";
+ public static readonly ResiliencePropertyKey<SkStackClient?> ResiliencePropertyKeyForClient; // = "ResiliencePropertyKeyForClient"
public override IPAddress? LocalAddress { get; }
public override IPAddress? PeerAddress { get; }
public override ISynchronizeInvoke? SynchronizingObject { get; set; }
protected override ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken) {}
protected override async ValueTask DisconnectAsyncCore(CancellationToken cancellationToken) {}
protected override void Dispose(bool disposing) {}
protected override async ValueTask DisposeAsyncCore() {}
protected override ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken) {}
protected override ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
protected override ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
[MemberNotNull("client")]
protected override void ThrowIfDisposed() {}
}
public static class SkStackRouteBEchonetLiteHandlerBuilderExtensions {
+ public static ISkStackRouteBEchonetLiteHandlerFactory ConfigureClient(this ISkStackRouteBEchonetLiteHandlerFactory factory, Action<SkStackClient> configureSkStackClient) {}
public static ISkStackRouteBEchonetLiteHandlerFactory ConfigureSession(this ISkStackRouteBEchonetLiteHandlerFactory factory, Action<SkStackRouteBSessionConfiguration> configureRouteBSessionConfiguration) {}
}
public abstract class SkStackRouteBEchonetLiteHandlerFactory : ISkStackRouteBEchonetLiteHandlerFactory {
protected SkStackRouteBEchonetLiteHandlerFactory(IServiceCollection services) {}
public Action<SkStackRouteBSessionConfiguration>? ConfigureRouteBSessionConfiguration { get; set; }
+ public Action<SkStackClient>? ConfigureSkStackClient { get; set; }
protected abstract SkStackRouteBTransportProtocol TransportProtocol { get; }
public virtual async ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken) {}
protected abstract ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken);
}
public sealed class SkStackRouteBSessionConfiguration : ICloneable {
public SkStackRouteBSessionConfiguration() {}
public SkStackActiveScanOptions? ActiveScanOptions { get; set; }
public SkStackChannel? Channel { get; set; }
public IPAddress? PaaAddress { get; set; }
public PhysicalAddress? PaaMacAddress { get; set; }
public int? PanId { get; set; }
public SkStackRouteBSessionConfiguration Clone() {}
object ICloneable.Clone() {}
}
public sealed class SkStackRouteBTcpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
public SkStackRouteBTcpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
}
public sealed class SkStackRouteBUdpEchonetLiteHandler : SkStackRouteBEchonetLiteHandler {
public SkStackRouteBUdpEchonetLiteHandler(SkStackClient client, SkStackRouteBSessionConfiguration sessionConfiguration, bool shouldDisposeClient = false, IServiceProvider? serviceProvider = null) {}
}
}
// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs
index 6e83ac1..ccb5285 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net8.0.apilist.cs
@@ -1,101 +1,107 @@
-// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview2)
+// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.0.0-preview3)
// Name: Smdn.Net.EchonetLite.RouteB.SkStackIP
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview2+4d034f0903ea62ea00625815ef039b64f3ec2917
+// InformationalVersion: 2.0.0-preview3+370bdac018b42e5e04f531669d50f03b3bb6922f
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft....
Smdn.Net.EchonetLite.RouteB.Primitives version 2.0.0-preview1
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs
new file mode 100644
index 0000000..b9ba083
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs
@@ -0,0 +1,65 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// TargetFramework: .NETCoreApp,Version=v6.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
+ protected RouteBEchonetLiteHandler() {}
+
+ public abstract IPAddress? PeerAddress { get; }
+
+ public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
+ public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
new file mode 100644
index 0000000..6ad7338
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
@@ -0,0 +1,65 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// TargetFramework: .NETCoreApp,Version=v8.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
+ protected RouteBEchonetLiteHandler() {}
+
+ public abstract IPAddress? PeerAddress { get; }
+
+ public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
+ public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
new file mode 100644
index 0000000..23438af
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
@@ -0,0 +1,63 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// TargetFramework: .NETStandard,Version=v2.1
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class Ro...
Smdn.Net.EchonetLite.RouteB.BP35XX version 2.0.0-preview4
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2024-10-16 update package version
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net6.0.apilist.cs
index c29c7fa..ae61224 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net6.0.apilist.cs
@@ -1,40 +1,40 @@
-// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview3)
+// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview4)
// Name: Smdn.Net.EchonetLite.RouteB.BP35XX
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview3+f083b2de6dc07603893bff9d4a263609fd1a919e
+// InformationalVersion: 2.0.0-preview4+c7a206f316403313ee223391269df5de9d965d32
// TargetFramework: .NETCoreApp,Version=v6.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Smdn.Devices.BP35XX, Version=1.0.0.0, Culture=neutral
-// Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB.SkStackIP, Version=2.0.0.0, Culture=neutral
// Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
// System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Smdn.Devices.BP35XX;
using Smdn.Net.EchonetLite.RouteB.Transport;
using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
using Smdn.Net.SkStackIP;
namespace Smdn.Net.EchonetLite.RouteB.Transport.BP35XX {
public sealed class BP35A1RouteBEchonetLiteHandlerFactory : SkStackRouteBEchonetLiteHandlerFactory {
public BP35A1RouteBEchonetLiteHandlerFactory(IServiceCollection services, Action<BP35A1Configurations> configure) {}
protected override SkStackRouteBTransportProtocol TransportProtocol { get; }
protected override async ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken) {}
}
public static class IRouteBEchonetLiteHandlerBuilderExtensions {
public static ISkStackRouteBEchonetLiteHandlerFactory AddBP35A1(this IRouteBEchonetLiteHandlerBuilder builder, Action<BP35A1Configurations> configure) {}
}
}
// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs
index dc058d1..2cd12b0 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs
@@ -1,40 +1,40 @@
-// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview3)
+// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview4)
// Name: Smdn.Net.EchonetLite.RouteB.BP35XX
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview3+f083b2de6dc07603893bff9d4a263609fd1a919e
+// InformationalVersion: 2.0.0-preview4+c7a206f316403313ee223391269df5de9d965d32
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Smdn.Devices.BP35XX, Version=1.0.0.0, Culture=neutral
-// Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB.SkStackIP, Version=2.0.0.0, Culture=neutral
// Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Smdn.Devices.BP35XX;
using Smdn.Net.EchonetLite.RouteB.Transport;
using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
using Smdn.Net.SkStackIP;
namespace Smdn.Net.EchonetLite.RouteB.Transport.BP35XX {
public sealed class BP35A1RouteBEchonetLiteHandlerFactory : SkStackRouteBEchonetLiteHandlerFactory {
public BP35A1RouteBEchonetLiteHandlerFactory(IServiceCollection services, Action<BP35A1Configurations> configure) {}
protected override SkStackRouteBTransportProtocol TransportProtocol { get; }
protected override async ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken) {}
}
public static class IRouteBEchonetLiteHandlerBuilderExtensions {
public static ISkStackRouteBEchonetLiteHandlerFactory AddBP35A1(this IRouteBEchonetLiteHandlerBuilder builder, Action<BP35A1Configurations> configure) {}
}
}
// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-netstandard2.1.apilist.cs
index 47befa8..ff3f9e8 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-netstandard2.1.apilist.cs
@@ -1,39 +1,39 @@
-// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview3)
+// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview4)
// Name: Smdn.Net.EchonetLite.RouteB.BP35XX
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview3+f083b2de6dc07603893bff9d4a263609fd1a919e
+// InformationalVersion: 2.0.0-preview4+c7a206f316403313ee223391269df5de9d965d32
// TargetFramework: .NETStandard,Version=v2.1
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Smdn.Devices.BP35XX, Version=1.0.0.0, Culture=neutral
-// Smdn.Net.EchonetLite.RouteB, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB.SkStackIP, Version=2.0.0.0, Culture=neutral
// Smdn.Net.SkStackIP, Version=1.2.0.0, Culture=neutral
// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
#nullable enable annotations
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Smdn.Devices.BP35XX;
using Smdn.Net.EchonetLite.RouteB.Transport;
using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
using Smdn.Net.SkStackIP;
namespace Smdn.Net.EchonetLite.RouteB.Transport.BP35XX {
public sealed class BP35A1RouteBEchonetLiteHandlerFactory : SkStackRouteBEchonetLiteHandlerFactory {
public BP35A1RouteBEchonetLiteHandlerFactory(IServiceCollection services, Action<BP35A1Configurations> configure) {}
protected override SkStackRouteBTransportProtocol TransportProtocol { get; }
protected override async ValueTask<SkStackClient> CreateClientAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken) {}
}
public static class IRouteBEchonetLiteHandlerBuilderExtensions {
public static ISkStackRouteBEchonetLiteHandlerFactory AddBP35A1(this IRouteBEchonetLiteHandlerBuilder builder, Action<BP35A1Configurations> configure) {}
}
}
// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
Full changes
Full changes in this release:
diff --git a/src/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX.csproj b/src/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX.csproj
index ecfcb9b..db99666 100644
--- a/src/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX.csproj
+++ b/src/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX.csproj
@@ -6,7 +6,7 @@ SPDX-License-Ident...
Smdn.Net.EchonetLite.RouteB version 2.0.0-preview3
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2024-10-16 update package version
- 2024-10-16 update package readme
- 2024-10-16 simplify event args
- 2024-10-16 update package descriptions and tags
- 2024-10-16 import HemsController
- 2024-10-16 import LowVoltageSmartElectricEnergyMeter
- 2024-10-16 move MeasurementValue to Smdn.Net.EchonetLite.RouteB
- 2024-10-16 add Smdn.Net.EchonetLite.RouteB.Primitives to isolate the Route-B abstraction APIs and to prepare the upcoming works
- 2024-10-01 add package Smdn.Net.EchonetLite.Primitives and merge package Smdn.Net.EchonetLite.Transport
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs
index ed9997a..1282c31 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net6.0.apilist.cs
@@ -1,75 +1,142 @@
-// Smdn.Net.EchonetLite.RouteB.dll (Smdn.Net.EchonetLite.RouteB-2.0.0-preview2)
+// Smdn.Net.EchonetLite.RouteB.dll (Smdn.Net.EchonetLite.RouteB-2.0.0-preview3)
// Name: Smdn.Net.EchonetLite.RouteB
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview2+c9161acca48757584c059440b4e2b704c3a80505
+// InformationalVersion: 2.0.0-preview3+2612dc0eb7dba458048cbe65c5e156d272f8ee87
// TargetFramework: .NETCoreApp,Version=v6.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-// Smdn.Net.EchonetLite.Transport, Version=2.0.0.0, Culture=neutral
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
-using System.Buffers;
-using System.Net;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Smdn.Net.EchonetLite;
+using Smdn.Net.EchonetLite.ObjectModel;
+using Smdn.Net.EchonetLite.RouteB;
using Smdn.Net.EchonetLite.RouteB.Credentials;
using Smdn.Net.EchonetLite.RouteB.Transport;
-using Smdn.Net.EchonetLite.Transport;
-namespace Smdn.Net.EchonetLite.RouteB.Credentials {
- public interface IRouteBCredential : IDisposable {
- void WriteIdTo(IBufferWriter<byte> buffer);
- void WritePasswordTo(IBufferWriter<byte> buffer);
- }
+namespace Smdn.Net.EchonetLite.RouteB {
+ public class HemsController :
+ IAsyncDisposable,
+ IDisposable,
+ IRouteBCredentialIdentity
+ {
+ public HemsController(IRouteBEchonetLiteHandlerFactory echonetLiteHandlerFactory, IRouteBCredentialProvider routeBCredentialProvider, ILoggerFactory? loggerFactory = null) {}
+ public HemsController(IServiceProvider serviceProvider) {}
+
+ protected EchonetClient Client { get; }
+ public EchonetObject Controller { get; }
+ [MemberNotNullWhen(false, "echonetLiteHandler")]
+ protected bool IsDisposed { [MemberNotNullWhen(false, "echonetLiteHandler")] get; }
+ public LowVoltageSmartElectricEnergyMeter SmartMeter { get; }
+ public TimeSpan TimeoutWaitingProactiveNotification { get; set; }
+ public TimeSpan TimeoutWaitingResponse1 { get; set; }
+ public TimeSpan TimeoutWaitingResponse2 { get; set; }
- public interface IRouteBCredentialIdentity {
+ public ValueTask ConnectAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public async ValueTask DisposeAsync() {}
+ protected virtual async ValueTask DisposeAsyncCore() {}
+ [MemberNotNull("client")]
+ [MemberNotNull("Client")]
+ [MemberNotNull("smartMeterObject")]
+ [MemberNotNull("controllerObject")]
+ protected void ThrowIfDisconnected() {}
}
- public interface IRouteBCredentialProvider {
- IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ public sealed class LowVoltageSmartElectricEnergyMeter : DeviceSuperClass {
+ public IEchonetPropertyGetAccessor<int> Coefficient { get; }
+ public IEchonetPropertyGetAccessor<IReadOnlyList<(MeasurementValue<ElectricEnergyValue> NormalDirection, MeasurementValue<ElectricEnergyValue> ReverseDirection)>> CumulativeElectricEnergyLog2 { get; }
+ public IEchonetPropertySetGetAccessor<DateTime> DayForTheHistoricalDataOfCumulativeElectricEnergy1 { get; }
+ public IEchonetPropertySetGetAccessor<(DateTime DateAndTime, int NumberOfItems)> DayForTheHistoricalDataOfCumulativeElectricEnergy2 { get; }
+ public IEchonetPropertyGetAccessor<(ElectricCurrentValue RPhase, ElectricCurrentValue TPhase)> InstantaneousCurrent { get; }
+ public IEchonetPropertyGetAccessor<int> InstantaneousElectricPower { get; }
+ public IEchonetPropertyGetAccessor<ElectricEnergyValue> NormalDirectionCumulativeElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<MeasurementValue<ElectricEnergyValue>> NormalDirectionCumulativeElectricEnergyAtEvery30Min { get; }
+ public IEchonetPropertyGetAccessor<IReadOnlyList<MeasurementValue<ElectricEnergyValue>>> NormalDirectionCumulativeElectricEnergyLog1 { get; }
+ public IEchonetPropertyGetAccessor<int> NumberOfEffectiveDigitsCumulativeElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<(MeasurementValue<ElectricEnergyValue> NormalDirection, MeasurementValue<ElectricEnergyValue> ReverseDirection)> OneMinuteMeasuredCumulativeAmountsOfElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<ElectricEnergyValue> ReverseDirectionCumulativeElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<MeasurementValue<ElectricEnergyValue>> ReverseDirectionCumulativeElectricEnergyAtEvery30Min { get; }
+ public IEchonetPropertyGetAccessor<IReadOnlyList<MeasurementValue<ElectricEnergyValue>>> ReverseDirectionCumulativeElectricEnergyLog1 { get; }
+ public IEchonetPropertyGetAccessor<ReadOnlyMemory<byte>> RouteBIdentificationNumber { get; }
+ public IEchonetPropertyGetAccessor<decimal> UnitForCumulativeElectricEnergy { get; }
}
- public static class RouteBCredentialServiceCollectionExtensions {
- public static IServiceCollection AddRouteBCredential(this IServiceCollection services, string id, string password) {}
- public static IServiceCollection AddRouteBCredentialFromEnvironmentVariable(this IServiceCollection services, string envVarForId, string envVarForPassword) {}
- public static IServiceCollection AddRouteBCredentialProvider(this IServiceCollection services, IRouteBCredentialProvider credentialProvider) {}
+ public static class MeasurementValue {
+ public static MeasurementValue<TValue> Create<TValue>(TValue @value, DateTime measuredAt) where TValue : struct {}
}
- public static class RouteBCredentials {
- public const int AuthenticationIdLength = 32;
- public const int PasswordLength = 12;
+ public sealed class RouteBDeviceFactory : IEchonetDeviceFactory {
+ public static RouteBDeviceFactory Instance { get; }
+
+ public RouteBDeviceFactory() {}
+
+ public EchonetDevice? Create(byte classGroupCode, byte classCode, byte instanceCode) {}
}
-}
-namespace Smdn.Net.EchonetLite.RouteB.Transport {
- public interface IRouteBEchonetLiteHandlerBuilder {
- IServiceCollection Services { get; }
+ public readonly struct ElectricCurrentValue {
+ public decimal Amperes { get; }
+ public bool IsValid { get; }
+ public short RawValue { get; }
+
+ public override string ToString() {}
}
- public interface IRouteBEchonetLiteHandlerFactory {
- ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToke...
Smdn.Net.EchonetLite.Primitives version 2.0.0-preview1
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs
new file mode 100644
index 0000000..b9ba083
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net6.0.apilist.cs
@@ -0,0 +1,65 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// TargetFramework: .NETCoreApp,Version=v6.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
+ protected RouteBEchonetLiteHandler() {}
+
+ public abstract IPAddress? PeerAddress { get; }
+
+ public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
+ public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
new file mode 100644
index 0000000..6ad7338
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
@@ -0,0 +1,65 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// TargetFramework: .NETCoreApp,Version=v8.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
+ protected RouteBEchonetLiteHandler() {}
+
+ public abstract IPAddress? PeerAddress { get; }
+
+ public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
+ public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
new file mode 100644
index 0000000..23438af
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-netstandard2.1.apilist.cs
@@ -0,0 +1,63 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.0.0-preview1)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview1+60a8ce3520b765b1bcab669a662cfb615f41a1f5
+// TargetFramework: .NETStandard,Version=v2.1
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class RouteBEchonetLit...