Smdn.Net.SkStackIP version 1.0.0
smdn
released this
12 Feb 12:15
·
60 commits
to main
since this release
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2024-02-12 add package tags
- 2024-02-12 update assembly version
- 2024-02-12 add and update package description/readme
- 2024-01-02 delete unnecessary warning suppression
- 2024-01-02 implemenet non-deferred exception throwing
- 2024-01-02 delete unusing member
- 2024-01-02 validate that the iargument is valid ASCII or not for the SKSETPWD and SKSETRBID command
- 2024-01-02 delete unnecessary type cast
- 2024-01-02 use IUtf8SpanParsable.Parse if available
- 2024-01-02 improve not to use Encoding for formatting
- 2024-01-02 refactor
- 2024-01-02 use UTF-8 string literals instead
- 2024-01-01 delete dead codes
- 2024-01-01 change SkStackTokenParser.ExpectSequence to accept ReadOnlySpan<byte> instead of ReadOnlyMemory<byte>, and use UTF-8 literal instead
- 2024-01-01 change SkStackTokenParser.[Try]ExpectToken to accept ReadOnlySpan<byte> instead of ReadOnlyMemory<byte>
- 2024-01-01 refactor and delete unneccessary overloads
- 2024-01-01 improve SkStackEventParser to be able to accept ReadOnlySpan<byte> as an expecting token instead of ReadOnlyMemory<byte>
- 2024-01-01 add target framework net8.0
- 2024-01-01 suppress warning CA1859
- 2024-01-01 fix warning IDE0055: Fix formatting
- 2024-01-01 fix parameter name
- 2024-01-01 fix warning IDE0031: Null check can be simplified
- 2024-01-01 fix warning SA1402: File may only contain a single type
- 2024-01-01 fix warning IDE1006: Naming rule violation
- 2023-11-19 add SkStackClient.ReceiveResponseDelay
- 2023-11-19 compliant the naming rules
- 2023-11-19 make method internal
- 2023-11-19 add SkStackClient.ReceiveUdpPollingInterval
- 2023-11-19 remove outdated comment
- 2023-11-19 fix not to call PipeReader.AdvanceTo() twice for consumed or examined buffers
- 2023-11-18 reduce package dependency of Smdn.Fundamental.Buffer
- 2023-11-18 improve logging to mask passed password when sending SKSETPWD command
- 2023-11-18 introduce ISkStackCommandLineWriter and simplify writing command line arguments
- 2023-11-18 introduce SkStackCommandLineWriter and replace DuplicateBufferWriter with it
- 2023-11-17 expose ILogger to the child classes
- 2023-11-17 improve logging to use logger scope
- 2023-11-16 fix file name
- 2023-11-16 add SkStackUdpSendResultIndeterminateException and throw it instead to clarify the situation
- 2023-11-16 beautify
- 2023-11-16 fix to wrap exceptions occured while parsing into SkStackUnexpectedResponseException
- 2023-10-13 improve exception message string
- 2023-10-13 bump Polly.Core up to 8.0.0
- 2023-08-17 add third-party notices
- 2023-08-17 use NullResilienceStrategy instead
- 2023-08-14 disable CS8629 for release build
- 2023-08-14 improve resiliency of SendUdpEchonetLiteAsync by using ResilienceStrategy
- 2023-07-11 fix SendSKSENDTOAsync to handle EVENT 21 properly and return the final result as a method return value
- 2023-07-09 refactor
- 2023-07-09 improve XML comment docs
- 2023-07-09 change AuthenticateAsPanaClientAsync to accept byte sequence instead of char
- 2023-07-07 change AuthenticateAsPanaClientAsync() to throw if supplied PAA address is not supported
- 2023-07-07 improve naming
- 2023-07-07 improve AuthenticateAsPanaClientAsync() to return established session info
- 2023-07-02 add overloads that accept MAC address for the destination PAA as well as IP address
- 2023-07-02 use decimal for representing RSSI values instead of double
- 2023-07-02 delete unnecessary using directives
- 2023-07-02 remove instantiation specifying serial ports and reduce dependency on System.IO.Ports
- 2023-07-02 imporve TerminatePanaSessionAsync
- 2023-07-02 add Async suffix
- 2023-07-02 add MemberNotNullWhenAttribute to SkStackClient.IsPanaSessionAlive
- 2023-06-27 add shorthands for flash memory functions
- 2023-06-25 add shorthands for ECHONET Lite functions
- 2023-06-25 add SkStackUdpPortHandle.None
- 2023-06-25 add shorthands for PANA functions
- 2023-06-24 add shorthands for IP functions
- 2023-06-24 delete dead code
- 2023-06-24 improve SkStackChannel.FindByChannelNumber
- 2023-06-24 add SkStackClient.IsPanaSessionAlive
- 2023-06-24 use IBufferWriter instead of returning allocated buffer
- 2023-06-24 fix indent
- 2023-06-23 add shorthands for UDP functions
- 2023-06-23 change ERXUDPDataFormat property to be set by the constructor and change the accessibility to 'protected'
- 2023-06-22 rename file
- 2023-06-22 rename UdpReceiveAsync to ReceiveUdpAsync
- 2023-06-22 make OpenSerialPortStream and ThrowIfDisposed protected
- 2023-06-22 add a ctor overload to allow specifying whether or not to close the specified Stream
- 2023-06-21 move a member to appropriate file
- 2023-06-21 rename files
- 2023-06-17 split implementation file
- 2023-06-17 fix naming to follow the convention
- 2023-06-17 fix redundant naming
- 2023-06-16 rename parameter
- 2023-06-16 change to accept ReadOnlyMemory<char> instead of string
- 2023-06-15 add SkStackChannel.Empty/IsEmpty
- 2023-06-14 improve XML comment docs
- 2023-06-12 apply dotnet format
- 2023-06-12 change SkStackClient to accept ILogger directly instead of IServiceProvider
- 2023-06-11 propagate CancellationToken
- 2023-06-11 enable nullability annotations and warnings
- 2023-06-09 fix warnings on .NET 7 SDK
- 2023-06-09 fix SAxxxx warnings
- 2023-06-09 fix CAxxxx warnings
- 2023-06-08 fix IDExxxx warnings
- 2023-06-08 move type to the appropriate namespace
- 2023-06-08 use file-scoped namespace declaration
- 2023-06-03 redefine package version
- 2023-06-03 update package references
- 2023-06-03 set target framework net6.0 instead of net5.0
- 2023-06-03 use Smdn.MSBuild.DefineConstants.NETSdkApi
- 2023-06-03 catch up the repository template updates
- 2021-08-24 refactor
- 2021-08-24 use Smdn.Formats.Hexadecimal instead
- 2021-08-23 use SequenceReader<T>.TryCopyTo instead
- 2021-08-23 use SequenceReader<T>.Remaining instead
- 2021-08-23 replace extensional implementations with Smdn.Fundamental.*
- 2021-08-21 define CLSCompliantAttribute with AssemblyAttribute in project file instead of cs files
- 2021-08-01 add SkStackClient.PanaSessionPeerAddress
- 2021-08-01 modify SendSKUDPPORTAsync to return newly set port
- 2021-07-31 publicate the constructor
- 2021-07-31 remove SkStackClient.BaseStream
- 2021-07-31 hide SkStackEventHandler from public API
- 2021-07-31 add fallback for netstandard2.1
- 2021-07-31 add event args type constraints
- 2021-07-31 implement SKDSLEEP
- 2021-07-31 simplify handling events that are triggered by commands
- 2021-07-24 add events for handling PANA session events
- 2021-07-23 simplify
- 2021-07-23 add support for ERXUDP data with hexadecimal ASCII format
- 2021-07-23 add debugging code
- 2021-07-23 improve processing echoback line of SKSENDTO
- 2021-07-22 define SkStackKnownPortNumbers
- 2021-07-22 add support for receiving, capturing and reading UDP packets
- 2021-07-21 add debugging code
- 2021-07-21 minor fix
- 2021-07-21 make ReadAsync as a critical section
- 2021-07-21 improved to be able to identify between the state of Ignore and Incomplete.
- 2021-07-21 delete SkStackUdpReceiveEvent.Data and improve not to allocate copy of received data
- 2021-07-21 add utility methods for throwing argument exception
- 2021-07-20 define exception types which represents error code ERXX
- 2021-07-20 implement SKSAVE/SKLOAD/SKERASE
- 2021-07-19 add support for commands and response status lines which end with CR
- 2021-07-19 fix to log SkStackUnexpectedResponseException thrown by ProcessNotificationalEvents
- 2021-07-19 fix to rethrow caught SkStackUnexpectedResponseException
- 2021-07-19 fix and redefine log levels
- 2021-07-19 add logging SkStackUnexpectedResponseException
- 2021-07-19 fix output format of ToString
- 2021-07-17 fix exception message
- 2021-07-17 apply dotnet format
- 2021-07-17 add initial implementation
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-net6.0.apilist.cs b/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-net6.0.apilist.cs
new file mode 100644
index 0000000..2c1c882
--- /dev/null
+++ b/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-net6.0.apilist.cs
@@ -0,0 +1,466 @@
+// Smdn.Net.SkStackIP.dll (Smdn.Net.SkStackIP-1.0.0)
+// Name: Smdn.Net.SkStackIP
+// AssemblyVersion: 1.0.0.0
+// InformationalVersion: 1.0.0+655c155832ea35fece55fe3cd2467b473922319c
+// TargetFramework: .NETCoreApp,Version=v6.0
+// Configuration: Release
+// Referenced assemblies:
+// 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.Fundamental.ControlPicture, Version=3.0.0.1, Culture=neutral
+// Smdn.Fundamental.PrintableEncoding.Hexadecimal, Version=3.0.0.0, Culture=neutral
+// System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.IO.Pipelines, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Linq, 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.ObjectModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime.InteropServices, 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.Diagnostics.CodeAnalysis;
+using System.IO;
+using System.IO.Pipelines;
+using System.Net;
+using System.Net.NetworkInformation;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Smdn.Net.SkStackIP;
+using Smdn.Net.SkStackIP.Protocol;
+
+namespace Smdn.Net.SkStackIP {
+ public enum SkStackERXUDPDataFormat : int {
+ Binary = 0,
+ HexAsciiText = 1,
+ }
+
+ public enum SkStackErrorCode : int {
+ ER01 = 1,
+ ER02 = 2,
+ ER03 = 3,
+ ER04 = 4,
+ ER05 = 5,
+ ER06 = 6,
+ ER07 = 7,
+ ER08 = 8,
+ ER09 = 9,
+ ER10 = 10,
+ Undefined = 0,
+ }
+
+ public enum SkStackEventNumber : byte {
+ ActiveScanCompleted = 34,
+ BeaconReceived = 32,
+ EchoRequestReceived = 5,
+ EnergyDetectScanCompleted = 31,
+ NeighborAdvertisementReceived = 2,
+ NeighborSolicitationReceived = 1,
+ PanaSessionEstablishmentCompleted = 37,
+ PanaSessionEstablishmentError = 36,
+ PanaSessionExpired = 41,
+ PanaSessionTerminationCompleted = 39,
+ PanaSessionTerminationRequestReceived = 38,
+ PanaSessionTerminationTimedOut = 40,
+ TransmissionTimeControlLimitationActivated = 50,
+ TransmissionTimeControlLimitationDeactivated = 51,
+ UdpSendCompleted = 33,
+ Undefined = 0,
+ WakeupSignalReceived = 192,
+ }
+
+ public enum SkStackResponseStatus : int {
+ Fail = -1,
+ Ok = 1,
+ Undetermined = 0,
+ }
+
+ public enum SkStackUdpEncryption : byte {
+ EncryptIfAble = 2,
+ ForceEncrypt = 1,
+ ForcePlainText = 0,
+ }
+
+ public enum SkStackUdpPortHandle : byte {
+ Handle1 = 1,
+ Handle2 = 2,
+ Handle3 = 3,
+ Handle4 = 4,
+ Handle5 = 5,
+ Handle6 = 6,
+ None = 0,
+ }
+
+ public abstract class SkStackActiveScanOptions : ICloneable {
+ public static SkStackActiveScanOptions Default { get; }
+ public static SkStackActiveScanOptions Null { get; }
+ public static SkStackActiveScanOptions ScanUntilFind { get; }
+
+ public static SkStackActiveScanOptions Create(IEnumerable<int> scanDurationGenerator, PhysicalAddress paaMacAddress) {}
+ public static SkStackActiveScanOptions Create(IEnumerable<int> scanDurationGenerator, Predicate<SkStackPanDescription>? paaSelector = null) {}
+
+ protected SkStackActiveScanOptions() {}
+
+ public abstract SkStackActiveScanOptions Clone();
+ object ICloneable.Clone() {}
+ }
+
+ public class SkStackClient : IDisposable {
+ public static readonly TimeSpan SKSCANDefaultDuration; // = "00:00:00.0480000"
+ public static readonly TimeSpan SKSCANMaxDuration; // = "00:02:37.2960000"
+ public static readonly TimeSpan SKSCANMinDuration; // = "00:00:00.0192000"
+
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionEstablished;
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionExpired;
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionTerminated;
+ public event EventHandler<SkStackEventArgs>? Slept;
+ public event EventHandler<SkStackEventArgs>? WokeUp;
+
+ public SkStackClient(PipeWriter sender, PipeReader receiver, SkStackERXUDPDataFormat erxudpDataFormat = SkStackERXUDPDataFormat.Binary, ILogger? logger = null) {}
+ public SkStackClient(Stream stream, bool leaveStreamOpen = true, SkStackERXUDPDataFormat erxudpDataFormat = SkStackERXUDPDataFormat.Binary, ILogger? logger = null) {}
+
+ public SkStackERXUDPDataFormat ERXUDPDataFormat { get; protected set; }
+ [MemberNotNullWhen(true, "PanaSessionPeerAddress")]
+ public bool IsPanaSessionAlive { [MemberNotNullWhen(true, "PanaSessionPeerAddress")] get; }
+ protected ILogger? Logger { get; }
+ public IPAddress? PanaSessionPeerAddress { get; }
+ public TimeSpan ReceiveResponseDelay { get; set; }
+ public TimeSpan ReceiveUdpPollingInterval { get; set; }
+ public ISynchronizeInvoke? SynchronizingObject { get; set; }
+
+ public ValueTask<IReadOnlyList<SkStackPanDescription>> ActiveScanAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackActiveScanOptions? scanOptions = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, IPAddress paaAddress, SkStackChannel channel, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, IPAddress paaAddress, int channelNumber, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, PhysicalAddress paaMacAddress, SkStackChannel channel, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, PhysicalAddress paaMacAddress, int channelNumber, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackActiveScanOptions? scanOptions = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackPanDescription pan, CancellationToken cancellationToken = default) {}
+ public async ValueTask<IPAddress> ConvertToIPv6LinkLocalAddressAsync(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask DisableFlashMemoryAutoLoadAsync(CancellationToken cancellationToken = default) {}
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public ValueTask EnableFlashMemoryAutoLoadAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<IPAddress>> GetAvailableAddressListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<SkStackUdpPort>> GetListeningUdpPortListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyDictionary<IPAddress, PhysicalAddress>> GetNeighborCacheListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<SkStackUdpPortHandle>> GetUnusedUdpPortHandleListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask LoadFlashMemoryAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<SkStackUdpPort> PrepareUdpPortAsync(int port, CancellationToken cancellationToken = default) {}
+ public ValueTask<IPAddress> ReceiveUdpAsync(int port, IBufferWriter<byte> buffer, CancellationToken cancellationToken = default) {}
+ public ValueTask<IPAddress> ReceiveUdpEchonetLiteAsync(IBufferWriter<byte> buffer, CancellationToken cancellationToken = default) {}
+ public ValueTask SaveFlashMemoryAsync(SkStackFlashMemoryWriteRestriction restriction, CancellationToken cancellationToken = default) {}
+ internal protected ValueTask<SkStackResponse<TPayload>> SendCommandAsync<TPayload>(ReadOnlyMemory<byte> command, Action<ISkStackCommandLineWriter>? writeArguments, SkStackSequenceParser<TPayload> parseResponsePayload, SkStackProtocolSyntax? syntax = null, bool throwIfErrorStatus = true, CancellationToken cancellationToken = default) {}
+ internal protected async ValueTask<SkStackResponse> SendCommandAsync(ReadOnlyMemory<byte> command, Action<ISkStackCommandLineWriter>? writeArguments = null, SkStackProtocolSyntax? syntax = null, bool throwIfErrorStatus = true, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKADDNBRAsync(IPAddress ipv6Address, PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<string>> SendSKAPPVERAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKDSLEEPAsync(bool waitUntilWakeUp = false, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKERASEAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<(IPAddress LinkLocalAddress, PhysicalAddress MacAddress, SkStackChannel Channel, int PanId, int Addr16)>> SendSKINFOAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKJOINAsync(IPAddress ipv6address, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IPAddress>> SendSKLL64Async(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKLOADAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IPAddress Address)> SendSKREJOINAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKRESETAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSAVEAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanPairAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanPairAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyDictionary<SkStackChannel, decimal> ScanResult)> SendSKSCANEnergyDetectScanAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyDictionary<SkStackChannel, decimal> ScanResult)> SendSKSCANEnergyDetectScanAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPort port, IPAddress destinationAddress, int destinationPort, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPort port, IPEndPoint destination, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPortHandle handle, IPAddress destinationAddress, int destinationPort, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPortHandle handle, IPEndPoint destination, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETPWDAsync(ReadOnlyMemory<byte> password, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETPWDAsync(ReadOnlyMemory<char> password, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETRBIDAsync(ReadOnlyMemory<byte> id, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETRBIDAsync(ReadOnlyMemory<char> id, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<TValue>> SendSKSREGAsync<TValue>(SkStackRegister.RegisterEntry<TValue> register, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSREGAsync<TValue>(SkStackRegister.RegisterEntry<TValue> register, TValue @value, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyList<IPAddress>>> SendSKTABLEAvailableAddressListAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyList<SkStackUdpPort>>> SendSKTABLEListeningPortListAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyDictionary<IPAddress, PhysicalAddress>>> SendSKTABLENeighborCacheListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKTERMAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, SkStackUdpPort UdpPort)> SendSKUDPPORTAsync(SkStackUdpPortHandle handle, int port, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKUDPPORTUnsetAsync(SkStackUdpPortHandle handle, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<Version>> SendSKVERAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask SendUdpEchonetLiteAsync(ReadOnlyMemory<byte> buffer, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ protected async ValueTask SetFlashMemoryAutoLoadAsync(bool trueIfEnable, CancellationToken cancellationToken = default) {}
+ public void StartCapturingUdpReceiveEvents(int port) {}
+ public void StopCapturingUdpReceiveEvents(int port) {}
+ public ValueTask<bool> TerminatePanaSessionAsync(CancellationToken cancellationToken = default) {}
+ protected void ThrowIfDisposed() {}
+ internal protected void ThrowIfPanaSessionAlreadyEstablished() {}
+ [MemberNotNull("PanaSessionPeerAddress")]
+ internal protected void ThrowIfPanaSessionIsNotEstablished() {}
+ }
+
+ public class SkStackCommandNotSupportedException : SkStackErrorResponseException {
+ }
+
+ public class SkStackErrorResponseException : SkStackResponseException {
+ public SkStackErrorCode ErrorCode { get; }
+ public string ErrorText { get; }
+ public SkStackResponse Response { get; }
+ }
+
+ public class SkStackEventArgs : EventArgs {
+ public SkStackEventNumber EventNumber { get; }
+ }
+
+ public class SkStackFlashMemoryIOException : SkStackErrorResponseException {
+ }
+
+ public abstract class SkStackFlashMemoryWriteRestriction {
+ public static SkStackFlashMemoryWriteRestriction CreateGrantIfElapsed(TimeSpan interval) {}
+ public static SkStackFlashMemoryWriteRestriction DangerousCreateAlwaysGrant() {}
+
+ protected SkStackFlashMemoryWriteRestriction() {}
+
+ internal protected abstract bool IsRestricted();
+ }
+
+ public static class SkStackKnownPortNumbers {
+ public const int EchonetLite = 3610;
+ public const int Pana = 716;
+ }
+
+ public class SkStackPanaSessionEstablishmentException : SkStackPanaSessionException {
+ }
+
+ public sealed class SkStackPanaSessionEventArgs : SkStackEventArgs {
+ public IPAddress PanaSessionPeerAddress { get; }
+ }
+
+ public abstract class SkStackPanaSessionException : InvalidOperationException {
+ public IPAddress Address { get; }
+ public SkStackEventNumber EventNumber { get; }
+ }
+
+ public sealed class SkStackPanaSessionInfo {
+ public SkStackChannel Channel { get; }
+ public IPAddress LocalAddress { get; }
+ public PhysicalAddress LocalMacAddress { get; }
+ public int PanId { get; }
+ public IPAddress PeerAddress { get; }
+ public PhysicalAddress PeerMacAddress { get; }
+ }
+
+ public static class SkStackRegister {
+ public abstract class RegisterEntry<TValue> {
+ private protected delegate bool ExpectValueFunc(ref SequenceReader<byte> reader, out TValue @value);
+
+ public bool IsReadable { get; }
+ public bool IsWritable { get; }
+ public TValue MaxValue { get; }
+ public TValue MinValue { get; }
+ public string Name { get; }
+ }
+
+ public static SkStackRegister.RegisterEntry<bool> AcceptIcmpEcho { get; }
+ public static SkStackRegister.RegisterEntry<ulong> AccumulatedSendTimeInMilliseconds { get; }
+ public static SkStackRegister.RegisterEntry<SkStackChannel> Channel { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableAutoLoad { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableAutoReauthentication { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableEchoback { get; }
+ public static SkStackRegister.RegisterEntry<bool> EncryptIPMulticast { get; }
+ public static SkStackRegister.RegisterEntry<uint> FrameCounter { get; }
+ public static SkStackRegister.RegisterEntry<bool> IsSendingRestricted { get; }
+ public static SkStackRegister.RegisterEntry<ReadOnlyMemory<byte>> PairingId { get; }
+ public static SkStackRegister.RegisterEntry<ushort> PanId { get; }
+ public static SkStackRegister.RegisterEntry<TimeSpan> PanaSessionLifetimeInSeconds { get; }
+ public static SkStackRegister.RegisterEntry<bool> RespondBeaconRequest { get; }
+ public static SkStackRegister.RegisterEntry<SkStackChannel> S02 { get; }
+ public static SkStackRegister.RegisterEntry<ushort> S03 { get; }
+ public static SkStackRegister.RegisterEntry<uint> S07 { get; }
+ public static SkStackRegister.RegisterEntry<ReadOnlyMemory<byte>> S0A { get; }
+ public static SkStackRegister.RegisterEntry<bool> S15 { get; }
+ public static SkStackRegister.RegisterEntry<TimeSpan> S16 { get; }
+ public static SkStackRegister.RegisterEntry<bool> S17 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SA0 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SA1 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFB { get; }
+ public static SkStackRegister.RegisterEntry<ulong> SFD { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFE { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFF { get; }
+ }
+
+ public class SkStackResponse {
+ public SkStackResponseStatus Status { get; }
+ public ReadOnlyMemory<byte> StatusText { get; }
+ public bool Success { get; }
+ }
+
+ public class SkStackResponseException : InvalidOperationException {
+ public SkStackResponseException() {}
+ public SkStackResponseException(string message) {}
+ public SkStackResponseException(string message, Exception? innerException = null) {}
+ }
+
+ public class SkStackResponse<TPayload> : SkStackResponse {
+ public TPayload Payload { get; }
+ }
+
+ public class SkStackUartIOException : SkStackErrorResponseException {
+ }
+
+ public class SkStackUdpSendFailedException : InvalidOperationException {
+ public SkStackUdpSendFailedException() {}
+ public SkStackUdpSendFailedException(string message) {}
+ public SkStackUdpSendFailedException(string message, Exception? innerException = null) {}
+ public SkStackUdpSendFailedException(string message, SkStackUdpPortHandle portHandle, IPAddress peerAddress, Exception? innerException = null) {}
+
+ public IPAddress? PeerAddress { get; }
+ public SkStackUdpPortHandle PortHandle { get; }
+ }
+
+ public class SkStackUdpSendResultIndeterminateException : InvalidOperationException {
+ public SkStackUdpSendResultIndeterminateException() {}
+ public SkStackUdpSendResultIndeterminateException(string message) {}
+ public SkStackUdpSendResultIndeterminateException(string message, Exception? innerException = null) {}
+ }
+
+ public readonly struct SkStackChannel :
+ IComparable<SkStackChannel>,
+ IEquatable<SkStackChannel>
+ {
+ public static readonly IReadOnlyDictionary<int, SkStackChannel> Channels; // = "System.Collections.Generic.Dictionary`2[System.Int32,Smdn.Net.SkStackIP.SkStackChannel]"
+ public static readonly SkStackChannel Empty; // = "0ch (S02=0x00, 0 MHz)"
+
+ public static SkStackChannel Channel33 { get; }
+ public static SkStackChannel Channel34 { get; }
+ public static SkStackChannel Channel35 { get; }
+ public static SkStackChannel Channel36 { get; }
+ public static SkStackChannel Channel37 { get; }
+ public static SkStackChannel Channel38 { get; }
+ public static SkStackChannel Channel39 { get; }
+ public static SkStackChannel Channel40 { get; }
+ public static SkStackChannel Channel41 { get; }
+ public static SkStackChannel Channel42 { get; }
+ public static SkStackChannel Channel43 { get; }
+ public static SkStackChannel Channel44 { get; }
+ public static SkStackChannel Channel45 { get; }
+ public static SkStackChannel Channel46 { get; }
+ public static SkStackChannel Channel47 { get; }
+ public static SkStackChannel Channel48 { get; }
+ public static SkStackChannel Channel49 { get; }
+ public static SkStackChannel Channel50 { get; }
+ public static SkStackChannel Channel51 { get; }
+ public static SkStackChannel Channel52 { get; }
+ public static SkStackChannel Channel53 { get; }
+ public static SkStackChannel Channel54 { get; }
+ public static SkStackChannel Channel55 { get; }
+ public static SkStackChannel Channel56 { get; }
+ public static SkStackChannel Channel57 { get; }
+ public static SkStackChannel Channel58 { get; }
+ public static SkStackChannel Channel59 { get; }
+ public static SkStackChannel Channel60 { get; }
+
+ public static bool operator == (SkStackChannel x, SkStackChannel y) {}
+ public static bool operator != (SkStackChannel x, SkStackChannel y) {}
+
+ public int ChannelNumber { get; }
+ public decimal FrequencyMHz { get; }
+ public bool IsEmpty { get; }
+
+ public bool Equals(SkStackChannel other) {}
+ public override bool Equals(object? obj) {}
+ public override int GetHashCode() {}
+ int IComparable<SkStackChannel>.CompareTo(SkStackChannel other) {}
+ public override string ToString() {}
+ }
+
+ public readonly struct SkStackPanDescription {
+ public SkStackChannel Channel { get; }
+ public int ChannelPage { get; }
+ public int Id { get; }
+ public PhysicalAddress MacAddress { get; }
+ public uint PairingId { get; }
+ public decimal Rssi { get; }
+
+ public override string ToString() {}
+ }
+
+ public readonly struct SkStackUdpPort {
+ public static readonly SkStackUdpPort Null; // = "0 (#0)"
+
+ public SkStackUdpPortHandle Handle { get; }
+ public bool IsNull { get; }
+ public bool IsUnused { get; }
+ public int Port { get; }
+
+ public override string ToString() {}
+ }
+}
+
+namespace Smdn.Net.SkStackIP.Protocol {
+ public delegate TResult SkStackSequenceParser<TResult>(ISkStackSequenceParserContext context);
+
+ public interface ISkStackCommandLineWriter {
+ void WriteMaskedToken(ReadOnlySpan<byte> token);
+ void WriteToken(ReadOnlySpan<byte> token);
+ }
+
+ public interface ISkStackSequenceParserContext {
+ ReadOnlySequence<byte> UnparsedSequence { get; }
+
+ void Complete();
+ void Complete(SequenceReader<byte> consumedReader);
+ void Continue();
+ ISkStackSequenceParserContext CreateCopy();
+ virtual SequenceReader<byte> CreateReader() {}
+ void Ignore();
+ void SetAsIncomplete();
+ void SetAsIncomplete(SequenceReader<byte> incompleteReader);
+ }
+
+ public abstract class SkStackProtocolSyntax {
+ public static SkStackProtocolSyntax Default { get; }
+
+ protected SkStackProtocolSyntax() {}
+
+ public abstract ReadOnlySpan<byte> EndOfCommandLine { get; }
+ public virtual ReadOnlySpan<byte> EndOfEchobackLine { get; }
+ public abstract ReadOnlySpan<byte> EndOfStatusLine { get; }
+ public abstract bool ExpectStatusLine { get; }
+ }
+
+ public static class SkStackTokenParser {
+ public static bool Expect<TValue>(ref SequenceReader<byte> reader, int length, Converter<ReadOnlySequence<byte>, TValue> converter, [NotNullWhen(true)] out TValue @value) {}
+ public static bool ExpectADDR16(ref SequenceReader<byte> reader, out ushort @value) {}
+ public static bool ExpectADDR64(ref SequenceReader<byte> reader, [NotNullWhen(true)] out PhysicalAddress? @value) {}
+ public static bool ExpectBinary(ref SequenceReader<byte> reader, out bool @value) {}
+ public static bool ExpectCHANNEL(ref SequenceReader<byte> reader, out SkStackChannel @value) {}
+ public static bool ExpectCharArray(ref SequenceReader<byte> reader, [NotNullWhen(true)] out string? @value) {}
+ public static bool ExpectCharArray(ref SequenceReader<byte> reader, out ReadOnlyMemory<byte> @value) {}
+ public static bool ExpectDecimalNumber(ref SequenceReader<byte> reader, int length, out uint @value) {}
+ public static bool ExpectDecimalNumber(ref SequenceReader<byte> reader, out uint @value) {}
+ public static bool ExpectEndOfLine(ref SequenceReader<byte> reader) {}
+ public static bool ExpectIPADDR(ref SequenceReader<byte> reader, [NotNullWhen(true)] out IPAddress? @value) {}
+ public static bool ExpectSequence(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedSequence) {}
+ public static bool ExpectToken(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedToken) {}
+ public static bool ExpectUINT16(ref SequenceReader<byte> reader, out ushort @value) {}
+ public static bool ExpectUINT32(ref SequenceReader<byte> reader, out uint @value) {}
+ public static bool ExpectUINT64(ref SequenceReader<byte> reader, out ulong @value) {}
+ public static bool ExpectUINT8(ref SequenceReader<byte> reader, out byte @value) {}
+ public static void ToByteSequence(ReadOnlySequence<byte> hexTextSequence, int byteSequenceLength, Span<byte> destination) {}
+ public static bool TryExpectStatusLine(ref SequenceReader<byte> reader, out SkStackResponseStatus status) {}
+ public static OperationStatus TryExpectToken(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedToken) {}
+ }
+
+ public class SkStackUnexpectedResponseException : SkStackResponseException {
+ public string? CausedText { get; }
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.0.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-net8.0.apilist.cs b/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-net8.0.apilist.cs
new file mode 100644
index 0000000..d28e48b
--- /dev/null
+++ b/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-net8.0.apilist.cs
@@ -0,0 +1,464 @@
+// Smdn.Net.SkStackIP.dll (Smdn.Net.SkStackIP-1.0.0)
+// Name: Smdn.Net.SkStackIP
+// AssemblyVersion: 1.0.0.0
+// InformationalVersion: 1.0.0+655c155832ea35fece55fe3cd2467b473922319c
+// TargetFramework: .NETCoreApp,Version=v8.0
+// Configuration: Release
+// Referenced assemblies:
+// 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.Fundamental.ControlPicture, Version=3.0.0.1, Culture=neutral
+// Smdn.Fundamental.PrintableEncoding.Hexadecimal, Version=3.0.0.0, Culture=neutral
+// System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.IO.Pipelines, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// 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.IO;
+using System.IO.Pipelines;
+using System.Net;
+using System.Net.NetworkInformation;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Smdn.Net.SkStackIP;
+using Smdn.Net.SkStackIP.Protocol;
+
+namespace Smdn.Net.SkStackIP {
+ public enum SkStackERXUDPDataFormat : int {
+ Binary = 0,
+ HexAsciiText = 1,
+ }
+
+ public enum SkStackErrorCode : int {
+ ER01 = 1,
+ ER02 = 2,
+ ER03 = 3,
+ ER04 = 4,
+ ER05 = 5,
+ ER06 = 6,
+ ER07 = 7,
+ ER08 = 8,
+ ER09 = 9,
+ ER10 = 10,
+ Undefined = 0,
+ }
+
+ public enum SkStackEventNumber : byte {
+ ActiveScanCompleted = 34,
+ BeaconReceived = 32,
+ EchoRequestReceived = 5,
+ EnergyDetectScanCompleted = 31,
+ NeighborAdvertisementReceived = 2,
+ NeighborSolicitationReceived = 1,
+ PanaSessionEstablishmentCompleted = 37,
+ PanaSessionEstablishmentError = 36,
+ PanaSessionExpired = 41,
+ PanaSessionTerminationCompleted = 39,
+ PanaSessionTerminationRequestReceived = 38,
+ PanaSessionTerminationTimedOut = 40,
+ TransmissionTimeControlLimitationActivated = 50,
+ TransmissionTimeControlLimitationDeactivated = 51,
+ UdpSendCompleted = 33,
+ Undefined = 0,
+ WakeupSignalReceived = 192,
+ }
+
+ public enum SkStackResponseStatus : int {
+ Fail = -1,
+ Ok = 1,
+ Undetermined = 0,
+ }
+
+ public enum SkStackUdpEncryption : byte {
+ EncryptIfAble = 2,
+ ForceEncrypt = 1,
+ ForcePlainText = 0,
+ }
+
+ public enum SkStackUdpPortHandle : byte {
+ Handle1 = 1,
+ Handle2 = 2,
+ Handle3 = 3,
+ Handle4 = 4,
+ Handle5 = 5,
+ Handle6 = 6,
+ None = 0,
+ }
+
+ public abstract class SkStackActiveScanOptions : ICloneable {
+ public static SkStackActiveScanOptions Default { get; }
+ public static SkStackActiveScanOptions Null { get; }
+ public static SkStackActiveScanOptions ScanUntilFind { get; }
+
+ public static SkStackActiveScanOptions Create(IEnumerable<int> scanDurationGenerator, PhysicalAddress paaMacAddress) {}
+ public static SkStackActiveScanOptions Create(IEnumerable<int> scanDurationGenerator, Predicate<SkStackPanDescription>? paaSelector = null) {}
+
+ protected SkStackActiveScanOptions() {}
+
+ public abstract SkStackActiveScanOptions Clone();
+ object ICloneable.Clone() {}
+ }
+
+ public class SkStackClient : IDisposable {
+ public static readonly TimeSpan SKSCANDefaultDuration; // = "00:00:00.0480000"
+ public static readonly TimeSpan SKSCANMaxDuration; // = "00:02:37.2960000"
+ public static readonly TimeSpan SKSCANMinDuration; // = "00:00:00.0192000"
+
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionEstablished;
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionExpired;
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionTerminated;
+ public event EventHandler<SkStackEventArgs>? Slept;
+ public event EventHandler<SkStackEventArgs>? WokeUp;
+
+ public SkStackClient(PipeWriter sender, PipeReader receiver, SkStackERXUDPDataFormat erxudpDataFormat = SkStackERXUDPDataFormat.Binary, ILogger? logger = null) {}
+ public SkStackClient(Stream stream, bool leaveStreamOpen = true, SkStackERXUDPDataFormat erxudpDataFormat = SkStackERXUDPDataFormat.Binary, ILogger? logger = null) {}
+
+ public SkStackERXUDPDataFormat ERXUDPDataFormat { get; protected set; }
+ [MemberNotNullWhen(true, "PanaSessionPeerAddress")]
+ public bool IsPanaSessionAlive { [MemberNotNullWhen(true, "PanaSessionPeerAddress")] get; }
+ protected ILogger? Logger { get; }
+ public IPAddress? PanaSessionPeerAddress { get; }
+ public TimeSpan ReceiveResponseDelay { get; set; }
+ public TimeSpan ReceiveUdpPollingInterval { get; set; }
+ public ISynchronizeInvoke? SynchronizingObject { get; set; }
+
+ public ValueTask<IReadOnlyList<SkStackPanDescription>> ActiveScanAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackActiveScanOptions? scanOptions = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, IPAddress paaAddress, SkStackChannel channel, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, IPAddress paaAddress, int channelNumber, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, PhysicalAddress paaMacAddress, SkStackChannel channel, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, PhysicalAddress paaMacAddress, int channelNumber, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackActiveScanOptions? scanOptions = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackPanDescription pan, CancellationToken cancellationToken = default) {}
+ public async ValueTask<IPAddress> ConvertToIPv6LinkLocalAddressAsync(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask DisableFlashMemoryAutoLoadAsync(CancellationToken cancellationToken = default) {}
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public ValueTask EnableFlashMemoryAutoLoadAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<IPAddress>> GetAvailableAddressListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<SkStackUdpPort>> GetListeningUdpPortListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyDictionary<IPAddress, PhysicalAddress>> GetNeighborCacheListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<SkStackUdpPortHandle>> GetUnusedUdpPortHandleListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask LoadFlashMemoryAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<SkStackUdpPort> PrepareUdpPortAsync(int port, CancellationToken cancellationToken = default) {}
+ public ValueTask<IPAddress> ReceiveUdpAsync(int port, IBufferWriter<byte> buffer, CancellationToken cancellationToken = default) {}
+ public ValueTask<IPAddress> ReceiveUdpEchonetLiteAsync(IBufferWriter<byte> buffer, CancellationToken cancellationToken = default) {}
+ public ValueTask SaveFlashMemoryAsync(SkStackFlashMemoryWriteRestriction restriction, CancellationToken cancellationToken = default) {}
+ internal protected ValueTask<SkStackResponse<TPayload>> SendCommandAsync<TPayload>(ReadOnlyMemory<byte> command, Action<ISkStackCommandLineWriter>? writeArguments, SkStackSequenceParser<TPayload> parseResponsePayload, SkStackProtocolSyntax? syntax = null, bool throwIfErrorStatus = true, CancellationToken cancellationToken = default) {}
+ internal protected async ValueTask<SkStackResponse> SendCommandAsync(ReadOnlyMemory<byte> command, Action<ISkStackCommandLineWriter>? writeArguments = null, SkStackProtocolSyntax? syntax = null, bool throwIfErrorStatus = true, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKADDNBRAsync(IPAddress ipv6Address, PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<string>> SendSKAPPVERAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKDSLEEPAsync(bool waitUntilWakeUp = false, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKERASEAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<(IPAddress LinkLocalAddress, PhysicalAddress MacAddress, SkStackChannel Channel, int PanId, int Addr16)>> SendSKINFOAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKJOINAsync(IPAddress ipv6address, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IPAddress>> SendSKLL64Async(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKLOADAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IPAddress Address)> SendSKREJOINAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKRESETAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSAVEAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanPairAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanPairAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyDictionary<SkStackChannel, decimal> ScanResult)> SendSKSCANEnergyDetectScanAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyDictionary<SkStackChannel, decimal> ScanResult)> SendSKSCANEnergyDetectScanAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPort port, IPAddress destinationAddress, int destinationPort, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPort port, IPEndPoint destination, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPortHandle handle, IPAddress destinationAddress, int destinationPort, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPortHandle handle, IPEndPoint destination, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETPWDAsync(ReadOnlyMemory<byte> password, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETPWDAsync(ReadOnlyMemory<char> password, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETRBIDAsync(ReadOnlyMemory<byte> id, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETRBIDAsync(ReadOnlyMemory<char> id, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<TValue>> SendSKSREGAsync<TValue>(SkStackRegister.RegisterEntry<TValue> register, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSREGAsync<TValue>(SkStackRegister.RegisterEntry<TValue> register, TValue @value, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyList<IPAddress>>> SendSKTABLEAvailableAddressListAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyList<SkStackUdpPort>>> SendSKTABLEListeningPortListAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyDictionary<IPAddress, PhysicalAddress>>> SendSKTABLENeighborCacheListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKTERMAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, SkStackUdpPort UdpPort)> SendSKUDPPORTAsync(SkStackUdpPortHandle handle, int port, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKUDPPORTUnsetAsync(SkStackUdpPortHandle handle, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<Version>> SendSKVERAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask SendUdpEchonetLiteAsync(ReadOnlyMemory<byte> buffer, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ protected async ValueTask SetFlashMemoryAutoLoadAsync(bool trueIfEnable, CancellationToken cancellationToken = default) {}
+ public void StartCapturingUdpReceiveEvents(int port) {}
+ public void StopCapturingUdpReceiveEvents(int port) {}
+ public ValueTask<bool> TerminatePanaSessionAsync(CancellationToken cancellationToken = default) {}
+ protected void ThrowIfDisposed() {}
+ internal protected void ThrowIfPanaSessionAlreadyEstablished() {}
+ [MemberNotNull("PanaSessionPeerAddress")]
+ internal protected void ThrowIfPanaSessionIsNotEstablished() {}
+ }
+
+ public class SkStackCommandNotSupportedException : SkStackErrorResponseException {
+ }
+
+ public class SkStackErrorResponseException : SkStackResponseException {
+ public SkStackErrorCode ErrorCode { get; }
+ public string ErrorText { get; }
+ public SkStackResponse Response { get; }
+ }
+
+ public class SkStackEventArgs : EventArgs {
+ public SkStackEventNumber EventNumber { get; }
+ }
+
+ public class SkStackFlashMemoryIOException : SkStackErrorResponseException {
+ }
+
+ public abstract class SkStackFlashMemoryWriteRestriction {
+ public static SkStackFlashMemoryWriteRestriction CreateGrantIfElapsed(TimeSpan interval) {}
+ public static SkStackFlashMemoryWriteRestriction DangerousCreateAlwaysGrant() {}
+
+ protected SkStackFlashMemoryWriteRestriction() {}
+
+ internal protected abstract bool IsRestricted();
+ }
+
+ public static class SkStackKnownPortNumbers {
+ public const int EchonetLite = 3610;
+ public const int Pana = 716;
+ }
+
+ public class SkStackPanaSessionEstablishmentException : SkStackPanaSessionException {
+ }
+
+ public sealed class SkStackPanaSessionEventArgs : SkStackEventArgs {
+ public IPAddress PanaSessionPeerAddress { get; }
+ }
+
+ public abstract class SkStackPanaSessionException : InvalidOperationException {
+ public IPAddress Address { get; }
+ public SkStackEventNumber EventNumber { get; }
+ }
+
+ public sealed class SkStackPanaSessionInfo {
+ public SkStackChannel Channel { get; }
+ public IPAddress LocalAddress { get; }
+ public PhysicalAddress LocalMacAddress { get; }
+ public int PanId { get; }
+ public IPAddress PeerAddress { get; }
+ public PhysicalAddress PeerMacAddress { get; }
+ }
+
+ public static class SkStackRegister {
+ public abstract class RegisterEntry<TValue> {
+ private protected delegate bool ExpectValueFunc(ref SequenceReader<byte> reader, out TValue @value);
+
+ public bool IsReadable { get; }
+ public bool IsWritable { get; }
+ public TValue MaxValue { get; }
+ public TValue MinValue { get; }
+ public string Name { get; }
+ }
+
+ public static SkStackRegister.RegisterEntry<bool> AcceptIcmpEcho { get; }
+ public static SkStackRegister.RegisterEntry<ulong> AccumulatedSendTimeInMilliseconds { get; }
+ public static SkStackRegister.RegisterEntry<SkStackChannel> Channel { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableAutoLoad { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableAutoReauthentication { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableEchoback { get; }
+ public static SkStackRegister.RegisterEntry<bool> EncryptIPMulticast { get; }
+ public static SkStackRegister.RegisterEntry<uint> FrameCounter { get; }
+ public static SkStackRegister.RegisterEntry<bool> IsSendingRestricted { get; }
+ public static SkStackRegister.RegisterEntry<ReadOnlyMemory<byte>> PairingId { get; }
+ public static SkStackRegister.RegisterEntry<ushort> PanId { get; }
+ public static SkStackRegister.RegisterEntry<TimeSpan> PanaSessionLifetimeInSeconds { get; }
+ public static SkStackRegister.RegisterEntry<bool> RespondBeaconRequest { get; }
+ public static SkStackRegister.RegisterEntry<SkStackChannel> S02 { get; }
+ public static SkStackRegister.RegisterEntry<ushort> S03 { get; }
+ public static SkStackRegister.RegisterEntry<uint> S07 { get; }
+ public static SkStackRegister.RegisterEntry<ReadOnlyMemory<byte>> S0A { get; }
+ public static SkStackRegister.RegisterEntry<bool> S15 { get; }
+ public static SkStackRegister.RegisterEntry<TimeSpan> S16 { get; }
+ public static SkStackRegister.RegisterEntry<bool> S17 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SA0 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SA1 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFB { get; }
+ public static SkStackRegister.RegisterEntry<ulong> SFD { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFE { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFF { get; }
+ }
+
+ public class SkStackResponse {
+ public SkStackResponseStatus Status { get; }
+ public ReadOnlyMemory<byte> StatusText { get; }
+ public bool Success { get; }
+ }
+
+ public class SkStackResponseException : InvalidOperationException {
+ public SkStackResponseException() {}
+ public SkStackResponseException(string message) {}
+ public SkStackResponseException(string message, Exception? innerException = null) {}
+ }
+
+ public class SkStackResponse<TPayload> : SkStackResponse {
+ public TPayload Payload { get; }
+ }
+
+ public class SkStackUartIOException : SkStackErrorResponseException {
+ }
+
+ public class SkStackUdpSendFailedException : InvalidOperationException {
+ public SkStackUdpSendFailedException() {}
+ public SkStackUdpSendFailedException(string message) {}
+ public SkStackUdpSendFailedException(string message, Exception? innerException = null) {}
+ public SkStackUdpSendFailedException(string message, SkStackUdpPortHandle portHandle, IPAddress peerAddress, Exception? innerException = null) {}
+
+ public IPAddress? PeerAddress { get; }
+ public SkStackUdpPortHandle PortHandle { get; }
+ }
+
+ public class SkStackUdpSendResultIndeterminateException : InvalidOperationException {
+ public SkStackUdpSendResultIndeterminateException() {}
+ public SkStackUdpSendResultIndeterminateException(string message) {}
+ public SkStackUdpSendResultIndeterminateException(string message, Exception? innerException = null) {}
+ }
+
+ public readonly struct SkStackChannel :
+ IComparable<SkStackChannel>,
+ IEquatable<SkStackChannel>
+ {
+ public static readonly IReadOnlyDictionary<int, SkStackChannel> Channels; // = "System.Collections.Generic.Dictionary`2[System.Int32,Smdn.Net.SkStackIP.SkStackChannel]"
+ public static readonly SkStackChannel Empty; // = "0ch (S02=0x00, 0 MHz)"
+
+ public static SkStackChannel Channel33 { get; }
+ public static SkStackChannel Channel34 { get; }
+ public static SkStackChannel Channel35 { get; }
+ public static SkStackChannel Channel36 { get; }
+ public static SkStackChannel Channel37 { get; }
+ public static SkStackChannel Channel38 { get; }
+ public static SkStackChannel Channel39 { get; }
+ public static SkStackChannel Channel40 { get; }
+ public static SkStackChannel Channel41 { get; }
+ public static SkStackChannel Channel42 { get; }
+ public static SkStackChannel Channel43 { get; }
+ public static SkStackChannel Channel44 { get; }
+ public static SkStackChannel Channel45 { get; }
+ public static SkStackChannel Channel46 { get; }
+ public static SkStackChannel Channel47 { get; }
+ public static SkStackChannel Channel48 { get; }
+ public static SkStackChannel Channel49 { get; }
+ public static SkStackChannel Channel50 { get; }
+ public static SkStackChannel Channel51 { get; }
+ public static SkStackChannel Channel52 { get; }
+ public static SkStackChannel Channel53 { get; }
+ public static SkStackChannel Channel54 { get; }
+ public static SkStackChannel Channel55 { get; }
+ public static SkStackChannel Channel56 { get; }
+ public static SkStackChannel Channel57 { get; }
+ public static SkStackChannel Channel58 { get; }
+ public static SkStackChannel Channel59 { get; }
+ public static SkStackChannel Channel60 { get; }
+
+ public static bool operator == (SkStackChannel x, SkStackChannel y) {}
+ public static bool operator != (SkStackChannel x, SkStackChannel y) {}
+
+ public int ChannelNumber { get; }
+ public decimal FrequencyMHz { get; }
+ public bool IsEmpty { get; }
+
+ public bool Equals(SkStackChannel other) {}
+ public override bool Equals(object? obj) {}
+ public override int GetHashCode() {}
+ int IComparable<SkStackChannel>.CompareTo(SkStackChannel other) {}
+ public override string ToString() {}
+ }
+
+ public readonly struct SkStackPanDescription {
+ public SkStackChannel Channel { get; }
+ public int ChannelPage { get; }
+ public int Id { get; }
+ public PhysicalAddress MacAddress { get; }
+ public uint PairingId { get; }
+ public decimal Rssi { get; }
+
+ public override string ToString() {}
+ }
+
+ public readonly struct SkStackUdpPort {
+ public static readonly SkStackUdpPort Null; // = "0 (#0)"
+
+ public SkStackUdpPortHandle Handle { get; }
+ public bool IsNull { get; }
+ public bool IsUnused { get; }
+ public int Port { get; }
+
+ public override string ToString() {}
+ }
+}
+
+namespace Smdn.Net.SkStackIP.Protocol {
+ public delegate TResult SkStackSequenceParser<TResult>(ISkStackSequenceParserContext context);
+
+ public interface ISkStackCommandLineWriter {
+ void WriteMaskedToken(ReadOnlySpan<byte> token);
+ void WriteToken(ReadOnlySpan<byte> token);
+ }
+
+ public interface ISkStackSequenceParserContext {
+ ReadOnlySequence<byte> UnparsedSequence { get; }
+
+ void Complete();
+ void Complete(SequenceReader<byte> consumedReader);
+ void Continue();
+ ISkStackSequenceParserContext CreateCopy();
+ virtual SequenceReader<byte> CreateReader() {}
+ void Ignore();
+ void SetAsIncomplete();
+ void SetAsIncomplete(SequenceReader<byte> incompleteReader);
+ }
+
+ public abstract class SkStackProtocolSyntax {
+ public static SkStackProtocolSyntax Default { get; }
+
+ protected SkStackProtocolSyntax() {}
+
+ public abstract ReadOnlySpan<byte> EndOfCommandLine { get; }
+ public virtual ReadOnlySpan<byte> EndOfEchobackLine { get; }
+ public abstract ReadOnlySpan<byte> EndOfStatusLine { get; }
+ public abstract bool ExpectStatusLine { get; }
+ }
+
+ public static class SkStackTokenParser {
+ public static bool Expect<TValue>(ref SequenceReader<byte> reader, int length, Converter<ReadOnlySequence<byte>, TValue> converter, [NotNullWhen(true)] out TValue @value) {}
+ public static bool ExpectADDR16(ref SequenceReader<byte> reader, out ushort @value) {}
+ public static bool ExpectADDR64(ref SequenceReader<byte> reader, [NotNullWhen(true)] out PhysicalAddress? @value) {}
+ public static bool ExpectBinary(ref SequenceReader<byte> reader, out bool @value) {}
+ public static bool ExpectCHANNEL(ref SequenceReader<byte> reader, out SkStackChannel @value) {}
+ public static bool ExpectCharArray(ref SequenceReader<byte> reader, [NotNullWhen(true)] out string? @value) {}
+ public static bool ExpectCharArray(ref SequenceReader<byte> reader, out ReadOnlyMemory<byte> @value) {}
+ public static bool ExpectDecimalNumber(ref SequenceReader<byte> reader, int length, out uint @value) {}
+ public static bool ExpectDecimalNumber(ref SequenceReader<byte> reader, out uint @value) {}
+ public static bool ExpectEndOfLine(ref SequenceReader<byte> reader) {}
+ public static bool ExpectIPADDR(ref SequenceReader<byte> reader, [NotNullWhen(true)] out IPAddress? @value) {}
+ public static bool ExpectSequence(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedSequence) {}
+ public static bool ExpectToken(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedToken) {}
+ public static bool ExpectUINT16(ref SequenceReader<byte> reader, out ushort @value) {}
+ public static bool ExpectUINT32(ref SequenceReader<byte> reader, out uint @value) {}
+ public static bool ExpectUINT64(ref SequenceReader<byte> reader, out ulong @value) {}
+ public static bool ExpectUINT8(ref SequenceReader<byte> reader, out byte @value) {}
+ public static void ToByteSequence(ReadOnlySequence<byte> hexTextSequence, int byteSequenceLength, Span<byte> destination) {}
+ public static bool TryExpectStatusLine(ref SequenceReader<byte> reader, out SkStackResponseStatus status) {}
+ public static OperationStatus TryExpectToken(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedToken) {}
+ }
+
+ public class SkStackUnexpectedResponseException : SkStackResponseException {
+ public string? CausedText { get; }
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.0.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-netstandard2.1.apilist.cs
new file mode 100644
index 0000000..39e4fdd
--- /dev/null
+++ b/doc/api-list/Smdn.Net.SkStackIP/Smdn.Net.SkStackIP-netstandard2.1.apilist.cs
@@ -0,0 +1,456 @@
+// Smdn.Net.SkStackIP.dll (Smdn.Net.SkStackIP-1.0.0)
+// Name: Smdn.Net.SkStackIP
+// AssemblyVersion: 1.0.0.0
+// InformationalVersion: 1.0.0+655c155832ea35fece55fe3cd2467b473922319c
+// TargetFramework: .NETStandard,Version=v2.1
+// Configuration: Release
+// Referenced assemblies:
+// 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.Fundamental.ControlPicture, Version=3.0.0.1, Culture=neutral
+// Smdn.Fundamental.Encoding.Buffer, Version=3.0.0.0, Culture=neutral
+// Smdn.Fundamental.PrintableEncoding.Hexadecimal, Version=3.0.0.0, Culture=neutral
+// System.IO.Pipelines, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
+using System.IO;
+using System.IO.Pipelines;
+using System.Net;
+using System.Net.NetworkInformation;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Smdn.Net.SkStackIP;
+using Smdn.Net.SkStackIP.Protocol;
+
+namespace Smdn.Net.SkStackIP {
+ public enum SkStackERXUDPDataFormat : int {
+ Binary = 0,
+ HexAsciiText = 1,
+ }
+
+ public enum SkStackErrorCode : int {
+ ER01 = 1,
+ ER02 = 2,
+ ER03 = 3,
+ ER04 = 4,
+ ER05 = 5,
+ ER06 = 6,
+ ER07 = 7,
+ ER08 = 8,
+ ER09 = 9,
+ ER10 = 10,
+ Undefined = 0,
+ }
+
+ public enum SkStackEventNumber : byte {
+ ActiveScanCompleted = 34,
+ BeaconReceived = 32,
+ EchoRequestReceived = 5,
+ EnergyDetectScanCompleted = 31,
+ NeighborAdvertisementReceived = 2,
+ NeighborSolicitationReceived = 1,
+ PanaSessionEstablishmentCompleted = 37,
+ PanaSessionEstablishmentError = 36,
+ PanaSessionExpired = 41,
+ PanaSessionTerminationCompleted = 39,
+ PanaSessionTerminationRequestReceived = 38,
+ PanaSessionTerminationTimedOut = 40,
+ TransmissionTimeControlLimitationActivated = 50,
+ TransmissionTimeControlLimitationDeactivated = 51,
+ UdpSendCompleted = 33,
+ Undefined = 0,
+ WakeupSignalReceived = 192,
+ }
+
+ public enum SkStackResponseStatus : int {
+ Fail = -1,
+ Ok = 1,
+ Undetermined = 0,
+ }
+
+ public enum SkStackUdpEncryption : byte {
+ EncryptIfAble = 2,
+ ForceEncrypt = 1,
+ ForcePlainText = 0,
+ }
+
+ public enum SkStackUdpPortHandle : byte {
+ Handle1 = 1,
+ Handle2 = 2,
+ Handle3 = 3,
+ Handle4 = 4,
+ Handle5 = 5,
+ Handle6 = 6,
+ None = 0,
+ }
+
+ public abstract class SkStackActiveScanOptions : ICloneable {
+ public static SkStackActiveScanOptions Default { get; }
+ public static SkStackActiveScanOptions Null { get; }
+ public static SkStackActiveScanOptions ScanUntilFind { get; }
+
+ public static SkStackActiveScanOptions Create(IEnumerable<int> scanDurationGenerator, PhysicalAddress paaMacAddress) {}
+ public static SkStackActiveScanOptions Create(IEnumerable<int> scanDurationGenerator, Predicate<SkStackPanDescription>? paaSelector = null) {}
+
+ protected SkStackActiveScanOptions() {}
+
+ public abstract SkStackActiveScanOptions Clone();
+ object ICloneable.Clone() {}
+ }
+
+ public class SkStackClient : IDisposable {
+ public static readonly TimeSpan SKSCANDefaultDuration; // = "00:00:00.0480000"
+ public static readonly TimeSpan SKSCANMaxDuration; // = "00:02:37.2960000"
+ public static readonly TimeSpan SKSCANMinDuration; // = "00:00:00.0192000"
+
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionEstablished;
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionExpired;
+ public event EventHandler<SkStackPanaSessionEventArgs>? PanaSessionTerminated;
+ public event EventHandler<SkStackEventArgs>? Slept;
+ public event EventHandler<SkStackEventArgs>? WokeUp;
+
+ public SkStackClient(PipeWriter sender, PipeReader receiver, SkStackERXUDPDataFormat erxudpDataFormat = SkStackERXUDPDataFormat.Binary, ILogger? logger = null) {}
+ public SkStackClient(Stream stream, bool leaveStreamOpen = true, SkStackERXUDPDataFormat erxudpDataFormat = SkStackERXUDPDataFormat.Binary, ILogger? logger = null) {}
+
+ public SkStackERXUDPDataFormat ERXUDPDataFormat { get; protected set; }
+ public bool IsPanaSessionAlive { get; }
+ protected ILogger? Logger { get; }
+ public IPAddress? PanaSessionPeerAddress { get; }
+ public TimeSpan ReceiveResponseDelay { get; set; }
+ public TimeSpan ReceiveUdpPollingInterval { get; set; }
+ public ISynchronizeInvoke? SynchronizingObject { get; set; }
+
+ public ValueTask<IReadOnlyList<SkStackPanDescription>> ActiveScanAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackActiveScanOptions? scanOptions = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, IPAddress paaAddress, SkStackChannel channel, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, IPAddress paaAddress, int channelNumber, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, PhysicalAddress paaMacAddress, SkStackChannel channel, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, PhysicalAddress paaMacAddress, int channelNumber, int panId, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackActiveScanOptions? scanOptions = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackPanaSessionInfo> AuthenticateAsPanaClientAsync(ReadOnlyMemory<byte> rbid, ReadOnlyMemory<byte> password, SkStackPanDescription pan, CancellationToken cancellationToken = default) {}
+ public async ValueTask<IPAddress> ConvertToIPv6LinkLocalAddressAsync(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask DisableFlashMemoryAutoLoadAsync(CancellationToken cancellationToken = default) {}
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public ValueTask EnableFlashMemoryAutoLoadAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<IPAddress>> GetAvailableAddressListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<SkStackUdpPort>> GetListeningUdpPortListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyDictionary<IPAddress, PhysicalAddress>> GetNeighborCacheListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<IReadOnlyList<SkStackUdpPortHandle>> GetUnusedUdpPortHandleListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask LoadFlashMemoryAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<SkStackUdpPort> PrepareUdpPortAsync(int port, CancellationToken cancellationToken = default) {}
+ public ValueTask<IPAddress> ReceiveUdpAsync(int port, IBufferWriter<byte> buffer, CancellationToken cancellationToken = default) {}
+ public ValueTask<IPAddress> ReceiveUdpEchonetLiteAsync(IBufferWriter<byte> buffer, CancellationToken cancellationToken = default) {}
+ public ValueTask SaveFlashMemoryAsync(SkStackFlashMemoryWriteRestriction restriction, CancellationToken cancellationToken = default) {}
+ internal protected ValueTask<SkStackResponse<TPayload>> SendCommandAsync<TPayload>(ReadOnlyMemory<byte> command, Action<ISkStackCommandLineWriter>? writeArguments, SkStackSequenceParser<TPayload> parseResponsePayload, SkStackProtocolSyntax? syntax = null, bool throwIfErrorStatus = true, CancellationToken cancellationToken = default) {}
+ internal protected async ValueTask<SkStackResponse> SendCommandAsync(ReadOnlyMemory<byte> command, Action<ISkStackCommandLineWriter>? writeArguments = null, SkStackProtocolSyntax? syntax = null, bool throwIfErrorStatus = true, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKADDNBRAsync(IPAddress ipv6Address, PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<string>> SendSKAPPVERAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKDSLEEPAsync(bool waitUntilWakeUp = false, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKERASEAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<(IPAddress LinkLocalAddress, PhysicalAddress MacAddress, SkStackChannel Channel, int PanId, int Addr16)>> SendSKINFOAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKJOINAsync(IPAddress ipv6address, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IPAddress>> SendSKLL64Async(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKLOADAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IPAddress Address)> SendSKREJOINAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKRESETAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSAVEAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanPairAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyList<SkStackPanDescription> PanDescriptions)> SendSKSCANActiveScanPairAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyDictionary<SkStackChannel, decimal> ScanResult)> SendSKSCANEnergyDetectScanAsync(TimeSpan duration = default, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, IReadOnlyDictionary<SkStackChannel, decimal> ScanResult)> SendSKSCANEnergyDetectScanAsync(int durationFactor, uint channelMask = uint.MaxValue, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPort port, IPAddress destinationAddress, int destinationPort, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPort port, IPEndPoint destination, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPortHandle handle, IPAddress destinationAddress, int destinationPort, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKSENDTOAsync(SkStackUdpPortHandle handle, IPEndPoint destination, ReadOnlyMemory<byte> data, SkStackUdpEncryption encryption = SkStackUdpEncryption.EncryptIfAble, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETPWDAsync(ReadOnlyMemory<byte> password, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETPWDAsync(ReadOnlyMemory<char> password, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETRBIDAsync(ReadOnlyMemory<byte> id, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSETRBIDAsync(ReadOnlyMemory<char> id, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<TValue>> SendSKSREGAsync<TValue>(SkStackRegister.RegisterEntry<TValue> register, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKSREGAsync<TValue>(SkStackRegister.RegisterEntry<TValue> register, TValue @value, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyList<IPAddress>>> SendSKTABLEAvailableAddressListAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyList<SkStackUdpPort>>> SendSKTABLEListeningPortListAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<IReadOnlyDictionary<IPAddress, PhysicalAddress>>> SendSKTABLENeighborCacheListAsync(CancellationToken cancellationToken = default) {}
+ public async ValueTask<(SkStackResponse Response, bool IsCompletedSuccessfully)> SendSKTERMAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask<(SkStackResponse Response, SkStackUdpPort UdpPort)> SendSKUDPPORTAsync(SkStackUdpPortHandle handle, int port, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse> SendSKUDPPORTUnsetAsync(SkStackUdpPortHandle handle, CancellationToken cancellationToken = default) {}
+ public ValueTask<SkStackResponse<Version>> SendSKVERAsync(CancellationToken cancellationToken = default) {}
+ public ValueTask SendUdpEchonetLiteAsync(ReadOnlyMemory<byte> buffer, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ protected async ValueTask SetFlashMemoryAutoLoadAsync(bool trueIfEnable, CancellationToken cancellationToken = default) {}
+ public void StartCapturingUdpReceiveEvents(int port) {}
+ public void StopCapturingUdpReceiveEvents(int port) {}
+ public ValueTask<bool> TerminatePanaSessionAsync(CancellationToken cancellationToken = default) {}
+ protected void ThrowIfDisposed() {}
+ internal protected void ThrowIfPanaSessionAlreadyEstablished() {}
+ internal protected void ThrowIfPanaSessionIsNotEstablished() {}
+ }
+
+ public class SkStackCommandNotSupportedException : SkStackErrorResponseException {
+ }
+
+ public class SkStackErrorResponseException : SkStackResponseException {
+ public SkStackErrorCode ErrorCode { get; }
+ public string ErrorText { get; }
+ public SkStackResponse Response { get; }
+ }
+
+ public class SkStackEventArgs : EventArgs {
+ public SkStackEventNumber EventNumber { get; }
+ }
+
+ public class SkStackFlashMemoryIOException : SkStackErrorResponseException {
+ }
+
+ public abstract class SkStackFlashMemoryWriteRestriction {
+ public static SkStackFlashMemoryWriteRestriction CreateGrantIfElapsed(TimeSpan interval) {}
+ public static SkStackFlashMemoryWriteRestriction DangerousCreateAlwaysGrant() {}
+
+ protected SkStackFlashMemoryWriteRestriction() {}
+
+ internal protected abstract bool IsRestricted();
+ }
+
+ public static class SkStackKnownPortNumbers {
+ public const int EchonetLite = 3610;
+ public const int Pana = 716;
+ }
+
+ public class SkStackPanaSessionEstablishmentException : SkStackPanaSessionException {
+ }
+
+ public sealed class SkStackPanaSessionEventArgs : SkStackEventArgs {
+ public IPAddress PanaSessionPeerAddress { get; }
+ }
+
+ public abstract class SkStackPanaSessionException : InvalidOperationException {
+ public IPAddress Address { get; }
+ public SkStackEventNumber EventNumber { get; }
+ }
+
+ public sealed class SkStackPanaSessionInfo {
+ public SkStackChannel Channel { get; }
+ public IPAddress LocalAddress { get; }
+ public PhysicalAddress LocalMacAddress { get; }
+ public int PanId { get; }
+ public IPAddress PeerAddress { get; }
+ public PhysicalAddress PeerMacAddress { get; }
+ }
+
+ public static class SkStackRegister {
+ public abstract class RegisterEntry<TValue> {
+ private protected delegate bool ExpectValueFunc(ref SequenceReader<byte> reader, out TValue @value);
+
+ public bool IsReadable { get; }
+ public bool IsWritable { get; }
+ public TValue MaxValue { get; }
+ public TValue MinValue { get; }
+ public string Name { get; }
+ }
+
+ public static SkStackRegister.RegisterEntry<bool> AcceptIcmpEcho { get; }
+ public static SkStackRegister.RegisterEntry<ulong> AccumulatedSendTimeInMilliseconds { get; }
+ public static SkStackRegister.RegisterEntry<SkStackChannel> Channel { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableAutoLoad { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableAutoReauthentication { get; }
+ public static SkStackRegister.RegisterEntry<bool> EnableEchoback { get; }
+ public static SkStackRegister.RegisterEntry<bool> EncryptIPMulticast { get; }
+ public static SkStackRegister.RegisterEntry<uint> FrameCounter { get; }
+ public static SkStackRegister.RegisterEntry<bool> IsSendingRestricted { get; }
+ public static SkStackRegister.RegisterEntry<ReadOnlyMemory<byte>> PairingId { get; }
+ public static SkStackRegister.RegisterEntry<ushort> PanId { get; }
+ public static SkStackRegister.RegisterEntry<TimeSpan> PanaSessionLifetimeInSeconds { get; }
+ public static SkStackRegister.RegisterEntry<bool> RespondBeaconRequest { get; }
+ public static SkStackRegister.RegisterEntry<SkStackChannel> S02 { get; }
+ public static SkStackRegister.RegisterEntry<ushort> S03 { get; }
+ public static SkStackRegister.RegisterEntry<uint> S07 { get; }
+ public static SkStackRegister.RegisterEntry<ReadOnlyMemory<byte>> S0A { get; }
+ public static SkStackRegister.RegisterEntry<bool> S15 { get; }
+ public static SkStackRegister.RegisterEntry<TimeSpan> S16 { get; }
+ public static SkStackRegister.RegisterEntry<bool> S17 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SA0 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SA1 { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFB { get; }
+ public static SkStackRegister.RegisterEntry<ulong> SFD { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFE { get; }
+ public static SkStackRegister.RegisterEntry<bool> SFF { get; }
+ }
+
+ public class SkStackResponse {
+ public SkStackResponseStatus Status { get; }
+ public ReadOnlyMemory<byte> StatusText { get; }
+ public bool Success { get; }
+ }
+
+ public class SkStackResponseException : InvalidOperationException {
+ public SkStackResponseException() {}
+ public SkStackResponseException(string message) {}
+ public SkStackResponseException(string message, Exception? innerException = null) {}
+ }
+
+ public class SkStackResponse<TPayload> : SkStackResponse {
+ public TPayload Payload { get; }
+ }
+
+ public class SkStackUartIOException : SkStackErrorResponseException {
+ }
+
+ public class SkStackUdpSendFailedException : InvalidOperationException {
+ public SkStackUdpSendFailedException() {}
+ public SkStackUdpSendFailedException(string message) {}
+ public SkStackUdpSendFailedException(string message, Exception? innerException = null) {}
+ public SkStackUdpSendFailedException(string message, SkStackUdpPortHandle portHandle, IPAddress peerAddress, Exception? innerException = null) {}
+
+ public IPAddress? PeerAddress { get; }
+ public SkStackUdpPortHandle PortHandle { get; }
+ }
+
+ public class SkStackUdpSendResultIndeterminateException : InvalidOperationException {
+ public SkStackUdpSendResultIndeterminateException() {}
+ public SkStackUdpSendResultIndeterminateException(string message) {}
+ public SkStackUdpSendResultIndeterminateException(string message, Exception? innerException = null) {}
+ }
+
+ public readonly struct SkStackChannel :
+ IComparable<SkStackChannel>,
+ IEquatable<SkStackChannel>
+ {
+ public static readonly IReadOnlyDictionary<int, SkStackChannel> Channels; // = "System.Collections.Generic.Dictionary`2[System.Int32,Smdn.Net.SkStackIP.SkStackChannel]"
+ public static readonly SkStackChannel Empty; // = "0ch (S02=0x00, 0 MHz)"
+
+ public static SkStackChannel Channel33 { get; }
+ public static SkStackChannel Channel34 { get; }
+ public static SkStackChannel Channel35 { get; }
+ public static SkStackChannel Channel36 { get; }
+ public static SkStackChannel Channel37 { get; }
+ public static SkStackChannel Channel38 { get; }
+ public static SkStackChannel Channel39 { get; }
+ public static SkStackChannel Channel40 { get; }
+ public static SkStackChannel Channel41 { get; }
+ public static SkStackChannel Channel42 { get; }
+ public static SkStackChannel Channel43 { get; }
+ public static SkStackChannel Channel44 { get; }
+ public static SkStackChannel Channel45 { get; }
+ public static SkStackChannel Channel46 { get; }
+ public static SkStackChannel Channel47 { get; }
+ public static SkStackChannel Channel48 { get; }
+ public static SkStackChannel Channel49 { get; }
+ public static SkStackChannel Channel50 { get; }
+ public static SkStackChannel Channel51 { get; }
+ public static SkStackChannel Channel52 { get; }
+ public static SkStackChannel Channel53 { get; }
+ public static SkStackChannel Channel54 { get; }
+ public static SkStackChannel Channel55 { get; }
+ public static SkStackChannel Channel56 { get; }
+ public static SkStackChannel Channel57 { get; }
+ public static SkStackChannel Channel58 { get; }
+ public static SkStackChannel Channel59 { get; }
+ public static SkStackChannel Channel60 { get; }
+
+ public static bool operator == (SkStackChannel x, SkStackChannel y) {}
+ public static bool operator != (SkStackChannel x, SkStackChannel y) {}
+
+ public int ChannelNumber { get; }
+ public decimal FrequencyMHz { get; }
+ public bool IsEmpty { get; }
+
+ public bool Equals(SkStackChannel other) {}
+ public override bool Equals(object? obj) {}
+ public override int GetHashCode() {}
+ int IComparable<SkStackChannel>.CompareTo(SkStackChannel other) {}
+ public override string ToString() {}
+ }
+
+ public readonly struct SkStackPanDescription {
+ public SkStackChannel Channel { get; }
+ public int ChannelPage { get; }
+ public int Id { get; }
+ public PhysicalAddress MacAddress { get; }
+ public uint PairingId { get; }
+ public decimal Rssi { get; }
+
+ public override string ToString() {}
+ }
+
+ public readonly struct SkStackUdpPort {
+ public static readonly SkStackUdpPort Null; // = "0 (#0)"
+
+ public SkStackUdpPortHandle Handle { get; }
+ public bool IsNull { get; }
+ public bool IsUnused { get; }
+ public int Port { get; }
+
+ public override string ToString() {}
+ }
+}
+
+namespace Smdn.Net.SkStackIP.Protocol {
+ public delegate TResult SkStackSequenceParser<TResult>(ISkStackSequenceParserContext context);
+
+ public interface ISkStackCommandLineWriter {
+ void WriteMaskedToken(ReadOnlySpan<byte> token);
+ void WriteToken(ReadOnlySpan<byte> token);
+ }
+
+ public interface ISkStackSequenceParserContext {
+ ReadOnlySequence<byte> UnparsedSequence { get; }
+
+ void Complete();
+ void Complete(SequenceReader<byte> consumedReader);
+ void Continue();
+ ISkStackSequenceParserContext CreateCopy();
+ virtual SequenceReader<byte> CreateReader() {}
+ void Ignore();
+ void SetAsIncomplete();
+ void SetAsIncomplete(SequenceReader<byte> incompleteReader);
+ }
+
+ public abstract class SkStackProtocolSyntax {
+ public static SkStackProtocolSyntax Default { get; }
+
+ protected SkStackProtocolSyntax() {}
+
+ public abstract ReadOnlySpan<byte> EndOfCommandLine { get; }
+ public virtual ReadOnlySpan<byte> EndOfEchobackLine { get; }
+ public abstract ReadOnlySpan<byte> EndOfStatusLine { get; }
+ public abstract bool ExpectStatusLine { get; }
+ }
+
+ public static class SkStackTokenParser {
+ public static bool Expect<TValue>(ref SequenceReader<byte> reader, int length, Converter<ReadOnlySequence<byte>, TValue> converter, [NotNullWhen(true)] out TValue @value) {}
+ public static bool ExpectADDR16(ref SequenceReader<byte> reader, out ushort @value) {}
+ public static bool ExpectADDR64(ref SequenceReader<byte> reader, [NotNullWhen(true)] out PhysicalAddress? @value) {}
+ public static bool ExpectBinary(ref SequenceReader<byte> reader, out bool @value) {}
+ public static bool ExpectCHANNEL(ref SequenceReader<byte> reader, out SkStackChannel @value) {}
+ public static bool ExpectCharArray(ref SequenceReader<byte> reader, [NotNullWhen(true)] out string? @value) {}
+ public static bool ExpectCharArray(ref SequenceReader<byte> reader, out ReadOnlyMemory<byte> @value) {}
+ public static bool ExpectDecimalNumber(ref SequenceReader<byte> reader, int length, out uint @value) {}
+ public static bool ExpectDecimalNumber(ref SequenceReader<byte> reader, out uint @value) {}
+ public static bool ExpectEndOfLine(ref SequenceReader<byte> reader) {}
+ public static bool ExpectIPADDR(ref SequenceReader<byte> reader, [NotNullWhen(true)] out IPAddress? @value) {}
+ public static bool ExpectSequence(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedSequence) {}
+ public static bool ExpectToken(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedToken) {}
+ public static bool ExpectUINT16(ref SequenceReader<byte> reader, out ushort @value) {}
+ public static bool ExpectUINT32(ref SequenceReader<byte> reader, out uint @value) {}
+ public static bool ExpectUINT64(ref SequenceReader<byte> reader, out ulong @value) {}
+ public static bool ExpectUINT8(ref SequenceReader<byte> reader, out byte @value) {}
+ public static void ToByteSequence(ReadOnlySequence<byte> hexTextSequence, int byteSequenceLength, Span<byte> destination) {}
+ public static bool TryExpectStatusLine(ref SequenceReader<byte> reader, out SkStackResponseStatus status) {}
+ public static OperationStatus TryExpectToken(ref SequenceReader<byte> reader, ReadOnlySpan<byte> expectedToken) {}
+ }
+
+ public class SkStackUnexpectedResponseException : SkStackResponseException {
+ public string? CausedText { get; }
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.0.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
Notes
New Contributors
Full Changelog: https://github.com/smdn/Smdn.Net.SkStackIP/commits/releases/Smdn.Net.SkStackIP-1.0.0