diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings index b71184be..a905352a 100644 --- a/Common/Common.sln.DotSettings +++ b/Common/Common.sln.DotSettings @@ -59,9 +59,11 @@ True True True + True True True True True + True True True \ No newline at end of file diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index f80a7255..30583d81 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -134,19 +134,27 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// Post programming parameters for all devices /// - private static readonly List _finalizeProgramming = new List + private static readonly List _finalizeProgrammingAll = new List { new RecoveryRegisterItem("LOGGER_TriggerLogFlush", new Byte[] { 0x01 }), // set counter to 0 as this is a value how often the radio detected a reset new RecoveryRegisterItem("PERIODICLOG_ResetCounter", new Byte[] { 0x00 }), + // trigger idle 0 releases the display to normal operation + new RecoveryRegisterItem("GENESISFLOW_TriggerIdle", new Byte[] { 0x00 }) + }; + + /// + /// Post programming parameters for EMEA region (as NA region doesn't have radio and seal display shouldn't + /// be executed. + /// + private static readonly List _finalizeProgrammingEmea = new List + { // System state 0xFF will force a storage of all parameters and reset, followed by system state 0x02 // for customer mode, the reset needs only a few milliseconds // Attention logout-delay-login required after this step! new RecoveryRegisterItem("SENSUSRADIO_SystemState", new Byte[] { 0xFF }), // seal the display to lock against changes new RecoveryRegisterItem("GENESISFLOW_SealDisplay", new Byte[] { 0x01 }), - // trigger idle 0 releases the display to normal operation - new RecoveryRegisterItem("GENESISFLOW_TriggerIdle", new Byte[] { 0x00 }) }; /// @@ -488,6 +496,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Removed skip recovery if already done in previous run to enable a retry. /// + /// + /// - Seal display and Sensus radio to EMEA finalization. + /// public StatusReturn WriteRegisters(List recoveryRegistersDb, Boolean eolProgramming = false) { if (_currentGenesis == null || @@ -536,9 +547,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // add only registers which are defined as needed to restore and in the found register list // from installed applications - finalizeProgrammingAll.AddRange(_finalizeProgramming.Where(finalReg => + finalizeProgrammingAll.AddRange(_finalizeProgrammingAll.Where(finalReg => meterRegisters.MeterRegisterDic.Any(x => x.Key.GetIdent().Contains(finalReg.RegisterIdent)))); + // add special registers for EMEA version + if (_currentGenesis.Region.Equals("EMEA")) + { + finalizeProgrammingAll.AddRange(_finalizeProgrammingEmea.Where(finalReg => + meterRegisters.MeterRegisterDic.Any(x => x.Key.GetIdent().Contains(finalReg.RegisterIdent)))); + } + // set the process counter var recRegistersCount = recoveryRegistersDb.Count > 0 ? recoveryRegistersDb.Count : 1; recRegistersCount += _prepareProgramming.Count; @@ -547,6 +565,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // prepare recovery OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(Resources.StrRegisterRecoveryPreparation, actualProcessMessage: Resources.StrRegisterRecoveryPreparation)); + foreach (var prepRecReg in _prepareProgramming) { _actualRegisterCtr++; diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatus.cs b/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatus.cs index 963cda60..1ac957a0 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatus.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatus.cs @@ -124,7 +124,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisStatus /// public DateTime ApprovalDate { get; set; } - public Double UNTLimit { get; internal set; } = 0; - public Boolean UNTStatus { get; internal set; } = false; + /// + /// Uniontown limits + /// + public Double UNTLimit { get; internal set; } + + /// + /// Uniontown status + /// + public Boolean UNTStatus { get; internal set; } } }