Files
laatzen/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterCheckInitializationTask.cs
T

129 lines
5.7 KiB
C#

namespace Common.Hardware.WaterMeter.eRegister
{
using Common.Hardware.SIRT;
using Common.Hardware.WaterMeter.eRegister.Features;
using Common.Hardware.WaterMeter.eRegister.Models;
using System.Globalization;
using System.Text;
using System.Windows.Forms;
public class EregisterCheckInitializationTask : EregisterTask
{
private readonly EregisterProgrammingParameters parameters;
private SIRTTaskState pendingState;
public EregisterCheckInitializationTask(EregisterProgrammingParameters parameters, int frequency) : base(frequency)
{
this.parameters = parameters;
this.pendingState = SIRTTaskState.Completed;
this.Name = "Initial Check";
this.Data = new OpticalTelegram { Minutes = 0, } // parameters.LED_On_Minutes }
.Append(new ProvidePin { AuthLevel = AuthLevel.III });
}
protected override void EndProcessResponse(SIRTMessage response)
{
this.timeoutTimer.Stop();
if (this.State == this.pendingState)
{
this.State = SIRTTaskState.Running;
this.Name = "Initial Check - ✓";
var message = new StringBuilder();
message.AppendLine();
message.AppendLine();
if (this.DEBUG != null && this.SEMI != null)
{
if (this.DEBUG.BatteryVoltage <= this.parameters.MinBatteryVoltage)
{
message.AppendLine();
message.AppendLine($"- Die Batteriespannung ({this.DEBUG.BatteryVoltage}) liegt unter dem angegebenen Minimum von ({this.parameters.MinBatteryVoltage}). ");
}
if (this.SEMI.BatteryRemainingYears <= this.parameters.MinBatteryRemainingYears)
{
message.AppendLine();
message.AppendLine($"- Die Batterielaufzeit ({this.SEMI.BatteryRemainingYears}) liegt unter dem angegebenen Minimum von ({this.parameters.MinBatteryRemainingYears}). ");
}
// Min metrology FW version ( >= 1108) CSD dependent
if (!string.IsNullOrWhiteSpace(this.parameters.MinMetrologyFWVersion))
{
var culture = CultureInfo.CurrentCulture;
var numberStyle = NumberStyles.HexNumber | NumberStyles.AllowHexSpecifier;
var minParsed = int.TryParse(this.parameters.MinMetrologyFWVersion, numberStyle, culture, out var minFW);
var curParsed = int.TryParse(this.DEBUG.MetrologyFWVersion, numberStyle, culture, out var curFW);
if (minFW > curFW)
{
message.AppendLine();
message.AppendLine($"- Die Metrologische FW Version ({curFW}) liegt unter dem angegebenen Minimum von ({minFW}).");
}
}
// All, for production available radio & metrology FW versions.
if (!string.IsNullOrWhiteSpace(this.parameters.FWVersionsList))
{
if (!this.parameters.FWVersionsList.Contains(this.DEBUG.MetrologyFWVersion))
{
message.AppendLine();
message.AppendLine($"- Die Metrologische FW Version ({this.DEBUG.MetrologyFWVersion}) ist nicht für Produktion freigegeben. ");
}
if (!this.parameters.FWVersionsList.Contains(this.DEBUG.RadioFWVersion))
{
message.AppendLine();
message.AppendLine($"- Die Radio FW Version ({this.DEBUG.RadioFWVersion}) ist nicht für Produktion freigegeben. ");
}
}
if (this.DEBUG.RebootCount > this.parameters.MaxRebootCount)
{
message.AppendLine();
message.AppendLine($"- Der rechenwerk wurde mehr als {this.parameters.MaxRebootCount} mal rebooted.");
}
}
if (message.Length > 10)
{
message.Insert(0, $"Am Einbauplatz: {this.SlotNr}, "
+ $"eingebaute E-Register mit Funkadressen: {this.RequestAddress} | {this.ResponseAddress}, "
+ $"sind folgenden Fehler sind aufgetreten:");
message.AppendLine();
message.AppendLine("Qualitätssicherung informieren!");
message.AppendLine();
message.AppendLine("Möchten Sie mit die Prüfung fortfahren (Yes), oder Abbrechen (No)?");
var result = MessageBox.Show(
message.ToString()
, $"Fehler bei der Prüfungsinitialisierung"
, MessageBoxButtons.YesNo);
if (result == DialogResult.No)
{
this.State = SIRTTaskState.Pending;
this.pendingState = SIRTTaskState.Cancelled;
this.Label = nameof(SIRTTaskState.Cancelled);
this.Data = new OpticalTelegram
{
Minutes = 0
};
this.Name = "Initial Check ✘";
this.NotifyTimeouted();
}
}
}
this.State = this.pendingState;
this.timeoutTimer.Start();
base.EndProcessResponse(response);
}
}
}