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; }
}
}