diff --git a/Common/Common.Services.LaserImport/App.config b/Common/Common.Services.LaserImport/App.config index 76af1c8f..2903f78b 100644 --- a/Common/Common.Services.LaserImport/App.config +++ b/Common/Common.Services.LaserImport/App.config @@ -4,7 +4,7 @@ - - + + diff --git a/Common/Common.Services.LaserImport/Program.cs b/Common/Common.Services.LaserImport/Program.cs index fbbceb5f..99c3c2ad 100644 --- a/Common/Common.Services.LaserImport/Program.cs +++ b/Common/Common.Services.LaserImport/Program.cs @@ -16,49 +16,87 @@ static readonly string localFolder = appsettings["LocalFolder"].Value; static readonly FileSystemWatcher serverWatcher = new FileSystemWatcher(sharedFolder); static readonly FileSystemWatcher clientWhatcher = new FileSystemWatcher(localFolder); + static readonly ManualResetEventSlim awaiter = new ManualResetEventSlim(); + static string fileToDelete; static void Main() { serverWatcher.Created += ServerWatcher_FileCreated; serverWatcher.NotifyFilter = NotifyFilters.FileName; + serverWatcher.IncludeSubdirectories = false; serverWatcher.EnableRaisingEvents = true; clientWhatcher.Deleted += CleintWatcher_FileDeleted; clientWhatcher.NotifyFilter = NotifyFilters.FileName; + clientWhatcher.IncludeSubdirectories = false; clientWhatcher.EnableRaisingEvents = true; - Console.ReadKey(); - } + var fg = ConsoleColor.DarkGray; + Console.ForegroundColor = fg; - private static void CleintWatcher_FileDeleted(object sender, FileSystemEventArgs args) - { - var fileFile = args.FullPath; - - Console.WriteLine($"{fileFile} - deleted"); - - var filePath = Path.Combine(sharedFolder, args.Name); - - if (File.Exists(filePath)) + while (true) { - File.Delete(filePath); - Console.WriteLine($"{filePath} - deleted"); + awaiter.Reset(); + awaiter.Wait(); + + Console.ForegroundColor = ConsoleColor.White; + Console.Write($"FERTIGMELDEN"); + Console.ReadLine(); + Console.ForegroundColor = fg; + + while (File.Exists(fileToDelete)) + { + try + { + File.Delete(fileToDelete); + Console.WriteLine($"{fileToDelete} - deleted"); + + break; + } + catch (Exception e) + { + Console.WriteLine(e.Message); + Thread.Sleep(100); + } + } } } - private static void ServerWatcher_FileCreated(object sender, FileSystemEventArgs args) + /// + /// Occures when file deleted on laser PC + /// + /// + /// + private static void CleintWatcher_FileDeleted(object _, FileSystemEventArgs args) + { + fileToDelete = Path.Combine(sharedFolder, args.Name); + + if (!File.Exists(fileToDelete)) + { + fileToDelete = string.Empty; + + Console.WriteLine($"{fileToDelete} - dose not exists!"); + } + else + { + awaiter.Set(); + } + } + + /// + /// Occures when file created from the laserkennzeichnung + /// + /// + /// + private static void ServerWatcher_FileCreated(object _, FileSystemEventArgs args) { var sourceFilePath = args.FullPath; - - Console.WriteLine($"{sourceFilePath} - created"); + var destinationFilePath = Path.Combine(localFolder, args.Name); if (File.Exists(sourceFilePath)) { - var destinationFilePath = Path.Combine(localFolder, args.Name); - while (true) { - Thread.Sleep(100); - try { File.Copy(sourceFilePath, destinationFilePath, true); @@ -68,11 +106,16 @@ catch (Exception e) { Console.WriteLine(e.Message); + Thread.Sleep(100); } } - + Console.WriteLine($"{sourceFilePath} copied to {destinationFilePath}"); } + else + { + Console.WriteLine($"{sourceFilePath} - dose not exists!"); + } } } -} +} \ No newline at end of file diff --git a/Common/CommonConsole/CommonConsole.csproj b/Common/CommonConsole/CommonConsole.csproj index c4c38f16..2d2e99d3 100644 --- a/Common/CommonConsole/CommonConsole.csproj +++ b/Common/CommonConsole/CommonConsole.csproj @@ -45,22 +45,6 @@ - - - - - - - - - - - - - - - - @@ -72,8 +56,5 @@ Common.Hardware.WaterMeter.eRegister - - - \ No newline at end of file diff --git a/Common/CommonConsole/Program.cs b/Common/CommonConsole/Program.cs index 2171b8e7..9962ccd3 100644 --- a/Common/CommonConsole/Program.cs +++ b/Common/CommonConsole/Program.cs @@ -1,41 +1,11 @@ namespace CommonConsole { - using Common.Hardware.SIRT; - using Common.Hardware.SIRT.Tasks; using System; + using System.Collections; public static class Program { static void Main() - { - //SIRTLogger.Message += Console.WriteLine; - //var broadcaster = new SIRTBroadcaster("COM6"); - //broadcaster.Open(); - - //if (broadcaster.IsOpen) - //{ - // var task = new WritePamTask - // { - // Frequency = 868, - // WakeUpCmd = true, - // WakeUpModul = true, - // RequestAddress = 4291377829, - // IsEncrypted = true, - // EncryptionKey = "E6C88800DEB868C0D6A84880CE982840".GetEncryptionKey() - // }; - - // while (task.State != SIRTTaskState.Completed) - // { - // broadcaster.Start(task); - // task.Wait(); - // } - //} - - //Console.ReadKey(); - //broadcaster.Close(); - } - - static void Main2435() { var alarmMask = 0 << AlarmMask.ALARM_REBOOT | 1 << AlarmMask.ALARM_LOW_BATTERY @@ -43,12 +13,12 @@ | 0 << AlarmMask.ALARM_CONFIG_ERROR | 1 << AlarmMask.ALARM_EMPTY_PIPE | 0 << AlarmMask.ALARM_MAGNETIC_TAMPER - | 0 << AlarmMask.ALARM_REVERSE_FLOW + | 1 << AlarmMask.ALARM_REVERSE_FLOW | 1 << AlarmMask.ALARM_SUSPECT_LEAK | 1 << AlarmMask.ALARM_BROKEN_PIPE - | 1 << AlarmMask.ALARM_LOW_PRESSURE - | 1 << AlarmMask.ALARM_HIGH_PRESSURE - | 1 << AlarmMask.ALARM_LOW_TEMPERATURE + | 0 << AlarmMask.ALARM_LOW_PRESSURE + | 0 << AlarmMask.ALARM_HIGH_PRESSURE + | 0 << AlarmMask.ALARM_LOW_TEMPERATURE | 1 << AlarmMask.ALARM_HIGH_TEMPERATURE | 0 << AlarmMask.ALARM_RADIO_ERROR | 0 << AlarmMask.ALARM_METROLOGY_PARAMS @@ -62,38 +32,32 @@ | (uint)1 << LogContentBits.BillingCounter // ALWAYS ON | (uint)0 << LogContentBits.ReverseCounter // | (uint)0 << LogContentBits.MaxFlow // - // | (uint)0 << LogContentBits.MaxFlowTime // | (uint)0 << LogContentBits.PeakFlow // | (uint)0 << LogContentBits.PeakFlowTime // | (uint)0 << LogContentBits.AvgFlow // - // | (uint)0 << LogContentBits.BrokenPipe // | (uint)0 << LogContentBits.BrokenPipeTime // | (uint)1 << LogContentBits.MinFlow // | (uint)0 << LogContentBits.MinFlowTime // - // | (uint)0 << LogContentBits.ForwardCounter // | (uint)1 << LogContentBits._UTC32 // ALWAYS ON | (uint)0 << LogContentBits._MaskSelector_1_1 // | (uint)0 << LogContentBits._MaskSelector_1_2 // - // - | (uint)1 << LogContentBits.MinPress // + | (uint)0 << LogContentBits.MinPress // | (uint)0 << LogContentBits.MinPressTime // - | (uint)1 << LogContentBits.MaxPress // + | (uint)0 << LogContentBits.MaxPress // | (uint)0 << LogContentBits.MaxPressTime // - // - | (uint)1 << LogContentBits.MinTemp // + | (uint)0 << LogContentBits.MinTemp // | (uint)0 << LogContentBits.MinTempTime // | (uint)0 << LogContentBits.MaxTemp // | (uint)0 << LogContentBits.MaxTempTime // - // | (uint)0 << LogContentBits.CurrentPress // | (uint)0 << LogContentBits.CurrentTemp // | (uint)1 << LogContentBits.ExtendedAlarm // ALWAYS ON - | (uint)1 << LogContentBits._RecordCheckSum; // ALWAYS ON + | (uint)1 << LogContentBits._RecordCheckSum; // ALWAYS ON - er - 10319033731 - var contentBytes = BitConverter.GetBytes(content); + var contentBytes = BitConverter.GetBytes(content); Array.Reverse(contentBytes); Console.WriteLine($"{"DATALOGGER:",11} {content,11} - {BitConverter.ToString(contentBytes).Replace("-", "")}"); @@ -101,32 +65,26 @@ | (uint)1 << LogContentBits.BillingCounter // ALWAYS ON | (uint)0 << LogContentBits.ReverseCounter // | (uint)0 << LogContentBits.MaxFlow // - // | (uint)0 << LogContentBits.MaxFlowTime // | (uint)0 << LogContentBits.PeakFlow // | (uint)0 << LogContentBits.PeakFlowTime // | (uint)0 << LogContentBits.AvgFlow // - // | (uint)0 << LogContentBits.BrokenPipe // | (uint)0 << LogContentBits.BrokenPipeTime // - | (uint)0 << LogContentBits.MinFlow // + | (uint)1 << LogContentBits.MinFlow // | (uint)0 << LogContentBits.MinFlowTime // - // | (uint)0 << LogContentBits.ForwardCounter // | (uint)1 << LogContentBits._UTC32 // ALWAYS ON | (uint)0 << LogContentBits._MaskSelector_1_1 // | (uint)0 << LogContentBits._MaskSelector_1_2 // - // | (uint)0 << LogContentBits.MinPress // | (uint)0 << LogContentBits.MinPressTime // | (uint)0 << LogContentBits.MaxPress // | (uint)0 << LogContentBits.MaxPressTime // - // | (uint)0 << LogContentBits.MinTemp // | (uint)0 << LogContentBits.MinTempTime // | (uint)0 << LogContentBits.MaxTemp // | (uint)0 << LogContentBits.MaxTempTime // - // | (uint)0 << LogContentBits.CurrentPress // | (uint)0 << LogContentBits.CurrentTemp // | (uint)1 << LogContentBits.ExtendedAlarm // ALWAYS ON @@ -136,6 +94,16 @@ Array.Reverse(fdrBytes); Console.WriteLine($"{"FDR:",11} {fdr,11} - {BitConverter.ToString(fdrBytes).Replace("-", "")}"); + Console.WriteLine(); + + content = 201334787; + var _content = 201344787; + + for (byte i = 0; i < LogContentBits.BitMask.Length; i++) + { + Console.WriteLine($"Min: {(content >> i) % 2} - Ist: {(_content >> i) % 2} - {LogContentBits.BitMask[i]}"); + } + } // CONTENT: 67110031 - 04-00-04-8F => 0400048F <-> 8F040004 04000C03 static void Main123() @@ -243,41 +211,41 @@ public const byte _MaskSelector_2_1 = 30; // 0x40000000 ;The mirror of the MaskSelector_1  public const byte _MaskSelector_2_2 = 31; // 0x80000000 ;The mirror of the MaskSelector_2  - // --> MIN 1100 0000 0000 0100 0000 0000 0011 - // [0..26] 1100 0000 0011 0100 0000 0000 0011 - // [0..26] 1100 0001 0000 0100 0000 0000 1111 - // [0..26] 1100 0001 1111 0100 0000 0000 0011 - // [0..26] 1101 1111 1111 1100 0000 0000 0011 - // [0..26] 1100 0000 0000 0100 0000 0000 0011 - // [0..26] 1100 0000 0000 0100 1100 0000 0011 - // [0..26] 1100 0000 0011 0100 0000 1000 0011 - // [0..26] 1110 0110 0000 0100 0000 0000 0011 - // [0..26] 1100 0001 0010 0100 0000 0000 0011 - // [0..26] 1100 0001 0010 0100 0000 0001 0011 - // [0..26] 1111 0001 0010 0100 0000 0000 0011 - // [0..26] 1111 1111 1111 0100 0000 1000 0011 - // [0..26] 1111 1111 1111 1100 0000 1000 0011 - // [0..26] 1111 1111 1111 1100 0000 1111 0111 - // [0..26] 1100 0000 0010 0100 0000 1111 0111 - // [0..26] 1101 0000 0010 0100 0000 0000 0011 - // [0..26] 1101 0000 0010 0100 0000 1010 0011 - // [0..26] 1111 1000 0000 0100 0000 0000 0011 - // [0..26] 1110 0001 0010 0100 0000 0000 0011 - // [0..26] 1110 0001 0000 1100 0000 0000 0011 - // [0..26] 1110 0001 0000 1100 0000 1010 0011 - // [0..26] 1111 1001 0011 1100 0000 0000 0011 - // [0..26] 1100 0000 0000 0100 0000 0000 1011 - // [0..26] 1100 0000 0010 0100 0000 0000 0001 - // [0..26] 1100 0000 0010 0100 0000 0000 0011 - // [0..26] 1110 0000 0000 0100 0000 0000 0011 - // [0..26] 1101 0000 0010 0100 1010 1010 0011 - // [0..26] 1100 0001 0000 0100 0000 0000 0011 - // [0..26] 1100 0011 0000 0100 0100 0000 0011 - // [0..26] 1111 1111 0011 0100 0000 0000 0011 - // [0..26] 1111 1111 0011 0100 0000 0000 0111 - // [0..26] 1111 1111 1111 1100 0000 0000 0011 - // [0..26] 1111 1111 1111 1100 1111 1111 1111 - // --> MAX 1111 1111 1111 1100 1111 1111 1111 + public static string[] BitMask = new string[] + { + "AlarmStatus", + "BillingCounter", + "ReverseCounter", + "MaxFlow", + "MaxFlowTime", + "PeakFlow", + "PeakFlowTime", + "AvgFlow", + "BrokenPipe", + "BrokenPipeTime", + "MinFlow", + "MinFlowTime", + "ForwardCounter", + "_UTC32", + "_MaskSelector_1_1", + "_MaskSelector_1_2", + "MinPress", + "MinPressTime", + "MaxPress", + "MaxPressTime", + "MinTemp", + "MinTempTime", + "MaxTemp", + "MaxTempTime", + "CurrentPress", + "CurrentTemp", + "ExtendedAlarm", + "_RecordCheckSum", + "_Reserved_1", + "_Reserved_2", + "_MaskSelector_2_1", + "_MaskSelector_2_2", + }; } [Flags] diff --git a/Common/CommonConsole/RFTelegrams/AppCode.cs b/Common/CommonConsole/RFTelegrams/AppCode.cs deleted file mode 100644 index 4ce6d158..00000000 --- a/Common/CommonConsole/RFTelegrams/AppCode.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - public enum AppCode - { - BUP = 0x00, - LAT = 0x01, - SEMI = 0x08, - LoggerTelegram = 0x09, - TestTelegram = 0x0A, - DEBUG = 0x0B, - EncapsulatedFlexNet = 0x10 - } -} diff --git a/Common/CommonConsole/RFTelegrams/DisplayUnits.cs b/Common/CommonConsole/RFTelegrams/DisplayUnits.cs deleted file mode 100644 index 8414e6d5..00000000 --- a/Common/CommonConsole/RFTelegrams/DisplayUnits.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - public enum DisplayUnits - { - NA = 0, - m3 = 19, - CF = 35, - GAL = 24, - IGAL = 144, - } -} diff --git a/Common/CommonConsole/RFTelegrams/Epoch20000101.cs b/Common/CommonConsole/RFTelegrams/Epoch20000101.cs deleted file mode 100644 index 0bdbe9b4..00000000 --- a/Common/CommonConsole/RFTelegrams/Epoch20000101.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - using System; - - public class Epoch20000101 - { - private static readonly DateTime epoch = new DateTime(2000, 01, 01, 00, 00, 00, DateTimeKind.Utc); - - private readonly byte[] bytes; - - public Epoch20000101(DateTimeKind dateTimeKind = DateTimeKind.Utc) - => this.bytes = new byte[4]; - - public Epoch20000101(uint secondsSince, DateTimeKind dateTimeKind = DateTimeKind.Utc) : this(dateTimeKind) - => this.SecondsSince = secondsSince; - - public uint SecondsSince - { - get => BitConverter.ToUInt32(this.bytes, 0); - set => BitConverter.GetBytes(value).CopyTo(this.bytes, 0); - } - - public DateTime DateTime - { - get => epoch.AddSeconds(this.SecondsSince); - set => this.SecondsSince = (uint)(value - epoch).TotalSeconds; - } - - public static uint UTCNow => new Epoch20000101 { DateTime = DateTime.UtcNow }.SecondsSince; - - public static implicit operator DateTime(Epoch20000101 epoch) => epoch.DateTime; - - public static implicit operator uint(Epoch20000101 epoch) => epoch.SecondsSince; - } -} diff --git a/Common/CommonConsole/RFTelegrams/Extensions.cs b/Common/CommonConsole/RFTelegrams/Extensions.cs deleted file mode 100644 index 055ad21b..00000000 --- a/Common/CommonConsole/RFTelegrams/Extensions.cs +++ /dev/null @@ -1,623 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - using System; - using System.Collections.Generic; - - public static class Extensions - { - private const int ByteSize = 8; - private const int SByteSize = 16; - private const int Int16Size = 16; - private const int UInt16Size = 16; - private const int Int32Size = 32; - private const int UInt32Size = 32; - private const int Int64Size = 64; - private const int UInt64Size = 64; - - public static byte[] GetBitsBE(this byte value) - { - var bits = new byte[ByteSize]; - - for (int i = 7, x = 0; i >= 0; i--, x++) - { - bits[x] = (byte)((value >> i) & 1); - } - - return bits; - } - - public static byte[] GetBitsLE(this byte value) - { - var bits = new byte[ByteSize]; - - for (var i = 0; i < ByteSize; i++) - { - bits[i] = (byte)((value >> i) & 1); - } - - return bits; - } - - public static byte[] GetBitsLE(this ushort value) - { - var bits = new byte[UInt16Size]; - - for (var i = 0; i < UInt16Size; i++) - { - bits[i] = (byte)((value >> i) & 1); - } - - return bits; - } - - public static byte GetByteLE(this byte[] bits) - { - if (bits is null) - { - return default(byte); - } - - var value = default(byte); - - for (var i = 0; i < ByteSize; i++) - { - value ^= (byte)(bits[i] << i); - } - - return value; - } - - public static byte GetByteLE(this byte[] bits, int start = 0, int count = 0) - { - if (bits is null) - { - return default(byte); - } - - if (count == 0) - { - count = bits.Length; - } - - var length = start + count; - var _byte = default(byte); - - for (int i = start, x = 0; i < length; i++, x++) - { - _byte ^= (byte)(bits[i] << x); - } - - return _byte; - } - - public static void SetBitsLE(this byte value, byte[] bits, int start = 0, int count = 0) - { - if (bits is null) - { - return; - } - - if (count == 0 || count > bits.Length) - { - count = bits.Length; - } - - for (int i = start, x = 0; i < count; i++, x++) - { - bits[i] = (byte)((value >> x) % 2); - } - } - - public static byte[] GetBytesBE(this sbyte value) - { - var bytes = new byte[2]; - var index = 0; - - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesBE(this short value) - { - var bytes = new byte[2]; - var index = 0; - - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesBE(this int value) - { - var bytes = new byte[4]; - var index = 0; - - bytes[index++] = (byte)(value >> 24); - bytes[index++] = (byte)(value >> 16); - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesBE(this long value) - { - var bytes = new byte[8]; - var index = 0; - - bytes[index++] = (byte)(value >> 56); - bytes[index++] = (byte)(value >> 48); - bytes[index++] = (byte)(value >> 40); - bytes[index++] = (byte)(value >> 32); - bytes[index++] = (byte)(value >> 24); - bytes[index++] = (byte)(value >> 16); - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesBE(this ushort value) - { - var bytes = new byte[2]; - var index = 0; - - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesBE(this uint value) - { - var bytes = new byte[4]; - var index = 0; - - bytes[index++] = (byte)(value >> 24); - bytes[index++] = (byte)(value >> 16); - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesBE(this ulong value) - { - var bytes = new byte[8]; - var index = 0; - - bytes[index++] = (byte)(value >> 56); - bytes[index++] = (byte)(value >> 48); - bytes[index++] = (byte)(value >> 40); - bytes[index++] = (byte)(value >> 32); - bytes[index++] = (byte)(value >> 24); - bytes[index++] = (byte)(value >> 16); - bytes[index++] = (byte)(value >> 8); - bytes[index] = (byte)value; - - return bytes; - } - - public static byte[] GetBytesLE(this sbyte value) - { - var bytes = new byte[2]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index] = (byte)(value >> 8); - - return bytes; - } - - public static byte[] GetBytesLE(this short value) - { - var bytes = new byte[2]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index] = (byte)(value >> 8); - - return bytes; - } - - public static byte[] GetBytesLE(this int value) - { - var bytes = new byte[4]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index++] = (byte)(value >> 8); - bytes[index++] = (byte)(value >> 16); - bytes[index] = (byte)(value >> 24); - - return bytes; - } - - public static byte[] GetBytesLE(this long value) - { - var bytes = new byte[8]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index++] = (byte)(value >> 8); - bytes[index++] = (byte)(value >> 16); - bytes[index++] = (byte)(value >> 24); - bytes[index++] = (byte)(value >> 32); - bytes[index++] = (byte)(value >> 40); - bytes[index++] = (byte)(value >> 48); - bytes[index] = (byte)(value >> 56); - - return bytes; - } - - public static byte[] GetBytesLE(this ushort value) - { - var bytes = new byte[2]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index] = (byte)(value >> 8); - - return bytes; - } - - public static byte[] GetBytesLE(this uint value) - { - var bytes = new byte[4]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index++] = (byte)(value >> 8); - bytes[index++] = (byte)(value >> 16); - bytes[index] = (byte)(value >> 24); - - return bytes; - } - - public static byte[] GetBytesLE(this ulong value) - { - var bytes = new byte[8]; - var index = 0; - - bytes[index++] = (byte)value; - bytes[index++] = (byte)(value >> 8); - bytes[index++] = (byte)(value >> 16); - bytes[index++] = (byte)(value >> 24); - bytes[index++] = (byte)(value >> 32); - bytes[index++] = (byte)(value >> 40); - bytes[index++] = (byte)(value >> 48); - bytes[index] = (byte)(value >> 56); - - return bytes; - } - - public static sbyte ToSByteBE(this byte[] bytes, int start = 0) - { - var value = default(sbyte); - - value ^= (sbyte)(bytes[start++] << 8); - value ^= (sbyte)bytes[start]; - - return value; - } - - public static short ToInt16BE(this byte[] bytes, int start = 0) - { - var value = default(short); - - value ^= (short)(bytes[start++] << 8); - value ^= bytes[start]; - - return value; - } - - public static int ToInt32BE(this byte[] bytes, int start = 0) - { - var value = default(int); - - value ^= bytes[start++] << 24; - value ^= bytes[start++] << 16; - value ^= bytes[start++] << 8; - value ^= bytes[start]; - - return value; - } - - public static long ToInt64BE(this byte[] bytes, int start = 0) - { - var value = default(long); - - value ^= bytes[start++] << 56; - value ^= bytes[start++] << 48; - value ^= bytes[start++] << 40; - value ^= bytes[start++] << 32; - value ^= bytes[start++] << 24; - value ^= bytes[start++] << 16; - value ^= bytes[start++] << 8; - value ^= bytes[start]; - - return value; - } - - public static ushort ToUInt16BE(this byte[] bytes, int start = 0) - { - var value = default(ushort); - - value ^= (ushort)(bytes[start++] << 8); - value ^= bytes[start]; - - return value; - } - - public static uint ToUInt32BE(this byte[] bytes, int start = 0) - { - var value = default(uint); - - value ^= (uint)(bytes[start++] << 24); - value ^= (uint)(bytes[start++] << 16); - value ^= (uint)(bytes[start++] << 8); - value ^= bytes[start]; - - return value; - } - - public static ulong ToUInt64BE(this byte[] bytes, int start = 0) - { - var value = default(ulong); - - value ^= (ulong)(bytes[start++] << 56); - value ^= (ulong)(bytes[start++] << 48); - value ^= (ulong)(bytes[start++] << 40); - value ^= (ulong)(bytes[start++] << 32); - value ^= (ulong)(bytes[start++] << 24); - value ^= (ulong)(bytes[start++] << 16); - value ^= (ulong)(bytes[start++] << 8); - value ^= bytes[start]; - - return value; - } - - public static sbyte ToSByteLE(this byte[] bytes, int start = 0) - { - var value = default(sbyte); - - value ^= (sbyte)bytes[start++]; - value ^= (sbyte)(bytes[start] << 8); - - return value; - } - - public static short ToInt16LE(this byte[] bytes, int start = 0) - { - var value = default(short); - - value ^= bytes[start++]; - value ^= (short)(bytes[start] << 8); - - return value; - } - - public static int ToInt32LE(this byte[] bytes, int start = 0) - { - var value = default(int); - - value ^= bytes[start++]; - value ^= bytes[start++] << 8; - value ^= bytes[start++] << 16; - value ^= bytes[start] << 24; - - return value; - } - - public static long ToInt64LE(this byte[] bytes, int start = 0) - { - var value = default(long); - - value ^= bytes[start++]; - value ^= bytes[start++] << 8; - value ^= bytes[start++] << 16; - value ^= bytes[start++] << 24; - value ^= bytes[start++] << 32; - value ^= bytes[start++] << 40; - value ^= bytes[start++] << 48; - value ^= bytes[start] << 56; - - return value; - } - - public static ushort ToUInt16LE(this byte[] bytes, int start = 0) - { - var value = default(ushort); - - value ^= bytes[start++]; - value ^= (ushort)(bytes[start] << 8); - - return value; - } - - public static ushort ToUIint16LEFromBits(this byte[] bits) - { - if (bits is null) - { - bits = new byte[UInt16Size]; - } - - Array.Resize(ref bits, UInt16Size); - - ushort value = 0; - - for (var i = 0; i < UInt16Size; i++) - { - value ^= (ushort)(bits[i] << i); - } - - return value; - } - - public static uint ToUInt32LE(this byte[] bytes, int start = 0) - { - var value = default(uint); - - value ^= bytes[start++]; - value ^= (uint)(bytes[start++] << 8); - value ^= (uint)(bytes[start++] << 16); - value ^= (uint)(bytes[start] << 24); - - return value; - } - - public static ulong ToUInt64LE(this byte[] bytes, int start = 0) - { - var value = default(ulong); - - value ^= bytes[start++]; - value ^= (ulong)(bytes[start++] << 8); - value ^= (ulong)(bytes[start++] << 16); - value ^= (ulong)(bytes[start++] << 24); - value ^= (ulong)(bytes[start++] << 32); - value ^= (ulong)(bytes[start++] << 40); - value ^= (ulong)(bytes[start++] << 48); - value ^= (ulong)(bytes[start] << 56); - - return value; - } - - public static ushort CRCCCITT(this byte[] bytes, int start = 0, int length = 0) - { - if (length == 0) - { - length = bytes.Length; - } - - var crc = (ushort)0xFFFF; - - for (var b = start; b < length; b++) - { - var _byte = bytes[b]; - var token = (ushort)((_byte << 8) & 0xFF00); - - for (var i = 0; i < 8; i++) - { - if (0x8000 == ((crc ^ token) & 0x8000)) - { - crc <<= 1; - crc ^= 0x1021; - } - else - { - crc <<= 1; - } - - token <<= 1; - } - } - - return crc; - } - - public static byte[] GetBytes(this string hexString) - { - var bytes = new List(); - - if (!string.IsNullOrWhiteSpace(hexString)) - { - // not needed, only valid hex bytes are processed // hexString = Regex.Replace(hexString, "[^a-fA-F0-9]*", string.Empty); - - var first = true; - var x = 0; - - foreach (var hex in hexString) - { - if ('0' <= hex && hex <= '9') - { - x += hex - '0'; - } - else if ('A' <= hex && hex <= 'F') - { - x += hex - 'A' + 10; - } - else if ('a' <= hex && hex <= 'f') - { - x = hex - 'a' + 10; - } - else - { - continue; - } - - if (first) - { - x *= 16; - } - else - { - bytes.Add((byte)x); - - x = 0; - } - - first = !first; - } - } - - return bytes.ToArray(); - } - - public static byte[] GetEncryptionKey(this string hexString, int requiredLength = 16) - { - var bytes = hexString.GetBytes(); - - if (bytes?.Length != requiredLength) - { - return default(byte[]); - } - - return bytes; - } - - public static uint GetAddress(this byte[] bytes, int index) - { - var value = default(uint); - var _index = index; - - value ^= (uint)(bytes[_index++] << 24); - value ^= (uint)(bytes[_index++] << 16); - value ^= (uint)(bytes[_index++] << 8); - value ^= bytes[_index]; - - return value; - } - - public static ushort GetCrc(this byte[] bytes, int index) - { - var value = default(ushort); - var _index = index; - - value ^= (ushort)(bytes[_index++] << 8); - value ^= bytes[_index]; - - return value; - } - - public static void SetAddress(this byte[] bytes, int index, uint address) - { - var _index = index; - - bytes[_index++] = (byte)(address >> 24); - bytes[_index++] = (byte)(address >> 16); - bytes[_index++] = (byte)(address >> 8); - bytes[_index] = (byte)address; - } - - public static void SetCrc(this byte[] bytes, int index, ushort crc) - { - var _index = index; - - bytes[_index++] = (byte)(crc >> 8); - bytes[_index] = (byte)crc; - } - } -} diff --git a/Common/CommonConsole/RFTelegrams/LogContent.cs b/Common/CommonConsole/RFTelegrams/LogContent.cs deleted file mode 100644 index 9748bd7d..00000000 --- a/Common/CommonConsole/RFTelegrams/LogContent.cs +++ /dev/null @@ -1,97 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - public class LogContent - { - private readonly byte[] bits = new byte[16]; - - public LogContent(ushort value = 0) - => this.bits = value.GetBitsLE(); - - public bool ForwardCounter - { - get => this.bits[12] == 1; - set => this.bits[12] = (byte)(value ? 1 : 0); - } - - public bool TimeOfMinimumFlow - { - get => this.bits[11] == 1; - set => this.bits[11] = (byte)(value ? 1 : 0); - } - - public bool MinimumFlow - { - get => this.bits[10] == 1; - set => this.bits[10] = (byte)(value ? 1 : 0); - } - - public bool TimeOfBrokenPipe - { - get => this.bits[9] == 1; - set => this.bits[9] = (byte)(value ? 1 : 0); - } - - public bool BrokenPipeFlow - { - get => this.bits[8] == 1; - set => this.bits[8] = (byte)(value ? 1 : 0); - } - - public bool CurrentFlow - { - get => this.bits[7] == 1; - set => this.bits[7] = (byte)(value ? 1 : 0); - } - - public bool TimeOfPeakFlow - { - get => this.bits[6] == 1; - set => this.bits[6] = (byte)(value ? 1 : 0); - } - - public bool PeakFlow - { - get => this.bits[5] == 1; - set => this.bits[5] = (byte)(value ? 1 : 0); - } - - public bool TimeOfMaximumFlow - { - get => this.bits[4] == 1; - set => this.bits[4] = (byte)(value ? 1 : 0); - } - - public bool MaximumFlow - { - get => this.bits[3] == 1; - set => this.bits[3] = (byte)(value ? 1 : 0); - } - - public bool BackwardVolume - { - get => this.bits[2] == 1; - set => this.bits[2] = (byte)(value ? 1 : 0); - } - - public bool Counter - { - get => this.bits[1] == 1; - set => this.bits[1] = (byte)(value ? 1 : 0); - } - - public bool AlarmState - { - get => this.bits[0] == 1; - set => this.bits[0] = (byte)(value ? 1 : 0); - } - - public override string ToString() - => string.Join(string.Empty, this.bits); - - public static implicit operator LogContent(ushort value) - => new LogContent(value); - - public static implicit operator ushort(LogContent value) - => value.bits.ToUIint16LEFromBits(); - } -} diff --git a/Common/CommonConsole/RFTelegrams/MeterTypes.cs b/Common/CommonConsole/RFTelegrams/MeterTypes.cs deleted file mode 100644 index 8c4d7484..00000000 --- a/Common/CommonConsole/RFTelegrams/MeterTypes.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - public enum MeterTypes : byte - { - Residential = 0, - CandI = 1, - Cordonel = 0x09, - Residential__0x0B = 11, - CandI__0x0C = 12, - } -} diff --git a/Common/CommonConsole/RFTelegrams/PAMStatus.cs b/Common/CommonConsole/RFTelegrams/PAMStatus.cs deleted file mode 100644 index 4f452230..00000000 --- a/Common/CommonConsole/RFTelegrams/PAMStatus.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - public class PAMStatus - { - private readonly byte[] bits; - - public PAMStatus(byte _byte) - => this.bits = _byte.GetBitsLE(); - - public bool CMD_UNKNOWN => this.bits[0] == 1; - - public bool WRONG_AUTH => this.bits[1] == 1; - - public bool EXPIRED_AUTH => this.bits[2] == 1; - - public bool MIXED_TYPES => this.bits[3] == 1; - - public bool OUT_OF_RANGE => this.bits[4] == 1; - - public override string ToString() - { - if (this.bits.GetByteLE() == 0) - { - return nameof(OK); - } - if (this.OUT_OF_RANGE) - { - return nameof(this.OUT_OF_RANGE); - } - else if (this.MIXED_TYPES) - { - return nameof(this.MIXED_TYPES); - } - else if (this.CMD_UNKNOWN) - { - return nameof(this.CMD_UNKNOWN); - } - else if (this.EXPIRED_AUTH) - { - return nameof(this.EXPIRED_AUTH); - } - else if (this.WRONG_AUTH) - { - return nameof(this.WRONG_AUTH); - } - else - { - return string.Join(string.Empty, this.bits); - } - } - - public static byte OK = 0; - - public static byte EXPIREDAUTH = 4; - - public static implicit operator byte(PAMStatus status) - => status?.bits?.GetByteLE() ?? 0xFF; - - public static implicit operator string(PAMStatus status) - => status?.ToString(); - } -} diff --git a/Common/CommonConsole/RFTelegrams/Pams/DummyPam.cs b/Common/CommonConsole/RFTelegrams/Pams/DummyPam.cs deleted file mode 100644 index 9e33b84c..00000000 --- a/Common/CommonConsole/RFTelegrams/Pams/DummyPam.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams -{ - public class DummyPam - { - public static implicit operator byte[](DummyPam dummyPam) => new byte[0]; - } -} diff --git a/Common/CommonConsole/RFTelegrams/Pams/ResetAlarms.cs b/Common/CommonConsole/RFTelegrams/Pams/ResetAlarms.cs deleted file mode 100644 index b4d3e53a..00000000 --- a/Common/CommonConsole/RFTelegrams/Pams/ResetAlarms.cs +++ /dev/null @@ -1,70 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams -{ - public class ResetAlarms - { - private readonly byte[] bits; - - public ResetAlarms(byte _byte = 0xFF) - => this.bits = _byte.GetBitsLE(); - - public bool SpecificError - { - get => this.bits[0] == 1; - set => this.bits[0] = (byte)(value ? 1 : 0); - } - - public bool MediumAbsent - { - get => this.bits[1] == 1; - set => this.bits[1] = (byte)(value ? 1 : 0); - } - - public bool BrokenPipe - { - get => this.bits[2] == 1; - set => this.bits[2] = (byte)(value ? 1 : 0); - } - - public bool Backflow - { - get => this.bits[3] == 1; - set => this.bits[3] = (byte)(value ? 1 : 0); - } - - public bool MetrologyUnavailable - { - get => this.bits[4] == 1; - set => this.bits[4] = (byte)(value ? 1 : 0); - } - - public bool MagneticTamper - { - get => this.bits[5] == 1; - set => this.bits[5] = (byte)(value ? 1 : 0); - } - - public bool Leak - { - get => this.bits[6] == 1; - set => this.bits[6] = (byte)(value ? 1 : 0); - } - - public bool LowBattery - { - get => this.bits[7] == 1; - set => this.bits[7] = (byte)(value ? 1 : 0); - } - - public static implicit operator byte[] (ResetAlarms resetAlarms) => new byte[] - { - 0x03, - resetAlarms.bits.GetByteLE(), - 0x43, - 0x01, - 0x14, - 0x30, - 0x68, - 0xD0 - }; - } -} diff --git a/Common/CommonConsole/RFTelegrams/RFTask.cs b/Common/CommonConsole/RFTelegrams/RFTask.cs deleted file mode 100644 index 6948f4ab..00000000 --- a/Common/CommonConsole/RFTelegrams/RFTask.cs +++ /dev/null @@ -1,83 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - using global::Common.Hardware.SIRT; - using global::Common.Hardware.SIRT.Tasks; - - using System; - using System.Collections.Generic; - - public class RFTask : WritePamTask - { - private readonly Stack messages = new Stack(); - - public SIRTMessage AKN { get; private set; } - - public SIRTMessage BUP { get; private set; } - - public SIRTMessage LAT { get; private set; } - - public SIRTMessage DEBUG { get; private set; } - - public SIRTMessage SEMI { get; private set; } - - public SIRTMessage LastOrDefault() - => this.messages.Count > 0 - ? this.messages.Peek() - : new SIRTMessage(); - - public override string ToString() - => BitConverter.ToString(this.request.Payload); - - protected override void OnMessageSent(SIRTMessage request) - => this.messages.Push(request); - - protected override void OnUnknownReceived(SIRTMessage unknown) - => this.messages.Push(unknown); - - protected override void OnAKNReceived(SIRTMessage akn) - { - this.AKN = akn; - - this.messages.Push(akn); - } - - protected override void OnBUPReceived(SIRTMessage bup) - { - this.BUP = bup; - - this.messages.Push(bup); - } - - protected override void OnLATReceived(SIRTMessage lat) - { - this.LAT = lat; - - this.messages.Push(lat); - } - - protected override void OnDEBUGReceived(SIRTMessage debug) - { - this.DEBUG = debug; - - this.messages.Push(debug); - } - - protected override void OnSEMIReceived(SIRTMessage semi) - { - this.SEMI = semi; - - this.messages.Push(semi); - - if (semi.Payload.Length > 11) - { - var pamStatus = new PAMStatus(semi.Payload[11]); - - if (pamStatus == PAMStatus.OK) - { - base.OnSEMIReceived(semi); - } - - } - } - } -} diff --git a/Common/CommonConsole/RFTelegrams/RSSI.cs b/Common/CommonConsole/RFTelegrams/RSSI.cs deleted file mode 100644 index e5b337e0..00000000 --- a/Common/CommonConsole/RFTelegrams/RSSI.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - public class RSSI - { - public RSSI(byte value, int mhz) - { - this.Value = value; - - if (mhz == 433) - { - this.Dbm = value * 0.5 - 140; - this.Percent = value * 0.7333 - 57.6667; - } - else if (mhz == 868) - { - this.Dbm = value * 0.5 - 131.3; - this.Percent = value * 0.66 - 40.316; - } - - if (this.Percent > 100) - { - this.Percent = 100; - } - else if (this.Percent < 0) - { - this.Percent = 0; - } - } - - public byte Value { get; } - - public double Dbm { get; } - - public double Percent { get; } - - public override string ToString() => $"{this.Dbm}dBm ({this.Percent:0.0}%)"; - - public static implicit operator byte(RSSI rssi) => rssi?.Value ?? 0; - - public static implicit operator string(RSSI rssi) => rssi?.ToString(); - } -} diff --git a/Common/CommonConsole/RFTelegrams/SEMI.cs b/Common/CommonConsole/RFTelegrams/SEMI.cs deleted file mode 100644 index abf03f0c..00000000 --- a/Common/CommonConsole/RFTelegrams/SEMI.cs +++ /dev/null @@ -1,176 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - using Pams; - - using System; - using System.Text; - - /// - /// TODO: SEMI from the SirtDLL is not complete, - /// - public class SEMI - { - //public const int MIN_LENGTH = 120; - public const int MIN_LENGTH = 97; - - public SEMI(byte[] payload, int mhz) - { - this.AppCode = (AppCode)payload[0]; - this.Counter = payload[1]; - this.Address = payload.ToUInt32BE(2); - this.Reading = payload.ToInt32BE(6); - this.MainAlarmByte = new ResetAlarms(payload[10]); - this.PAMStatus = new PAMStatus(payload[11]); - this.RSSI = new RSSI(payload[12], mhz); - this.MeterType = (MeterTypes)payload[13]; - this.TransmissionInterval = payload.ToUInt16BE(14); - this.LATInterval = payload[16]; - this.ActualFlow = payload.ToUInt16BE(17); - this.BackwardVolume = payload.ToUInt32BE(19); - this.Units = (DisplayUnits)payload[23]; - this.MBusStatus = payload[24]; - this.MBusTransmissionInterval = payload.ToUInt16BE(25); - this.MainAlarmMask = new ResetAlarms(payload[27]); - this.LeakageDetectionParameters = payload[28]; - this.BrokenPipeDetectionParameters = payload[29]; - this.BatteryRemainingYears = payload.ToUInt16BE(30) / (4D * 365); - this.ReminingBatteryCapacity = payload[32]; - this.MaximumFlow = payload.ToUInt16BE(33); - this.TimeSinceMaximumFlow = payload.ToUInt16BE(35); - this.TimeSinceLowBattery = payload.ToUInt16BE(37); - this.AlarmLeakage = new Epoch20000101(payload.ToUInt32BE(39), DateTimeKind.Local); - this.AlarmAirInPipe = new Epoch20000101(payload.ToUInt32BE(43), DateTimeKind.Local); - this.AlarmReverseFlow = new Epoch20000101(payload.ToUInt32BE(47), DateTimeKind.Local); - this.AlarmBrokenPipe = new Epoch20000101(payload.ToUInt32BE(51), DateTimeKind.Local); - this.DataLogContent = payload.ToUInt16BE(55); - this.DataLoggingInterval = payload.ToUInt16BE(57); - this.FDRContent = payload.ToUInt16BE(59); - this.FDRDayOfMonth = payload[61]; - this.ActualDateTime = new Epoch20000101(payload.ToUInt32BE(62), DateTimeKind.Local); - this.HistoricalErrorDays = payload[66]; - this.CustomerSpecificText = Encoding.ASCII.GetString(payload, 67, 9); - this.TimeOfFDRReset = payload.ToUInt16BE(76); - this.TimeOfLogReset = payload.ToUInt16BE(78); - this.ActualPressure = payload.ToUInt16BE(80); - this.ActualTemperature = payload[82]; - this.PressureParameter = Encoding.ASCII.GetString(payload, 83, 7); - this.TemperatureParameter = payload.ToInt32BE(90); - this.PulseOutParameter = payload[94]; - this.AlarmByteExtended = payload[95]; - this.AlarmMaskExtended = payload[96]; - //this.AlarmMaxPressureTime = payload.ToUInt32BE(97); - //this.AlarmMinPressureTime = payload.ToUInt32BE(101); - //this.AlarmMaxTemperatureTime = payload.ToUInt32BE(105); - //this.AlarmMinTemperatureTime = payload.ToUInt32BE(109); - //this.LogContentPressureTemperature = payload.ToUInt16BE(113); - //this.FDRContentPressureTemperature = payload.ToUInt16BE(115); - //this.UnitExtraFlags = payload[117]; - //this.MeterSize = payload[118]; - //this.PressureCalibrationOffset = payload[119]; - } - - public AppCode AppCode { get; } - - public byte Counter { get; } - - public uint Address { get; } - - public int Reading { get; } - - public ResetAlarms MainAlarmByte { get; } - - public PAMStatus PAMStatus { get; } - - public RSSI RSSI { get; } - - public MeterTypes MeterType { get; } - - public ushort TransmissionInterval { get; } - - public byte LATInterval { get; } - - public ushort ActualFlow { get; } - - public uint BackwardVolume { get; } - - public DisplayUnits Units { get; } - - public byte MBusStatus { get; } - - public ushort MBusTransmissionInterval { get; } - - public ResetAlarms MainAlarmMask { get; } - - public byte LeakageDetectionParameters { get; } - - public byte BrokenPipeDetectionParameters { get; } - - public double BatteryRemainingYears { get; } - - public byte ReminingBatteryCapacity { get; } - - public ushort MaximumFlow { get; } - - public ushort TimeSinceMaximumFlow { get; } - - public ushort TimeSinceLowBattery { get; } - - public DateTime AlarmLeakage { get; } - - public DateTime AlarmAirInPipe { get; } - - public DateTime AlarmReverseFlow { get; } - - public DateTime AlarmBrokenPipe { get; } - - public LogContent DataLogContent { get; } - - public ushort DataLoggingInterval { get; } - - public LogContent FDRContent { get; } - - public byte FDRDayOfMonth { get; } - - public DateTime ActualDateTime { get; } - - public byte HistoricalErrorDays { get; } - - public string CustomerSpecificText { get; } - - public ushort TimeOfFDRReset { get; } - - public ushort TimeOfLogReset { get; } - - public ushort ActualPressure { get; } - - public byte ActualTemperature { get; } - - public string PressureParameter { get; } - - public int TemperatureParameter { get; } - - public byte PulseOutParameter { get; } - - public byte AlarmByteExtended { get; } - - public byte AlarmMaskExtended { get; } - - //public uint AlarmMaxPressureTime { get; } - - //public uint AlarmMinPressureTime { get; } - - //public uint AlarmMaxTemperatureTime { get; } - - //public uint AlarmMinTemperatureTime { get; } - - //public ushort LogContentPressureTemperature { get; } - - //public ushort FDRContentPressureTemperature { get; } - - //public byte UnitExtraFlags { get; } - - //public byte MeterSize { get; } - - //public byte PressureCalibrationOffset { get; } - } -} diff --git a/Common/CommonConsole/RFTelegrams/SIRTServer.cs b/Common/CommonConsole/RFTelegrams/SIRTServer.cs deleted file mode 100644 index 21ab2e5c..00000000 --- a/Common/CommonConsole/RFTelegrams/SIRTServer.cs +++ /dev/null @@ -1,201 +0,0 @@ -namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams -{ - using CommonConsole.RFTelegrams.Pams; - using global::Common.Hardware.SIRT; - using global::Common.Hardware.SIRT.Tasks; - - using Pams; - - using System; - - internal class SIRTServer - { - private static Action messageCallback; - private static Action errorMessageCallback; - private static readonly SIRTHub sirtHub = new SIRTHub(); - - /// - /// Connects SIRT's globaly for the application - /// - /// Action that receives info messages - /// Action that receives error messages - /// The COM-Ports to be connected - /// true - if all ports connected otherwise false - public static bool StartServer(Action messageHandler, Action errorMessageHandler, params int[] comPorts) - { - string sirtId; - int frequency; - bool succeeded = true; - - messageHandler?.Invoke(new string('-', 100)); - - foreach (var comport in comPorts) - { - succeeded = ConnectSIRT(comport, out sirtId, out frequency); - - if (succeeded) - { - messageHandler?.Invoke($"COM{comport}|{sirtId}|{frequency}MHz - connected"); - messageHandler?.Invoke(new string('-', 100)); - } - else - { - errorMessageHandler?.Invoke($"SIRT at COM{comport} not connected!"); - errorMessageHandler?.Invoke(new string('-', 100)); - - break; - } - } - - if (succeeded) - { - messageCallback = messageHandler; - errorMessageCallback = errorMessageHandler; - } - - return succeeded; - } - - public static bool StartProgramming(int frequency, uint address, string encryptionKey, int repeatsCount = 3) - { - var succeeded = true; - var encryptionBytes = encryptionKey.GetBytes(); - - if (succeeded) - { - succeeded = SendPAM(task => - { - task.WakeUpCmd = true; - task.DelPamSemi = true; - task.WakeUpModul = true; - task.IsEncrypted = true; - task.Frequency = frequency; - task.RequestAddress = address; - task.EncryptionKey = encryptionBytes; - task.Data = new DummyPam(); - } - , repeatsCount); - } - - if (succeeded) - { - succeeded = SendPAM(task => - { - task.DelPamSemi = true; - task.IsEncrypted = true; - task.Frequency = frequency; - task.RequestAddress = address; - task.EncryptionKey = encryptionBytes; - task.Data = new ResetAlarms(0xFF); - } - , repeatsCount); - } - - if (succeeded) - { - succeeded = SendPAM(task => - { - task.DelPamSemi = true; - task.IsEncrypted = true; - task.Frequency = frequency; - task.RequestAddress = address; - task.EncryptionKey = encryptionBytes; - task.Data = new ResetAlarms(0xFE); - } - , repeatsCount); - } - - //if (succeeded) - //{ - // succeeded = SendPAM(task => - // { - // task.DelPamSemi = true; - // task.IsEncrypted = true; - // task.Frequency = frequency; - // task.RequestAddress = address; - // task.EncryptionKey = encryptionBytes; - // task.Data = ChangeWakeUp.GoSleepAutoOn; - // } - // , repeatsCount); - //} - - return succeeded; - } - - /// - /// Dispose all SIRT's globaly for the application. - /// - public static void Dispose() - { - void LogState(object state) => messageCallback?.Invoke(state?.ToString()); - - SIRTLogger.Message += LogState; - sirtHub.CloseAll(); - SIRTLogger.Message -= LogState; - - messageCallback = null; - errorMessageCallback = null; - } - - private static bool ConnectSIRT(int portno, out string sirtId, out int frequency) - => sirtHub.TryOpen($"COM{portno}", out sirtId, out frequency); - - private static bool SendPAM(Action taskOptions, int repeatsCount = 3) - { - void LogMessage(SIRTMessage message) => messageCallback?.Invoke(message.ToString()); - - var dashes = new string('-', 100); - var cordonelTask = new RFTask(); - var succeeded = false; - - taskOptions(cordonelTask); - - cordonelTask.MessageSent += LogMessage; - cordonelTask.MessageReceived += LogMessage; - - for (var i = 1; i <= repeatsCount && cordonelTask.State != SIRTTaskState.Completed && cordonelTask.State != SIRTTaskState.Cancelled; i++) - { - if (sirtHub.Start(cordonelTask)) - { - cordonelTask.Wait(); - } - } - - cordonelTask.MessageReceived -= LogMessage; - cordonelTask.MessageSent -= LogMessage; - - if (cordonelTask.State == SIRTTaskState.Completed) - { - succeeded = true; - - messageCallback?.Invoke($"{"CMD",20}: {cordonelTask}"); - messageCallback?.Invoke($"{"State",20}: {cordonelTask.State}"); - - var pam = new PAMStatus(cordonelTask.SEMI.Payload[11]); - messageCallback?.Invoke($"{"PAM Status",20}: {pam}"); - - var alarm = new AlarmMask(cordonelTask.SEMI.Payload[10]); - messageCallback?.Invoke(alarm.ToString()); - messageCallback?.Invoke(dashes); - - var semi = new SEMI(cordonelTask.SEMI.Payload, 868); - } - else - { - succeeded = false; - - messageCallback?.Invoke($"{"CMD",20}: {cordonelTask}"); - messageCallback?.Invoke($"{"State",20}: {cordonelTask.State}"); - - var pam = new PAMStatus(cordonelTask.SEMI.Payload[11]); - messageCallback?.Invoke($"{"PAM Status",20}: {pam}"); - - var alarm = new AlarmMask(cordonelTask.SEMI.Payload[10]); - messageCallback?.Invoke(alarm.ToString()); - messageCallback?.Invoke(dashes); - } - - return succeeded; - } - } -}