RegisterRestorer: - Avoid SealDisplay for NA

This commit is contained in:
Thomas Wiedebusch 2024-07-17 11:28:56 +02:00
parent 1ab24c37cd
commit 7362087606
3 changed files with 34 additions and 6 deletions

View File

@ -59,9 +59,11 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=prot/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=restorable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=RFID/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sensus/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=SENSUSRADIO/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=TESTMANAGER/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thermo/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Uart/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Uniontown/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Vako/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Wiedebusch/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@ -134,19 +134,27 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <summary>
/// Post programming parameters for all devices
/// </summary>
private static readonly List<RecoveryRegisterItem> _finalizeProgramming = new List<RecoveryRegisterItem>
private static readonly List<RecoveryRegisterItem> _finalizeProgrammingAll = new List<RecoveryRegisterItem>
{
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 })
};
/// <summary>
/// Post programming parameters for EMEA region (as NA region doesn't have radio and seal display shouldn't
/// be executed.
/// </summary>
private static readonly List<RecoveryRegisterItem> _finalizeProgrammingEmea = new List<RecoveryRegisterItem>
{
// 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 })
};
/// <summary>
@ -488,6 +496,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <remarks date="2024-Apr-09" author="Thomas Wiedebusch">
/// - Removed skip recovery if already done in previous run to enable a retry.
/// </remarks>
/// <remarks date="2024-Jul-16" author="Thomas Wiedebusch">
/// - Seal display and Sensus radio to EMEA finalization.
/// </remarks>
public StatusReturn WriteRegisters(List<RecoveryRegisterItem> 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++;

View File

@ -124,7 +124,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisStatus
/// </summary>
public DateTime ApprovalDate { get; set; }
public Double UNTLimit { get; internal set; } = 0;
public Boolean UNTStatus { get; internal set; } = false;
/// <summary>
/// Uniontown limits
/// </summary>
public Double UNTLimit { get; internal set; }
/// <summary>
/// Uniontown status
/// </summary>
public Boolean UNTStatus { get; internal set; }
}
}