commit for branch changing

This commit is contained in:
Stoyan Zlatev 2025-04-28 10:10:33 +02:00
parent b125cf99c8
commit bbcbbbd449
20 changed files with 291 additions and 228 deletions

View File

@ -55,10 +55,6 @@
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<None Include="App.config" />
<None Include="configuration.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Hardware\Common.Hardware.SIRT\Common.Hardware.SIRT.csproj">
<Project>{8de8e742-ee0a-4004-aa49-3d08d748e5ac}</Project>

View File

@ -2,37 +2,54 @@
{
using Common.Hardware.SIRT;
using Common.Hardware.SIRT.Tasks;
using Common.Hardware.WaterMeter.eRegister.Telegrams;
using Common.Hardware.WaterMeter.eRegister;
using Common.Hardware.WaterMeter.eRegister.Features;
using System;
using System.Threading;
public static class Program
{
public static void Main()
{
var semi = new SEMI("08F3126B77C9000000320000740C000F0300000000000009140188BA30070E10A87F76D3FA000000000000000000000000000000000000000000000000000000000403003C0003012F9CBD671D000000000000000000000100011E95FD".GetBytes(), 868, new Common.Hardware.SIRT.Parameters.P11());
SIRTLogger.State += Console.WriteLine;
var sirtHub = new SIRTHub();
if (sirtHub.TryOpen("COM6", out var sirtId, out var frequency))
{
SIRTLogger.State -= Console.WriteLine;
SIRTLogger.Message += Console.WriteLine;
Console.WriteLine($"Listening on: COM6 - {frequency} - {sirtId}");
var task = new LEDTask(frequency, 319017453)
{
//WakeUpCmd = true,
//WakeUpModul = true,
//DelPamSemi = true,
Data = new byte[] { 0x1F, 0x01, 0x08, 0x43, 0x03, 0x63, 0x93, 0x73, 0x22 },
EncryptionKey = "E6C88800DEB868C0D6A84880CE982840".GetBytes(),
IsEncrypted = true,
};
//var broadcaster = new SIRTBroadcaster("COM6");
//broadcaster.Open();
sirtHub.Start(task);
task.Wait();
//Console.WriteLine(broadcaster.Id);
//Console.WriteLine();
//while (Console.ReadKey().Key != ConsoleKey.Enter)
//{
// Console.WriteLine(broadcaster.AdddressesInPamPool());
// Thread.Sleep(1000);
//}
Console.ReadKey();
sirtHub.Close("COM6");
}
}
public class ReadPamPoolTask : ReadPamTask
public class LEDTask : EregisterTask
{
public override void Push(SIRTMessage response)
public LEDTask(int frequency, uint address) : base(frequency)
{
Console.WriteLine(BitConverter.ToString(response));
this.RequestAddress = address;
}
public byte P811
{
get => this.p811;
set => this.p811 = value;
}
}

View File

@ -66,6 +66,7 @@
<Compile Include="Tasks\ActivateSIRTTask.cs" />
<Compile Include="Tasks\DeleteFromPamPoolTask.cs" />
<Compile Include="Tasks\IdentifySIRTTask.cs" />
<Compile Include="Tasks\ReadPampoolTask.cs" />
<Compile Include="Tasks\ReadPamTask.cs" />
<Compile Include="Tasks\ReadRegisterTask.cs" />
<Compile Include="Tasks\SIRTTask.cs" />

View File

@ -4,19 +4,19 @@
using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
public class SIRTBroadcaster
{
private readonly ConcurrentDictionary<uint, bool> pampool;
private readonly ConcurrentDictionary<uint, SIRTTask> tasks;
// private readonly ConcurrentDictionary<uint, SIRTChannel> channels;
private readonly ConcurrentDictionary<byte, uint> pampool;
private readonly SIRTStream sirtStream;
public string AdddressesInPamPool()
{
return string.Join("\t", this.pampool.Keys);
return string.Join("\t", this.pampool.Values);
}
private CancellationTokenSource cancellationTokenSource;
@ -27,9 +27,8 @@
public SIRTBroadcaster(string portName)
{
this.sirtStream = new SIRTStream(portName);
this.pampool = new ConcurrentDictionary<uint, bool>();
this.pampool = new ConcurrentDictionary<byte, uint>();
this.tasks = new ConcurrentDictionary<uint, SIRTTask>();
// this.channels = new ConcurrentDictionary<uint, SIRTChannel>();
}
public event Action<SIRTBroadcaster> Connected;
@ -44,19 +43,6 @@
public string PortName => this.sirtStream.PortName;
public void ClearChannels(uint requestAddress, uint responseAddress)
{
//if (this.channels.TryRemove(requestAddress, out _))
//{
// SIRTLogger.LogState($"Cannel for {requestAddress} removed");
//}
//if (this.channels.TryRemove(responseAddress, out _))
//{
// SIRTLogger.LogState($"Cannel for {responseAddress} removed");
//}
}
public void Close()
{
this.sirtStream.Close();
@ -73,7 +59,8 @@
}
}
// Try(this.channels.Clear);
Try(this.tasks.Clear);
Try(this.pampool.Clear);
Try(this.cancellationTokenSource.Cancel);
var disconnectedEvent = this.Disconnected;
@ -84,31 +71,6 @@
}
}
public SIRTChannel GetOrCreateChannel(uint requestAddress, uint responseAddress)
{
//var requestChannel = this.channels.GetOrAdd(requestAddress, default(SIRTChannel));
//var responseChannel = this.channels.GetOrAdd(responseAddress, default(SIRTChannel));
//var channel = requestChannel ?? responseChannel ?? new SIRTChannel
//{
// RequestAddress = requestAddress,
// ResponseAddress = responseAddress,
// WriteHandler = this.Write
//};
//this.channels.AddOrUpdate(requestAddress, channel, (_1, _2) => channel);
//this.channels.AddOrUpdate(responseAddress, channel, (_1, _2) => channel);
SIRTLogger.LogState($"Cannel for {requestAddress} updated");
SIRTLogger.LogState($"Cannel for {responseAddress} updated");
return new SIRTChannel
{
RequestAddress = requestAddress,
ResponseAddress = responseAddress,
WriteHandler = this.Write
};
}
public void Open()
{
this.sirtStream.Open();
@ -148,21 +110,35 @@
}
}
public bool TryStart(SIRTTask task)
/// <summary>
/// Checks if the given task can be sent then replaces existing SIRTTask (if any) and starts the new one.
/// </summary>
public bool Start(SIRTTask task)
{
var started = false;
var address = task.RequestAddress;
var addresses = this.pampool.Values.AsEnumerable();
var canStart = this.pampool.Count < 5 || addresses.Any(x => x == 0 || x == address);
SIRTLogger.LogMessage($"{this.PortName}|{this.pampool.Count} addresses in pam pool: {string.Join(", ", address)}");
SIRTLogger.LogMessage($"{this.PortName}|Can start task: {canStart}");
this.tasks.GetOrAdd(task.RequestAddress, addr =>
if (canStart)
{
task.StateChanged += TaskStateChanged;
this.sirtStream.Write(task.Run());
var newTask = this.tasks.AddOrUpdate(
key: address,
addValueFactory: addr => task,
updateValueFactory: (addr, oldTask) =>
{
this.DeleteFromPamPool(oldTask);
started = true;
return task;
});
return task;
});
var bytes = newTask.Start();
this.sirtStream.Write(bytes);
SIRTLogger.LogMessage($"{this.PortName}|RX: {BitConverter.ToString(bytes)}");
}
return started;
return canStart;
}
public void Write(SIRTTask task)
@ -171,7 +147,7 @@
{
task.Timestamp = DateTimeOffset.UtcNow;
task.SirtId = this.Id;
var bytes = task.Run();
var bytes = task.Start();
this.sirtStream.Write(bytes);
SIRTLogger.LogMessage($"{this.PortName}|TX: {BitConverter.ToString(bytes)}");
@ -193,7 +169,7 @@
{
Frequency = this.Frequency,
RequestAddress = task.RequestAddress,
}.Run();
}.Start();
this.sirtStream.Write(deleteCmd);
waitEvent.Wait(300);
@ -203,7 +179,7 @@
{
Frequency = this.Frequency,
RequestAddress = task.ResponseAddress,
}.Run();
}.Start();
this.sirtStream.Write(deleteCmd);
waitEvent.Wait(300);
@ -212,38 +188,27 @@
private void PampoolAsync()
{
var task = new ReadPamTask
var task = new ReadPampoolTask();
var addresses = task.Addresses;
var addressesCount = addresses.Length;
this.pampool.Clear();
for (byte i = 0; i < addressesCount; i++)
{
Frequency = this.Frequency,
RequestAddress = 0xFFFFFFFF,
Timeout = 3_000
};
this.pampool.AddOrUpdate(i, addresses[i], (ix, addr) => addresses[i]);
}
while (this.IsOpen)
{
if (this.TryStart(task))
this.Start(task);
task.Wait();
addresses = task.Addresses;
for (byte i = 0; i < addressesCount; i++)
{
task.Wait();
var payload = task.Payload;
var address = default(uint);
if (payload?.Length == 20)
{
this.pampool.Clear();
for (var i = 0; i < 20; i += 4)
{
address = BitConverter.ToUInt32(payload, i);
if (address == uint.MaxValue)
{
continue;
}
_ = this.pampool.GetOrAdd(address, true);
}
}
this.pampool.AddOrUpdate(i, addresses[i], (ix, addr) => addresses[i]);
}
}
}
@ -278,21 +243,5 @@
SIRTLogger.LogState("Message receiving stopped");
}
private void TaskStateChanged(SIRTTask task)
{
if (task.State == SIRTTaskState.Cancelled || task.State == SIRTTaskState.Completed)
{
this.tasks.TryRemove(task.RequestAddress, out _);
this.tasks.TryRemove(task.ResponseAddress, out _);
if (task.State == SIRTTaskState.Completed)
{
this.DeleteFromPamPool(task);
}
task.StateChanged -= this.TaskStateChanged;
}
}
}
}

View File

@ -637,7 +637,7 @@
for (var i = 0; i < 3 && task.State != SIRTTaskState.Completed; i++)
{
_ = broadcaster.TryStart(task);
broadcaster.Start(task);
task.Wait();
done = task.State == SIRTTaskState.Completed;
@ -653,7 +653,7 @@
for (var i = 0; i < 3 && task.State != SIRTTaskState.Completed; i++)
{
_ = broadcaster.TryStart(task);
broadcaster.Start(task);
task.Wait();
done = task.State == SIRTTaskState.Completed;

View File

@ -17,27 +17,8 @@
public event Action<SIRTBroadcaster> Disconnected;
public event Action<object> StateLogging;
public void Start(SIRTTask task)
{
foreach (var broadcaster in broadcasters.Values)
{
if (broadcaster.TryStart(task))
{
break;
}
}
}
public event Action<SIRTMessage> MessageProcessed;
public void ClearChannels(uint requestAddress, uint responseAddress)
{
foreach (var broadcaster in broadcasters.Values)
{
broadcaster.ClearChannels(requestAddress, responseAddress);
}
}
public void Close(string portName)
{
if (broadcasters.TryRemove(portName, out var sirtBroadcaster))
@ -61,21 +42,21 @@
}
}
public SIRTChannel GetOrCreateChannel(int frequency, uint requestAddress, uint responseAddress)
public bool Start(SIRTTask task)
{
var channel = default(SIRTChannel);
var started = false;
foreach (var broadcaster in broadcasters.Values)
{
if (broadcaster.Frequency == frequency)
if (broadcaster.Start(task))
{
channel = broadcaster.GetOrCreateChannel(requestAddress, responseAddress);
started = true;
break;
}
}
return channel;
return started;
}
public bool TryOpen(string portName, out string hexId, out int frequency)
@ -116,14 +97,6 @@
return sirtBroadcaster.IsOpen;
}
public void Run(SIRTTask task)
{
foreach (var broadcaster in broadcasters.Values)
{
broadcaster.Write(task);
}
}
public void Stop()
{
try

View File

@ -99,7 +99,7 @@
}
}
}
public void Write(params byte[] bytes) => this.sirtPort.Write(bytes);
}
}

View File

@ -0,0 +1,37 @@
namespace Common.Hardware.SIRT.Tasks
{
using System;
public class ReadPampoolTask : ReadPamTask
{
public ReadPampoolTask()
{
this.Frequency = this.Frequency;
this.RequestAddress = 0xFFFFFFFF;
this.Addresses = new uint[5];
this.Timeout = 3_000;
}
public uint[] Addresses { get; }
public override void Push(SIRTMessage response)
{
base.Push(response);
if (this.Payload?.Length == 20)
{
Array.Clear(this.Addresses, 0, 5);
for (var i = 0; i < 20; i++)
{
this.Addresses[i] = BitConverter.ToUInt32(this.Payload, i * 4);
if (this.Addresses[i] == 0xFFFFFFFF)
{
this.Addresses[i]++;
}
}
}
}
}
}

View File

@ -82,7 +82,7 @@
this.awaiter.Reset();
}
public virtual byte[] Run()
public virtual byte[] Start()
{
this.awaiter.Reset();

View File

@ -6,7 +6,7 @@
public class WritePamTask : SIRTTask
{
private readonly P811 p811;
protected P811 p811;
public WritePamTask()
{

View File

@ -17,7 +17,7 @@
{
private readonly ConcurrentQueue<EregisterTask> runningTasks;
private readonly EregisterProgrammingParameters parameters;
private readonly SIRTChannel sirtChannel;
private readonly SIRTHub sirtHub;
private readonly EregisterHistory history;
private readonly EregisterState state;
@ -27,10 +27,10 @@
public uint TempAdresse { get; set; }
public Eregister(EregisterProgrammingParameters parameters, SIRTChannel sirtChannel)
public Eregister(EregisterProgrammingParameters parameters, SIRTHub sirtHub)
{
this.parameters = parameters;
this.sirtChannel = sirtChannel;
this.sirtHub = sirtHub;
this.state = new EregisterState();
this.history = new EregisterHistory();
this.runningTasks = new ConcurrentQueue<EregisterTask>();
@ -102,46 +102,27 @@
this.history.TempAdresse = this.parameters.TempAdresse;
var stopProgramming = false;
var readEvent = new ManualResetEventSlim();
var task = default(EregisterTask);
var firstTask = true;
void messageReceived(SIRTMessage message)
{
this.history.Push(message);
if (task != null)
{
task.Push(message);
if (task.State == SIRTTaskState.Completed || task.State == SIRTTaskState.Cancelled)
{
readEvent.Set();
}
}
}
this.sirtChannel.MessageReceived += messageReceived;
while (this.runningTasks.TryPeek(out task) && task.State != SIRTTaskState.Cancelled && !cancellationToken.IsCancellationRequested)
{
while (task.State != SIRTTaskState.Completed && task.State != SIRTTaskState.Cancelled && !cancellationToken.IsCancellationRequested)
{
this.sirtChannel.WriteHandler(task);
this.sirtHub.Start(task);
this.history.Push(task);
readEvent.Wait(task.Timeout);
readEvent.Reset();
task.Wait();
if (firstTask && !task.AnyTelegramReceived)
{
_ = MessageBox.Show($"Das Rechenwerk an Ep: {task.SlotNr} mit Funkadresse: {task.RequestAddress}|{task.ResponseAddress} sendet nicht. "
+ $"Überprüfen Sie, ob alle SIRT's sind und oder die Funkfrequenz von dem Rechenwerk ist nicht verwechselt."
, "Achtung"
, MessageBoxButtons.OK);
stopProgramming = true;
//if (firstTask && !task.AnyTelegramReceived)
//{
// _ = MessageBox.Show($"Das Rechenwerk an Ep: {task.SlotNr} mit Funkadresse: {task.RequestAddress}|{task.ResponseAddress} sendet nicht. "
// + $"Überprüfen Sie, ob alle SIRT's sind und oder die Funkfrequenz von dem Rechenwerk ist nicht verwechselt."
// , "Achtung"
// , MessageBoxButtons.OK);
// stopProgramming = true;
break;
}
// break;
//}
if (task.ErrorMessage != null)
{
@ -156,8 +137,6 @@
break;
}
}
this.RemoveFromPamPoolIfNotCompleted(readEvent, task);
}
firstTask = false;
@ -193,8 +172,6 @@
this.UpdateTasksStateInTheQueue(task);
}
this.sirtChannel.MessageReceived -= messageReceived;
if (stopProgramming)
{
return;
@ -216,23 +193,6 @@
}
}
private void RemoveFromPamPoolIfNotCompleted(ManualResetEventSlim readEvent, EregisterTask task)
{
if (task.State != SIRTTaskState.Completed)
{
var deleteFromPamPoolTask = new DeleteFromPamPoolTask
{
Frequency = task.Frequency,
RequestAddress = task.RequestAddress,
ResponseAddress = task.ResponseAddress,
};
this.sirtChannel.WriteHandler(deleteFromPamPoolTask);
readEvent.Wait(500);
readEvent.Reset();
}
}
private void UpdateTasksStateInTheQueue(EregisterTask task)
{
var cultureInfo = CultureInfo.InvariantCulture;
@ -277,8 +237,9 @@
SlotNr = features.SlotNr,
PoNr = features.PoNr,
SerialNr = features.SerialNr,
WakeUpCmd = true,
DelPamTx = true,
WakeUpCmd = true,
WakeUpModul = true,
RequestAddress = features.RequestAddress,
ResponseAddress = features.ResponseAddress,
EncryptionKey = features.EncryptionKey,

View File

@ -24,8 +24,7 @@
foreach (var parameters in parametersList)
{
var channel = this.sirtHub.GetOrCreateChannel(parameters.Frequency, (uint)parameters.TempAdresse, (uint)parameters.Adresse);
var eregister = new Eregister(parameters, channel);
var eregister = new Eregister(parameters, this.sirtHub);
this.eregisters.Add(eregister);
@ -39,8 +38,7 @@
foreach (var parameters in parametersList)
{
var channel = this.sirtHub.GetOrCreateChannel(parameters.Frequency, (uint)parameters.TempAdresse, (uint)parameters.Adresse);
var eregister = new Eregister(parameters, channel);
var eregister = new Eregister(parameters, this.sirtHub);
this.eregisters.Add(eregister);
@ -77,8 +75,6 @@
{
foreach (var eregister in this.eregisters)
{
this.sirtHub.ClearChannels(eregister.TempAdresse, eregister.Adresse);
eregister.Clear();
}

View File

@ -9,7 +9,7 @@
public EregisterChangeMeterTypeTask(int frequency) : base(frequency)
=> this.Name = "Change meter type";
public override byte[] Run()
public override byte[] Start()
{
var numberStyles = NumberStyles.HexNumber | NumberStyles.AllowHexSpecifier;
var cultureInfo = CultureInfo.InvariantCulture;
@ -29,7 +29,7 @@
.Append(new ProvidePin { AuthLevel = AuthLevel.III })
.ToByteArray();
return base.Run();
return base.Start();
}
}
}

View File

@ -64,13 +64,13 @@
public ErrorMessage ErrorMessage { get; protected set; }
public override byte[] Run()
public override byte[] Start()
{
var payloadL = this.request.Payload.Length;
this.payload = new byte[payloadL];
Array.Copy(this.request.Payload, 0, this.payload, 0, payloadL);
if (this.FactoryState == FactoryState.Shipment)
{
this.payload = new EregisterAvailableParametersParser(this.payload);

View File

@ -1,9 +1,6 @@
namespace Common.UI
{
using Common.UI.Infrastructure;
using Common.UI.Pages.Eregister.M.Data;
using SQLite;
using System;
using System.Diagnostics;

View File

@ -17,6 +17,58 @@
public static string GetSetting(string key)
=> Appsettings.GetSetting(key);
private static ILogger CreateSIRTMessageLogger()
{
var dll = new FileInfo(typeof(AppHost).Assembly.Location);
var name = "SIRTMessages";
var nlogs = dll.Directory.CreateSubdirectory(name);
var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd}.txt");
LogManager.Configuration = new LoggingConfiguration();
LogManager.ThrowConfigExceptions = true;
LogManager.ThrowExceptions = true;
LogManager.AutoShutdown = true;
LogManager.Configuration.AddTarget(new FileTarget(name)
{
CreateDirs = true,
KeepFileOpen = true,
FileName = file
});
LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name);
LogManager.LogFactory.ReconfigExistingLoggers(true);
LogManager.ReconfigExistingLoggers(true);
return LogManager.GetLogger(name);
}
private static ILogger CreateSIRTStateLogger()
{
var dll = new FileInfo(typeof(AppHost).Assembly.Location);
var name = "SIRTState";
var nlogs = dll.Directory.CreateSubdirectory(name);
var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd}.txt");
LogManager.Configuration = new LoggingConfiguration();
LogManager.ThrowConfigExceptions = true;
LogManager.ThrowExceptions = true;
LogManager.AutoShutdown = true;
LogManager.Configuration.AddTarget(new FileTarget(name)
{
CreateDirs = true,
KeepFileOpen = true,
FileName = file
});
LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name);
LogManager.LogFactory.ReconfigExistingLoggers(true);
LogManager.ReconfigExistingLoggers(true);
return LogManager.GetLogger(name);
}
private static ILogger CreateSIRTLogger()
{
var dll = new FileInfo(typeof(AppHost).Assembly.Location);
@ -46,7 +98,7 @@
private static SIRTHub CreateSIRTFactory()
{
var sirtHub = new SIRTHub();
SIRTLogger.Message += NLogger.Debug;
return sirtHub;

View File

@ -2,6 +2,7 @@
{
using System;
using System.Configuration;
using System.Linq;
public static class Appsettings
{
@ -26,5 +27,11 @@
return settingValue;
}
public static string[] GetSIRTComPorts()
=> GetSetting("SIRTComPorts")
?.Split(new[] { ';', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
?.Select(x => x?.Trim())
?.ToArray() ?? new string[0];
}
}

View File

@ -11,5 +11,7 @@
public EregisterInitializeVM EregisterInitializeVM { get; } = new EregisterInitializeVM();
public EregisterFinalizeVM EregisterFinalizeVM { get; } = new EregisterFinalizeVM();
public ManualProgrammingVM ManualProgrammingVM { get; } = new ManualProgrammingVM();
}
}

View File

@ -1,7 +1,44 @@
<Page x:Class="Common.UI.Pages.ManualProgramming"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding ManualProgrammingVM, Source={StaticResource VMLocator}}"
FontFamily="Consolas"
FontSize="13">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Background="LightGray"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="0"
Orientation="Horizontal">
<Button Background="WhiteSmoke"
Command="{Binding ActivateSIRTS}"
Content="Activate SIRT's"
Cursor="Hand"
Margin="5"
Padding="20 5"/>
<ItemsControl ItemsSource="{Binding Logging}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding}"
FontWeight="Bold"
Margin="5"
Padding="20 5" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</Page>

View File

@ -2,11 +2,49 @@
{
using Common.UI.Infrastructure;
using System.Collections.ObjectModel;
using System.Windows.Input;
public class ManualProgrammingVM : VM<ManualProgrammingVM>
{
private readonly string[] comPorts;
public ManualProgrammingVM()
{
this.comPorts = Appsettings.GetSIRTComPorts();
this.Logging = new ObservableCollection<string>();
this.ActivateSIRTS = new Command(this.ActivateSIRTSCommand);
}
public ICommand ActivateSIRTS { get; }
public ObservableCollection<string> Logging { get; }
private void ActivateSIRTSCommand()
{
this.InvokeTaskAsync(() =>
{
this.Logging.Clear();
foreach (var comPort in comPorts)
{
this.InvokeTaskAsync(() =>
{
var portName = comPort;
var sirtId = default(string);
var frequency = default(int);
AppHost.SIRTHub.Close(comPort);
for (var i = 0; i < 3 && !AppHost.SIRTHub.TryOpen(comPort, out sirtId, out frequency); i++)
{
this.Logging.Add($"{comPort} - {frequency} - {sirtId}");
}
this.Logging.Add($"{comPort} - {frequency} - {sirtId}");
});
}
});
}
}
}