From 64ed72e44a375d8c2a5a6c4df2a90bb4e7ee1854 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Wed, 29 Oct 2025 17:21:32 +0100 Subject: [PATCH 01/13] ProductionUiCordonel: - new web-server delaz1web01 --- Common/.vs/Common/config/applicationhost.config | 2 +- Common/CommonCore.Configuration/ServiceUrlsBackUp_New.cs | 4 ++-- Common/Production/ProductionUiCordonel/App.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Common/.vs/Common/config/applicationhost.config b/Common/.vs/Common/config/applicationhost.config index 5616ab8b..8f2db308 100644 --- a/Common/.vs/Common/config/applicationhost.config +++ b/Common/.vs/Common/config/applicationhost.config @@ -171,7 +171,7 @@ - + diff --git a/Common/CommonCore.Configuration/ServiceUrlsBackUp_New.cs b/Common/CommonCore.Configuration/ServiceUrlsBackUp_New.cs index ea3e6e1e..d726eca2 100644 --- a/Common/CommonCore.Configuration/ServiceUrlsBackUp_New.cs +++ b/Common/CommonCore.Configuration/ServiceUrlsBackUp_New.cs @@ -10,9 +10,9 @@ namespace Xylem.Common.CommonCore.Configuration public static class ServiceUrls { //#if URI_OLD_DNS // this is defined in build configuration 'VPN_Debug' as the new DNS cannot be reached via VPN - private const String ServerDns = "http://sla12iis01.emea.sensus.net"; +// private const String ServerDns = "http://sla12iis01.emea.sensus.net"; //#else -// private const String ServerDns = "http://delaz1web01.world.fluidtechnology.net"; + private const String ServerDns = "http://delaz1web01.world.fluidtechnology.net"; //#endif private static readonly String DefaultInspectCordonelRequirementInfoUrl = diff --git a/Common/Production/ProductionUiCordonel/App.config b/Common/Production/ProductionUiCordonel/App.config index 23952da7..45ce790e 100644 --- a/Common/Production/ProductionUiCordonel/App.config +++ b/Common/Production/ProductionUiCordonel/App.config @@ -34,7 +34,7 @@ - + From 8dd636922b859eaf4e045f79d14f37f079be5823 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Mon, 17 Nov 2025 17:01:39 +0100 Subject: [PATCH 02/13] ProductionUiCordonel: - restore listed registers after reboot which didn't survive the reboot --- .../Genesis/GenesisCore/RegisterRestorer.cs | 215 ++++++++++++------ .../BaseProductionProcess.cs | 19 +- .../EolProcesses/CheckFinalParametrization.cs | 21 ++ .../Properties/Resources.Designer.cs | 11 +- .../Properties/Resources.de.resx | 5 +- .../Properties/Resources.resx | 9 +- .../EventArguments/ProcessExecEventArgs.cs | 10 +- 7 files changed, 218 insertions(+), 72 deletions(-) diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index 92c9a772..eebd89ba 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -47,6 +47,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// public List RecoveryRegisters; + /// + /// Name of registers which should be restored after reboot if the compare failed. + /// + private List _restoreRegistersAfterReboot; + + /// + /// Marker for restore after reboot parameters + /// + public Boolean HasRestoreRegistersAfterRebootIfCompareFailed; + /// /// Register content on initial connect to keep those during update /// @@ -100,6 +110,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore "SENSUSRADIO_UpgFWVersion" // After a FW-Update the FW version has changed }; + /// + /// Registers manually explicit marked to be restored after reboot if compare failed. Those registers will + /// temporary setup values which do not survive a reboot. This is done to overcome a FW-bug which overwrites + /// those values after the reboot procedure! + /// + private static readonly List _restoreAfterRebootIfCompareFailed = new List + { + "CUSTOMER_AlarmEnableMask" // Restored to hard coded value up to FW R1.4.22 + }; + /// /// Registers manually explicit excluded for in-field updatable parameters for the CUST to prevent inadvertent /// modifications resulting in potential MID violations. @@ -120,7 +140,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore "FLEXNETSERIAL_FwdlState", "FLEXNETSERIAL_UpgState", - + "GENESISFLOW_AmplitudePeakDetectEnd", // 1 "GENESISFLOW_ArrowThreshold", // 2 "GENESISFLOW_CalFactor1", // 3 @@ -206,7 +226,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore "PERIODICLOG_PeriodicLogLifeTimeCounter", "PERIODICLOG_ResetCounter", - "POWERMON_TotalUsedCharge", + "POWERMON_TotalUsedCharge", "POWERMON_TotalUsedSeconds", "SENSUSRADIO_AverageFlowPeriod", // 1 @@ -360,6 +380,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore _currentGenesis = currentGenesis; RecoveryRegisters = null; RecoveryRegisters = new List(); + _restoreRegistersAfterReboot = new List(); } /// @@ -556,7 +577,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore continue; } - // Fill DEBUG lists START with all registers even if they are multiple assigned + // Fill DEBUG lists START with all registers even if they are multiple assigned sortableRegisterList.Add(proPar.RegisterName); switch (proPar.Source) @@ -572,21 +593,21 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore break; } - // Take this parameter as is - //TODO THW take configuration.json and use for String and Array type, see RegisterConverter - //take the register properties from configuration.json - //get the pre-defined dictionary - //var meterRegisters = MockGenesis based on FW version .GetConfigRegistersDefinitions(); - //var regDef = meterRegisters.GetRegisterDefinitionByName(proPar.RegisterName); - //if (regDef.DataType.Name.Equals("Int32")) - //{ - // Add parameter if it is not in the list - //if (sortableProgrammingParameters.All(a => !proPar.RegisterName.Equals(a.RegisterName))) - //{ - // sortableProgrammingParameters.Add(proPar); - // continue; - //} - //} + // Take this parameter as is + //TODO THW take configuration.json and use for String and Array type, see RegisterConverter + //take the register properties from configuration.json + //get the pre-defined dictionary + //var meterRegisters = MockGenesis based on FW version .GetConfigRegistersDefinitions(); + //var regDef = meterRegisters.GetRegisterDefinitionByName(proPar.RegisterName); + //if (regDef.DataType.Name.Equals("Int32")) + //{ + // Add parameter if it is not in the list + //if (sortableProgrammingParameters.All(a => !proPar.RegisterName.Equals(a.RegisterName))) + //{ + // sortableProgrammingParameters.Add(proPar); + // continue; + //} + //} @@ -780,7 +801,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore return StatusReturn.Failed; } - return RawProgrammingParametersFilterAndSort(programmingParameters, recoveryRegistersDb, out errorMsg, + return RawProgrammingParametersFilterAndSort(programmingParameters, recoveryRegistersDb, out errorMsg, fieldUpdate); } catch (Exception) @@ -819,7 +840,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - CancellationToken. /// - public StatusReturn EolProgrammingRegisters(List recoveryRegistersDb, + public StatusReturn EolProgrammingRegisters(List recoveryRegistersDb, CancellationToken cancellationToken) { // Mark field update as false to set EOL as true to force accu reset @@ -926,7 +947,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// - Remove '_fieldUpdateBlacklist' parameters for the CUST to prevent inadvertent modifications resulting in potential /// MID violations. /// - public StatusReturn WriteRegisters(List recoveryRegistersDb, CancellationToken cancellationToken, + /// + /// - Login/Logout moved to . + /// + public StatusReturn WriteRegisters(List recoveryRegistersDb, CancellationToken cancellationToken, Boolean fieldUpdate) { if (_currentGenesis == null || @@ -952,11 +976,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore _dbParameterRegisterList = recoveryRegistersDb.Select(register => register.RegisterIdent).ToList(); _dbParameterRegisterList.Sort(); - // write values to Genesis - _currentGenesis.ReLogin(); - if (!_currentGenesis.IsLoggedOn) - return StatusReturn.Failed; - // get the pre-defined dictionary var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); @@ -991,11 +1010,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(Resources.StrRegisterRecoveryPreparation, actualProcessMessage: Resources.StrRegisterRecoveryPreparation)); - if (StatusReturn.Failed == WriteRegisterParameterSet(_prepareProgramming, recRegistersCount, meterRegisters, + if (StatusReturn.Failed == WriteRegisterParameterSet(_prepareProgramming, recRegistersCount, meterRegisters, cancellationToken, fieldUpdate)) { - // the logout will force the radio app to activate the settings - _currentGenesis?.Logout(); return StatusReturn.Failed; } @@ -1003,32 +1020,25 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(Resources.StrRegisterRecoveryExec, actualProcessMessage: Resources.StrRegisterRecoveryExec)); - if (StatusReturn.Failed == WriteRegisterParameterSet(recoveryRegistersDb, recRegistersCount, meterRegisters, + if (StatusReturn.Failed == WriteRegisterParameterSet(recoveryRegistersDb, recRegistersCount, meterRegisters, cancellationToken, fieldUpdate)) { - // the logout will force the radio app to activate the settings - _currentGenesis?.Logout(); - return StatusReturn.Failed; + return StatusReturn.Failed; } // finalize recovery OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(Resources.StrRegisterRecoveryFinalization, actualProcessMessage: Resources.StrRegisterRecoveryFinalization)); - if (StatusReturn.Failed == WriteRegisterParameterSet(finalizeProgrammingAll, recRegistersCount, meterRegisters, + if (StatusReturn.Failed == WriteRegisterParameterSet(finalizeProgrammingAll, recRegistersCount, meterRegisters, cancellationToken, fieldUpdate)) { - // the logout will force the radio app to activate the settings - _currentGenesis?.Logout(); return StatusReturn.Failed; } // remind pcbId of this run to avoid endless repetition _pcbIdWriteRegisters = _currentGenesis.PcbId; - // the logout will force the radio app to activate the settings - _currentGenesis?.Logout(); - // Wait for completion as storing may need a certain time Thread.Sleep(1000); @@ -1062,19 +1072,20 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Excluded un-comparable registers from write turned back on ('blind' writing enabled again). /// - private StatusReturn WriteRegisterParameterSet(List recoveryRegistersDb, Int32 recRegistersCount, - MeterRegisters meterRegisters, CancellationToken cancellationToken, Boolean fieldUpdate) + /// + /// - Login/Logout moved here. + /// + private StatusReturn WriteRegisterParameterSet(List recoveryRegistersDb, + Int32 recRegistersCount, MeterRegisters meterRegisters, CancellationToken cancellationToken, Boolean fieldUpdate) { + _currentGenesis.ReLogin(); + if (!_currentGenesis.IsLoggedOn) + return StatusReturn.Failed; + foreach (var recReg in recoveryRegistersDb) { - //TODO THW Check - // Temporary excluded un-comparable registers from write as this make no sense to write them blind being - // unable to read the correct value back. - //if (_excludedFromCompareParameters.Any( regName => recReg.RegisterIdent.Equals(regName))) - // continue; - // Remove all parameters from parameter list if used for field update - if (fieldUpdate && _fieldUpdateBlacklist.Any( regName => recReg.RegisterIdent.Equals(regName))) + if (fieldUpdate && _fieldUpdateBlacklist.Any(regName => recReg.RegisterIdent.Equals(regName))) continue; _actualRegisterCtr++; @@ -1099,6 +1110,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore $@"{Resources.StrWriteRegister} {_actualRegisterCtr} / {recRegistersCount}", overallProcessCtrPercent, Resources.StrErrorMsgRegisterNotFound + " Register: " + recReg.RegisterIdent)); + _currentGenesis?.Logout(); return StatusReturn.Failed; } @@ -1115,6 +1127,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs( $@"{Resources.StrWriteRegister} {_actualRegisterCtr} / {recRegistersCount}", overallProcessCtrPercent, Resources.StrRegisterValueOutOfRange + " " + errorMessage)); + _currentGenesis?.Logout(); return StatusReturn.Failed; } @@ -1124,6 +1137,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore $@"{Resources.StrWriteRegister} {_actualRegisterCtr} / {recRegistersCount}", overallProcessCtrPercent, Resources.StrErrorMsgRegisterWrite + " Register: " + recReg.RegisterIdent)); + _currentGenesis?.Logout(); return StatusReturn.Failed; } @@ -1149,10 +1163,63 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore if (cancellationToken.IsCancellationRequested) break; } - + _currentGenesis?.Logout(); return StatusReturn.Okay; } + /// + /// Restore and compare all registers which did not survive a reboot and are listed in the + /// + /// - This is a workaround for a FW-bug in R1.4.22 and below. + /// + /// + /// + /// + /// - Initial. + /// + public Boolean RestoreAndCompareRegistersAfterReboot(CancellationToken cancellationToken) + { + if (!HasRestoreRegistersAfterRebootIfCompareFailed) + return false; + + HasRestoreRegistersAfterRebootIfCompareFailed = false; + + // Use preset recovery registers for check + RecoveryRegisters.Clear(); + RecoveryRegisters.AddRange(_restoreRegistersAfterReboot); + _failedComparisonRegisters.Clear(); + + // get the pre-defined dictionary + var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); + + _actualRegisterCtr = 0; + // Expected access counter is 3 times the content for write, read and compare + var maxCounter = 3 * RecoveryRegisters.Count; + + // Write after reboot + if (StatusReturn.Failed == WriteRegisterParameterSet(RecoveryRegisters, maxCounter, + meterRegisters, cancellationToken, false)) + { + return false; + } + + // executes login read logout + if (!ReadPresetRegisters(cancellationToken)) + { + return false; + } + + // Compare register content + if (!CompareRegisters(cancellationToken)) + { + return false; + } + // Wait for completion as storing may need a certain time + Thread.Sleep(1000); + + return true; + } + /// /// Compare all registers which can be restored without new access to meter. /// Precondition: @@ -1203,6 +1270,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Take 'null' in readBack into account due to communication error. /// + /// + /// - _restoreAfterRebootIfCompareFailed. + /// + /// + /// - Made method static. + /// public Boolean CompareRegisters(CancellationToken cancellationToken) { if (_pcbIdFinalRegisterRead != _pcbIdWriteRegisters || @@ -1214,6 +1287,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // DEBUG _failedComparisonRegisters?.Clear(); + _restoreRegistersAfterReboot.Clear(); // build a string list of the registers being able to sort those var registerNames = RecoveryRegisters.Select(register => register.RegisterIdent).ToList(); @@ -1263,14 +1337,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore var writtenValue = recReg.WriteValue; var readBackValue = recReg.ReadBackValue; var strRequiredRegisterValue = ""; + var isApproximated = false; + var isIdentical = false; try { // ATTENTION: The size of the writtenValue and readBackValue may deviate! var dataSize = writtenValue.Length; - var isApproximated = false; - var isIdentical = false; - + // Process values only if not 'null' if (writtenValue != null && readBackValue != null) { @@ -1331,15 +1405,21 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore } }// Process register values only if not 'null' - // convert register content to text with raw and converted value depending on data type - strRequiredRegisterValue = - RegisterConverter.GetRegisterContentText(regDef, writtenValue); + // Convert register content to text with raw and converted value depending on data type + strRequiredRegisterValue = RegisterConverter.GetRegisterContentText(regDef, writtenValue); + if (readBackValue != null && (isIdentical || isApproximated)) { strRequiredRegisterValue += $" - {Resources.StrRegisterCompareSucceeded}"; } else { + // Check registers which should be restored after reboot if failed + if (_restoreAfterRebootIfCompareFailed.Any(reg => reg.Equals(regName))) + { + HasRestoreRegistersAfterRebootIfCompareFailed = true; + _restoreRegistersAfterReboot.Add(recReg); + } var encryptRawData = regName.Contains("EncryptionKey") || regName.Contains("Password"); var strReadBackRegisterValue = RegisterConverter.GetRegisterRawText(regDef, readBackValue, @@ -1366,7 +1446,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore { OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($@"{Resources.StrRegisterCompare}" + $@" {_actualRegisterCtr} / {registersCount}", - overallProcessCtrPercent, actualProcessMsg)); + overallProcessCtrPercent, actualProcessMsg, + statusReturn: isIdentical || isApproximated ? StatusReturn.Okay : StatusReturn.Failed)); } } @@ -1427,7 +1508,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore Boolean retVal; try { - // create a dictionary for final read being able to compare those with the initial read and restored if (!BuildReadableRegisterDictionary(ref _finalRegisters)) return false; @@ -1525,8 +1605,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // remind the PCB ID before update for comparison _pcbIdInitialRegisterRead = _currentGenesis.PcbId; - // create the dictionaries out of the configuration.json - if (!BuildReadableRegisterDictionary(ref _initialRegisters)) + // create a dictionary for final read being able to compare those with the initial read and restored + if (!BuildReadableRegisterDictionary(ref _finalRegisters)) return false; // log to report file the initial register read string @@ -1559,14 +1639,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Excluded registers which do not contain useful information. /// + /// + /// - Sequence resorted. + /// public Boolean BuildReadableRegisterDictionary(ref List registers) { if (_currentGenesis == null || registers == null) return false; registers.Clear(); - _readableRegisterList.Clear(); - // get the pre-defined dictionary var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); // extract all registers which can be read and create two dictionaries for before update to safe program @@ -1579,11 +1660,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore { var registerIdent = reg.Key.GetIdent(); registers.Add(new RecoveryRegisterItem(registerIdent, reg.Value)); - _readableRegisterList.Add(registerIdent); } - _readableRegisterList.Sort(); registers.Sort((a, b) => String.Compare(a.RegisterIdent, b.RegisterIdent, StringComparison.Ordinal)); + + // DEBUG information + _readableRegisterList.Clear(); + _readableRegisterList.AddRange(_finalRegisterList); + return registers.Count > 0; } @@ -1612,7 +1696,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // temporary list of registers just for read and log without keeping them alive var registers = new List(); - if (!BuildReadableRegisterDictionary(ref registers)) + // create a dictionary for final read being able to compare those with the initial read and restored + if (!BuildReadableRegisterDictionary(ref _finalRegisters)) return false; // log to report file the initial register read string @@ -1692,7 +1777,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Date size directly from register object. /// - private Boolean ReadRegistersSet(ref List registers, CancellationToken cancellationToken) + private Boolean ReadRegistersSet(ref List registers, CancellationToken cancellationToken) { if (_currentGenesis == null) return false; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs index 1491b865..564548d4 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs @@ -520,10 +520,27 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses /// /// - Initial /// + /// + /// - StatusReturn. + /// protected void ProcessUpdate_Handler(Object sender, ProcessExecEventArgs e) { ActualProcessProgress++; - LogNewStatusMsg(e.ActualProcessMessage); + switch (e.StatusReturn) + { + case StatusReturn.Okay: + SuccessMsgDispatcher(e.ActualProcessMessage); + break; + case StatusReturn.Warning: + WarningMsgDispatcher(e.ActualProcessMessage); + break; + case StatusReturn.Failed: + ErrorMsgDispatcher(e.ActualProcessMessage); + break; + default: + LogNewStatusMsg(e.ActualProcessMessage); + break; + } } /// diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs index 0597f89e..f21ab7c6 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs @@ -49,6 +49,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - CancellationToken. /// + /// + /// - Restore registers after reboot if failed - temporary workaround for FW-bug. + /// public override StatusReturn ExecuteProcess() { // Uncheck executed process to leave the result open needed for retries @@ -98,6 +101,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr Meter?.Logout(); return StatusReturn.Okay; } + + // Restore registers after reboot if failed + if (RegisterRestorer.HasRestoreRegistersAfterRebootIfCompareFailed) + { + // Write and compare those registers + RegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler; + retValBol = RegisterRestorer.RestoreAndCompareRegistersAfterReboot(CancellationToken); + RegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; + if (retValBol) + { + WarningMsgDispatcher(Resources.StrWarningMsgParameterCompare); + EolProgress.ParametrizationCompareChecked = EOLStatus.OK; + Meter?.Logout(); + return StatusReturn.Warning; + } + } + + // No chance to repair anything EolProgress.ParametrizationCompareChecked = EOLStatus.FAIL; Meter?.Logout(); return StatusReturn.Failed; diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs index 8e5ed948..9e1c3880 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs @@ -2509,7 +2509,16 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } /// - /// Looks up a localized string similar to WARNING: Inspect results. + /// Looks up a localized string similar to WARNING: Parameter restored after reboot as it does not survive it. + /// + internal static string StrWarningMsgParameterCompare { + get { + return ResourceManager.GetString("StrWarningMsgParameterCompare", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to WARNING: Result needs inspection! Process. /// internal static string StrWarningMsgProcess { get { diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 9c53f5a4..3feb62b5 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -660,6 +660,9 @@ FEHLER: Parametervergleich fehlgeschlagen + + + WARNUNG: Parameter überlebte den Neustart nicht und wurde danach wiederhergestellt FEHLER: Parameterschreiben fehlgeschlagen @@ -677,7 +680,7 @@ WARNUNG - WARNUNG: Ergebnis manuell überprüfen + WARNUNG: Ergebnis muß überprüft werden! Prozeß ACHTUNG diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.resx index fb9a72cc..c7247541 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.resx @@ -660,6 +660,9 @@ ERROR: Parameter compare failed + + + WARNING: Parameter restored after reboot as it does not survive it ERROR: Parameter write failed @@ -675,12 +678,12 @@ WARNING + + + WARNING: Result needs inspection! Process ATTENTION - - - WARNING: Inspect results SPECIAL APPROVAL diff --git a/Common/Utils/ProcessExec/EventArguments/ProcessExecEventArgs.cs b/Common/Utils/ProcessExec/EventArguments/ProcessExecEventArgs.cs index fdb27941..8899e926 100644 --- a/Common/Utils/ProcessExec/EventArguments/ProcessExecEventArgs.cs +++ b/Common/Utils/ProcessExec/EventArguments/ProcessExecEventArgs.cs @@ -1,4 +1,5 @@ using System; +using Xylem.Common.CommonCore.Consts; namespace Xylem.Common.Utils.ProcessExec.EventArguments { @@ -28,6 +29,11 @@ namespace Xylem.Common.Utils.ProcessExec.EventArguments /// public Double? ActualProcessPercent { get; } + /// + /// Single process percentage 0..100 + /// + public StatusReturn StatusReturn { get; } + /// /// Ctor /// @@ -35,9 +41,10 @@ namespace Xylem.Common.Utils.ProcessExec.EventArguments /// /// /// + /// public ProcessExecEventArgs(String overallProcessMessage, Double? overallProcessPercent = null, String actualProcessMessage = null, - Double? actualProcessPercent = null) + Double? actualProcessPercent = null, StatusReturn statusReturn = StatusReturn.Unknown) { OverallProcessMessage = overallProcessMessage; ActualProcessMessage = actualProcessMessage; @@ -45,6 +52,7 @@ namespace Xylem.Common.Utils.ProcessExec.EventArguments OverallProcessPercent = OverallProcessPercent < 0 ? 0 : OverallProcessPercent; ActualProcessPercent = actualProcessPercent > 100.0 ? 100.0 : actualProcessPercent; ActualProcessPercent = ActualProcessPercent < 0 ? 0 : ActualProcessPercent; + StatusReturn = statusReturn; } } } From 2c6927cc65957aee667288ea6a75bb0848536fd2 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Tue, 18 Nov 2025 12:17:43 +0100 Subject: [PATCH 03/13] ProductionUiCoprdonel: - reboot threshold 4 in ExecRebootCOrdonel --- Common/Common.sln.DotSettings | 3 ++ .../Genesis/GenesisCore/RegisterRestorer.cs | 7 ++++ .../Genesis/GenesisFile/MeterResetPsu.cs | 6 +++- .../EolProcesses/CheckFinalParametrization.cs | 8 ++--- .../EolProcesses/ExecRebootCordonel.cs | 35 ++++++++++++++----- .../Properties/Resources.Designer.cs | 9 +++++ .../Properties/Resources.de.resx | 3 ++ .../Properties/Resources.resx | 3 ++ Common/Ui/GenesisToolBox/FrmFwUpdate.cs | 27 -------------- 9 files changed, 60 insertions(+), 41 deletions(-) diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings index 9421a131..77a48996 100644 --- a/Common/Common.sln.DotSettings +++ b/Common/Common.sln.DotSettings @@ -48,6 +48,7 @@ True True True + True True True @@ -59,6 +60,7 @@ True True True + True True True True @@ -70,6 +72,7 @@ True True True + True True True True diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index eebd89ba..d7f940f1 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -115,6 +115,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// temporary setup values which do not survive a reboot. This is done to overcome a FW-bug which overwrites /// those values after the reboot procedure! /// + /// + /// - Initial to restore values which do not survive the reboot as workaround for R1.4.22 and below. + /// private static readonly List _restoreAfterRebootIfCompareFailed = new List { "CUSTOMER_AlarmEnableMask" // Restored to hard coded value up to FW R1.4.22 @@ -129,6 +132,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// All commands defined here will not be accepted from 'external' to adjust. Program internally, those /// commands are potentially allowed if those do not change any MID dependent 'values'. /// + /// + /// - SENSUSRADIO_WakeupInterval added to keep radio active after field update if it was active before. + /// private static readonly List _fieldUpdateBlacklist = new List { "CUSTOMER_AlarmVisualMask", @@ -252,6 +258,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore "SENSUSRADIO_Tfx_Structure", //21 "SENSUSRADIO_UpgFWVersion", //22 "SENSUSRADIO_UtcTimeOffset", //23 + "SENSUSRADIO_WakeupInterval", //24 "SYSTEM_CalendarSeconds", // 1 "SYSTEM_CheckPresence", // 2 diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterResetPsu.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterResetPsu.cs index 2a29ebca..c422336a 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterResetPsu.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterResetPsu.cs @@ -74,7 +74,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile // position of version string private const Int32 FlexVersionStringIndex = 0x66; - private Int32 _processRetryCtr; private IGenesisMeter _genesisMeter; @@ -101,6 +100,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// public Boolean StoreConfigEnable = true; + /// + /// Threshold to waste the HW if reboots too high + /// + public const Int32 MAX_REBOOTS_FOR_HEALTHY_HW = 4; + #endregion #region Events diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs index f21ab7c6..ecda626e 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs @@ -14,7 +14,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// Ctor /// - public CheckFinalParametrization(String name) : base( name) + public CheckFinalParametrization(String name) : base(name) { } @@ -49,7 +49,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - CancellationToken. /// - /// + /// /// - Restore registers after reboot if failed - temporary workaround for FW-bug. /// public override StatusReturn ExecuteProcess() @@ -86,7 +86,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr RegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler; var retValBol = RegisterRestorer.FinalReadRegisters(CancellationToken); RegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; - + // Exit if meanwhile cancellation is required if (CancellationToken.IsCancellationRequested) return CancellationProcedure(); @@ -105,13 +105,13 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr // Restore registers after reboot if failed if (RegisterRestorer.HasRestoreRegistersAfterRebootIfCompareFailed) { + WarningMsgDispatcher(Resources.StrWarningMsgParameterCompare); // Write and compare those registers RegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler; retValBol = RegisterRestorer.RestoreAndCompareRegistersAfterReboot(CancellationToken); RegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; if (retValBol) { - WarningMsgDispatcher(Resources.StrWarningMsgParameterCompare); EolProgress.ParametrizationCompareChecked = EOLStatus.OK; Meter?.Logout(); return StatusReturn.Warning; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs index c102fe5a..6d35f68c 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs @@ -51,6 +51,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - Accumulator reset if setting to zero failed as defined by A.F. as workaround for FW bug. /// + /// + /// - Threshold for allowed reboots to detect erroneous hardware. + /// public override StatusReturn ExecuteProcess() { // Uncheck executed process to leave the result open needed for retries @@ -77,7 +80,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr return StatusReturn.Failed; } } - var ale = Meter.ReadRegister("CUSTOMER_AlarmEnableMask"); + // Read and automatically log it to database if logging is active + Meter.ReadRegister("CUSTOMER_AlarmEnableMask"); + #region ----------------------------------- Reboot ---------------------------------------------------- // reboot the meter and avoid doubled storage of configurations var _meterResetPsu = new MeterResetPsu(Meter) @@ -107,6 +112,18 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr } } ActualProcessProgress++; + #endregion + #region ----------------------------------- Check reboot count ---------------------------------------- + // Read reboot count and compare with hardcoded maximum value + var rebootCount = + RegisterConverter.ByteArrayToValue(Meter.ReadRegister("CUSTOMER_RebootCount")); + if (rebootCount >= MeterResetPsu.MAX_REBOOTS_FOR_HEALTHY_HW) + { + ErrorMsgDispatcher(Resources.StrErrorMsgTooManyReboots); + EolProgress.RebootDoneChecked = EOLStatus.FAIL; + return StatusReturn.Failed; + } + #endregion #region ----------------------------------- Set Time and Reset Counters ------------------------------- // Get the time in UTC to program the time for the Cordonel in seconds since 01. Jan 2000 @@ -123,7 +140,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr ProgrammingSource.ProgramInternal)); ActualProcessProgress++; // Reset reboot counter - retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_RebootCount", + retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_RebootCount", new Byte[] { 0x00 }, ProgrammingSource.ProgramInternal)); // Reset alarms Customer retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_TriggerAlarmCancel", @@ -173,11 +190,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr var retryCtr = 2; // Check all values for 0 after reset and followed reboot which may use the - var readBackScaledBilling = + var readBackScaledBilling = RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_ScaledBilling")); - var readBackUnscaledFwd = + var readBackUnscaledFwd = RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledFwd")); - var readBackUnscaledRev = + var readBackUnscaledRev = RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledRev")); while (retryCtr-- > 0 && @@ -186,11 +203,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr // Backup sealing state as for the NA region it may be unsealed var displaySealingState = RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_SealDisplay")); - + // Unseal accumulator reset capability retValBol = WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_SealDisplay", new Byte[] { 0x00 }, ProgrammingSource.ProgramInternal)); - + // Reset accumulators again retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_ResetAccumulators", new Byte[] { 0x01 }, ProgrammingSource.ProgramInternal)); @@ -201,7 +218,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr // it doesn't have to be a change. retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_ForwardArrow", new[] { forwardArrow }, ProgrammingSource.ProgramInternal)); - + // Seal accumulator reset capability // ReSharper disable once RedundantAssignment as it is used for DEBUG retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_SealDisplay", @@ -224,7 +241,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr EolProgress.RebootDoneChecked = EOLStatus.FAIL; return StatusReturn.Failed; } -#endregion + #endregion SuccessMsgDispatcher(Resources.StrSuccessMsgAlarmReset); EolProgress.RebootDoneChecked = EOLStatus.OK; return StatusReturn.Okay; diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs index 9e1c3880..c7e5eb18 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs @@ -1050,6 +1050,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to ERROR: Hardware reboots higher than allowed threshold. + /// + internal static string StrErrorMsgTooManyReboots { + get { + return ResourceManager.GetString("StrErrorMsgTooManyReboots", resourceCulture); + } + } + /// /// Looks up a localized string similar to ERROR: Firmware is not supported. /// diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 3feb62b5..944704e0 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -681,6 +681,9 @@ WARNUNG: Ergebnis muß überprüft werden! Prozeß + + + FEHLER: Hardwareneustarts über der erlaubten Grenze ACHTUNG diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.resx index c7247541..83b62502 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.resx @@ -681,6 +681,9 @@ WARNING: Result needs inspection! Process + + + ERROR: Hardware reboots higher than allowed threshold ATTENTION diff --git a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs index a4d21598..d8d9088b 100644 --- a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs +++ b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs @@ -1486,33 +1486,6 @@ namespace Xylem.Common.Ui.GenesisToolBox { return; } - - - - //_currentGenesis.WriteRegister("POWERMON_BatteryQuantity", 2, true, true); - //_currentGenesis.WriteRegister("POWERMON_StoreConfiguration", 1, true, true); - //var genesisStatus = new GenesisStatus(); - //if (GenesisStatusHandler.BuildLifeTimeInformation(_currentGenesis, genesisStatus)) - //{ - - // var sbMSG = new StringBuilder(); - // sbMSG.AppendLine($"Pcb = {_currentGenesis.PcbId}"); - - // sbMSG.AppendLine($"POWERMON_TotalUsedSeconds = {genesisStatus.ExceededLifeTime_s}"); - // sbMSG.AppendLine($"POWERMON_TotalUsedCharge = {genesisStatus.DrainedBatteryLoad_uAs}"); - // sbMSG.AppendLine($"POWERMON_BatteryQuantity = {genesisStatus.BatteryQuantity}"); - // sbMSG.AppendLine($"POWERMON_BatteryMilliAHrRating = {genesisStatus.InitialBatteryLoad_mAh}"); - // sbMSG.AppendLine(""); - // sbMSG.AppendLine($"Remaining lifetime in years {genesisStatus.RemainingLifeTimeYears:F2}"); - // sbMSG.AppendLine($"Totally drained battery load in % {genesisStatus.DrainedBatteryLoadPercent:F2}"); - // _currentGenesis.WriteLog(sbMSG.ToString()); - // MessageBox.Show(sbMSG.ToString(), $"Battery for {_currentGenesis.PcbId} has remaining life " + - // $"time of {genesisStatus.RemainingLifeTimeYears:F2} years"); - //} - //else - //{ - // MessageBox.Show("Failed to get life time information"); - //} _currentGenesis.RequestProtocol.AdditionalRetryTimeoutMs = addRetryTimeoutMs; Task.Factory.StartNew(() => From 0c346d1e922df3666126e067117b9fd5486fadcc Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Tue, 18 Nov 2025 12:47:33 +0100 Subject: [PATCH 04/13] ProductionUiCordonel: - reboot threshold to 4, messages extended --- .../EolProcesses/ExecRebootCordonel.cs | 15 --------------- .../GenericProcesses/ConnectCordonel.cs | 16 ++++++++++++++++ .../Properties/Resources.Designer.cs | 18 ++++++++++++++++++ .../Properties/Resources.de.resx | 6 ++++++ .../Properties/Resources.resx | 6 ++++++ 5 files changed, 46 insertions(+), 15 deletions(-) diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs index 6d35f68c..ba947b0b 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs @@ -51,9 +51,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - Accumulator reset if setting to zero failed as defined by A.F. as workaround for FW bug. /// - /// - /// - Threshold for allowed reboots to detect erroneous hardware. - /// public override StatusReturn ExecuteProcess() { // Uncheck executed process to leave the result open needed for retries @@ -112,18 +109,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr } } ActualProcessProgress++; - #endregion - #region ----------------------------------- Check reboot count ---------------------------------------- - // Read reboot count and compare with hardcoded maximum value - var rebootCount = - RegisterConverter.ByteArrayToValue(Meter.ReadRegister("CUSTOMER_RebootCount")); - if (rebootCount >= MeterResetPsu.MAX_REBOOTS_FOR_HEALTHY_HW) - { - ErrorMsgDispatcher(Resources.StrErrorMsgTooManyReboots); - EolProgress.RebootDoneChecked = EOLStatus.FAIL; - return StatusReturn.Failed; - } - #endregion #region ----------------------------------- Set Time and Reset Counters ------------------------------- // Get the time in UTC to program the time for the Cordonel in seconds since 01. Jan 2000 diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs index 07ad034c..076de17e 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs @@ -1,5 +1,7 @@ using System; using Xylem.Common.CommonCore.Consts; +using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; +using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum; using Xylem.Common.Production.ProductionUiCordonel.Properties; @@ -35,6 +37,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener /// /// - Early return if login failed. /// + /// + /// - Threshold for allowed reboots to detect erroneous hardware. + /// public override StatusReturn ExecuteProcess() { Boolean retVal; @@ -61,6 +66,17 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin); return StatusReturn.Failed; } + + // Read reboot count and compare with hardcoded maximum value + var rebootCount = + RegisterConverter.ByteArrayToValue(Meter.ReadRegister("CUSTOMER_RebootCount")); + if (rebootCount > MeterResetPsu.MAX_REBOOTS_FOR_HEALTHY_HW) + { + ErrorMsgDispatcher(Resources.StrErrorMsgTooManyReboots + + $" - {Resources.StrProcessStateAllowed}: {MeterResetPsu.MAX_REBOOTS_FOR_HEALTHY_HW}" + + $" - {Resources.StrProcessStateDetected}: {rebootCount}"); + return StatusReturn.Failed; + } // If interface is outdated if (!Meter.InterfaceSupportsFwVersion) diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs index c7e5eb18..f517f498 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs @@ -1743,6 +1743,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to Allowed. + /// + internal static string StrProcessStateAllowed { + get { + return ResourceManager.GetString("StrProcessStateAllowed", resourceCulture); + } + } + /// /// Looks up a localized string similar to ATTENTION. /// @@ -1761,6 +1770,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to Detected. + /// + internal static string StrProcessStateDetected { + get { + return ResourceManager.GetString("StrProcessStateDetected", resourceCulture); + } + } + /// /// Looks up a localized string similar to Success. /// diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 944704e0..8b195c1f 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -687,6 +687,12 @@ ACHTUNG + + + Erlaubt + + + Erkannt SONDERFREIGABE diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.resx index 83b62502..b8b60f83 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.resx @@ -687,6 +687,12 @@ ATTENTION + + + Allowed + + + Detected SPECIAL APPROVAL From 82899fab59ca1a56daec6ce6f083ab506a1ed9cc Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Thu, 20 Nov 2025 01:28:46 +0100 Subject: [PATCH 05/13] ProductionUiCordonel: - resorted production processes as between ExecFinalParm and reboot more than 2 s needed to update 'PERIODICLOG' --- Common/.vs/config/applicationhost.config | 2 +- .../Genesis/GenesisCore/GenesisMeter.cs | 11 +- .../Genesis/GenesisCore/RegisterRestorer.cs | 122 +- .../Genesis/GenesisCore/configuration.json | 47262 ++++++++-------- .../FM2014/FM2014Core/FM2014.cs | 10 +- .../FM2014/FM2014Core/IFM2014.cs | 2 +- .../ProductionUiCordonel.UnitTests.csproj | 14 + .../Steps/CommonProductionProcessSteps.cs | 3 +- .../EolProcesses/CheckFinalParametrization.cs | 15 +- .../EolProcesses/CheckProductionState.cs | 6 +- .../EolProcesses/EolProcessStatesDef.cs | 39 +- .../ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs | 3 +- 12 files changed, 23767 insertions(+), 23722 deletions(-) diff --git a/Common/.vs/config/applicationhost.config b/Common/.vs/config/applicationhost.config index cd69abb2..8f72faa1 100644 --- a/Common/.vs/config/applicationhost.config +++ b/Common/.vs/config/applicationhost.config @@ -187,7 +187,7 @@ - + diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index ff027b4b..547b1d65 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -619,7 +619,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore try { Logger.Trace($"Slot:{Slot} - Registers definitions loaded from {location}"); - if (Configuration.AutoUpdateFiles) + if (Configuration != null && Configuration.AutoUpdateFiles) { Logger.Trace($"Slot:{Slot} - Check for updates of {configFilePath}"); var fi = new FileInfo(configFilePath); @@ -2608,7 +2608,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// public void WriteLog(String text) { - Logger.Info($"Slot:{Slot} - {text}"); + try + { + Logger.Info($"Slot:{Slot} - {text}"); + } + catch (Exception e) + { + // ignored + } } /// diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index d7f940f1..ab94b1a3 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -43,19 +43,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore private String _pcbIdFinalRegisterRead = Constants.StrUnknown; /// - /// Collection of recovery registers and values + /// Collection of recovery registers - programming parameters /// - public List RecoveryRegisters; - - /// - /// Name of registers which should be restored after reboot if the compare failed. - /// - private List _restoreRegistersAfterReboot; + public List RecoveryRegisters { set; get; } /// /// Marker for restore after reboot parameters /// - public Boolean HasRestoreRegistersAfterRebootIfCompareFailed; + public Boolean HasRestoreRegistersAfterRebootIfCompareFailed { private set; get; } /// /// Register content on initial connect to keep those during update @@ -303,8 +298,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore new RecoveryRegisterItem("GENESISFLOW_SealDisplay", new Byte[] { 0x00 }) }; - // ReSharper disable once CollectionNeverQueried.Local IS FOR DEBUG - private readonly List _failedComparisonRegisters = new List(); + /// + /// Registers which failed the comparison + /// + public List FailedComparisonRegisters { get; } + + /// + /// Name of registers which should be restored after reboot if the compare failed. + /// + public List RestoreRegistersAfterReboot { get; } + // ReSharper disable once CollectionNeverQueried.Local IS FOR DEBUG private List _dbParameterRegisterList = new List(); // ReSharper disable once CollectionNeverQueried.Local IS FOR DEBUG @@ -385,9 +388,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore public RegisterRestorer(IGenesisMeter currentGenesis) { _currentGenesis = currentGenesis; - RecoveryRegisters = null; RecoveryRegisters = new List(); - _restoreRegistersAfterReboot = new List(); + RestoreRegistersAfterReboot = new List(); + FailedComparisonRegisters = new List(); } /// @@ -817,21 +820,21 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore } } - /// - /// Avoid doubling of register restore on subsequent FW-Update trials. - /// - /// true if registers already backed up - /// - /// - Initial. - /// - public Boolean RegisterRestoreExecuted() - { - if (_currentGenesis == null) - return false; - if (_currentGenesis.PcbId != _pcbIdFinalRegisterRead) - return false; - return _finalRegisters.Count > 0; - } + ///// + ///// Avoid doubling of register restore on subsequent FW-Update trials. + ///// + ///// true if registers already backed up + ///// + ///// - Initial. + ///// + //public Boolean RegisterRestoreExecuted() + //{ + // if (_currentGenesis == null) + // return false; + // if (_currentGenesis.PcbId != _pcbIdFinalRegisterRead) + // return false; + // return _finalRegisters.Count > 0; + //} /// /// EOL (end of line) programming contains a reset of the accumulators. Else it is identical with recover @@ -966,7 +969,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore recoveryRegistersDb.Count == 0) return StatusReturn.Failed; - // preset recovery registers if not already set + //TODO THW preset recovery registers if not already set if (RecoveryRegisters == null) { RecoveryRegisters = new List(); @@ -1184,6 +1187,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Initial. /// + /// + /// - Leave the initial 'RecoveryRegisters' intact. + /// public Boolean RestoreAndCompareRegistersAfterReboot(CancellationToken cancellationToken) { if (!HasRestoreRegistersAfterRebootIfCompareFailed) @@ -1191,10 +1197,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore HasRestoreRegistersAfterRebootIfCompareFailed = false; - // Use preset recovery registers for check - RecoveryRegisters.Clear(); - RecoveryRegisters.AddRange(_restoreRegistersAfterReboot); - _failedComparisonRegisters.Clear(); + FailedComparisonRegisters.Clear(); // get the pre-defined dictionary var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions(); @@ -1204,20 +1207,20 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore var maxCounter = 3 * RecoveryRegisters.Count; // Write after reboot - if (StatusReturn.Failed == WriteRegisterParameterSet(RecoveryRegisters, maxCounter, + if (StatusReturn.Failed == WriteRegisterParameterSet(RestoreRegistersAfterReboot, maxCounter, meterRegisters, cancellationToken, false)) { return false; } // executes login read logout - if (!ReadPresetRegisters(cancellationToken)) + if (!ReadPresetRegisters(RestoreRegistersAfterReboot, cancellationToken)) { return false; } // Compare register content - if (!CompareRegisters(cancellationToken)) + if (!CompareRegisters(RestoreRegistersAfterReboot, cancellationToken)) { return false; } @@ -1229,10 +1232,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// Compare all registers which can be restored without new access to meter. - /// Precondition: - /// - The _restoreRegisters has to be filled with all registers being able to restore (RW), - /// - The _finalReadRegisters has to be filled. /// + /// /// /// true if equal /// @@ -1283,21 +1284,25 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Made method static. /// - public Boolean CompareRegisters(CancellationToken cancellationToken) + /// + /// - Avoid clearing of failed registers + /// + /// + /// - Leave the initial 'RecoveryRegisters' intact. + /// + public Boolean CompareRegisters(List recoveryRegisters, CancellationToken cancellationToken) { if (_pcbIdFinalRegisterRead != _pcbIdWriteRegisters || - RecoveryRegisters == null) + recoveryRegisters == null) return false; _actualRegisterCtr = 0; var retVal = true; - // DEBUG - _failedComparisonRegisters?.Clear(); - _restoreRegistersAfterReboot.Clear(); - // build a string list of the registers being able to sort those - var registerNames = RecoveryRegisters.Select(register => register.RegisterIdent).ToList(); + //var registerNames = RecoveryRegisters.Select(register => register.RegisterIdent).ToList(); + var registerNames = recoveryRegisters.Select(register => register.RegisterIdent).ToList(); + // Remove all excluded registers foreach (var regName in _excludedFromCompareParameters.Where(regName => registerNames.Any(reg => reg == regName))) { @@ -1340,7 +1345,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore try { // Get the raw byte array of this register - var recReg = RecoveryRegisters.First(reg => reg.RegisterIdent.Equals(regName)); + //var recReg = RecoveryRegisters.First(reg => reg.RegisterIdent.Equals(regName)); + var recReg = recoveryRegisters.First(reg => reg.RegisterIdent.Equals(regName)); var writtenValue = recReg.WriteValue; var readBackValue = recReg.ReadBackValue; var strRequiredRegisterValue = ""; @@ -1425,7 +1431,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore if (_restoreAfterRebootIfCompareFailed.Any(reg => reg.Equals(regName))) { HasRestoreRegistersAfterRebootIfCompareFailed = true; - _restoreRegistersAfterReboot.Add(recReg); + RestoreRegistersAfterReboot.Add(recReg); } var encryptRawData = regName.Contains("EncryptionKey") || regName.Contains("Password"); @@ -1434,7 +1440,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore strRequiredRegisterValue += $" - {Resources.StrMeterValue} ({strReadBackRegisterValue})h" + $" - {Resources.StrRegisterCompareFailed}"; - _failedComparisonRegisters?.Add(new RecoveryRegisterItem(regName, writtenValue, + FailedComparisonRegisters?.Add(new RecoveryRegisterItem(regName, writtenValue, readBackValue)); retVal = false; } @@ -1507,6 +1513,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - CancellationToken. /// + /// + /// - Cleared all failed compare registers and the restore after reboot registers as a new reading + /// will give it a new chance to compare it. + /// public Boolean FinalReadRegisters(CancellationToken cancellationToken) { if (_currentGenesis == null) @@ -1515,6 +1525,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore Boolean retVal; try { + // Clear all preceding failed register lists + RestoreRegistersAfterReboot.Clear(); + FailedComparisonRegisters.Clear(); + // create a dictionary for final read being able to compare those with the initial read and restored if (!BuildReadableRegisterDictionary(ref _finalRegisters)) return false; @@ -1703,7 +1717,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // temporary list of registers just for read and log without keeping them alive var registers = new List(); - // create a dictionary for final read being able to compare those with the initial read and restored + // create a dictionary for final read being able to compare those with the initial read and restored if (!BuildReadableRegisterDictionary(ref _finalRegisters)) return false; @@ -1717,6 +1731,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// Read predefined registers from RecoveryRegisters. /// + /// /// /// true if registers could be read /// @@ -1725,9 +1740,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - CancellationToken. /// - public Boolean ReadPresetRegisters(CancellationToken cancellationToken) + /// + /// - Leave the initial 'RecoveryRegisters' intact. + /// + public Boolean ReadPresetRegisters(List recoveryRegisters, CancellationToken cancellationToken) { - if (_currentGenesis == null || RecoveryRegisters == null || RecoveryRegisters.Count == 0) + if (_currentGenesis == null || recoveryRegisters == null || recoveryRegisters.Count == 0) return false; // Assume that this meter shall be used for comparison even if nothing has been written. @@ -1736,7 +1754,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore _pcbIdWriteRegisters = _currentGenesis.PcbId; _pcbIdFinalRegisterRead = _currentGenesis.PcbId; - return ReadRegistersSet(ref RecoveryRegisters, cancellationToken); + return ReadRegistersSet(ref recoveryRegisters, cancellationToken); } /// diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json b/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json index 4476d046..1a3a6c1f 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json @@ -1,23674 +1,23674 @@ { - "CONFIGEXCHANGE": { - "id": 4, - "version": { - "first": 3, - "last": 245 - }, - "registers": { - "Privilege": { - "id": 0, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Written to set the login level, followed by the password. Note, this can be read at any login level including 0.", - "version": { - "first": 3, - "last": 245 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 8 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Used at the same time as Password so probably wants to have column S indicated.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "Password": { - "id": 1, - "details": [ - { - "type": "uint96_t", - "privilege": { - "lvl1": "WO", - "lvl2": "WO", - "lvl3": "WO", - "lvl4": "WO", - "lvl5": "WO", - "lvl6": "WO", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Password for logging in, requires 3 consecutive writes", - "version": { - "first": 3, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "Used in login.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FOpen": { - "id": 2, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to open a file on the meter, handle returned", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FClose": { - "id": 3, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to close a file on the meter", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FRead": { + "CONFIGEXCHANGE": { "id": 4, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to read bytes from an open file", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FWrite": { - "id": 5, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to write bytes to an open file", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FSeek": { - "id": 6, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to seek within an open file", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FTell": { - "id": 7, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to determine position within an open file", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "Remove": { - "id": 8, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to delete a file", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FEOF": { - "id": 9, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this determine whether the current position in an open file is the end of the file", - "version": { - "first": 20, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "Catalogue": { - "id": 10, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Returns a list of files in the filesystem that matches a string containing wildcards passed in", - "version": { - "first": 49, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PCBSerialNumber": { - "id": 12, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "String containing the PCB serial number. Note, this can be read at any login level including 0", - "version": { - "first": 59, - "last": 245 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Used for identification and login.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "ConfigAccessRights": { - "id": 13, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bitmask of login levels permitted to manipulate dangerous files", - "version": { - "first": 59, - "last": 245 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "I don't expect this to be changed.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FFlush": { - "id": 14, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Remote file operations, use this to flush write buffers to an open file", - "version": { - "first": 66, - "last": 245 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - } - }, - "status": { - "LOCKED_OUT": { - "id": 0 - }, - "AUTHENTICATION_FAILURE": { - "id": 1 - }, - "ACCESS_DENIED": { - "id": 2 - }, - "UNKNOWN_PARAMETER": { - "id": 3 - }, - "IN_USE": { - "id": 4 - }, - "SIZES_DONT_MATCH": { - "id": 5 - }, - "CANT_READ_CONFIG_FILE": { - "id": 6 - }, - "USER_NOT_KNOWN": { - "id": 7 - }, - "CANT_CREATE_CONFIG_FILE": { - "id": 8 - }, - "STORE_DIDNT_STORE": { - "id": 9 - }, - "STORE_CORRUPT": { - "id": 10 - }, - "EXPECTED_WRITE": { - "id": 11 - }, - "EXPECTED_READ": { - "id": 12 - }, - "STOP_CYCLING": { - "id": 13 - }, - "TOO_MANY_OPEN": { - "id": 14 - }, - "NEVER_OPENED": { - "id": 15 - }, - "FILE_PROTECTED": { - "id": 16 - }, - "PARTIAL_RECALL": { - "id": 17 - }, - "DEFAULT_PASSWORD_USED": { - "id": 18 - } - } - }, - "CUSTOMER": { - "id": 9, - "version": { - "first": 1, - "last": 166 - }, - "registers": { - "AlarmStatus0": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 0-3.", - "version": { - "first": 1, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmStatus1": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 4-7.", - "version": { - "first": 1, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "TriggerAlarmCancel": { - "id": 2, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Any set bits manually clear the corresponding alarm.", - "version": { - "first": 1, - "last": 110 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Any set bits manually clear the corresponding alarm.", - "version": { - "first": 111, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [], - "remarks": "Cancel all alarms at the end of production.", - "region": { - "emea": { - "values": { - "default": 4294967295 - } - }, - "na": { - "values": { - "default": 4294967295 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "AlarmStatus2": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 8-11.", - "version": { - "first": 26, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmStatus3": { - "id": 4, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 12-15.", - "version": { - "first": 26, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmStatus4": { - "id": 5, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 16-19.", - "version": { - "first": 26, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmStatus5": { - "id": 6, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 20-23.", - "version": { - "first": 26, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmStatus6": { - "id": 7, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 24-27.", - "version": { - "first": 26, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmStatus7": { - "id": 8, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "8 bit counts corresponding to alarms 28-31.", - "version": { - "first": 26, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AlarmEnableMask": { - "id": 9, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are being monitored.", - "version": { - "first": 26, - "last": 110 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are being monitored.", - "version": { - "first": 111, - "last": 162 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Bitmask of the alarms that we are interested in. I can imagine some customers may have different requirements to others. The radio does change this.", - "region": { - "emea": { - "values": { - "default": 32851 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are being monitored.", - "version": { - "first": 163, - "last": 163 - }, - "values": { - "default": 49235, - "minimum": 2, - "maximum": 654915 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Bitmask of the alarms that we are interested in. I can imagine some customers may have different requirements to others. The radio does change this.", - "region": { - "emea": { - "values": { - "default": 49235 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are being monitored.", - "version": { - "first": 164, - "last": 166 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Bitmask of the alarms that we are interested in. I can imagine some customers may have different requirements to others. The radio does change this.", - "region": { - "emea": { - "values": { - "default": 49235 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "AlarmBroadcastMask": { - "id": 10, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which will generate events.", - "version": { - "first": 26, - "last": 110 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which will generate events.", - "version": { - "first": 111, - "last": 166 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "This updates the same value as AlarmEnableMask, best to avoid changing it.", - "region": { - "emea": { - "values": { - "default": 32851 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AlarmVisualMask": { - "id": 11, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", - "version": { - "first": 110, - "last": 110 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", - "version": { - "first": 111, - "last": 162 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Bitmask of the alarms that will be shown on the display (both the alarm ID and the flag icon). Again, I can imagine different customers wanting different things. The radio seems to set this but it seems to be a hardwired value.", - "region": { - "emea": { - "values": { - "default": 8156 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", - "version": { - "first": 163, - "last": 163 - }, - "values": { - "default": 16382, - "minimum": 16382, - "maximum": 16382 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Bitmask of the alarms that will be shown on the display (both the alarm ID and the flag icon). Again, I can imagine different customers wanting different things. The radio seems to set this but it seems to be a hardwired value.", - "region": { - "emea": { - "values": { - "default": 16382 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", - "version": { - "first": 164, - "last": 166 - }, - "values": { - "default": 4294967295, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Bitmask of the alarms that will be shown on the display (both the alarm ID and the flag icon). Again, I can imagine different customers wanting different things. The radio seems to set this but it seems to be a hardwired value.", - "region": { - "emea": { - "values": { - "DN40": 8156, - "DN50": 8156, - "DN65": 8156, - "DN80": 8156, - "DN100": 8156, - "DN125": 8156, - "DN150": 8156, - "DN200": 16382, - "DN250": 16382, - "DN300": 16382 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "AlarmVisualAutoClearMask": { - "id": 12, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Alarms that have their display automatically cleared", - "version": { - "first": 110, - "last": 110 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Alarms that have their display automatically cleared", - "version": { - "first": 111, - "last": 166 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Not in use, ignore.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ExcessFlowVolumeThreshold": { - "id": 13, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 61, - "last": 110 - }, - "values": { - "default": 639590, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 111, - "last": 118 - }, - "values": { - "default": 639590, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 119, - "last": 132 - }, - "values": { - "default": 639590, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 133, - "last": 166 - }, - "si_transform": { - "remarks": "Cubic Meters per Second: conversion of 1/256 l/h flow rate units, the volume (liters = (1 / 256) * 10^-3 m^3 = 3.90625 * 10^-6 m^3) and time (hours = 3600 s) into SI base units. Flow rate = (3.90625 * 10^-6 m^3) / (3600 s) = 1.085069444 * 10^-9 m^3/s.", - "units": "m^3/s", - "scale_float_mult": 1.0, - "scale_power_2": -8, - "scale_power_10": -3, - "scale_float_div": 3600.0, - "offset": 0 - }, - "values": { - "default": 639999, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "This is just the flow rate above which you'll get a broken pipe alarm (assuming it is above for ExcessFlowTimeThreshold). This, along with all the alarm configuration settings seem like things that different customers might want different settings for. However I believe most can be changed via the radio. A.F.: Register is for the EMEA alarms so we don't need them for any NA meter sizes. NA alarms are configured at uniontown using UI-1236. Should NA columns be cleared?", - "region": { - "emea": { - "values": { - "DN40": 6400000, - "DN50": 12800000, - "DN65": 16000000, - "DN80": 22400000, - "DN100": 32000000, - "DN125": 64000000, - "DN150": 96000000, - "DN200": 128000000, - "DN250": 192000000, - "DN300": 256000000 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "LeakTimeThreshold": { - "id": 14, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for leak alarm in minutes", - "version": { - "first": 61, - "last": 110 - }, - "values": { - "default": 10080, - "minimum": 0, - "maximum": 69632 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for leak alarm in minutes", - "version": { - "first": 111, - "last": 118 - }, - "values": { - "default": 10080, - "minimum": 0, - "maximum": 69632 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for leak alarm in minutes", - "version": { - "first": 119, - "last": 166 - }, - "si_transform": { - "remarks": "Seconds: time in minutes ...", - "units": "s", - "scale_float_mult": 60.0, - "scale_power_2": 0, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 360, - "minimum": 0, - "maximum": 69632 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Default for J.S. is 20160. A.F.: Register is for the EMEA alarms so we don't need them for any NA meter sizes. NA alarms are configured at uniontown using UI-1236. Should NA columns be cleared?", - "region": { - "emea": { - "values": { - "default": 20160 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ReverseFlowTimeThreshold": { - "id": 15, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of minutes of reverse flow required to set reverse flow alarm", - "version": { - "first": 61, - "last": 110 - }, - "values": { - "default": 15, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of minutes of reverse flow required to set reverse flow alarm", - "version": { - "first": 111, - "last": 142 - }, - "values": { - "default": 15, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of minutes of reverse flow required to set reverse flow alarm", - "version": { - "first": 143, - "last": 166 - }, - "values": { - "default": 15, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "15 mins for EMEA", - "region": { - "emea": { - "values": { - "default": 15 - } - }, - "na": { - "values": { - "default": 60 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Locale": { - "id": 18, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Timezone in which this application is set to run.", - "version": { - "first": 24, - "last": 166 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": true, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "VaKo?? We need a seperation of Timezone an display view. A.F.: There are a lot of locales, not just one per time zone. Using the correct locale should set the display and the timezone correctly.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AppArrangement": { - "id": 19, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "A name for the arrangement of applications on the meter", - "version": { - "first": 130, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "This is a readonly register that gives the firmware a hint about whether it is set up as an EMEA or NA meter (or neither). You can ignore or use it to check the value is as expected. Might be worth checking it.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "RebootCount": { - "id": 20, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of times the meter has rebooted", - "version": { - "first": 73, - "last": 110 - }, - "values": { - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of times the meter has rebooted", - "version": { - "first": 111, - "last": 166 - }, - "values": { - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "ExcessFlowTimeThreshold": { - "id": 21, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for broken pipe alarm in minutes", - "version": { - "first": 80, - "last": 110 - }, - "values": { - "default": 15, - "minimum": 0, - "maximum": 69632 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for broken pipe alarm in minutes", - "version": { - "first": 111, - "last": 118 - }, - "values": { - "default": 15, - "minimum": 0, - "maximum": 69632 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for broken pipe alarm in minutes", - "version": { - "first": 119, - "last": 166 - }, - "values": { - "default": 180, - "minimum": 0, - "maximum": 69632 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Default for J.S. is 5.", - "region": { - "emea": { - "values": { - "default": 5 - } - }, - "na": { - "values": { - "default": 5 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "LeakFlowThreshold": { - "id": 22, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 80, - "last": 110 - }, - "values": { - "default": 12800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 111, - "last": 118 - }, - "values": { - "default": 12800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 119, - "last": 132 - }, - "values": { - "default": 5529, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", - "version": { - "first": 133, - "last": 166 - }, - "values": { - "default": 6399, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "approximate", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "This is just the flow rate above which you'll get a leak alarm (assuming it is above for LeakTimeThreshold). A.F.: Register is for the EMEA alarms so we don't need them for any NA meter sizes. NA alarms are configured at uniontown using UI-1236. Should NA columns be cleared?", - "region": { - "emea": { - "values": { - "DN40": 64000, - "DN50": 96000, - "DN65": 160000, - "DN80": 224000, - "DN100": 320000, - "DN125": 640000, - "DN150": 960000, - "DN200": 1280000, - "DN250": 2240000, - "DN300": 2560000 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "MfgCharge": { - "id": 23, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Charge in uAs available in manufacturing (read only)", - "version": { - "first": 84, - "last": 166 - }, - "si_transform": { - "remarks": "Coulombs: charge in uAs ...", - "units": "C", - "scale_float_mult": 1.0, - "scale_power_2": 0, - "scale_power_10": -6, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 181440000 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [], - "remarks": "Check totalusedcharge against this to ensure battery usage in manufacturing isn't too high", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "TemperatureHighThreshold": { - "id": 24, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "High temperature alarm threshold in 0.1°C", - "version": { - "first": 88, - "last": 100 - }, - "values": { - "default": 500, - "minimum": 0, - "maximum": 800 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "High temperature alarm threshold in 0.1°C", - "version": { - "first": 101, - "last": 110 - }, - "values": { - "default": 500, - "minimum": 0, - "maximum": 800 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "High temperature alarm threshold in 0.1°C", - "version": { - "first": 111, - "last": 166 - }, - "si_transform": { - "remarks": "Degrees Celsius: temperature in 0.1 degrees C ...", - "units": "°C", - "scale_float_mult": 1.0, - "scale_power_2": 0, - "scale_power_10": -1, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 500, - "minimum": 0, - "maximum": 800 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Checked from J.S.", - "region": { - "emea": { - "values": { - "default": 500 - } - }, - "na": { - "values": { - "default": 270 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureHighDelay": { - "id": 25, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for high temperature alarm in seconds", - "version": { - "first": 88, - "last": 110 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for high temperature alarm in seconds", - "version": { - "first": 111, - "last": 166 - }, - "si_transform": { - "remarks": "Seconds: time in seconds ...", - "units": "s", - "scale_float_mult": 60.0, - "scale_power_2": 0, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Checked from J.S.", - "region": { - "emea": { - "values": { - "default": 300 - } - }, - "na": { - "values": { - "default": 60 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureLowThreshold": { - "id": 26, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Low temperature alarm threshold in 0.1°C", - "version": { - "first": 88, - "last": 100 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Low temperature alarm threshold in 0.1°C", - "version": { - "first": 101, - "last": 110 - }, - "values": { - "default": 20, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Low temperature alarm threshold in 0.1°C", - "version": { - "first": 111, - "last": 166 - }, - "values": { - "default": 20, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Checked from J.S.", - "region": { - "emea": { - "values": { - "default": 20 - } - }, - "na": { - "values": { - "default": 20 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureLowDelay": { - "id": 27, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for low temperature alarm in seconds", - "version": { - "first": 88, - "last": 110 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for low temperature alarm in seconds", - "version": { - "first": 111, - "last": 166 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Checked from J.S.", - "region": { - "emea": { - "values": { - "default": 300 - } - }, - "na": { - "values": { - "default": 60 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureHighThreshold": { - "id": 28, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "High pressure alarm threshold in Pa", - "version": { - "first": 88, - "last": 110 - }, - "values": { - "default": 1600000, - "minimum": 0, - "maximum": 2550000 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "High pressure alarm threshold in Pa", - "version": { - "first": 111, - "last": 121 - }, - "values": { - "default": 1600000, - "minimum": 0, - "maximum": 2550000 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "High pressure alarm threshold in Pa", - "version": { - "first": 122, - "last": 166 - }, - "values": { - "default": 1600000, - "minimum": 0, - "maximum": 2550000 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Absolute or relative? A.F.: gauge pressure.", - "region": { - "emea": { - "values": { - "default": 1600000 - } - }, - "na": { - "values": { - "default": 1380000 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureHighDelay": { - "id": 29, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for high pressure alarm in seconds", - "version": { - "first": 88, - "last": 110 - }, - "values": { - "default": 300, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for high pressure alarm in seconds", - "version": { - "first": 111, - "last": 118 - }, - "values": { - "default": 300, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for high pressure alarm in seconds", - "version": { - "first": 119, - "last": 166 - }, - "si_transform": { - "remarks": "Seconds: ...", - "units": "s", - "scale_float_mult": 60.0, - "scale_power_2": 0, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Checked from J.S.", - "region": { - "emea": { - "values": { - "default": 300 - } - }, - "na": { - "values": { - "default": 60 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureLowThreshold": { - "id": 30, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Low pressure alarm threshold in Pa", - "version": { - "first": 88, - "last": 110 - }, - "values": { - "default": 30000, - "minimum": 0, - "maximum": 2550000 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Low pressure alarm threshold in Pa", - "version": { - "first": 111, - "last": 121 - }, - "values": { - "default": 30000, - "minimum": 0, - "maximum": 2550000 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Low pressure alarm threshold in Pa", - "version": { - "first": 122, - "last": 166 - }, - "values": { - "default": 30000, - "minimum": 0, - "maximum": 2550000 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Absolute or relative? A.F.: gauge pressure.", - "region": { - "emea": { - "values": { - "default": 30000 - } - }, - "na": { - "values": { - "default": 240000 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureLowDelay": { - "id": 31, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for low pressure alarm in seconds", - "version": { - "first": 88, - "last": 110 - }, - "values": { - "default": 300, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for low pressure alarm in seconds", - "version": { - "first": 111, - "last": 118 - }, - "values": { - "default": 300, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time threshold for low pressure alarm in seconds", - "version": { - "first": 119, - "last": 166 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 10800 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Checked from J.S.", - "region": { - "emea": { - "values": { - "default": 300 - } - }, - "na": { - "values": { - "default": 60 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "StoreConfiguration": { - "id": 32, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Store all configuration items in non-volatile memory.", - "version": { - "first": 88, - "last": 130 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Store all configuration items in non-volatile memory.", - "version": { - "first": 131, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "You do need to use this if you change any parameters in CUSTOMER and want to keep them.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "SerialNumber": { - "id": 33, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Customer serial number string", - "version": { - "first": 139, - "last": 166 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "BackupCalendarSeconds": { - "id": 34, - "details": [ - { - "type": "time_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "NA", - "lvl8": "NA" - }, - "description": "Internal backup of calendar seconds", - "version": { - "first": 145, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Internal use in firmware only", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "InstallationTime": { - "id": 35, - "details": [ - { - "type": "time_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Datetime in seconds since 1/1/2000 00:00:00. Time meter was determined to have been installed. 0 means not installed.", - "version": { - "first": 147, - "last": 166 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Write to zero before leaving manufacturing to ensure not marked as 'installed'.", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "LocaleDecimalPoint": { - "id": 36, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Read to view the string used as a decimal point for this locale", - "version": { - "first": 151, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "LocaleThousandsSeparator": { - "id": 37, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Read to view the string used as a thousands separarator for this locale", - "version": { - "first": 151, - "last": 166 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "InternalLoginTest": { - "id": 38, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test whether the internal login works. Start test by writing '1' then log out to enable the test to run. Log back in and read back this register for result (see status codes)", - "version": { - "first": 157, - "last": 166 - }, - "values": { - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Helper function to test the configexchange login at the internal level will succeed (that is, that the password is as expected). This should be tested after installation of password file at end of line. Add to production test if register present in firmware.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "NoFlowLimit": { - "id": 39, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "time threshold in Minutes for NoFlowAlarm trigger NoFlowAlarm trigger; 251002 Clemens: clamp the “last” field to 161 and may need to use the “exclude” versions mechanism if 1.3 development includes work for CORDHW-3124.", - "version": { - "first": 161, - "last": 161 - }, - "values": { - "default": 43200, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "This has default setting for DEWA customer. Unsupported.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "NoFlowAlarmResetHysteresis": { - "id": 40, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "number of consecutive samples (Minutes) before NoFlow Alarm gets cleared; 251002 Clemens: clamp the “last” field to 161 and may need to use the “exclude” versions mechanism if 1.3 development includes work for CORDHW-3124.", - "version": { - "first": 161, - "last": 161 - }, - "values": { - "default": 5, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "This has default setting for DEWA customer. Unsupported.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Gradient_Averaging_Samples": { - "id": 41, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "number of samples for moving average (window size)", - "version": { - "first": 165, - "last": 166 - }, - "values": { - "default": 5, - "minimum": 1, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Gradient_Pos_Granularity_Steps": { - "id": 42, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Unitless granularity steps for positive pressure Gradient alarm threshold", - "version": { - "first": 165, - "last": 166 - }, - "values": { - "default": 200, - "minimum": 1, - "maximum": 1600 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Gradient_Neg_Granularity_Steps": { - "id": 43, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Unitless granularity steps for negative pressure Gradient alarm threshold", - "version": { - "first": 165, - "last": 166 - }, - "values": { - "default": 200, - "minimum": 1, - "maximum": 1600 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Gradient_Samples_Alarmtrigger": { - "id": 44, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of consecutive samples above threshold before Alarm gets triggered", - "version": { - "first": 165, - "last": 166 - }, - "values": { - "default": 3, - "minimum": 1, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - } - }, - "status": { - "REBOOT": { - "id": 0 - }, - "REBOOT_STOP": { - "id": 1 - }, - "LOW_BATTERY": { - "id": 2 - }, - "LOW_BATTERY_STOP": { - "id": 3 - }, - "VERY_LOW_BATTERY": { - "id": 4 - }, - "VERY_LOW_BATTERY_STOP": { - "id": 5 - }, - "CONFIG_ERROR": { - "id": 6 - }, - "CONFIG_ERROR_STOP": { - "id": 7 - }, - "EMPTY_PIPE": { - "id": 8 - }, - "EMPTY_PIPE_STOP": { - "id": 9 - }, - "MAGNETIC_TAMPER": { - "id": 10 - }, - "MAGNETIC_TAMPER_STOP": { - "id": 11 - }, - "REVERSE_FLOW": { - "id": 12 - }, - "REVERSE_FLOW_STOP": { - "id": 13 - }, - "SUSPECT_LEAK": { - "id": 14 - }, - "SUSPECT_LEAK_STOP": { - "id": 15 - }, - "BROKEN_PIPE": { - "id": 16 - }, - "BROKEN_PIPE_STOP": { - "id": 17 - }, - "LOW_PRESSURE": { - "id": 18 - }, - "LOW_PRESSURE_STOP": { - "id": 19 - }, - "HIGH_PRESSURE": { - "id": 20 - }, - "HIGH_PRESSURE_STOP": { - "id": 21 - }, - "LOW_TEMPERATURE": { - "id": 22 - }, - "LOW_TEMPERATURE_STOP": { - "id": 23 - }, - "HIGH_TEMPERATURE": { - "id": 24 - }, - "HIGH_TEMPERATURE_STOP": { - "id": 25 - }, - "RADIO_ERROR": { - "id": 26 - }, - "RADIO_ERROR_STOP": { - "id": 27 - }, - "METROLOGY_PARAMS": { - "id": 28 - }, - "METROLOGY_PARAMS_STOP": { - "id": 29 - }, - "METROLOGY_MEASURE": { - "id": 30 - }, - "METROLOGY_MEASURE_STOP": { - "id": 31 - }, - "UNALLOCATED_6": { - "id": 32 - }, - "UNALLOCATED_6_STOP": { - "id": 33 - }, - "UNALLOCATED_7": { - "id": 34 - }, - "UNALLOCATED_7_STOP": { - "id": 35 - }, - "UNALLOCATED_8": { - "id": 36 - }, - "UNALLOCATED_8_STOP": { - "id": 37 - }, - "UNALLOCATED_9": { - "id": 38 - }, - "UNALLOCATED_9_STOP": { - "id": 39 - }, - "UNALLOCATED_10": { - "id": 40 - }, - "UNALLOCATED_10_STOP": { - "id": 41 - }, - "UNALLOCATED_11": { - "id": 42 - }, - "UNALLOCATED_11_STOP": { - "id": 43 - }, - "UNALLOCATED_12": { - "id": 44 - }, - "UNALLOCATED_12_STOP": { - "id": 45 - }, - "UNALLOCATED_13": { - "id": 46 - }, - "UNALLOCATED_13_STOP": { - "id": 47 - }, - "UNALLOCATED_14": { - "id": 48 - }, - "UNALLOCATED_14_STOP": { - "id": 49 - }, - "UNALLOCATED_15": { - "id": 50 - }, - "UNALLOCATED_15_STOP": { - "id": 51 - }, - "UNALLOCATED_16": { - "id": 52 - }, - "UNALLOCATED_16_STOP": { - "id": 53 - }, - "UNALLOCATED_17": { - "id": 54 - }, - "UNALLOCATED_17_STOP": { - "id": 55 - }, - "UNALLOCATED_18": { - "id": 56 - }, - "UNALLOCATED_18_STOP": { - "id": 57 - }, - "UNALLOCATED_19": { - "id": 58 - }, - "UNALLOCATED_19_STOP": { - "id": 59 - }, - "UNALLOCATED_20": { - "id": 60 - }, - "UNALLOCATED_20_STOP": { - "id": 61 - }, - "UNALLOCATED_21": { - "id": 62 - }, - "UNALLOCATED_21_STOP": { - "id": 63 - }, - "UNKNOWN_PARAMETER": { - "id": 64 - }, - "LOCALE_UNDEFINED": { - "id": 65 - }, - "NO_SUCH_ALARM": { - "id": 66 - }, - "OUT_OF_RANGE": { - "id": 67 - }, - "NOT_IMPLEMENTED": { - "id": 68 - }, - "BAD_CONFIG": { - "id": 69 - }, - "DID_NOT_STORE": { - "id": 70 - }, - "STORE_PENDING": { - "id": 71 - }, - "STRING_TOO_LONG": { - "id": 72 - }, - "TEST_PENDING": { - "id": 73 - }, - "TEST_STARTED": { - "id": 74 - }, - "TEST_OK_SKELETON": { - "id": 75 - }, - "TEST_OK": { - "id": 76 - }, - "DID_NOT_TEST": { - "id": 77 - } - } - }, - "FLEXNETSERIAL": { - "id": 26, - "version": { - "first": 1, - "last": 24 - }, - "registers": { - "UpgState": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "General UPG states.", - "version": { - "first": 2, - "last": 24 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Can be ignored, temporarily for FW upgrade.", - "region": { - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FwdlState": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Specifies the Bootloader State of operation.", - "version": { - "first": 2, - "last": 24 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Can be ignored, temporarily for FW upgrade.", - "region": { - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - } - }, - "status": { - "UNKNOWN_PARAMETER": { - "id": 0 - }, - "TOO_MANY_APPS": { - "id": 1 - } - } - }, - "FLEXNETVERSION": { - "id": 24, - "version": { - "first": 1, - "last": 9999 - } - }, - "FUNCTEST": { - "id": 10, - "version": { - "first": 0, - "last": 1003 - }, - "registers": { - "GP30Test": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "GP30 test to run.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "LCDTest": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "LCD test to run.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "Iloop": { - "id": 2, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test not supported.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "Pulse": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test not supported.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "Pressure": { - "id": 4, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test the pressure sensor.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "BatteryVoltage": { - "id": 5, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Read CPU Vbat.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "SupplyVoltage": { - "id": 6, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Read CPU Vcc.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "Temperature": { - "id": 7, - "details": [ - { - "type": "int16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Read CPU Temperature.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "RFID": { - "id": 8, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test not supported.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "OpticalOutput": { - "id": 9, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test the pulse output LED.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "Radio": { - "id": 10, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test the Radio at basic SPI level.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "MultiTest": { - "id": 11, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Run a list of basic tests and display results on LCD.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "NFCUID": { - "id": 12, - "details": [ - { - "type": "uint64_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Return the UID uint8_t array as a uint64_t.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - }, - "CPUTest": { - "id": 13, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Test various aspects of the CPU.", - "version": { - "first": 0, - "last": 1003 - }, - "statictype": null - } - ] - } - }, - "status": { - "BAD_CONFIG": { - "id": 0 - }, - "BAD_TEST": { - "id": 1 - }, - "NO_RESULT": { - "id": 2 - } - } - }, - "GENESISFLOW": { - "id": 15, - "version": { - "first": 7, - "last": 606 - }, - "registers": { - "SampleRate": { - "id": 0, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate in Hz that each GP30 takes measurements", - "version": { - "first": 7, - "last": 203 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate in Hz that each GP30 takes measurements", - "version": { - "first": 204, - "last": 267 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate in Hz that each GP30 takes measurements", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 2 - } - }, - "na": { - "values": { - "default": 2 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate in Hz that each GP30 takes measurements", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate in Hz that each GP30 takes measurements", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate in Hz that each GP30 takes measurements", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "FirstHitLvlUp1": { - "id": 1, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - } - ] - }, - "FirstHitLvlUp2": { - "id": 2, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - } - ] - }, - "FirstHitLvlUp3": { - "id": 3, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - } - ] - }, - "FirstHitLvlDown1": { - "id": 4, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - } - ] - }, - "FirstHitLvlDown2": { - "id": 5, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - } - ] - }, - "FirstHitLvlDown3": { - "id": 6, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": -128, - "maximum": 127 - }, - "statictype": "dynamic" - } - ] - }, - "StartHit": { - "id": 7, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The hit number to consider as the first hit", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The hit number to consider as the first hit", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "Default is 6 and it should stay as 6 for all sizes.", - "region": { - "emea": { - "values": { - "default": 6 - } - }, - "na": { - "values": { - "default": 6 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The hit number to consider as the first hit", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The hit number to consider as the first hit", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The hit number to consider as the first hit", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "AmplitudePeakDetectEnd": { - "id": 8, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Where to stop running the amplitude peak detection", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 19, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Where to stop running the amplitude peak detection", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 19, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "Not expecting to change this unless field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Where to stop running the amplitude peak detection", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 19, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Where to stop running the amplitude peak detection", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 19, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Where to stop running the amplitude peak detection", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 19, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "NumFirePulses": { - "id": 9, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of pulses to fire for a measurement", - "version": { - "first": 7, - "last": 267 - }, - "values": { - "default": 17, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of pulses to fire for a measurement", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 17, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "Not expecting to change this unless field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of pulses to fire for a measurement", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 17, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of pulses to fire for a measurement", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 17, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of pulses to fire for a measurement", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 17, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "DisplayPow10": { - "id": 10, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", - "version": { - "first": 36, - "last": 267 - }, - "values": { - "default": -6, - "minimum": -128, - "maximum": 127 - }, - "statictype": "static" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": -6, - "minimum": -128, - "maximum": 127 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "(<=125 = 3n ) 150=> 2n in m³ -> what about other Units. See Display Unit Customer Specification.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": -6, - "minimum": -128, - "maximum": 127 - }, - "statictype": "static" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": -6, - "minimum": -128, - "maximum": 127 - }, - "statictype": "static" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": -6, - "minimum": -128, - "maximum": 127 - }, - "statictype": "static" - } - ] - }, - "DisplayUnits": { - "id": 11, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", - "version": { - "first": 36, - "last": 267 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Same units for each calculator. Vako.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - } - ] - }, - "MeterSize": { - "id": 12, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The meter pipe size", - "version": { - "first": 45, - "last": 237 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 9 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The meter pipe size", - "version": { - "first": 238, - "last": 267 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 17 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The meter pipe size", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 17 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Base No. (4th digit G=50, ...) or B01 Nominal diameter (DN) (DN50, ...).", - "region": { - "emea": { - "values": { - "DN40": 0, - "DN50": 1, - "DN65": 2, - "DN80": 3, - "DN100": 4, - "DN125": 5, - "DN150": 6, - "DN200": 7, - "DN250": 8, - "DN300": 9 - } - }, - "na": { - "values": { - "US1_5": 10, - "US2": 11, - "US3": 12, - "US4": 13, - "US6": 14, - "US8": 15, - "US10": 16, - "US12": 17 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The meter pipe size", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 17 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The meter pipe size", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 17 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The meter pipe size", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 17 - }, - "statictype": "static" - } - ] - }, - "CalFactor1": { - "id": 13, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 1", - "version": { - "first": 45, - "last": 200 - }, - "values": { - "default": 62500, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 1", - "version": { - "first": 201, - "last": 267 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 1", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 1", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 1", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 1", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - } - ] - }, - "CalFactor2": { - "id": 14, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 2", - "version": { - "first": 45, - "last": 200 - }, - "values": { - "default": 62500, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 2", - "version": { - "first": 201, - "last": 267 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 2", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 2", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 2", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 2", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - } - ] - }, - "CalFactor3": { - "id": 15, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 3", - "version": { - "first": 45, - "last": 200 - }, - "values": { - "default": 62500, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 3", - "version": { - "first": 201, - "last": 267 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 3", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 3", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 3", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration factor for ultrasonic channel 3", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 15625, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - } - ] - }, - "ZeroOffset1": { - "id": 16, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in usual time of flight scaling (ie LS bit is 2^-38 seconds)", - "version": { - "first": 45, - "last": 132 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 133, - "last": 267 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Seconds: convert time in 2^-38 seconds...", - "units": "s", - "scale_float_mult": 1.0, - "scale_power_2": -38, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - } - ] - }, - "ZeroOffset2": { - "id": 17, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in usual time of flight scaling (ie LS bit is 2^-38 seconds)", - "version": { - "first": 45, - "last": 132 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 133, - "last": 267 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Seconds: convert time in 2^-38 seconds...", - "units": "s", - "scale_float_mult": 1.0, - "scale_power_2": -38, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - } - ] - }, - "ZeroOffset3": { - "id": 18, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in usual time of flight scaling (ie LS bit is 2^-38 seconds)", - "version": { - "first": 45, - "last": 132 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 133, - "last": 267 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Seconds: convert time in 2^-38 seconds...", - "units": "s", - "scale_float_mult": 1.0, - "scale_power_2": -38, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - } - ] - }, - "ScaledBilling": { - "id": 19, - "details": [ - { - "type": "int64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", - "version": { - "first": 47, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - }, - { - "type": "int64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "int64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "int64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "ResetAccumulators": { - "id": 20, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "WO", - "lvl2": "WO", - "lvl3": "WO", - "lvl4": "WO", - "lvl5": "WO", - "lvl6": "WO", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write 1 to reset all accumulated volume to zero", - "version": { - "first": 47, - "last": 267 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write 1 to reset all accumulated volume to zero", - "version": { - "first": 268, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "You will need this if you wish to reset the volume to zero at the end of calibration.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write 1 to reset all accumulated volume to zero", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write 1 to reset all accumulated volume to zero", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write 1 to reset all accumulated volume to zero", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "ForwardArrow": { - "id": 21, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", - "version": { - "first": 47, - "last": 267 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 2 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 2 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "default": 1 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 2 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 2 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 2 - }, - "statictype": "infrequentlyupdated" - } - ] - }, - "LedMode": { - "id": 22, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The type of data output by the green LED", - "version": { - "first": 47, - "last": 203 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The type of data output by the green LED", - "version": { - "first": 204, - "last": 267 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The type of data output by the green LED", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The type of data output by the green LED", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The type of data output by the green LED", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The type of data output by the green LED", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - } - ] - }, - "StoreCalibration": { - "id": 23, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", - "version": { - "first": 54, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "You will need to use this during calibration.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "UnscaledFwd": { - "id": 24, - "details": [ - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 54, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The forward flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "UnscaledRev": { - "id": 25, - "details": [ - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The reverse flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 54, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The reverse flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The reverse flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The reverse flow accumulator volume. The scale depends on the meter size", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "LowFlowThreshold": { - "id": 26, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", - "version": { - "first": 55, - "last": 267 - }, - "values": { - "default": 200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Cubic Meters: conversion of the volume volume in ml ...", - "units": "m^3", - "scale_float_mult": 1.0, - "scale_power_2": 0, - "scale_power_10": -6, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "Default for other DN (200 -> DN50).", - "region": { - "emea": { - "values": { - "DN40": 200, - "DN50": 200, - "DN65": 333, - "DN80": 550, - "DN100": 900, - "DN125": "TBD", - "DN150": 2000, - "DN200": 800, - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US1_5": 200, - "US2": 200, - "US3": 550, - "US4": 900, - "US6": 1833, - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "LowFlowMaxPeriod": { - "id": 27, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", - "version": { - "first": 55, - "last": 267 - }, - "values": { - "default": 3932160, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Seconds: time in 2^-16 seconds ...", - "units": "s", - "scale_float_mult": 1.0, - "scale_power_2": -16, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 3932160, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "Default for other DN (3932160 -> DN50).", - "region": { - "emea": { - "values": { - "default": 3932160 - } - }, - "na": { - "values": { - "default": 3932160 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 3932160, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 3932160, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 3932160, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "UpdateThreshold": { - "id": 28, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", - "version": { - "first": 55, - "last": 267 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "I doubt this will be used. It is to allow less frequent LCD updates if so desired but we're fine.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "ArrowThreshold": { - "id": 29, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", - "version": { - "first": 55, - "last": 267 - }, - "values": { - "default": 5000000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 5000000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Default for other DN (J.S.: 2000000-> DN50)", - "region": { - "emea": { - "values": { - "default": 2000000, - "DN125": "TBD", - "DN250": "TBD", - "DN300": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 5000000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 5000000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 5000000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "FireBuffer1": { - "id": 30, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 1 to be used", - "version": { - "first": 64, - "last": 267 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 1 to be used", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Not expecting to change this unless field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 1 to be used", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 1 to be used", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 1 to be used", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "FireBuffer2": { - "id": 31, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 2 to be used", - "version": { - "first": 64, - "last": 267 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 2 to be used", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Not expecting to change this unless field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 2 to be used", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 2 to be used", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 2 to be used", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "FireBuffer3": { - "id": 32, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 3 to be used", - "version": { - "first": 64, - "last": 267 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 3 to be used", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Not expecting to change this unless field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 3 to be used", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 3 to be used", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The fire buffer within the GP30 on channel 3 to be used", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "TriggerActive": { - "id": 33, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "WO", - "lvl2": "WO", - "lvl3": "WO", - "lvl4": "WO", - "lvl5": "WO", - "lvl6": "WO", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", - "version": { - "first": 75, - "last": 267 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", - "version": { - "first": 268, - "last": 306 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", - "version": { - "first": 307, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "You will need this if you use TriggerIdle or TriggerTest", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "TriggerIdle": { - "id": 34, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", - "version": { - "first": 75, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "This was asked for so the battery usage could be minimised in manufacture so I expect it'll be used there.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic" - } - ] - }, - "MaxValidDeltaToF": { - "id": 35, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 87, - "last": 267 - }, - "values": { - "default": 247390, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Seconds: time in 2^-38 seconds ...", - "units": "s", - "scale_float_mult": 1.0, - "scale_power_2": -38, - "scale_power_10": 0, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 309237, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "247390 <-DN50 - default for other DN?", - "region": { - "emea": { - "values": { - "DN40": 247390, - "DN50": 247390, - "DN65": 402008, - "DN80": 494779, - "DN100": 618474, - "DN125": "TBD", - "DN150": 439804, - "DN200": 1236948, - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US1_5": 1855422, - "US2": 1855422, - "US3": 494779, - "US4": 618474, - "US6": 439804, - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 309237, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 309237, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 309237, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "MaxValidToF": { - "id": 36, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 87, - "last": 267 - }, - "values": { - "default": 24739011, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 24739011, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "<-DN50 - default for other DN?", - "region": { - "emea": { - "values": { - "DN40": 24739011, - "DN50": 24739011, - "DN65": 32160714, - "DN80": 39582418, - "DN100": 49478022, - "DN125": "TBD", - "DN150": 46729244, - "DN200": 98956044, - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US1_5": 24739011, - "US2": 24739011, - "US3": 39582418, - "US4": 49478022, - "US6": 46729244, - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 24739011, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 24739011, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 24739011, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "MinValidToF": { - "id": 37, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 87, - "last": 267 - }, - "values": { - "default": 13743895, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 13743895, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "<-DN50 - default for other DN?", - "region": { - "emea": { - "values": { - "DN40": 13743895, - "DN50": 13743895, - "DN65": 13743895, - "DN80": 21990232, - "DN100": 27487790, - "DN125": "TBD", - "DN150": 30236569, - "DN200": 54975580, - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US1_5": 13743895, - "US2": 13743895, - "US3": 21990232, - "US4": 27487790, - "US6": 30236569, - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 13743895, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 13743895, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 13743895, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "FirstHitPercent1": { - "id": 38, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", - "version": { - "first": 93, - "last": 267 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "FirstHitPercent2": { - "id": 39, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", - "version": { - "first": 93, - "last": 267 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "FirstHitPercent3": { - "id": 40, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", - "version": { - "first": 93, - "last": 267 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "FirstHitShift": { - "id": 41, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", - "version": { - "first": 93, - "last": 267 - }, - "values": { - "default": 4, - "minimum": 3, - "maximum": 8 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 4, - "minimum": 3, - "maximum": 8 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 4, - "minimum": 3, - "maximum": 8 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 4, - "minimum": 3, - "maximum": 8 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 4, - "minimum": 3, - "maximum": 8 - }, - "statictype": "static" - } - ] - }, - "FirstHitMinimum": { - "id": 42, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum absolute first hit level value", - "version": { - "first": 93, - "last": 267 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum absolute first hit level value", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "A limit for how small the first hit level can be set We don't expect this to change unless firled trials say it should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum absolute first hit level value", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum absolute first hit level value", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum absolute first hit level value", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 20, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "ToFErrorLimit": { - "id": 43, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", - "version": { - "first": 93, - "last": 267 - }, - "values": { - "default": 16, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 16, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "This allows us to avoid being stuck with a bad first hit level if conditions change. Not expecting to change it unless field trials show we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 16, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 16, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 16, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "FirstHitUpdatePeriod": { - "id": 44, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period (in seconds) between first hit level updates", - "version": { - "first": 99, - "last": 267 - }, - "values": { - "default": 10, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period (in seconds) between first hit level updates", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 10, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "Not expecting to change this unless field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period (in seconds) between first hit level updates", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 10, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period (in seconds) between first hit level updates", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 10, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period (in seconds) between first hit level updates", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 10, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "PipeFillingDelay": { - "id": 45, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", - "version": { - "first": 119, - "last": 267 - }, - "values": { - "default": 30, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 30, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "The amount of time after empty pipe that we stay in zero flow mode. Same as iPerl, not expected to be changed but could be if field trials say we should.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 30, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 30, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 30, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "ToFTempOffset1": { - "id": 46, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", - "version": { - "first": 124, - "last": 267 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - } - ] - }, - "ToFTempOffset2": { - "id": 47, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", - "version": { - "first": 124, - "last": 267 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - } - ] - }, - "ToFTempOffset3": { - "id": 48, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", - "version": { - "first": 124, - "last": 267 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated" - } - ] - }, - "ToFTempCalibrate": { - "id": 49, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "WO", - "lvl2": "WO", - "lvl3": "WO", - "lvl4": "WO", - "lvl5": "WO", - "lvl6": "WO", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", - "version": { - "first": 124, - "last": 204 - }, - "values": { - "minimum": 0, - "maximum": 270336 - }, - "statictype": "dynamic" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", - "version": { - "first": 205, - "last": 322 - }, - "values": { - "minimum": 0, - "maximum": 286720 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "minimum": 0, - "maximum": 286720 - }, - "statictype": "dynamic" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "minimum": 0, - "maximum": 286720 - }, - "statictype": "dynamic" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "minimum": 0, - "maximum": 286720 - }, - "statictype": "dynamic" - } - ] - }, - "StoreConfiguration": { - "id": 50, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 141, - "last": 267 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 268, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "You do need to use this if you change any parameters in GENESISFLOW and want to keep them.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 450, - "last": 463 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 500, - "last": 509 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 601, - "last": 606 - }, - "statictype": "dynamic" - } - ] - }, - "SealDisplay": { - "id": 51, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", - "version": { - "first": 161, - "last": 267 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "roland.drabesch@xylem.com" - ], - "remarks": "Display should be sealed at end of manufacture (EMEA only).", - "region": { - "emea": { - "values": { - "default": 1 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - } - ] - }, - "TriggerTest": { - "id": 52, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", - "version": { - "first": 162, - "last": 267 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "dynamic" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "dynamic" - } - ] - }, - "MaxValidAmplitude": { - "id": 53, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Maximum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 168, - "last": 267 - }, - "values": { - "default": 2936012800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Maximum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 268, - "last": 322 - }, - "si_transform": { - "remarks": "Volts: voltage in 2^-22 millivolts ...", - "units": "v", - "scale_float_mult": 1.0, - "scale_power_2": -22, - "scale_power_10": -3, - "scale_float_div": 1.0, - "offset": 0 - }, - "values": { - "default": 2936012800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "629145600 <-DN50 - default for other DN?", - "region": { - "emea": { - "values": { - "default": 2936012800 - } - }, - "na": { - "values": { - "default": 2936012800 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Maximum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 2936012800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Maximum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 2936012800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Maximum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 2936012800, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "MinValidAmplitude": { - "id": 54, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 168, - "last": 267 - }, - "values": { - "default": 209715200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 209715200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "<-DN50 - default for other DN?", - "region": { - "emea": { - "values": { - "default": 629145600 - } - }, - "na": { - "values": { - "default": 629145600 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 209715200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 209715200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Minimum amplitude for a valid signal in 2^-22mV units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 209715200, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "HardErrorLimit": { - "id": 55, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of hard errors to allow before declaring a fatal error", - "version": { - "first": 176, - "last": 267 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of hard errors to allow before declaring a fatal error", - "version": { - "first": 268, - "last": 322 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "The number of hard errors before deciding a fatal error has occurred. This will probably only change in response to testing in the field.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of hard errors to allow before declaring a fatal error", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of hard errors to allow before declaring a fatal error", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Number of hard errors to allow before declaring a fatal error", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static" - } - ] - }, - "Timeout": { - "id": 56, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", - "version": { - "first": 273, - "last": 322 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "ben.davey@xylem.com" - ], - "remarks": "<-DN50 - default for other DN?", - "region": { - "emea": { - "values": { - "default": 1, - "DN100": [ - 1, - 2 - ], - "DN125": "TBD", - "DN200": 2, - "DN250": "TBD", - "DN300": 2 - } - }, - "na": { - "values": { - "default": 1, - "US4": "TBD", - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - } - ] - }, - "MaxDeltaToFDeviation": { - "id": 57, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", - "version": { - "first": 280, - "last": 322 - }, - "values": { - "default": 109951, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "0.4us for all meter sizes up to DN100, above that TBD. 0.4us is 109951 (0x1AD7F).", - "region": { - "emea": { - "values": { - "default": 109951, - "DN125": "TBD", - "DN200": "TBD", - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "default": 109951, - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", - "version": { - "first": 450, - "last": 463 - }, - "values": { - "default": 109951, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", - "version": { - "first": 500, - "last": 509 - }, - "values": { - "default": 109951, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 109951, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "MaxTempRange": { - "id": 58, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", - "version": { - "first": 289, - "last": 322 - }, - "values": { - "default": 8192, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 8192 - } - }, - "na": { - "values": { - "default": 8192 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", - "version": { - "first": 451, - "last": 463 - }, - "values": { - "default": 8192, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", - "version": { - "first": 504, - "last": 509 - }, - "values": { - "default": 8192, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 8192, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "MaxDeltaToFRange": { - "id": 59, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", - "version": { - "first": 289, - "last": 322 - }, - "values": { - "default": 137438, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "ben.davey@xylem.com" - ], - "remarks": "0.5us for all meter sizes. 0.5us is 137438 (0x218DE).", - "region": { - "emea": { - "values": { - "default": 137438 - } - }, - "na": { - "values": { - "default": 137438 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", - "version": { - "first": 451, - "last": 463 - }, - "values": { - "default": 137438, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", - "version": { - "first": 504, - "last": 509 - }, - "values": { - "default": 137438, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", - "version": { - "first": 601, - "last": 606 - }, - "values": { - "default": 137438, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - } - ] - }, - "LookupFileCrc": { - "id": 60, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Read for the current loaded lookup table CRC, write to set the expected CRC.", - "version": { - "first": 295, - "last": 322 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": "custom", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "mark.clemens@xylem.com" - ], - "remarks": "Will change with different releases - should be tracked elsewhere. meter_lut_202506270844_v0.19_crc_list.", - "region": { - "emea": { - "values": { - "DN40": 16549, - "DN50": 46338, - "DN65": 52673, - "DN80": 18061, - "DN100": 48372, - "DN125": 8134, - "DN150": 1637, - "DN200": 26376, - "DN250": 45341, - "DN300": 49157 - } - }, - "na": { - "values": { - "US1_5": 50785, - "US2": 58892, - "US3": 52036, - "US4": 50586, - "US6": 8010, - "US8": 52526, - "US10": 24406, - "US12": 11854 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - } - ] - }, - "DisplayLeadingZeros": { - "id": 61, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether to display leading zeros on row 2. If false leading zeros will be replaced with a space", - "version": { - "first": 302, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "This controls the temperature, pressure, flow rate readings on the smaller second row of digits. Previous code would display 012.3 C whereas with DisplayLeadingZeros set to 0 you’ll get _12.3 C (where the _ is actually just an empty space).", - "region": { - "emea": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - } - ] - }, - "InstallationCorrectionEnabled": { - "id": 62, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether the installation correction function is enabled or not", - "version": { - "first": 310, - "last": 318, - "exclude": [ - 315, - 316, - 317 - ] - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Installation detection / bend correction registers. Currently unreleased.", - "region": { - "emea": { - "values": { - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - } - ] - }, - "InstallationDetectionThreshold": { - "id": 63, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The threshold in ml for deciding on the meter installation", - "version": { - "first": 310, - "last": 318, - "exclude": [ - 315, - 316, - 317 - ] - }, - "values": { - "default": 500, - "minimum": 0, - "maximum": 10000000 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Installation detection / bend correction registers. Currently unreleased.", - "region": { - "emea": { - "values": { - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - } - ] - }, - "InstallationType": { - "id": 64, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The detected installation type, MS 16 bits is the type of installation, LS 16 bits is the proportion of correction to apply", - "version": { - "first": 310, - "last": 318, - "exclude": [ - 315, - 316, - 317 - ] - }, - "values": { - "minimum": 0, - "maximum": 163840 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Installation detection / bend correction registers. Currently unreleased.", - "region": { - "emea": { - "values": { - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "InstallationDetectionStatus": { - "id": 65, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Installation detection percentage complete, returns 100 if installation detection isn't running", - "version": { - "first": 310, - "last": 318, - "exclude": [ - 315, - 316, - 317 - ] - }, - "values": { - "minimum": 0, - "maximum": 100 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Installation detection / bend correction registers. Currently unreleased.", - "region": { - "emea": { - "values": { - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "US8": "TBD", - "US10": "TBD", - "US12": "TBD" - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FractionalBars": { - "id": 66, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether to display bars above the fractional digits on the LCD (if supported)", - "version": { - "first": 311, - "last": 321, - "exclude": [ - 315, - 316, - 317, - 319, - 320 - ] - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Probably customer specific in EMEA should always be false in NA.", - "region": { - "emea": { - "values": { - "DN250": "TBD", - "DN300": "TBD" - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - } - ] - }, - "CalibrationCount": { - "id": 67, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "A count of the relevant calibration values, for internal use", - "version": { - "first": 313, - "last": 322 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Internal use only, ignore.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "DelayedLedOff": { - "id": 68, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "WO", - "lvl6": "WO", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write the number of seconds in the future to turn off the LED output. This countdown will be cancelled if LedMode is changed during the delay.", - "version": { - "first": 314, - "last": 322 - }, - "values": { - "minimum": 0, - "maximum": 28800 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Enhancement for ensuring LED is off after metrology testing, useful to add to test software for GenesisFlow versions 3.16 and newer (not released yet June 2024).", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "DisplayVolumeRow2": { - "id": 69, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether or not to display the fractional digits of the volume as part of the row 2 carousel. Be aware this could change the scaling of the volume calculation if more decimal places now need calculating", - "version": { - "first": 322, - "last": 322 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "TBD", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "ro-check" - } - } - ] - } - }, - "status": { - "BAD_TEST": { - "id": 0 - }, - "BAD_CONFIG": { - "id": 1 - }, - "DID_NOT_STORE": { - "id": 2 - }, - "STORE_PENDING": { - "id": 3 - }, - "STORE_BUFFER_SIZE": { - "id": 4 - }, - "STRING_TOO_LONG": { - "id": 5 - }, - "BAD_DISPLAY_MODE": { - "id": 6 - }, - "GLASS_TOO_LONG": { - "id": 7 - }, - "SLOT_NOT_YOURS": { - "id": 8 - }, - "SUBLIST_TOO_LONG": { - "id": 9 - }, - "NO_TEMP_SENSOR": { - "id": 10 - }, - "UNDER_TEMP": { - "id": 11 - }, - "LOW_TEMP_WARNING": { - "id": 12 - }, - "HIGH_TEMP_WARNING": { - "id": 13 - }, - "OVER_TEMP": { - "id": 14 - }, - "MISMATCHING_LSB": { - "id": 15 - }, - "OUT_OF_RANGE_PWDIFF": { - "id": 16 - }, - "OUT_OF_RANGE_AMPLITUDE": { - "id": 17 - }, - "OUT_OF_RANGE_TOF": { - "id": 18 - }, - "OUT_OF_RANGE_DTOF": { - "id": 19 - }, - "TOF_TIMEOUT": { - "id": 20 - }, - "CAL_CHANGE": { - "id": 21 - }, - "OUT_OF_RANGE_INTERVAL": { - "id": 22 - }, - "VALIDATE_FAIL": { - "id": 23 - }, - "OUT_OF_RANGE_TEMP": { - "id": 24 - }, - "NOT_READY": { - "id": 25 - }, - "METROLOGY_ERROR": { - "id": 26 - }, - "GP30_ID_ERROR": { - "id": 27 - }, - "GP30_FLAG_ERROR": { - "id": 28 - }, - "GP30_TIMEOUT_ERROR": { - "id": 29 - }, - "GP30_REQUEST_ERROR": { - "id": 30 - }, - "GP30_SEQ_ERROR": { - "id": 31 - }, - "VALUE_SEALED": { - "id": 32 - }, - "IN_TEST_MODE": { - "id": 33 - }, - "UNKNOWN_STATE": { - "id": 34 - }, - "DISPLAY_INIT_SUCCEEDED": { - "id": 35 - }, - "DISPLAY_INIT_FAILED": { - "id": 36 - }, - "GP30_INIT_FAILED": { - "id": 37 - }, - "START_TIMER_SUCCEEDED": { - "id": 38 - }, - "START_TIMER_FAILED": { - "id": 39 - }, - "VOLUME_STORE_FAILED": { - "id": 40 - }, - "EMPTY_PIPE": { - "id": 41 - }, - "PARAMETER_ERROR": { - "id": 42 - }, - "GP30_INTERNAL_ERROR": { - "id": 43 - }, - "GLASS_TOO_SHORT": { - "id": 44 - }, - "STORE_CAL_FAILED": { - "id": 45 - }, - "STORE_CONF_FAILED": { - "id": 46 - }, - "MODE_CHANGE": { - "id": 47 - }, - "BAD_POW10": { - "id": 48 - }, - "BAD_DECIMAL_SEPARATOR": { - "id": 49 - }, - "BAD_UNITS": { - "id": 50 - }, - "BAD_ICONS": { - "id": 51 - }, - "BAD_THOUSAND_SEPARATOR": { - "id": 52 - }, - "NEW_LOCALE_REJECTED": { - "id": 53 - }, - "SET_ACCUMULATORS": { - "id": 54 - }, - "SEAL_OPENED": { - "id": 55 - }, - "CALIBRATION_RECALL_INCOMPLETE": { - "id": 56 - }, - "BAD_AMR_SETTINGS": { - "id": 57 - }, - "SUSPECT_CYCLE_SKIP": { - "id": 58 - }, - "LOOKUP_FILE_LOADED": { - "id": 59 - }, - "LOOKUP_FILE_METERSIZE_CHANGED": { - "id": 60 - }, - "LOOKUP_FILE_FAILURE": { - "id": 61 - }, - "LOOKUP_FILE_INVALID": { - "id": 62 - }, - "LOOKUP_CRC_MISMATCH": { - "id": 63 - }, - "LOOKUP_FILE_UNKNOWN_METERSIZE": { - "id": 64 - }, - "INSTALLATION_HIGH_TIME_DIFF": { - "id": 65 - }, - "INSTALLATION_LOW_FLOW_IGNORE": { - "id": 66 - }, - "INSTALLATION_BAD_CHANNELS": { - "id": 67 - }, - "INSTALLATION_FIXED": { - "id": 68 - } - } - }, - "HISTOGRAM": { - "id": 27, - "version": { - "first": 1, - "last": 4 - }, - "registers": {} - }, - "IRDA": { - "id": 20, - "version": { - "first": 10, - "last": 213 - }, - "registers": { - "PulseReportRate": { - "id": 0, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate at which pulse reports are sent to the IrDA pulse adapter", - "version": { - "first": 10, - "last": 97 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate at which pulse reports are sent to the IrDA pulse adapter", - "version": { - "first": 98, - "last": 136 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The rate at which pulse reports are sent to the IrDA pulse adapter", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "1 sec.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AdapterPresenceLimit": { - "id": 1, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", - "version": { - "first": 18, - "last": 28 - }, - "values": { - "default": 1, - "minimum": 1, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", - "version": { - "first": 29, - "last": 97 - }, - "values": { - "default": 3, - "minimum": 1, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", - "version": { - "first": 98, - "last": 136 - }, - "values": { - "default": 3, - "minimum": 1, - "maximum": 255 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 3, - "minimum": 1, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 3 - } - }, - "na": { - "values": { - "default": 3 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseSequence": { - "id": 2, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The present sequence number used in pulse reports", - "version": { - "first": 26, - "last": 97 - }, - "values": { - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The present sequence number used in pulse reports", - "version": { - "first": 98, - "last": 114 - }, - "values": { - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The present sequence number used in pulse reports", - "version": { - "first": 115, - "last": 136 - }, - "values": { - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The present sequence number used in pulse reports", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "StoreConfiguration": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 26, - "last": 97 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 98, - "last": 136 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 161, - "last": 213 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "You do need to use this if you change any parameters in IRDA and want to keep them.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "AMRDigits": { - "id": 4, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of digits to use for AMR", - "version": { - "first": 40, - "last": 52 - }, - "values": { - "default": 9, - "minimum": 0, - "maximum": 9 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of digits to use for AMR", - "version": { - "first": 53, - "last": 97 - }, - "values": { - "default": 9, - "minimum": 0, - "maximum": 9 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of digits to use for AMR", - "version": { - "first": 98, - "last": 136 - }, - "values": { - "default": 8, - "minimum": 0, - "maximum": 9 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of digits to use for AMR", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 8, - "minimum": 0, - "maximum": 9 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Cordonel NA can use a subset of the display digits for AMR readings. This is the number of digits to use.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AMROffset": { - "id": 5, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The offset of the AMR smallest digit from the right (always negative)", - "version": { - "first": 40, - "last": 97 - }, - "values": { - "default": 0, - "minimum": -9, - "maximum": 0 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The offset of the AMR smallest digit from the right (always negative)", - "version": { - "first": 98, - "last": 136 - }, - "values": { - "default": 0, - "minimum": -9, - "maximum": 0 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "int8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The offset of the AMR smallest digit from the right (always negative)", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 0, - "minimum": -9, - "maximum": 0 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Cordonel NA can use a subset of the display digits for AMR readings. This is the offset (from the right).", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "UI1203Fields": { - "id": 6, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A bitfield of the optional fields being used for UI-1203", - "version": { - "first": 40, - "last": 97 - }, - "values": { - "default": 268, - "minimum": 0, - "maximum": 268 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A bitfield of the optional fields being used for UI-1203", - "version": { - "first": 98, - "last": 136 - }, - "values": { - "default": 268, - "minimum": 0, - "maximum": 268 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A bitfield of the optional fields being used for UI-1203", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 268, - "minimum": 0, - "maximum": 268 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "These are the fields used in NA AMR reading strings.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "MfgDate": { - "id": 7, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A timestamp of meter manufacture in seconds since 1/1/2000 00:00:00 UTC", - "version": { - "first": 43, - "last": 136 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "time_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A timestamp of meter manufacture in seconds since 1/1/2000 00:00:00 UTC", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Simple timestamp, should be filled in at the end of manufacture. Time now.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "DisplayAMRDigits": { - "id": 8, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether or not to display AMR digits on the screen", - "version": { - "first": 92, - "last": 97 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether or not to display AMR digits on the screen", - "version": { - "first": 98, - "last": 136 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "infrequentlyupdated" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether or not to display AMR digits on the screen", - "version": { - "first": 161, - "last": 213 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "In NA the AMR digits should be displayed on the LCD periodically, in EMEA they shouldn't.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AdapterID": { - "id": 9, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The serial number of the current pulse adapter", - "version": { - "first": 193, - "last": 213 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "AdapterFwVersion": { - "id": 10, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The firmware version of the current pulse adapter", - "version": { - "first": 193, - "last": 213 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "ExtendedResolution": { - "id": 11, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Boolean controlled by UI-1236 to control resolution of cubic feet unit in some meter size", - "version": { - "first": 210, - "last": 213 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Internal use in firmware only.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - } - }, - "status": { - "BAD_CONFIG": { - "id": 0 - }, - "BAD_LENGTH": { - "id": 1 - }, - "OUT_OF_RANGE": { - "id": 2 - }, - "PENDING_STORE": { - "id": 3 - }, - "DID_NOT_STORE": { - "id": 4 - }, - "TOO_MANY_BYTES": { - "id": 5 - } - } - }, - "LOGGER": { - "id": 8, - "version": { - "first": 1, - "last": 19 - }, - "registers": { - "Quota": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A quota in bytes for the log. The Logger does not apply any policy to how the quota is allocated, this is left as a restriction to be applied on a product by product basis.", - "version": { - "first": 1, - "last": 19 - }, - "values": { - "default": 4096, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Drive": { - "id": 1, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The drive to write to.", - "version": { - "first": 1, - "last": 19 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TriggerLogFlush": { - "id": 2, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Writing TRUE will force a log flush", - "version": { - "first": 7, - "last": 19 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "StoreConfiguration": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 16, - "last": 19 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "You do need to use this if you change any parameters in LOGGER and want to keep them.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - } - }, - "status": { - "UNKNOWN_PARAMETER": { - "id": 0 - }, - "RESTARTED": { - "id": 1 - }, - "BLOCK_LISTING": { - "id": 2 - }, - "PENDING_STORE": { - "id": 3 - }, - "DID_NOT_STORE": { - "id": 4 - } - } - }, - "METROLOGYASST": { - "id": 18, - "version": { - "first": 4, - "last": 118 - }, - "registers": { - "ILoopMaxFlowRate": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The flow rate that gives max output on the current loop", - "version": { - "first": 5, - "last": 36 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The flow rate that gives max output on the current loop", - "version": { - "first": 82, - "last": 118 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Ignore, no current loop.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "StoreConfiguration": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Writing TRUE to this register stores the values of the other registers to the non-volatile memory", - "version": { - "first": 7, - "last": 81 - }, - "statictype": "dynamic" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Writing TRUE to this register stores the values of the other registers to the non-volatile memory", - "version": { - "first": 82, - "last": 118 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "You do need to use this if you change any parameters in METROLOGYASST and want to keep them.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "PulseWeight": { - "id": 2, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Volume represented by one pulse in ml. If this is zero pulse output will not be enabled", - "version": { - "first": 7, - "last": 81 - }, - "values": { - "default": 1000, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Volume represented by one pulse in ml. If this is zero pulse output will not be enabled", - "version": { - "first": 82, - "last": 101 - }, - "values": { - "default": 1000, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Volume represented by one pulse. Units of (2^-5)ml. If this is zero pulse output will not be enabled", - "version": { - "first": 102, - "last": 118 - }, - "values": { - "default": 32000, - "minimum": 1, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "G01 Pulse value (100 l/Imp., ...). Customer specific.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseMode": { - "id": 3, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.", - "version": { - "first": 7, - "last": 81 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.", - "version": { - "first": 82, - "last": 97 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 6 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.", - "version": { - "first": 98, - "last": 118 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 7 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "G02 Pulse type (Netted Imp./Tamp. (-), …). Customer specific.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseLength": { - "id": 4, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The length of a pulse. This is an enum of type pulse_length_t.", - "version": { - "first": 7, - "last": 72 - }, - "values": { - "default": 5, - "minimum": 0, - "maximum": 8 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The length of a pulse. This is an enum of type pulse_length_t.", - "version": { - "first": 73, - "last": 81 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 8 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The length of a pulse. This is an enum of type pulse_length_t.", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 10 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "G03 Pulse length (500ms, …). Customer specific.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FlowUnits": { - "id": 5, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of flow rate to display on the LCD. An enum of type displayflowunits_t", - "version": { - "first": 8, - "last": 81 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 8 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The units of flow rate to display on the LCD. An enum of type displayflowunits_t", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 8 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "C05 unit (m³, kl, US-Gall./Imp.-Gall, Barrel, ...)", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FlowPoint": { - "id": 6, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Position of the decimal point on the LCD for flow rate. An enum of type displayflowpoint_t", - "version": { - "first": 8, - "last": 81 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 4 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Position of the decimal point on the LCD for flow rate. An enum of type displayflowpoint_t", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 4 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Counter size and unit. See FlowPoint.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ILoopRate": { - "id": 7, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The update rate for the current loop", - "version": { - "first": 9, - "last": 36 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The update rate for the current loop", - "version": { - "first": 82, - "last": 118 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Ignore, no current loop.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "TemperatureUnits": { - "id": 8, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Units for displaying temperature on the LCD. 0 is Celcius, 1 is Fahrenheit.", - "version": { - "first": 13, - "last": 81 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Units for displaying temperature on the LCD. 0 is Celcius, 1 is Fahrenheit.", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "°C - EMEA/China / °F - USA.", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "default": 1 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureUnits": { - "id": 9, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Units for displaying pressure on the LCD. 0 is Mpa, 1 is PSI.", - "version": { - "first": 13, - "last": 81 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - }, - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Units for displaying pressure on the LCD. 0 is Mpa, 1 is PSI.", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "Mpa - EMEA/China / PSI - USA / Bar - USA.", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "custom": [ - 1, - 2 - ] - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureRate": { - "id": 10, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time between pressure measurements in milliseconds", - "version": { - "first": 13, - "last": 71 - }, - "values": { - "default": 300000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time between pressure measurements in milliseconds", - "version": { - "first": 72, - "last": 81 - }, - "values": { - "default": 60000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time between pressure measurements in milliseconds", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 60000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 60000 - } - }, - "na": { - "values": { - "default": 60000 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureOffset": { - "id": 11, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", - "version": { - "first": 13, - "last": 58 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", - "version": { - "first": 59, - "last": 79 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", - "version": { - "first": 80, - "last": 81 - }, - "values": { - "default": 0, - "minimum": -2000000, - "maximum": 2000000 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", - "version": { - "first": 82, - "last": 118 - }, - "values": { - "default": 0, - "minimum": -2000000, - "maximum": 2000000 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "-> 0", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressurePresent": { - "id": 12, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether there is a pressure sensor present", - "version": { - "first": 63, - "last": 70 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static" - }, - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Whether there is a pressure sensor present", - "version": { - "first": 71, - "last": 118 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com" - ], - "remarks": "B09 Housing option (D,Y). Variant specific.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureMeasure": { - "id": 13, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write TRUE to trigger a pressure measurement, Read to get the latest measured value in Pa", - "version": { - "first": 65, - "last": 118 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "LatestFlowRate": { - "id": 14, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Returns the latest flow rate. Write 0 to change scaling to internal scaling, 1 to change to display scaling", - "version": { - "first": 92, - "last": 118 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "GenerateFwdPulses": { - "id": 15, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Generate some artificial pulses, used for testing", - "version": { - "first": 97, - "last": 118 - }, - "values": { - "minimum": 0, - "maximum": 255 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "For use in testing.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "GenerateRevPulses": { - "id": 16, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Generate some artificial pulses, used for testing", - "version": { - "first": 97, - "last": 118 - }, - "values": { - "minimum": 0, - "maximum": 255 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "For use in testing.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PulseEvenDistribution": { - "id": 17, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Boolean value for whether pulse output is to space the pulses evenly (TRUE) or grouped (FALSE)", - "version": { - "first": 98, - "last": 118 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 1, - "DN300": 0 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseResolution": { - "id": 18, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The number of bits of fractional resolution in a pulse event", - "version": { - "first": 98, - "last": 118 - }, - "values": { - "minimum": 0, - "maximum": 7 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "Read only.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "PressureCalibration": { - "id": 19, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Value in Pa to add to measured value after recalibration to correct for sensor drift over time", - "version": { - "first": 108, - "last": 111 - }, - "values": { - "default": 0, - "minimum": -1000000, - "maximum": 1000000 - }, - "statictype": "static" - }, - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Value in Pa to add to measured value after recalibration to correct for sensor drift over time", - "version": { - "first": 112, - "last": 118 - }, - "values": { - "default": 0, - "minimum": -4000000, - "maximum": 4000000 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 0 - } - }, - "na": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "DisplayEnable": { - "id": 20, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RW", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bitfield of the items to show on the display. 1 - flowrate, 2 - temperature, 4 - pressure. Note, disabling flowrate requires reboot for it to take effect.", - "version": { - "first": 116, - "last": 118 - }, - "values": { - "default": 7, - "minimum": 0, - "maximum": 7 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "Customer specific, controls display of items on row 2. NOTE: In 1.4 stream this can be used to work around bug where pressure is displayed with no pressure sensor (CORDHW-3065).", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureFlowRateCorrectionA": { - "id": 21, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Pressure readings must be corrected due to the water flow rate. This is the correction factor that is applied to the flow rate squared (units Pa / (ml/s)^2). Write 0x80000000 to fall back to the internal lookup table based on meter size. The number read back is the value being used either from the intenal lookup or having been written to this register.", - "version": { - "first": 118, - "last": 118 - }, - "values": { - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "TBD", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureFlowRateCorrectionB": { - "id": 22, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Pressure readings must be corrected due to the water flow rate. This is the correction factor that is applied to the flow rate (units Pa / (ml/s)). Write 0x80000000 to fall back to the internal lookup table based on meter size. The number read back is the value being used either from the intenal lookup or having been written to this register.", - "version": { - "first": 118, - "last": 118 - }, - "values": { - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "TBD", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - } - }, - "status": { - "BAD_CONFIG": { - "id": 0 - }, - "DID_NOT_STORE": { - "id": 1 - }, - "PENDING_STORE": { - "id": 2 - } - } - }, - "NA2WALARMS": { - "id": 23, - "version": { - "first": 41, - "last": 102 - }, - "registers": { - "StoreConfiguration": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 41, - "last": 102 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "You do need to use this if you change any parameters in NA2WALARMS and want to keep them.", - "region": { - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "PredefEnable": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bitmask of enabled predefined alarms", - "version": { - "first": 41, - "last": 102 - }, - "values": { - "default": 561047, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "NA has a series of alarms called 'predefined' these are the ones that should be enabled.", - "region": { - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - } - }, - "status": { - "SENSOR_INVALID": { - "id": 0 - }, - "UNKNOWN_PARAMETER": { - "id": 1 - }, - "ALARM_INVALID": { - "id": 2 - }, - "UNIMPLEMENTED": { - "id": 3 - }, - "UNCONFIGURED": { - "id": 4 - }, - "CONFIG_INVALID": { - "id": 5 - }, - "NO_LATEST": { - "id": 6 - }, - "FIXED_TYPE": { - "id": 7 - }, - "PREDEF_SET": { - "id": 8 - }, - "USERDEF_VOLUME_SET": { - "id": 9 - }, - "USERDEF_TEMPERATURE_SET": { - "id": 10 - }, - "USERDEF_PRESSURE_SET": { - "id": 11 - }, - "PREDEF_CLEAR": { - "id": 12 - }, - "USERDEF_VOLUME_CLEAR": { - "id": 13 - }, - "USERDEF_TEMPERATURE_CLEAR": { - "id": 14 - }, - "USERDEF_PRESSURE_CLEAR": { - "id": 15 - }, - "DID_NOT_STORE": { - "id": 16 - }, - "STORE_PENDING": { - "id": 17 - }, - "PREDEF_BACKUP_FAILED": { - "id": 18 - }, - "PREDEF_RESTORE_FAILED": { - "id": 19 - }, - "USERDEF_BACKUP_FAILED": { - "id": 20 - }, - "USERDEF_RESTORE_FAILED": { - "id": 21 - }, - "USERDEF_UNSUPPORTED_TYPE_FOR_SENSOR": { - "id": 22 - } - } - }, - "NA2WLOGGER": { - "id": 22, - "version": { - "first": 1, - "last": 200 - }, - "registers": { - "StoreConfiguration": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "RW", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Store all configuration items in non-volatile memory.", - "version": { - "first": 147, - "last": 200 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "LimitLogSize": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Override the maximum number of entries per log (0 keeps default)", - "version": { - "first": 147, - "last": 200 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - } - }, - "status": { - "UNKNOWN_PARAMETER": { - "id": 1 - }, - "NOT_MAIN_LOOP": { - "id": 2 - }, - "LOG_INVALID": { - "id": 3 - }, - "LOG_OPEN_FAILED": { - "id": 4 - }, - "LOG_CLOSE_FAILED": { - "id": 5 - }, - "LOG_REMOVE_FAILED": { - "id": 6 - }, - "LOG_FLUSH_FAILED": { - "id": 7 - }, - "LOG_CLEAR_FAILED": { - "id": 8 - }, - "LOG_BAD_REQUEST": { - "id": 9 - }, - "LOG_BAD_LIMIT": { - "id": 10 - }, - "LOG_BUSY": { - "id": 11 - }, - "QUERY_FAILED": { - "id": 12 - }, - "QUERY_UNKNOWN_SENSOR": { - "id": 13 - }, - "QUERY_UNKNOWN_LOGFILE": { - "id": 14 - }, - "QUERY_BAD_ARGS": { - "id": 15 - }, - "QUERY_NOT_ENOUGH_SPACE": { - "id": 16 - }, - "QUERY_NO_RECORDS_FOUND": { - "id": 17 - }, - "QUERY_FILE_READ_PROBLEM": { - "id": 18 - }, - "SETTINGS_STORE_FAILED": { - "id": 19 - }, - "SETTINGS_BAD_SENSORID": { - "id": 20 - }, - "SETTINGS_BAD_PERIOD": { - "id": 21 - }, - "SETTINGS_BAD_CHECKSUM": { - "id": 22 - }, - "SETTINGS_BAD_TIMESTAMP": { - "id": 23 - }, - "FILING_BAD": { - "id": 24 - }, - "BAD_RECORD": { - "id": 25 - }, - "RANGE_SENSORID_BAD": { - "id": 26 - }, - "STORE_PENDING": { - "id": 27 - }, - "DID_NOT_STORE": { - "id": 28 - } - } - }, - "NFC": { - "id": 21, - "version": { - "first": 1, - "last": 65 - }, - "registers": { - "EraseRMA": { - "id": 0, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RW" - }, - "description": "Writing TRUE to this register erases the RMA area", - "version": { - "first": 7, - "last": 65 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "You may wish to do this at the end of manufacture to clear all the old data out.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "ForceUpdate": { - "id": 1, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Write to this to force an update of some data. 0 - NDEF readings, 1 - NDEF details, 2 - RMA details", - "version": { - "first": 49, - "last": 65 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - } - }, - "status": { - "BAD_CONFIG": { - "id": 0 - }, - "NDEF_WRITE_FAIL": { - "id": 1 - }, - "NDEF_VERIFY_FAIL": { - "id": 2 - }, - "NDEF_UPDATE_FAIL": { - "id": 3 - }, - "RMA_WRITE_FAIL": { - "id": 4 - }, - "RMA_VERIFY_FAIL": { - "id": 5 - }, - "RMA_BAD_ENTRY": { - "id": 6 - }, - "INIT_FAIL": { - "id": 7 - }, - "NDEF_CONFIG_FAIL": { - "id": 8 - }, - "RMA_CONFIG_FAIL": { - "id": 9 - }, - "NDEF_START_FAIL": { - "id": 10 - }, - "RMA_START_FAIL": { - "id": 11 - } - } - }, - "OPTICALINTERFACE": { - "id": 256, - "version": { - "first": 1, - "last": 365 - }, - "builds": { - "emea": [ - { - "id": 230, - "fw": "106E" + "version": { + "first": 3, + "last": 245 }, - { - "id": 230, - "fw": "106F" + "registers": { + "Privilege": { + "id": 0, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Written to set the login level, followed by the password. Note, this can be read at any login level including 0.", + "version": { + "first": 3, + "last": 245 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 8 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Used at the same time as Password so probably wants to have column S indicated.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "Password": { + "id": 1, + "details": [ + { + "type": "uint96_t", + "privilege": { + "lvl1": "WO", + "lvl2": "WO", + "lvl3": "WO", + "lvl4": "WO", + "lvl5": "WO", + "lvl6": "WO", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Password for logging in, requires 3 consecutive writes", + "version": { + "first": 3, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "Used in login.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FOpen": { + "id": 2, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to open a file on the meter, handle returned", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FClose": { + "id": 3, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to close a file on the meter", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FRead": { + "id": 4, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to read bytes from an open file", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FWrite": { + "id": 5, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to write bytes to an open file", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FSeek": { + "id": 6, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to seek within an open file", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FTell": { + "id": 7, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to determine position within an open file", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "Remove": { + "id": 8, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to delete a file", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FEOF": { + "id": 9, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this determine whether the current position in an open file is the end of the file", + "version": { + "first": 20, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "Catalogue": { + "id": 10, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Returns a list of files in the filesystem that matches a string containing wildcards passed in", + "version": { + "first": 49, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PCBSerialNumber": { + "id": 12, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "String containing the PCB serial number. Note, this can be read at any login level including 0", + "version": { + "first": 59, + "last": 245 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Used for identification and login.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "ConfigAccessRights": { + "id": 13, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bitmask of login levels permitted to manipulate dangerous files", + "version": { + "first": 59, + "last": 245 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "I don't expect this to be changed.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FFlush": { + "id": 14, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Remote file operations, use this to flush write buffers to an open file", + "version": { + "first": 66, + "last": 245 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + } }, - { - "id": 257, - "fw": "1107" - }, - { - "id": 257, - "fw": "1108" - }, - { - "id": 278, - "fw": "1247" - }, - { - "id": 318, - "fw": "130A" - }, - { - "id": 330, - "fw": "130B" - }, - { - "id": 331, - "fw": "13F3" - }, - { - "id": 346, - "fw": "1310" - }, - { - "id": 350, - "fw": "1416" - }, - { - "id": 351, - "fw": "14E0" - }, - { - "id": 358, - "fw": "14E1" - }, - { - "id": 359, - "fw": "14E2" - }, - { - "id": 360, - "fw": "14E3" - }, - { - "id": 361, - "fw": "1417" - }, - { - "id": 362, - "fw": "1420" - }, - { - "id": 363, - "fw": "1421" - }, - { - "id": 364, - "fw": "1422" - }, - { - "id": 365, - "fw": "1423" + "status": { + "LOCKED_OUT": { + "id": 0 + }, + "AUTHENTICATION_FAILURE": { + "id": 1 + }, + "ACCESS_DENIED": { + "id": 2 + }, + "UNKNOWN_PARAMETER": { + "id": 3 + }, + "IN_USE": { + "id": 4 + }, + "SIZES_DONT_MATCH": { + "id": 5 + }, + "CANT_READ_CONFIG_FILE": { + "id": 6 + }, + "USER_NOT_KNOWN": { + "id": 7 + }, + "CANT_CREATE_CONFIG_FILE": { + "id": 8 + }, + "STORE_DIDNT_STORE": { + "id": 9 + }, + "STORE_CORRUPT": { + "id": 10 + }, + "EXPECTED_WRITE": { + "id": 11 + }, + "EXPECTED_READ": { + "id": 12 + }, + "STOP_CYCLING": { + "id": 13 + }, + "TOO_MANY_OPEN": { + "id": 14 + }, + "NEVER_OPENED": { + "id": 15 + }, + "FILE_PROTECTED": { + "id": 16 + }, + "PARTIAL_RECALL": { + "id": 17 + }, + "DEFAULT_PASSWORD_USED": { + "id": 18 + } } - ], - "na": [ - { - "id": 278, - "fw": "1228" + }, + "CUSTOMER": { + "id": 9, + "version": { + "first": 1, + "last": 166 }, - { - "id": 310, - "fw": "2002" + "registers": { + "AlarmStatus0": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 0-3.", + "version": { + "first": 1, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmStatus1": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 4-7.", + "version": { + "first": 1, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "TriggerAlarmCancel": { + "id": 2, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Any set bits manually clear the corresponding alarm.", + "version": { + "first": 1, + "last": 110 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Any set bits manually clear the corresponding alarm.", + "version": { + "first": 111, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [], + "remarks": "Cancel all alarms at the end of production.", + "region": { + "emea": { + "values": { + "default": 4294967295 + } + }, + "na": { + "values": { + "default": 4294967295 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "AlarmStatus2": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 8-11.", + "version": { + "first": 26, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmStatus3": { + "id": 4, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 12-15.", + "version": { + "first": 26, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmStatus4": { + "id": 5, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 16-19.", + "version": { + "first": 26, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmStatus5": { + "id": 6, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 20-23.", + "version": { + "first": 26, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmStatus6": { + "id": 7, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 24-27.", + "version": { + "first": 26, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmStatus7": { + "id": 8, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "8 bit counts corresponding to alarms 28-31.", + "version": { + "first": 26, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AlarmEnableMask": { + "id": 9, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are being monitored.", + "version": { + "first": 26, + "last": 110 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are being monitored.", + "version": { + "first": 111, + "last": 162 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Bitmaskof the alarms that we are interested in. I can imagine some customers may have different requirements to others. The radio does change this.", + "region": { + "emea": { + "values": { + "default": 32851 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are being monitored.", + "version": { + "first": 163, + "last": 163 + }, + "values": { + "default": 49235, + "minimum": 2, + "maximum": 654915 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Bitmaskof the alarms that we are interested in. I can imagine some customers may have different requirements to others. The radio does change this.", + "region": { + "emea": { + "values": { + "default": 49235 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are being monitored.", + "version": { + "first": 164, + "last": 166 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Bitmaskof the alarms that we are interested in. I can imagine some customers may have different requirements to others. The radio does change this.", + "region": { + "emea": { + "values": { + "default": 49235 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "AlarmBroadcastMask": { + "id": 10, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which will generate events.", + "version": { + "first": 26, + "last": 110 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which will generate events.", + "version": { + "first": 111, + "last": 166 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "This updates the same value asAlarmEnableMask, best to avoid changing it.", + "region": { + "emea": { + "values": { + "default": 32851 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AlarmVisualMask": { + "id": 11, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", + "version": { + "first": 110, + "last": 110 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", + "version": { + "first": 111, + "last": 162 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Bitmask of the alarms that will be shown on the display (both the alarm ID and the flag icon). Again, I can imagine different customers wanting different things. The radio seems to set this but it seems to be a hardwired value.", + "region": { + "emea": { + "values": { + "default": 8156 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", + "version": { + "first": 163, + "last": 163 + }, + "values": { + "default": 16382, + "minimum": 16382, + "maximum": 16382 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Bitmask of the alarms that will be shown on the display (both the alarm ID and the flag icon). Again, I can imagine different customers wanting different things. The radio seems to set this but it seems to be a hardwired value.", + "region": { + "emea": { + "values": { + "default": 16382 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit set of those alarms which are displayed with IDs and the alarm icon.", + "version": { + "first": 164, + "last": 166 + }, + "values": { + "default": 4294967295, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Bitmask of the alarms that will be shown on the display (both the alarm ID and the flag icon). Again, I can imagine different customers wanting different things. The radio seems to set this but it seems to be a hardwired value.", + "region": { + "emea": { + "values": { + "DN40": 8156, + "DN50": 8156, + "DN65": 8156, + "DN80": 8156, + "DN100": 8156, + "DN125": 8156, + "DN150": 8156, + "DN200": 16382, + "DN250": 16382, + "DN300": 16382 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "AlarmVisualAutoClearMask": { + "id": 12, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Alarms that have their display automatically cleared", + "version": { + "first": 110, + "last": 110 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Alarms that have their display automatically cleared", + "version": { + "first": 111, + "last": 166 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Not in use, ignore.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ExcessFlowVolumeThreshold": { + "id": 13, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 61, + "last": 110 + }, + "values": { + "default": 639590, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 111, + "last": 118 + }, + "values": { + "default": 639590, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 119, + "last": 132 + }, + "values": { + "default": 639590, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which broken pipe alarm is set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 133, + "last": 166 + }, + "si_transform": { + "remarks": "Cubic Meters per Second: conversion of 1/256 l/h flow rate units, the volume (liters = (1 / 256) * 10^-3 m^3 = 3.90625 * 10^-6 m^3) and time (hours = 3600 s) into SI base units. Flow rate = (3.90625 * 10^-6 m^3) / (3600 s) = 1.085069444 * 10^-9 m^3/s.", + "units": "m^3/s", + "scale_float_mult": 1.0, + "scale_power_2": -8, + "scale_power_10": -3, + "scale_float_div": 3600.0, + "offset": 0 + }, + "values": { + "default": 639999, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "This is just the flow rate above which you'll get a broken pipe alarm (assuming it is above for ExcessFlowTimeThreshold). This, along with all the alarm configuration settings seem like things that different customers might want different settings for. However I believe most can be changed via the radio. A.F.: Register is for the EMEA alarms so we don't need them for any NA meter sizes. NA alarms are configured at uniontown using UI-1236. Should NA columns be cleared?", + "region": { + "emea": { + "values": { + "DN40": 6400000, + "DN50": 12800000, + "DN65": 16000000, + "DN80": 22400000, + "DN100": 32000000, + "DN125": 64000000, + "DN150": 96000000, + "DN200": 128000000, + "DN250": 192000000, + "DN300": 256000000 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "LeakTimeThreshold": { + "id": 14, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for leak alarm in minutes", + "version": { + "first": 61, + "last": 110 + }, + "values": { + "default": 10080, + "minimum": 0, + "maximum": 69632 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for leak alarm in minutes", + "version": { + "first": 111, + "last": 118 + }, + "values": { + "default": 10080, + "minimum": 0, + "maximum": 69632 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for leak alarm in minutes", + "version": { + "first": 119, + "last": 166 + }, + "si_transform": { + "remarks": "Seconds: time in minutes ...", + "units": "s", + "scale_float_mult": 60.0, + "scale_power_2": 0, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 360, + "minimum": 0, + "maximum": 69632 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Default for J.S. is 20160. A.F.: Register is for the EMEA alarms so we don't need them for any NA meter sizes. NA alarms are configured at uniontown using UI-1236. Should NA columns be cleared?", + "region": { + "emea": { + "values": { + "default": 20160 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ReverseFlowTimeThreshold": { + "id": 15, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of minutes of reverse flow required to set reverse flow alarm", + "version": { + "first": 61, + "last": 110 + }, + "values": { + "default": 15, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of minutes of reverse flow required to set reverse flow alarm", + "version": { + "first": 111, + "last": 142 + }, + "values": { + "default": 15, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of minutes of reverse flow required to set reverse flow alarm", + "version": { + "first": 143, + "last": 166 + }, + "values": { + "default": 15, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "15 mins for EMEA", + "region": { + "emea": { + "values": { + "default": 15 + } + }, + "na": { + "values": { + "default": 60 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Locale": { + "id": 18, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Timezone in which this application is set to run.", + "version": { + "first": 24, + "last": 166 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": true, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "VaKo?? We need a seperation of Timezone an display view. A.F.: There are a lot of locales, not just one per time zone. Using the correct locale should set the display and the timezone correctly.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AppArrangement": { + "id": 19, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "A name for the arrangement of applications on the meter", + "version": { + "first": 130, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "This is a readonly register that gives the firmware a hint about whether it is set up as an EMEA or NA meter (or neither). You can ignore or use it to check the value is as expected. Might be worth checking it.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "RebootCount": { + "id": 20, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of times the meter has rebooted", + "version": { + "first": 73, + "last": 110 + }, + "values": { + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of times the meter has rebooted", + "version": { + "first": 111, + "last": 166 + }, + "values": { + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ExcessFlowTimeThreshold": { + "id": 21, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for broken pipe alarm in minutes", + "version": { + "first": 80, + "last": 110 + }, + "values": { + "default": 15, + "minimum": 0, + "maximum": 69632 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for broken pipe alarm in minutes", + "version": { + "first": 111, + "last": 118 + }, + "values": { + "default": 15, + "minimum": 0, + "maximum": 69632 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for broken pipe alarm in minutes", + "version": { + "first": 119, + "last": 166 + }, + "values": { + "default": 180, + "minimum": 0, + "maximum": 69632 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Default for J.S. is 5.", + "region": { + "emea": { + "values": { + "default": 5 + } + }, + "na": { + "values": { + "default": 5 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "LeakFlowThreshold": { + "id": 22, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 80, + "last": 110 + }, + "values": { + "default": 12800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 111, + "last": 118 + }, + "values": { + "default": 12800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 119, + "last": 132 + }, + "values": { + "default": 5529, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Flow rate above which leak alarm can be set in 1/256 l/h. Due to rounding the value read back may not be exactly the value written. This is why the statictype is given as 'approximate'", + "version": { + "first": 133, + "last": 166 + }, + "values": { + "default": 6399, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "approximate", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "This is just the flow rate above which you'll get a leak alarm (assuming it is above for LeakTimeThreshold). A.F.: Register is for the EMEA alarms so we don't need them for any NA meter sizes. NA alarms are configured at uniontown using UI-1236. Should NA columns be cleared?", + "region": { + "emea": { + "values": { + "DN40": 64000, + "DN50": 96000, + "DN65": 160000, + "DN80": 224000, + "DN100": 320000, + "DN125": 640000, + "DN150": 960000, + "DN200": 1280000, + "DN250": 2240000, + "DN300": 2560000 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "MfgCharge": { + "id": 23, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Charge in uAs available in manufacturing (read only)", + "version": { + "first": 84, + "last": 166 + }, + "si_transform": { + "remarks": "Coulombs: charge in uAs ...", + "units": "C", + "scale_float_mult": 1.0, + "scale_power_2": 0, + "scale_power_10": -6, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 181440000 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [], + "remarks": "Check totalusedcharge against this to ensure battery usage in manufacturing isn't too high", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "TemperatureHighThreshold": { + "id": 24, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "High temperature alarm threshold in 0.1C", + "version": { + "first": 88, + "last": 100 + }, + "values": { + "default": 500, + "minimum": 0, + "maximum": 800 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "High temperature alarm threshold in 0.1C", + "version": { + "first": 101, + "last": 110 + }, + "values": { + "default": 500, + "minimum": 0, + "maximum": 800 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "High temperature alarm threshold in 0.1C", + "version": { + "first": 111, + "last": 166 + }, + "si_transform": { + "remarks": "Degrees Celsius: temperature in 0.1 degrees C ...", + "units": "C", + "scale_float_mult": 1.0, + "scale_power_2": 0, + "scale_power_10": -1, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 500, + "minimum": 0, + "maximum": 800 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Checked from J.S.", + "region": { + "emea": { + "values": { + "default": 500 + } + }, + "na": { + "values": { + "default": 270 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureHighDelay": { + "id": 25, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for high temperature alarm in seconds", + "version": { + "first": 88, + "last": 110 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for high temperature alarm in seconds", + "version": { + "first": 111, + "last": 166 + }, + "si_transform": { + "remarks": "Seconds: time in seconds ...", + "units": "s", + "scale_float_mult": 60.0, + "scale_power_2": 0, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Checked from J.S.", + "region": { + "emea": { + "values": { + "default": 300 + } + }, + "na": { + "values": { + "default": 60 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureLowThreshold": { + "id": 26, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Low temperature alarm threshold in 0.1C", + "version": { + "first": 88, + "last": 100 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Low temperature alarm threshold in 0.1C", + "version": { + "first": 101, + "last": 110 + }, + "values": { + "default": 20, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Low temperature alarm threshold in 0.1C", + "version": { + "first": 111, + "last": 166 + }, + "values": { + "default": 20, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Checked from J.S.", + "region": { + "emea": { + "values": { + "default": 20 + } + }, + "na": { + "values": { + "default": 20 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureLowDelay": { + "id": 27, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for low temperature alarm in seconds", + "version": { + "first": 88, + "last": 110 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for low temperature alarm in seconds", + "version": { + "first": 111, + "last": 166 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Checked from J.S.", + "region": { + "emea": { + "values": { + "default": 300 + } + }, + "na": { + "values": { + "default": 60 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureHighThreshold": { + "id": 28, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "High pressure alarm threshold in Pa", + "version": { + "first": 88, + "last": 110 + }, + "values": { + "default": 1600000, + "minimum": 0, + "maximum": 2550000 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "High pressure alarm threshold in Pa", + "version": { + "first": 111, + "last": 121 + }, + "values": { + "default": 1600000, + "minimum": 0, + "maximum": 2550000 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "High pressure alarm threshold in Pa", + "version": { + "first": 122, + "last": 166 + }, + "values": { + "default": 1600000, + "minimum": 0, + "maximum": 2550000 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Absolute or relative? A.F.: gauge pressure.", + "region": { + "emea": { + "values": { + "default": 1600000 + } + }, + "na": { + "values": { + "default": 1380000 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureHighDelay": { + "id": 29, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for high pressure alarm in seconds", + "version": { + "first": 88, + "last": 110 + }, + "values": { + "default": 300, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for high pressure alarm in seconds", + "version": { + "first": 111, + "last": 118 + }, + "values": { + "default": 300, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for high pressure alarm in seconds", + "version": { + "first": 119, + "last": 166 + }, + "si_transform": { + "remarks": "Seconds: ...", + "units": "s", + "scale_float_mult": 60.0, + "scale_power_2": 0, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Checked from J.S.", + "region": { + "emea": { + "values": { + "default": 300 + } + }, + "na": { + "values": { + "default": 60 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureLowThreshold": { + "id": 30, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Low pressure alarm threshold in Pa", + "version": { + "first": 88, + "last": 110 + }, + "values": { + "default": 30000, + "minimum": 0, + "maximum": 2550000 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Low pressure alarm threshold in Pa", + "version": { + "first": 111, + "last": 121 + }, + "values": { + "default": 30000, + "minimum": 0, + "maximum": 2550000 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Low pressure alarm threshold in Pa", + "version": { + "first": 122, + "last": 166 + }, + "values": { + "default": 30000, + "minimum": 0, + "maximum": 2550000 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Absolute or relative? A.F.: gauge pressure.", + "region": { + "emea": { + "values": { + "default": 30000 + } + }, + "na": { + "values": { + "default": 240000 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureLowDelay": { + "id": 31, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for low pressure alarm in seconds", + "version": { + "first": 88, + "last": 110 + }, + "values": { + "default": 300, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for low pressure alarm in seconds", + "version": { + "first": 111, + "last": 118 + }, + "values": { + "default": 300, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time threshold for low pressure alarm in seconds", + "version": { + "first": 119, + "last": 166 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 10800 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Checked from J.S.", + "region": { + "emea": { + "values": { + "default": 300 + } + }, + "na": { + "values": { + "default": 60 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "StoreConfiguration": { + "id": 32, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Store all configuration items in non-volatile memory.", + "version": { + "first": 88, + "last": 130 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Store all configuration items in non-volatile memory.", + "version": { + "first": 131, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "You do need to use this if you change any parameters in CUSTOMER and want to keep them.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "SerialNumber": { + "id": 33, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Customer serial number string", + "version": { + "first": 139, + "last": 166 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "BackupCalendarSeconds": { + "id": 34, + "details": [ + { + "type": "time_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "NA", + "lvl8": "NA" + }, + "description": "Internal backup of calendar seconds", + "version": { + "first": 145, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Internal use in firmware only", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "InstallationTime": { + "id": 35, + "details": [ + { + "type": "time_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Datetime in seconds since 1/1/2000 00:00:00. Time meter was determined to have been installed. 0 means not installed.", + "version": { + "first": 147, + "last": 166 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Write to zero before leaving manufacturing to ensure not marked as 'installed'.", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "LocaleDecimalPoint": { + "id": 36, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Read to view the string used as a decimal point for this locale", + "version": { + "first": 151, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "LocaleThousandsSeparator": { + "id": 37, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Read to view the string used as a thousands separarator for this locale", + "version": { + "first": 151, + "last": 166 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "InternalLoginTest": { + "id": 38, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test whether the internal login works. Start test by writing '1' then log out to enable the test to run. Log back in and read back this register for result (see status codes)", + "version": { + "first": 157, + "last": 166 + }, + "values": { + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Helper function to test the configexchange login at the internal level will succeed (that is, that the password is as expected). This should be tested after installation of password file at end of line. Add to production test if register present in firmware.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "NoFlowLimit": { + "id": 39, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "time threshold in Minutes for NoFlowAlarm trigger NoFlowAlarm trigger; 251002 Clemens: clamp the last field to 161 and may need to use the exclude versions mechanism if 1.3 development includes work for CORDHW-3124.", + "version": { + "first": 161, + "last": 161 + }, + "values": { + "default": 43200, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "This has default setting for DEWA customer. Unsupported.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "NoFlowAlarmResetHysteresis": { + "id": 40, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "number of consecutive samples (Minutes) before NoFlow Alarm gets cleared; 251002 Clemens: clamp the last field to 161 and may need to use the exclude versions mechanism if 1.3 development includes work for CORDHW-3124.", + "version": { + "first": 161, + "last": 161 + }, + "values": { + "default": 5, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "This has default setting for DEWA customer. Unsupported.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Gradient_Averaging_Samples": { + "id": 41, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "number of samples for moving average (window size)", + "version": { + "first": 165, + "last": 166 + }, + "values": { + "default": 5, + "minimum": 1, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Gradient_Pos_Granularity_Steps": { + "id": 42, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Unitless granularity steps for positive pressure Gradient alarm threshold", + "version": { + "first": 165, + "last": 166 + }, + "values": { + "default": 200, + "minimum": 1, + "maximum": 1600 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Gradient_Neg_Granularity_Steps": { + "id": 43, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Unitless granularity steps for negative pressure Gradient alarm threshold", + "version": { + "first": 165, + "last": 166 + }, + "values": { + "default": 200, + "minimum": 1, + "maximum": 1600 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Gradient_Samples_Alarmtrigger": { + "id": 44, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of consecutive samples above threshold before Alarm gets triggered", + "version": { + "first": 165, + "last": 166 + }, + "values": { + "default": 3, + "minimum": 1, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "This has default setting for Canal de Isabel customer. Unsupported.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + } }, - { - "id": 324, - "fw": "2006" - }, - { - "id": 352, - "fw": "2013" + "status": { + "REBOOT": { + "id": 0 + }, + "REBOOT_STOP": { + "id": 1 + }, + "LOW_BATTERY": { + "id": 2 + }, + "LOW_BATTERY_STOP": { + "id": 3 + }, + "VERY_LOW_BATTERY": { + "id": 4 + }, + "VERY_LOW_BATTERY_STOP": { + "id": 5 + }, + "CONFIG_ERROR": { + "id": 6 + }, + "CONFIG_ERROR_STOP": { + "id": 7 + }, + "EMPTY_PIPE": { + "id": 8 + }, + "EMPTY_PIPE_STOP": { + "id": 9 + }, + "MAGNETIC_TAMPER": { + "id": 10 + }, + "MAGNETIC_TAMPER_STOP": { + "id": 11 + }, + "REVERSE_FLOW": { + "id": 12 + }, + "REVERSE_FLOW_STOP": { + "id": 13 + }, + "SUSPECT_LEAK": { + "id": 14 + }, + "SUSPECT_LEAK_STOP": { + "id": 15 + }, + "BROKEN_PIPE": { + "id": 16 + }, + "BROKEN_PIPE_STOP": { + "id": 17 + }, + "LOW_PRESSURE": { + "id": 18 + }, + "LOW_PRESSURE_STOP": { + "id": 19 + }, + "HIGH_PRESSURE": { + "id": 20 + }, + "HIGH_PRESSURE_STOP": { + "id": 21 + }, + "LOW_TEMPERATURE": { + "id": 22 + }, + "LOW_TEMPERATURE_STOP": { + "id": 23 + }, + "HIGH_TEMPERATURE": { + "id": 24 + }, + "HIGH_TEMPERATURE_STOP": { + "id": 25 + }, + "RADIO_ERROR": { + "id": 26 + }, + "RADIO_ERROR_STOP": { + "id": 27 + }, + "METROLOGY_PARAMS": { + "id": 28 + }, + "METROLOGY_PARAMS_STOP": { + "id": 29 + }, + "METROLOGY_MEASURE": { + "id": 30 + }, + "METROLOGY_MEASURE_STOP": { + "id": 31 + }, + "UNALLOCATED_6": { + "id": 32 + }, + "UNALLOCATED_6_STOP": { + "id": 33 + }, + "UNALLOCATED_7": { + "id": 34 + }, + "UNALLOCATED_7_STOP": { + "id": 35 + }, + "UNALLOCATED_8": { + "id": 36 + }, + "UNALLOCATED_8_STOP": { + "id": 37 + }, + "UNALLOCATED_9": { + "id": 38 + }, + "UNALLOCATED_9_STOP": { + "id": 39 + }, + "UNALLOCATED_10": { + "id": 40 + }, + "UNALLOCATED_10_STOP": { + "id": 41 + }, + "UNALLOCATED_11": { + "id": 42 + }, + "UNALLOCATED_11_STOP": { + "id": 43 + }, + "UNALLOCATED_12": { + "id": 44 + }, + "UNALLOCATED_12_STOP": { + "id": 45 + }, + "UNALLOCATED_13": { + "id": 46 + }, + "UNALLOCATED_13_STOP": { + "id": 47 + }, + "UNALLOCATED_14": { + "id": 48 + }, + "UNALLOCATED_14_STOP": { + "id": 49 + }, + "UNALLOCATED_15": { + "id": 50 + }, + "UNALLOCATED_15_STOP": { + "id": 51 + }, + "UNALLOCATED_16": { + "id": 52 + }, + "UNALLOCATED_16_STOP": { + "id": 53 + }, + "UNALLOCATED_17": { + "id": 54 + }, + "UNALLOCATED_17_STOP": { + "id": 55 + }, + "UNALLOCATED_18": { + "id": 56 + }, + "UNALLOCATED_18_STOP": { + "id": 57 + }, + "UNALLOCATED_19": { + "id": 58 + }, + "UNALLOCATED_19_STOP": { + "id": 59 + }, + "UNALLOCATED_20": { + "id": 60 + }, + "UNALLOCATED_20_STOP": { + "id": 61 + }, + "UNALLOCATED_21": { + "id": 62 + }, + "UNALLOCATED_21_STOP": { + "id": 63 + }, + "UNKNOWN_PARAMETER": { + "id": 64 + }, + "LOCALE_UNDEFINED": { + "id": 65 + }, + "NO_SUCH_ALARM": { + "id": 66 + }, + "OUT_OF_RANGE": { + "id": 67 + }, + "NOT_IMPLEMENTED": { + "id": 68 + }, + "BAD_CONFIG": { + "id": 69 + }, + "DID_NOT_STORE": { + "id": 70 + }, + "STORE_PENDING": { + "id": 71 + }, + "STRING_TOO_LONG": { + "id": 72 + }, + "TEST_PENDING": { + "id": 73 + }, + "TEST_STARTED": { + "id": 74 + }, + "TEST_OK_SKELETON": { + "id": 75 + }, + "TEST_OK": { + "id": 76 + }, + "DID_NOT_TEST": { + "id": 77 + } } - ] - } - }, - "OPTICALPORT": { - "id": 5, - "version": { - "first": 1, - "last": 55 }, - "registers": { - "BaudRateCapabilities": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Bitmask of supported rates on the given hardware.", - "version": { - "first": 2, - "last": 55 - }, - "statictype": "static" - } - ] - }, - "PacketSizeCapabilities": { - "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Bitmask of supported packet sizes.", - "version": { - "first": 2, - "last": 55 - }, - "values": { - "default": 64 - }, - "statictype": "static" - } - ] - }, - "ProtocolVersion": { - "id": 2, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Version number as fixed point 16.16 format BCD.", - "version": { - "first": 2, - "last": 55 - }, - "statictype": "static" - } - ] - }, - "BaudRateSelected": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Baud rate in bits per second.", - "version": { - "first": 2, - "last": 55 - }, - "statictype": "dynamic" - } - ] - }, - "PacketSizeSelected": { - "id": 4, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Packet size in bytes.", - "version": { - "first": 2, - "last": 55 - }, - "statictype": "dynamic" - } - ] - }, - "ExternalUartControl": { - "id": 5, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "WO", - "lvl2": "WO", - "lvl3": "WO", - "lvl4": "WO", - "lvl5": "WO", - "lvl6": "WO", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Surrenders the UART to another application", - "version": { - "first": 49, - "last": 55 - }, - "statictype": "dynamic" - } - ] - } - }, - "status": { - "PAYLOAD_COUNT": { - "id": 0 - }, - "INVALID_SUBREASON": { - "id": 1 - }, - "INVALID_BAUDRATE": { - "id": 2 - }, - "INVALID_BUFFERSIZE": { - "id": 3 - }, - "CRCFAILURE": { - "id": 4 - }, - "UNRECOGNISEDCMD": { - "id": 5 - }, - "FRAMING": { - "id": 6 - }, - "OVERFLOW": { - "id": 7 - }, - "PACKETTIMEOUT": { - "id": 8 - }, - "INVALIDESCAPE": { - "id": 9 - }, - "UNKNOWN_PARAMETER": { - "id": 10 - }, - "TRAINING_FAILED": { - "id": 11 - }, - "NOBREAK": { - "id": 12 - } - } - }, - "PERIODICLOG": { - "id": 17, - "version": { - "first": 1, - "last": 77 - }, - "registers": { - "DataLogContents": { - "id": 0, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit Mask of the items to store in LOG memory", - "version": { - "first": 10, - "last": 77 - }, - "values": { - "default": 201335811, - "minimum": 3, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 201335811 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "DataLogPeriod": { - "id": 1, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage Period of the LOG memory in minutes", - "version": { - "first": 10, - "last": 77 - }, - "values": { - "default": 60, - "minimum": 1, - "maximum": 1440 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 60 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AverageFlowPeriod": { - "id": 2, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Averiging period for the Min/Max calculation of LOG&FDR memory", - "version": { - "first": 10, - "last": 77 - }, - "values": { - "default": 5, - "minimum": 1, - "maximum": 60 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 5 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FixedDateReadingContents": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bit Mask of the items to store in FDR memory", - "version": { - "first": 10, - "last": 77 - }, - "values": { - "default": 201335811, - "minimum": 3, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 201335811 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FixedDateDayOfMonth": { - "id": 4, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The day of month the FDR storage will take place at 00:00", - "version": { - "first": 10, - "last": 77 - }, - "values": { - "default": 1, - "minimum": 1, - "maximum": 28 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "jens.schulz@xylem.com", - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 1 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PeriodicLogLifeTimeCounter": { - "id": 5, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A counter used for internal purposes", - "version": { - "first": 15, - "last": 77 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "ResetCounter": { - "id": 6, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A counter to monitor the application resets", - "version": { - "first": 20, - "last": 77 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - } - }, - "status": { - "FOPEN": { - "action": "Perform a FOPEN to any of the logging files logdata, fdrdata, evtdata ... ", - "description": "FOPEN action failed due to any reason (means fopen error)", - "id": 0 - }, - "BAD_CONFIG": { - "action": "Handle the internal dual logging file access by SensusRfRadio and by PeriodicLogging", - "description": "Mutual Exclude file access failed due to a wrong internal status order", - "id": 1 - }, - "STRING_TOO_LONG": { - "action": "Currently unused or not define action", - "description": "Currently not generated or returned", - "id": 2 - }, - "FILES_IN_USE": { - "action": "Handle the internal dual logging file access by SensusRfRadio and by PeriodicLogging", - "description": "File access denied because the other party has currently access to the file(s)", - "id": 3 - } - } - }, - "POWERMON": { - "id": 1, - "version": { - "first": 17, - "last": 72 - }, - "registers": { - "BatteryVoltage": { - "id": 0, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Measured battery terminal voltage in 1mV units.", - "version": { - "first": 17, - "last": 72 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "BatteryManufacturer": { - "id": 1, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "String describing the battery brand.", - "version": { - "first": 17, - "last": 72 - }, - "values": { - "default": "Tadiran" - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "BatterySize": { - "id": 2, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "One of: 0 = battery absent; 1 = built in; 2 = other; 3 = AA; 4 = AAA; 5 = C; 6 = D; 255 = unknown", - "version": { - "first": 17, - "last": 72 - }, - "values": { - "default": 6, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "uwe.brehm@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 6 - } - }, - "na": { - "values": { - "default": 6 - } - } - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "BatteryQuantity": { - "id": 4, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The number of installed batteries.", - "version": { - "first": 17, - "last": 59 - }, - "values": { - "default": 1 - }, - "statictype": "static" - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of installed batteries.", - "version": { - "first": 60, - "last": 72 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "uwe.brehm@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 2 - } - }, - "na": { - "values": { - "default": 2 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "BatteryRatedVoltage": { - "id": 5, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Datasheet terminal voltage in 100mV units as manufactured.", - "version": { - "first": 17, - "last": 72 - }, - "values": { - "default": 36, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "uwe.brehm@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "BatteryVoltageMinThreshold": { - "id": 7, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Datasheet terminal voltage in 100mV units below which the cell is considered empty.", - "version": { - "first": 17, - "last": 72 - }, - "values": { - "default": 28, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "uwe.brehm@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "BatterySelection": { - "id": 8, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Chosen manufacturer from the internal lookup table of known batteries.", - "version": { - "first": 20, - "last": 72 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "uwe.brehm@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TotalUsedCharge": { - "id": 9, - "details": [ - { - "type": "uint64_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Accumulated charge used in uAs.", - "version": { - "first": 24, - "last": 72 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "TotalUsedSeconds": { - "id": 10, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Elapsed time since manufacture in seconds.", - "version": { - "first": 39, - "last": 72 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "WarnFromClamp": { - "id": 11, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Time in seconds for which the projected end time cannot exceed.", - "version": { - "first": 39, - "last": 72 - }, - "values": { - "default": 473040000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "This should be set to the expected life of the meter. In the early days the expected lifetime will be this. Set to 22 years to include warehouse storage time.", - "region": { - "emea": { - "values": { - "default": 694224000 - } - }, - "na": { - "values": { - "default": 694224000 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "BatteryMilliAHrRating": { - "id": 12, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Datasheet capacity in mAh units as manufactured.", - "version": { - "first": 45, - "last": 72 - }, - "values": { - "default": 19000, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "uwe.brehm@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "StoreConfiguration": { - "id": 13, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 61, - "last": 72 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "You do need to use this if you change any parameters in POWERMON and want to keep them.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "CriticalRepeatLimit": { - "id": 14, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of 15 minute periods of consecutive low battery voltage required for the battery to be deemed critically low", - "version": { - "first": 66, - "last": 72 - }, - "values": { - "default": 96, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "RemainingSeconds": { - "id": 15, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "", - "version": { - "first": 69, - "last": 72, - "exclude": [ - 70 - ] - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "" - ], - "remarks": "Read-only value for remaining battery lifetime, not useful in manufacture, ignore", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - } - }, - "status": { - "TABLE_FULL": { - "id": 0 - }, - "UNKNOWN_PARAMETER": { - "id": 1 - }, - "OUT_OF_RANGE": { - "id": 2 - }, - "STOP_CYCLING": { - "id": 3 - }, - "TEMPERATURE_LIMIT": { - "id": 4 - }, - "BATTERY_STATUS_CHANGED": { - "id": 5 - }, - "BATTERY_CRITICAL": { - "id": 6 - }, - "PENDING_STORE": { - "id": 7 - }, - "DID_NOT_STORE": { - "id": 8 - } - } - }, - "SENSUSRADIO": { - "id": 16, - "version": { - "first": 100, - "last": 553 - }, - "registers": { - "TxInterval": { - "id": 0, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The SensusRF transmission interval in seconds for the BUPs", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 15, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 15 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "OmTxInterval": { - "id": 1, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The Open Metering transmission interval in seconds", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 3600, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 900 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "LatInterval": { - "id": 2, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The Listen After Talk interval as number 'n'. After every 'n' BUPs follows a BUP-LAT", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 3, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 3 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "WakeupInterval": { - "id": 3, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The Wake Up interval in seconds 's'. Every 's' seconds will the meter sniff for a WakeUp tone. 's' == 0 means active sending and no sniffing", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 3, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 3 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "MbusState": { - "id": 4, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The internal MBus state (Open Metering). A bit oriented value. Do not write if you do not know details", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 7, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": true, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 7 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FrequencyIndicator": { - "id": 5, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A number that shows the radio frequency used. Normally 433 or 868", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 433, - "minimum": 433, - "maximum": 868 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Constant, do not change.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FrequencyOffset": { - "id": 6, - "details": [ - { - "type": "int16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A radio frequency calibration parameter", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": -32768, - "maximum": 32767 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": true, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PowerLevel": { - "id": 7, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A parameter for controling the radio power", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 127 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Read calibration value from data base, dependant on used variant.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "SystemState": { - "id": 9, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The internal System State of the Radio", - "version": { - "first": 100, - "last": 544 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Set to 0xFF at the end of parameterization to trigger shipping mode.", - "region": { - "emea": null - } - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The internal System State of the Radio", - "version": { - "first": 545, - "last": 553 - }, - "values": { - "default": 1, - "minimum": 1, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Set to 0xFF at the end of parameterization to trigger shipping mode.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "RadioAddress": { - "id": 10, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The radio address used by the meter", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Set final radio address.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "UtcTimeOffset": { - "id": 11, - "details": [ - { - "type": "int32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The offset the between meter time and UTC for time correction", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": -2147483648, - "maximum": 2147483647 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "SentBytesCounter": { - "id": 12, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of bytes sent during meter lifetime", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "ReceivedBytesCounter": { - "id": 13, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of bytes received during meter lifetime", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "ResetCounter": { - "id": 14, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of resets the application SensusRfRadio has performed over lifetime", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "BootLoaderState": { - "id": 15, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An internal temporary state (enum) regarding the firmwware update", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "LeakFlowThreshold": { - "id": 16, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The flow value of the leakage (low flow) detection", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 25, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "LeakFlowTimeThreshold": { - "id": 17, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time in minutes of the leakage (low flow) detection threshold", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 360, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "BrokenPipeFlowThreshold": { - "id": 18, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The flow value of the broken pipe (high flow) detection", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 2500, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "BrokenPipeFlowTimeThreshold": { - "id": 19, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time in Minutes of the broken pipe (high flow) detection threshold", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 180, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureMaxThreshold": { - "id": 20, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The pressure value of the maximum (high) pressure alarm", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 160, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureMinThreshold": { - "id": 21, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The pressure value of the minimum (low) pressure alarm", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 3, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureLimitTimeMaxThreshold": { - "id": 22, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time in seconds of the maximum (high) pressure alarm threshold", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureLimitTimeMinThreshold": { - "id": 23, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time in seconds of the minimum (low) pressure alarm threshold", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureMeasurePeriod": { - "id": 24, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period in seconds with which the pressure is measured (fix 60 sec)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 60, - "minimum": 60, - "maximum": 60 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureUnit": { - "id": 25, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An enum respresenting the unit of pressure (0= no pressure sensor, 1= MPas, 2= PSI, 3= Bar)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 3 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PressureGaugeOffset": { + "FLEXNETSERIAL": { "id": 26, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "version": { + "first": 1, + "last": 24 + }, + "registers": { + "UpgState": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "General UPG states.", + "version": { + "first": 2, + "last": 24 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Can be ignored, temporarily for FW upgrade.", + "region": { + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] }, - "description": "The gauge offset of the pressure sensor value in mBar", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" + "FwdlState": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Specifies the Bootloader State of operation.", + "version": { + "first": 2, + "last": 24 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Can be ignored, temporarily for FW upgrade.", + "region": { + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] } - } - ] - }, - "TemperatureMaxThreshold": { - "id": 27, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + }, + "status": { + "UNKNOWN_PARAMETER": { + "id": 0 }, - "description": "The temperature value of the maximum (high) temperature alarm", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 50, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" + "TOO_MANY_APPS": { + "id": 1 } - } - ] - }, - "TemperatureMinThreshold": { - "id": 28, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The temperature value of the minimum (low) temperature alarm", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 2, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureTimeMaxThreshold": { - "id": 29, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time in Minutes of the maximum (high) temperature alarm threshold", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureTimeMinThreshold": { - "id": 30, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The time in Minutes of the minimum (low) temperature alarm threshold", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 600, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureMeasurePeriod": { - "id": 31, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The period in seconds with which the temperature is measured (only 60 is valid)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 60, - "minimum": 60, - "maximum": 60 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TemperatureUnit": { - "id": 32, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An enum respresenting the unit of temperature (1= Celsius, 2= Fahrenheit)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 2 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseOutWidth": { - "id": 33, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An enumerator defining the currently active PulseWidth (0 ... 8 for non testmode values and 9 ... 15 for testmode)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 15 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseOutDivisor": { - "id": 34, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A number representing the pulse weight multiplicator 1, 10, 100 or 1000", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 1000 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PulseOutMode": { - "id": 35, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An enum (0 to 3) representing the pulse output mode (0= deactivated, ...)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 3 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "CurrentLoopMax": { - "id": 36, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A parameter regarding the non existing current loop output", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Not used anymore.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "CurrentLoopSource": { - "id": 37, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A parameter regarding the non existing current loop output", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Not used anymore.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "MainAlarmMask": { - "id": 38, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A byte value representing a mask of currently active (1) main alarms. These are the flow and genreral alarms", - "version": { - "first": 100, - "last": 544 - }, - "values": { - "default": 207, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at CUSTOMER APP.", - "region": { - "emea": null - } - } - }, - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A byte value representing a mask of currently active (1) main alarms. These are the flow and genreral alarms", - "version": { - "first": 545, - "last": 553 - }, - "values": { - "default": 207, - "minimum": 128, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at CUSTOMER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ExtendedAlarmMask": { - "id": 39, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A byte value representing a mask of currently active (1) extended alarms. These are the temperature and pressure related alarms", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 60, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at CUSTOMER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "HistoricalAlarmsDays": { - "id": 40, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A number of days (0 = off) after which alarms are cleared from the alarm byte values when they are no longer active", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 29, - "minimum": 0, - "maximum": 250 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": { - "values": { - "default": 29 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "TestModeTime": { - "id": 43, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value in minutes that defines the time the meter will stay in testmode after that mode was started", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Runtime value.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "EncryptionKey": { - "id": 44, - "details": [ - { - "type": "uint128_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The SensusRF encryption key (16 bytes) of the meter", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": true, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "D05 radio key (Sensus (standard), …)", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Authentification": { - "id": 45, - "details": [ - { - "type": "uint96_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The SensusRF Authentification PINs (3 PINs of 4 byte each) of the meter", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "UpgFWVersion": { - "id": 46, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The version of the complete Meter firmware package as represented by application FlexNetVersion", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 65535 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Unchanged.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "CustomerText": { - "id": 47, - "details": [ - { - "type": "uint72_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An array of 9 bytes of freely programmable SensusRF customer Text", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Customer specific.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "RadioLastReadTime": { - "id": 48, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An uint32_t value representing the meter's system DateTime when the radio had last time sent a telegram", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "LowBatDateTime": { - "id": 49, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An uint32_t value representing the meter's system DateTime when the radio had detected first the low-battery status", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "VeryLowBatDateTime": { - "id": 50, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A copy of the LowBatDateTime time stamp", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Unit": { - "id": 51, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A byte value representing the currently active volume unit used by radio", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 19, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Dependant on territory setting acc SAP order.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ExtendedUnitFlags": { - "id": 52, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A byte value representing additional information regarding the unit derived from the volume unit when used for flow or alternate volume, 0x1x= liter per sec, 0xx1= kiloLiter", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 17 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": "custom", - "vako": true, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Customer specific. Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "OTAControlFlags": { - "id": 53, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A byte value normaly never changed regarding general behavior of the firmware related to Over The Air updates", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 1, - "minimum": 0, - "maximum": 255 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "1: if OTA update is allowed.", - "region": { - "emea": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "Tfx_Structure": { - "id": 54, - "details": [ - { - "type": "uint88_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A complex structure of 84 bytes related to the Tfx mode of the meter respectively the volume channel", - "version": { - "first": 100, - "last": 549 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - }, - { - "type": "uint672_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A complex structure of 84 bytes related to the Tfx mode of the meter respectively the volume channel", - "version": { - "first": 550, - "last": 553 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "Dewa_Structure": { - "id": 55, - "details": [ - { - "type": "uint64_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A structure of 4 uint16_t values used for the customer DEWA", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "DataLogContents": { - "id": 56, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A 4 byte bit mask representing whether the individual data items are logged in the periodic logging (1) or not (0)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 201335811, - "minimum": 3, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "DataLogPeriod": { - "id": 57, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A number in seconds representing the time period for storing data records into the periodic logging file (memory)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 60, - "minimum": 1, - "maximum": 1440 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "AverageFlowPeriod": { - "id": 58, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A number derived automatically from the DataLogPeriod that determines averaging periods in mimutes for min and max calculations", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 5, - "minimum": 1, - "maximum": 60 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "FixedDateReadingContents": { - "id": 59, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A 4 byte bit mask representing whether the individual data items are logged in the fixed date logging (1) or not (0)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 201335811, - "minimum": 3, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "FixedDateDayOfMonth": { - "id": 60, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The day of the month (0 = every day) on which at 00:00 the fixed date logging takes place", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 1, - "minimum": 1, - "maximum": 28 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "MetroRadioLifeTimeCounter": { - "id": 61, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An uint32_t counter used originally for debugging during development. Meanwhile out of use", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": { - "values": { - "default": 0 - } - } - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PowerLevelOption": { - "id": 62, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An uint8_t value related to the power level used by the radio when an Irda module is present", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 127 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Read calibration value from data base, dependant on used variant.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ImpedanceCodeNew": { - "id": 63, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An uint16_t value used for adjusting the antenna impedance", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 32767 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Read calibration value from data base, dependant on used variant.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "ImpedanceCodeOption": { - "id": 64, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An uint16_t value used for adjusting the antenna impedance if an Irda module is present", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 4, - "minimum": 0, - "maximum": 32767 - }, - "statictype": "static", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Read calibration value from data base, dependant on used variant.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "IrDAModulePresent": { - "id": 65, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A parameter of type bool that signals the presence of an Irda module. The value is controlled by the meter", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 1 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignor because is set up at CUSTOMER APP?", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "StoreConfiguration": { - "id": 66, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", - "version": { - "first": 100, - "last": 553 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "finalize" - } - } - ] - }, - "LifeTimeSeconds": { - "id": 67, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of seconds since the radio left the production (Set to 0 at the end of the production proccess)", - "version": { - "first": 100, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "DutyCycleCredit": { - "id": 68, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A value (counter) used only during development for release testing", - "version": { - "first": 412, - "last": 553 - }, - "values": { - "default": 4320000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "ActivityCredit": { - "id": 69, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A counter used to control the radio activity which must not exceed certain regulatory limits", - "version": { - "first": 412, - "last": 553 - }, - "values": { - "default": 1000, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "PersistenceGroup1": { - "id": 70, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage item for HistoricalErrorLimitCounters Reverse(1, hi) and Leak(0, lo)", - "version": { - "first": 437, - "last": 553 - }, - "values": { - "default": 16711935, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PersistenceGroup2": { - "id": 71, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage item for HistoricalErrorLimitCounters Magnet(3, hi) and Air(2, lo)", - "version": { - "first": 437, - "last": 553 - }, - "values": { - "default": 16711935, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PersistenceGroup3": { - "id": 72, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage item for HistoricalErrorLimitCounters PressureMin(5, hi) and PressureMax(4, lo)", - "version": { - "first": 437, - "last": 553 - }, - "values": { - "default": 16711935, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PersistenceGroup4": { - "id": 73, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage item for HistoricalErrorLimitCounters TempMin(7, hi) and TempMax(6, lo)", - "version": { - "first": 437, - "last": 553 - }, - "values": { - "default": 16711935, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PressureCalibration": { - "id": 74, - "details": [ - { - "type": "int8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "int8_t value to add an offset to the measured pressure in 10mBar resolution (for value from -1270 to +1270 mBar for field calibration purposes). -128 is an invalid value", - "version": { - "first": 483, - "last": 553 - }, - "values": { - "default": 0, - "minimum": -127, - "maximum": 127 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because is set up at METROLOGYASST APP.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "TfxSecondaryChannelInfo_1": { - "id": 75, - "details": [ - { - "type": "uint48_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "a 6 bytes big complex structure for the Tfx settings of the secondary channel 1 (temperature)", - "version": { - "first": 494, - "last": 553 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "TfxSecondaryChannelInfo_2": { - "id": 76, - "details": [ - { - "type": "uint48_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "a 6 bytes big complex structure for the Tfx settings of the secondary channel 2 (pressure)", - "version": { - "first": 494, - "last": 553 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "OmsLastMessageCounter": { - "id": 77, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "An unit32_t value used to support/control the MB_MODE3_OMSv4B transmission uinque MCR", - "version": { - "first": 499, - "last": 553 - }, - "values": { - "default": 0, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "Can be ignored because these are temporary values just for information.", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PersistenceGroup5": { - "id": 78, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage item for HistoricalErrorLimitCounters NoFlowAlarm(7, hi) and Metrology Failure(6, lo)", - "version": { - "first": 536, - "last": 553 - }, - "values": { - "default": 16711935, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PersistenceGroup6": { - "id": 79, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Storage item for HistoricalErrorLimitCounters Reboot Alarm(7, hi) and reserved(6, lo)", - "version": { - "first": 536, - "last": 553 - }, - "values": { - "default": 16711680, - "minimum": 0, - "maximum": 4294967295 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": false, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "Gradient_Alarm_Telegram_Persistence": { - "id": 80, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Alarm persistence in Minutes for both pressure Gardient Alarm types", - "version": { - "first": 550, - "last": 553 - }, - "values": { - "default": 60, - "minimum": 0, - "maximum": 255 - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "joerg.lachenmayer@xylem.com" - ], - "remarks": "", - "region": { - "emea": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - } + } }, - "status": { - "UNKNOWN_PARAMETER": { - "action": "According to the source code no action assigned to this error code", - "description": "It appears to be not used", - "id": 0 - }, - "BAD_CONFIG": { - "action": "Writing a new LOG or FDR content to Radio for forwarding to PeriodicLog", - "description": "A bit mask is written which is not valid (e.g. not all mandatory bits are equal to 1)", - "id": 1 - }, - "NO_CHANGE": { - "action": "Writing a new parameter value so several functions (e.g. Set HistoricalErrorLimitDays)", - "description": "The new value has no effect: New value == Old value)", - "id": 2 - }, - "STORE_PENDING": { - "action": "Writing SENSUSRADIO_STORECONFIGURATION to 1 ...", - "description": "The initiated storing action is still ongoing and the file system is busy. The final status is pending", - "id": 3 - }, - "DID_NOT_STORE": { - "action": "Writing SENSUSRADIO_STORECONFIGURATION to 1 ...", - "description": "This is a final status. The initiated storing action failed. An alternate status would be 'OK'", - "id": 4 - } - } - }, - "SYSTEM": { - "id": 0, - "version": { - "first": 141, - "last": 541 + "FLEXNETVERSION": { + "id": 24, + "version": { + "first": 1, + "last": 9999 + } }, - "registers": { - "TriggerUpgrade": { - "id": 0, - "details": [ - { - "type": "bool_t", - "privilege": { - "lvl1": "NA", - "lvl2": "NA", - "lvl3": "NA", - "lvl4": "NA", - "lvl5": "NA", - "lvl6": "NA", - "lvl7": "WO", - "lvl8": "WO" - }, - "description": "Writing TRUE to this register internally calls SysTriggerUpgrade() then returns the result.", - "version": { - "first": 141, - "last": 541 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Firmware upgrade may well use these.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "CheckPresence": { - "id": 1, - "details": [ - { - "type": "RPC", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Writing an application id number allows the version number of that application to be read back.", - "version": { - "first": 150, - "last": 541 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Useful for checking the firmware that is loaded.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "PCBSerialNumber": { - "id": 2, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "A string reporting the PCB serial number, this string must be set using production equipment.", - "version": { - "first": 169, - "last": 541 - }, - "values": { - "default": "" - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "CustomerSerialNumber0": { - "id": 3, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A string reported relating to the customer, this string can be written only once after manufacture. If subsequent changes are needed CUSTOMERSERIALNUMBER1 must be used.", - "version": { - "first": 170, - "last": 541 - }, - "values": { - "default": "" - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "CustomerSerialNumber1": { - "id": 4, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A string reported relating to the customer, this string can be written only once after manufacture. If subsequent changes are needed CUSTOMERSERIALNUMBER2 must be used.", - "version": { - "first": 170, - "last": 541 - }, - "values": { - "default": "" - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "CustomerSerialNumber2": { - "id": 5, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A string reported relating to the customer, this string can be written only once after manufacture. If subsequent changes are needed CUSTOMERSERIALNUMBER3 must be used.", - "version": { - "first": 170, - "last": 541 - }, - "values": { - "default": "" - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "CustomerSerialNumber3": { - "id": 6, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "A string reported relating to the customer, this string can be written only once after manufacture. This is the last customer serial number change slot.", - "version": { - "first": 170, - "last": 541 - }, - "values": { - "default": "" - }, - "statictype": "infrequentlyupdated", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "MonotonicSeconds": { - "id": 7, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "The number of seconds since reboot.", - "version": { - "first": 176, - "last": 541 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "CalendarSeconds": { - "id": 8, - "details": [ - { - "type": "time_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "The number of seconds since 01-Jan-2000.", - "version": { - "first": 176, - "last": 541 - }, - "statictype": "dynamic", - "production": { - "required": true, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "Time now. Write the current time during manufacture.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "CoreRevision": { - "id": 9, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "A string reporting the product version string held in the system core binary.", - "version": { - "first": 196, - "last": 541 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [ - "alex.frost@xylem.com" - ], - "remarks": "This is effectively another application version number but for the Breeze Core and is worth looking at.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "DriveCapacity": { + "FUNCTEST": { "id": 10, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "version": { + "first": 0, + "last": 1003 + }, + "registers": { + "GP30Test": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "GP30 test to run.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] }, - "description": "Writing a drive number returns the drive capacity in bytes, or 0 if the drive is not ready, or an error if the driver is not configured to be present.", - "version": { - "first": 233, - "last": 541 + "LCDTest": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "LCD test to run.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } + "Iloop": { + "id": 2, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test not supported.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] }, - "fieldtool": { - "reset_permitted": "no" + "Pulse": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test not supported.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "Pressure": { + "id": 4, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test the pressure sensor.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "BatteryVoltage": { + "id": 5, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Read CPU Vbat.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "SupplyVoltage": { + "id": 6, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Read CPU Vcc.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "Temperature": { + "id": 7, + "details": [ + { + "type": "int16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Read CPU Temperature.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "RFID": { + "id": 8, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test not supported.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "OpticalOutput": { + "id": 9, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test the pulse output LED.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "Radio": { + "id": 10, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test the Radio at basic SPI level.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "MultiTest": { + "id": 11, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Run a list of basic tests and display results on LCD.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "NFCUID": { + "id": 12, + "details": [ + { + "type": "uint64_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Return the UID uint8_t array as a uint64_t.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] + }, + "CPUTest": { + "id": 13, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Test various aspects of the CPU.", + "version": { + "first": 0, + "last": 1003 + }, + "statictype": null + } + ] } - } - ] - }, - "ExitReason": { - "id": 11, - "details": [ - { - "type": "status_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + }, + "status": { + "BAD_CONFIG": { + "id": 0 }, - "description": "Writing an application id number allows the exit error number of that application to be read back.", - "version": { - "first": 258, - "last": 541 + "BAD_TEST": { + "id": 1 }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" + "NO_RESULT": { + "id": 2 } - } - ] - }, - "CorePlatform": { - "id": 12, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RO", - "lvl8": "RO" - }, - "description": "Reports the instruction set of the hosting microprocessor in b8-15 and allocated platform number in b0-7.", - "version": { - "first": 265, - "last": 541 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "n/a" - } - } - ] - }, - "CRC": { - "id": 13, - "details": [ - { - "type": "uint16_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Writing an application id number allows the CRC of that application to be read back.", - "version": { - "first": 279, - "last": 541 - }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Useful for checking the firmware that is loaded.", - "region": { - "emea": null, - "na": null - } - }, - "fieldtool": { - "reset_permitted": "no" - } - } - ] - }, - "UpgradePermissions": { - "id": 14, - "details": [ - { - "type": "uint8_t", - "privilege": { - "lvl1": "RO", - "lvl2": "RO", - "lvl3": "RO", - "lvl4": "RO", - "lvl5": "RO", - "lvl6": "RO", - "lvl7": "RW", - "lvl8": "RW" - }, - "description": "Bitfield of permissions releated to firmware upgrade", - "version": { - "first": 470, - "last": 541 - }, - "statictype": "static", - "production": { - "required": false, - "kitron": false, - "csd": "default", - "vako": false, - "operation_calibration": true, - "runtime_ignore": false, - "responsible": [ - "alex.frost@xylem.com", - "roland.drabesch@xylem.com" - ], - "remarks": "Set fix as final step at production.", - "region": { - "emea": { - "values": { - "default": 254 - } - }, - "na": { - "values": { - "default": 255 - } - } - } - }, - "fieldtool": { - "reset_permitted": "yes" - } - } - ] - }, - "CRC32": { + } + }, + "GENESISFLOW": { "id": 15, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "version": { + "first": 7, + "last": 606 + }, + "registers": { + "SampleRate": { + "id": 0, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate in Hz that each GP30 takes measurements", + "version": { + "first": 7, + "last": 203 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate in Hz that each GP30 takes measurements", + "version": { + "first": 204, + "last": 267 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate in Hz that each GP30 takes measurements", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 2 + } + }, + "na": { + "values": { + "default": 2 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate in Hz that each GP30 takes measurements", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate in Hz that each GP30 takes measurements", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate in Hz that each GP30 takes measurements", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] }, - "description": "Writing an application id number allows the 32 bit CRC of that application to be read back.", - "version": { - "first": 529, - "last": 541 + "FirstHitLvlUp1": { + "id": 1, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 1, units of 0.88mV", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + } + ] }, - "statictype": "dynamic", - "production": { - "required": false, - "kitron": false, - "csd": null, - "vako": false, - "operation_calibration": false, - "runtime_ignore": true, - "responsible": [], - "remarks": "Useful for checking the firmware that is loaded.", - "region": { - "emea": null, - "na": null - } + "FirstHitLvlUp2": { + "id": 2, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 2, units of 0.88mV", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + } + ] }, - "fieldtool": { - "reset_permitted": "no" + "FirstHitLvlUp3": { + "id": 3, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the upstream direction for channel 3, units of 0.88mV", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + } + ] + }, + "FirstHitLvlDown1": { + "id": 4, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 1, units of 0.88mV", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + } + ] + }, + "FirstHitLvlDown2": { + "id": 5, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 2, units of 0.88mV", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + } + ] + }, + "FirstHitLvlDown3": { + "id": 6, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The first hit level in the downstream direction for channel 3, units of 0.88mV", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": -128, + "maximum": 127 + }, + "statictype": "dynamic" + } + ] + }, + "StartHit": { + "id": 7, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The hit number to consider as the first hit", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The hit number to consider as the first hit", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "Default is 6 and it should stay as 6 for all sizes.", + "region": { + "emea": { + "values": { + "default": 6 + } + }, + "na": { + "values": { + "default": 6 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The hit number to consider as the first hit", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The hit number to consider as the first hit", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The hit number to consider as the first hit", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "AmplitudePeakDetectEnd": { + "id": 8, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Where to stop running the amplitude peak detection", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 19, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Where to stop running the amplitude peak detection", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 19, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "Not expecting to change this unless field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Where to stop running the amplitude peak detection", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 19, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Where to stop running the amplitude peak detection", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 19, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Where to stop running the amplitude peak detection", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 19, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "NumFirePulses": { + "id": 9, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of pulses to fire for a measurement", + "version": { + "first": 7, + "last": 267 + }, + "values": { + "default": 17, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of pulses to fire for a measurement", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 17, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "Not expecting to change this unless field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of pulses to fire for a measurement", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 17, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of pulses to fire for a measurement", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 17, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of pulses to fire for a measurement", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 17, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "DisplayPow10": { + "id": 10, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", + "version": { + "first": 36, + "last": 267 + }, + "values": { + "default": -6, + "minimum": -128, + "maximum": 127 + }, + "statictype": "static" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": -6, + "minimum": -128, + "maximum": 127 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "(<=125 = 3n ) 150=> 2n in m -> what about other Units. See Display Unit Customer Specification.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": -6, + "minimum": -128, + "maximum": 127 + }, + "statictype": "static" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": -6, + "minimum": -128, + "maximum": 127 + }, + "statictype": "static" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The weight of the lowest display digit as a power of 10. The accepted range of values depends on the LCD present and the DisplayUnits chosen", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": -6, + "minimum": -128, + "maximum": 127 + }, + "statictype": "static" + } + ] + }, + "DisplayUnits": { + "id": 11, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", + "version": { + "first": 36, + "last": 267 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Same units for each calculator. Vako.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of volume to display. The accepted range of values depends on the LCD present and the DisplayPow10 chosen", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + } + ] + }, + "MeterSize": { + "id": 12, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The meter pipe size", + "version": { + "first": 45, + "last": 237 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 9 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The meter pipe size", + "version": { + "first": 238, + "last": 267 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 17 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The meter pipe size", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 17 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Base No. (4th digit G=50, ...) or B01 Nominal diameter (DN) (DN50, ...).", + "region": { + "emea": { + "values": { + "DN40": 0, + "DN50": 1, + "DN65": 2, + "DN80": 3, + "DN100": 4, + "DN125": 5, + "DN150": 6, + "DN200": 7, + "DN250": 8, + "DN300": 9 + } + }, + "na": { + "values": { + "US1_5": 10, + "US2": 11, + "US3": 12, + "US4": 13, + "US6": 14, + "US8": 15, + "US10": 16, + "US12": 17 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The meter pipe size", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 17 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The meter pipe size", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 17 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The meter pipe size", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 17 + }, + "statictype": "static" + } + ] + }, + "CalFactor1": { + "id": 13, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 1", + "version": { + "first": 45, + "last": 200 + }, + "values": { + "default": 62500, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 1", + "version": { + "first": 201, + "last": 267 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 1", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 1", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 1", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 1", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + } + ] + }, + "CalFactor2": { + "id": 14, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 2", + "version": { + "first": 45, + "last": 200 + }, + "values": { + "default": 62500, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 2", + "version": { + "first": 201, + "last": 267 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 2", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 2", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 2", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 2", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + } + ] + }, + "CalFactor3": { + "id": 15, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 3", + "version": { + "first": 45, + "last": 200 + }, + "values": { + "default": 62500, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 3", + "version": { + "first": 201, + "last": 267 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 3", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 3", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 3", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration factor for ultrasonic channel 3", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 15625, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + } + ] + }, + "ZeroOffset1": { + "id": 16, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in usual time of flight scaling (ie LS bit is 2^-38 seconds)", + "version": { + "first": 45, + "last": 132 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 133, + "last": 267 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Seconds: convert time in 2^-38 seconds...", + "units": "s", + "scale_float_mult": 1.0, + "scale_power_2": -38, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 1 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + } + ] + }, + "ZeroOffset2": { + "id": 17, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in usual time of flight scaling (ie LS bit is 2^-38 seconds)", + "version": { + "first": 45, + "last": 132 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 133, + "last": 267 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Seconds: convert time in 2^-38 seconds...", + "units": "s", + "scale_float_mult": 1.0, + "scale_power_2": -38, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 2 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + } + ] + }, + "ZeroOffset3": { + "id": 18, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in usual time of flight scaling (ie LS bit is 2^-38 seconds)", + "version": { + "first": 45, + "last": 132 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 133, + "last": 267 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Seconds: convert time in 2^-38 seconds...", + "units": "s", + "scale_float_mult": 1.0, + "scale_power_2": -38, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The delta time of flight expected on ultrasound channel 3 at zero flow. Value is in units 4 times smaller than usual time of flight scaling (ie LS bit is 2^-40 seconds)", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + } + ] + }, + "ScaledBilling": { + "id": 19, + "details": [ + { + "type": "int64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", + "version": { + "first": 47, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + }, + { + "type": "int64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "int64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "int64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The scaled volume value shown on the display. In the units and precision set by DisplayUnits and DisplayPow10 respectively. Decimal point is not represented in this value", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "ResetAccumulators": { + "id": 20, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "WO", + "lvl2": "WO", + "lvl3": "WO", + "lvl4": "WO", + "lvl5": "WO", + "lvl6": "WO", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write 1 to reset all accumulated volume to zero", + "version": { + "first": 47, + "last": 267 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write 1 to reset all accumulated volume to zero", + "version": { + "first": 268, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "You will need this if you wish to reset the volume to zero at the end of calibration.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write 1 to reset all accumulated volume to zero", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write 1 to reset all accumulated volume to zero", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write 1 to reset all accumulated volume to zero", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "ForwardArrow": { + "id": 21, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", + "version": { + "first": 47, + "last": 267 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 2 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 2 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "default": 1 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 2 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 2 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 2 + }, + "statictype": "infrequentlyupdated" + } + ] + }, + "LedMode": { + "id": 22, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The type of data output by the green LED", + "version": { + "first": 47, + "last": 203 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The type of data output by the green LED", + "version": { + "first": 204, + "last": 267 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The type of data output by the green LED", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The type of data output by the green LED", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The type of data output by the green LED", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The type of data output by the green LED", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + } + ] + }, + "StoreCalibration": { + "id": 23, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", + "version": { + "first": 54, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "You will need to use this during calibration.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store calibration values to non-volatile storage. Read back for status", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "UnscaledFwd": { + "id": 24, + "details": [ + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 54, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The forward flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "UnscaledRev": { + "id": 25, + "details": [ + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The reverse flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 54, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The reverse flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The reverse flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The reverse flow accumulator volume. The scale depends on the meter size", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "LowFlowThreshold": { + "id": 26, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", + "version": { + "first": 55, + "last": 267 + }, + "values": { + "default": 200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Cubic Meters: conversion of the volume volume in ml ...", + "units": "m^3", + "scale_float_mult": 1.0, + "scale_power_2": 0, + "scale_power_10": -6, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "Default for other DN (200 -> DN50).", + "region": { + "emea": { + "values": { + "DN40": 200, + "DN50": 200, + "DN65": 333, + "DN80": 550, + "DN100": 900, + "DN125": "TBD", + "DN150": 2000, + "DN200": 800, + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US1_5": 200, + "US2": 200, + "US3": 550, + "US4": 900, + "US6": 1833, + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "LowFlowMaxPeriod": { + "id": 27, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", + "version": { + "first": 55, + "last": 267 + }, + "values": { + "default": 3932160, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Seconds: time in 2^-16 seconds ...", + "units": "s", + "scale_float_mult": 1.0, + "scale_power_2": -16, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 3932160, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "Default for other DN (3932160 -> DN50).", + "region": { + "emea": { + "values": { + "default": 3932160 + } + }, + "na": { + "values": { + "default": 3932160 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 3932160, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 3932160, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time during which LowFlowThreshold volume must pass for it to be registered as real flow. Units of seconds << 16", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 3932160, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "UpdateThreshold": { + "id": 28, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", + "version": { + "first": 55, + "last": 267 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "I doubt this will be used. It is to allow less frequent LCD updates if so desired but we're fine.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "ArrowThreshold": { + "id": 29, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", + "version": { + "first": 55, + "last": 267 + }, + "values": { + "default": 5000000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 5000000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Default for other DN (J.S.: 2000000-> DN50)", + "region": { + "emea": { + "values": { + "default": 2000000, + "DN125": "TBD", + "DN250": "TBD", + "DN300": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 5000000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 5000000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The net volume in ml that must flow in one direction for the forward arrow to be set", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 5000000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "FireBuffer1": { + "id": 30, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 1 to be used", + "version": { + "first": 64, + "last": 267 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 1 to be used", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Not expecting to change this unless field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 1 to be used", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 1 to be used", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 1 to be used", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "FireBuffer2": { + "id": 31, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 2 to be used", + "version": { + "first": 64, + "last": 267 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 2 to be used", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Not expecting to change this unless field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 2 to be used", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 2 to be used", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 2 to be used", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "FireBuffer3": { + "id": 32, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 3 to be used", + "version": { + "first": 64, + "last": 267 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 3 to be used", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Not expecting to change this unless field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 3 to be used", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 3 to be used", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The fire buffer within the GP30 on channel 3 to be used", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "TriggerActive": { + "id": 33, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "WO", + "lvl2": "WO", + "lvl3": "WO", + "lvl4": "WO", + "lvl5": "WO", + "lvl6": "WO", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", + "version": { + "first": 75, + "last": 267 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", + "version": { + "first": 268, + "last": 306 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", + "version": { + "first": 307, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "You will need this if you use TriggerIdle or TriggerTest", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "TriggerIdle": { + "id": 34, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", + "version": { + "first": 75, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "This was asked for so the battery usage could be minimised in manufacture so I expect it'll be used there.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 0 to put GenesisFlow in Active mode, otherwise put GenesisFlow in Idle mode. Idle mode displays just the number written to TriggerIdle. No measurements are performed. Read returns the number written", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic" + } + ] + }, + "MaxValidDeltaToF": { + "id": 35, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 87, + "last": 267 + }, + "values": { + "default": 247390, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Seconds: time in 2^-38 seconds ...", + "units": "s", + "scale_float_mult": 1.0, + "scale_power_2": -38, + "scale_power_10": 0, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 309237, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "247390 <-DN50 - default for other DN?", + "region": { + "emea": { + "values": { + "DN40": 247390, + "DN50": 247390, + "DN65": 402008, + "DN80": 494779, + "DN100": 618474, + "DN125": "TBD", + "DN150": 439804, + "DN200": 1236948, + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US1_5": 1855422, + "US2": 1855422, + "US3": 494779, + "US4": 618474, + "US6": 439804, + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 309237, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 309237, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 309237, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "MaxValidToF": { + "id": 36, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 87, + "last": 267 + }, + "values": { + "default": 24739011, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 24739011, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "<-DN50 - default for other DN?", + "region": { + "emea": { + "values": { + "DN40": 24739011, + "DN50": 24739011, + "DN65": 32160714, + "DN80": 39582418, + "DN100": 49478022, + "DN125": "TBD", + "DN150": 46729244, + "DN200": 98956044, + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US1_5": 24739011, + "US2": 24739011, + "US3": 39582418, + "US4": 49478022, + "US6": 46729244, + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 24739011, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 24739011, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 24739011, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "MinValidToF": { + "id": 37, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 87, + "last": 267 + }, + "values": { + "default": 13743895, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 13743895, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "<-DN50 - default for other DN?", + "region": { + "emea": { + "values": { + "DN40": 13743895, + "DN50": 13743895, + "DN65": 13743895, + "DN80": 21990232, + "DN100": 27487790, + "DN125": "TBD", + "DN150": 30236569, + "DN200": 54975580, + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US1_5": 13743895, + "US2": 13743895, + "US3": 21990232, + "US4": 27487790, + "US6": 30236569, + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 13743895, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 13743895, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 13743895, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "FirstHitPercent1": { + "id": 38, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", + "version": { + "first": 93, + "last": 267 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 1", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "FirstHitPercent2": { + "id": 39, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", + "version": { + "first": 93, + "last": 267 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 2", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "FirstHitPercent3": { + "id": 40, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", + "version": { + "first": 93, + "last": 267 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The percentage of the measured amplitude to use for the first hit level for channel 3", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "FirstHitShift": { + "id": 41, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", + "version": { + "first": 93, + "last": 267 + }, + "values": { + "default": 4, + "minimum": 3, + "maximum": 8 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 4, + "minimum": 3, + "maximum": 8 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 4, + "minimum": 3, + "maximum": 8 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 4, + "minimum": 3, + "maximum": 8 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value describing how long the amplitude is averaged over for calculating the first hit level. This is the amount each amplitude value is shifted down before being added to the moving average", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 4, + "minimum": 3, + "maximum": 8 + }, + "statictype": "static" + } + ] + }, + "FirstHitMinimum": { + "id": 42, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum absolute first hit level value", + "version": { + "first": 93, + "last": 267 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum absolute first hit level value", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "A limit for how small the first hit level can be set We don't expect this to change unless firled trials say it should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum absolute first hit level value", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum absolute first hit level value", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum absolute first hit level value", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 20, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "ToFErrorLimit": { + "id": 43, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", + "version": { + "first": 93, + "last": 267 + }, + "values": { + "default": 16, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 16, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "This allows us to avoid being stuck with a bad first hit level if conditions change. Not expecting to change it unless field trials show we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 16, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 16, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 16, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "FirstHitUpdatePeriod": { + "id": 44, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period (in seconds) between first hit level updates", + "version": { + "first": 99, + "last": 267 + }, + "values": { + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period (in seconds) between first hit level updates", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "Not expecting to change this unless field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period (in seconds) between first hit level updates", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period (in seconds) between first hit level updates", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period (in seconds) between first hit level updates", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "PipeFillingDelay": { + "id": 45, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", + "version": { + "first": 119, + "last": 267 + }, + "values": { + "default": 30, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 30, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "The amount of time after empty pipe that we stay in zero flow mode. Same as iPerl, not expected to be changed but could be if field trials say we should.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 30, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 30, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time (in seconds) to maintain zero flow after leaving empty pipe", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 30, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "ToFTempOffset1": { + "id": 46, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", + "version": { + "first": 124, + "last": 267 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + } + ] + }, + "ToFTempOffset2": { + "id": 47, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", + "version": { + "first": 124, + "last": 267 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + } + ] + }, + "ToFTempOffset3": { + "id": 48, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", + "version": { + "first": 124, + "last": 267 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated" + } + ] + }, + "ToFTempCalibrate": { + "id": 49, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "WO", + "lvl2": "WO", + "lvl3": "WO", + "lvl4": "WO", + "lvl5": "WO", + "lvl6": "WO", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", + "version": { + "first": 124, + "last": 204 + }, + "values": { + "minimum": 0, + "maximum": 270336 + }, + "statictype": "dynamic" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", + "version": { + "first": 205, + "last": 322 + }, + "values": { + "minimum": 0, + "maximum": 286720 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "minimum": 0, + "maximum": 286720 + }, + "statictype": "dynamic" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "minimum": 0, + "maximum": 286720 + }, + "statictype": "dynamic" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "minimum": 0, + "maximum": 286720 + }, + "statictype": "dynamic" + } + ] + }, + "StoreConfiguration": { + "id": 50, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 141, + "last": 267 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 268, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "You do need to use this if you change any parameters in GENESISFLOW and want to keep them.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 450, + "last": 463 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 500, + "last": 509 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 601, + "last": 606 + }, + "statictype": "dynamic" + } + ] + }, + "SealDisplay": { + "id": 51, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", + "version": { + "first": 161, + "last": 267 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "roland.drabesch@xylem.com" + ], + "remarks": "Display should be sealed at end of manufacture (EMEA only).", + "region": { + "emea": { + "values": { + "default": 1 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + } + ] + }, + "TriggerTest": { + "id": 52, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", + "version": { + "first": 162, + "last": 267 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "dynamic" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to put GenesisFlow in Test mode. This differs from normal measurement mode in that the volume is presented to 3 extra decimal places if possible. Read back 1 for Test mode, 0 otherwise", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "dynamic" + } + ] + }, + "MaxValidAmplitude": { + "id": 53, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Maximum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 168, + "last": 267 + }, + "values": { + "default": 2936012800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Maximum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 268, + "last": 322 + }, + "si_transform": { + "remarks": "Volts: voltage in 2^-22 millivolts ...", + "units": "v", + "scale_float_mult": 1.0, + "scale_power_2": -22, + "scale_power_10": -3, + "scale_float_div": 1.0, + "offset": 0 + }, + "values": { + "default": 2936012800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "629145600 <-DN50 - default for other DN?", + "region": { + "emea": { + "values": { + "default": 2936012800 + } + }, + "na": { + "values": { + "default": 2936012800 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Maximum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 2936012800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Maximum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 2936012800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Maximum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 2936012800, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "MinValidAmplitude": { + "id": 54, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 168, + "last": 267 + }, + "values": { + "default": 209715200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 209715200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "<-DN50 - default for other DN?", + "region": { + "emea": { + "values": { + "default": 629145600 + } + }, + "na": { + "values": { + "default": 629145600 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 209715200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 209715200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Minimum amplitude for a valid signal in 2^-22mV units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 209715200, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "HardErrorLimit": { + "id": 55, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of hard errors to allow before declaring a fatal error", + "version": { + "first": 176, + "last": 267 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of hard errors to allow before declaring a fatal error", + "version": { + "first": 268, + "last": 322 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "The number of hard errors before deciding a fatal error has occurred. This will probably only change in response to testing in the field.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of hard errors to allow before declaring a fatal error", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of hard errors to allow before declaring a fatal error", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Number of hard errors to allow before declaring a fatal error", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static" + } + ] + }, + "Timeout": { + "id": 56, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", + "version": { + "first": 273, + "last": 322 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "ben.davey@xylem.com" + ], + "remarks": "<-DN50 - default for other DN?", + "region": { + "emea": { + "values": { + "default": 1, + "DN100": [ + 1, + 2 + ], + "DN125": "TBD", + "DN200": 2, + "DN250": "TBD", + "DN300": 2 + } + }, + "na": { + "values": { + "default": 1, + "US4": "TBD", + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + } + ] + }, + "MaxDeltaToFDeviation": { + "id": 57, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", + "version": { + "first": 280, + "last": 322 + }, + "values": { + "default": 109951, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "0.4us for all meter sizes up to DN100, above that TBD. 0.4us is 109951 (0x1AD7F).", + "region": { + "emea": { + "values": { + "default": 109951, + "DN125": "TBD", + "DN200": "TBD", + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "default": 109951, + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", + "version": { + "first": 450, + "last": 463 + }, + "values": { + "default": 109951, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", + "version": { + "first": 500, + "last": 509 + }, + "values": { + "default": 109951, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 109951, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "MaxTempRange": { + "id": 58, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", + "version": { + "first": 289, + "last": 322 + }, + "values": { + "default": 8192, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 8192 + } + }, + "na": { + "values": { + "default": 8192 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", + "version": { + "first": 451, + "last": 463 + }, + "values": { + "default": 8192, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", + "version": { + "first": 504, + "last": 509 + }, + "values": { + "default": 8192, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 8192, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "MaxDeltaToFRange": { + "id": 59, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", + "version": { + "first": 289, + "last": 322 + }, + "values": { + "default": 137438, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "ben.davey@xylem.com" + ], + "remarks": "0.5us for all meter sizes. 0.5us is 137438 (0x218DE).", + "region": { + "emea": { + "values": { + "default": 137438 + } + }, + "na": { + "values": { + "default": 137438 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", + "version": { + "first": 451, + "last": 463 + }, + "values": { + "default": 137438, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", + "version": { + "first": 504, + "last": 509 + }, + "values": { + "default": 137438, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units", + "version": { + "first": 601, + "last": 606 + }, + "values": { + "default": 137438, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + } + ] + }, + "LookupFileCrc": { + "id": 60, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Read for the current loaded lookup table CRC, write to set the expected CRC.", + "version": { + "first": 295, + "last": 322 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": "custom", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "mark.clemens@xylem.com" + ], + "remarks": "Will change with different releases - should be tracked elsewhere. meter_lut_202506270844_v0.19_crc_list.", + "region": { + "emea": { + "values": { + "DN40": 16549, + "DN50": 46338, + "DN65": 52673, + "DN80": 18061, + "DN100": 48372, + "DN125": 8134, + "DN150": 1637, + "DN200": 26376, + "DN250": 45341, + "DN300": 49157 + } + }, + "na": { + "values": { + "US1_5": 50785, + "US2": 58892, + "US3": 52036, + "US4": 50586, + "US6": 8010, + "US8": 52526, + "US10": 24406, + "US12": 11854 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + } + ] + }, + "DisplayLeadingZeros": { + "id": 61, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether to display leading zeros on row 2. If false leading zeros will be replaced with a space", + "version": { + "first": 302, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "This controls the temperature, pressure, flow rate readings on the smaller second row of digits. Previous code would display 012.3 C whereas with DisplayLeadingZeros set to 0 youll get _12.3 C (where the _ is actually just an empty space).", + "region": { + "emea": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + } + ] + }, + "InstallationCorrectionEnabled": { + "id": 62, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether the installation correction function is enabled or not", + "version": { + "first": 310, + "last": 318, + "exclude": [ + 315, + 316, + 317 + ] + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Installation detection / bend correction registers. Currently unreleased.", + "region": { + "emea": { + "values": { + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + } + ] + }, + "InstallationDetectionThreshold": { + "id": 63, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The threshold in ml for deciding on the meter installation", + "version": { + "first": 310, + "last": 318, + "exclude": [ + 315, + 316, + 317 + ] + }, + "values": { + "default": 500, + "minimum": 0, + "maximum": 10000000 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Installation detection / bend correction registers. Currently unreleased.", + "region": { + "emea": { + "values": { + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + } + ] + }, + "InstallationType": { + "id": 64, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The detected installation type, MS 16 bits is the type of installation, LS 16 bits is the proportion of correction to apply", + "version": { + "first": 310, + "last": 318, + "exclude": [ + 315, + 316, + 317 + ] + }, + "values": { + "minimum": 0, + "maximum": 163840 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Installation detection / bend correction registers. Currently unreleased.", + "region": { + "emea": { + "values": { + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "InstallationDetectionStatus": { + "id": 65, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Installation detection percentage complete, returns 100 if installation detection isn't running", + "version": { + "first": 310, + "last": 318, + "exclude": [ + 315, + 316, + 317 + ] + }, + "values": { + "minimum": 0, + "maximum": 100 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Installation detection / bend correction registers. Currently unreleased.", + "region": { + "emea": { + "values": { + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "US8": "TBD", + "US10": "TBD", + "US12": "TBD" + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FractionalBars": { + "id": 66, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether to display bars above the fractional digits on the LCD (if supported)", + "version": { + "first": 311, + "last": 321, + "exclude": [ + 315, + 316, + 317, + 319, + 320 + ] + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Probably customer specific in EMEA should always be false in NA.", + "region": { + "emea": { + "values": { + "DN250": "TBD", + "DN300": "TBD" + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + } + ] + }, + "CalibrationCount": { + "id": 67, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "A count of the relevant calibration values, for internal use", + "version": { + "first": 313, + "last": 322 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Internal use only, ignore.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "DelayedLedOff": { + "id": 68, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "WO", + "lvl6": "WO", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write the number of seconds in the future to turn off the LED output. This countdown will be cancelled if LedMode is changed during the delay.", + "version": { + "first": 314, + "last": 322 + }, + "values": { + "minimum": 0, + "maximum": 28800 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Enhancement for ensuring LED is off after metrology testing, useful to add to test software for GenesisFlow versions 3.16 and newer (not released yet June 2024).", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "DisplayVolumeRow2": { + "id": 69, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether or not to display the fractional digits of the volume as part of the row 2 carousel. Be aware this could change the scaling of the volume calculation if more decimal places now need calculating", + "version": { + "first": 322, + "last": 322 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "TBD", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "ro-check" + } + } + ] } - } - ] - } - }, - "status": { - "OK": { - "id": 0 - }, - "ZERO_APPS": { - "id": 1 - }, - "NO_MEMORY": { - "id": 2 - }, - "NOT_IMPLEMENTED": { - "id": 3 - }, - "BLOCK_NOT_FOUND": { - "id": 4 - }, - "NO_SUCH_VAR": { - "id": 5 - }, - "NO_CLIB": { - "id": 6 - }, - "KEY_FAILURE": { - "id": 7 - }, - "NO_SLOTS_FREE": { - "id": 8 - }, - "VECTOR_OUT_OF_RANGE": { - "id": 9 - }, - "BAD_VECTOR_RELEASE": { - "id": 10 - }, - "DRIVER_BUSY": { - "id": 11 - }, - "OUT_OF_RANGE": { - "id": 12 - }, - "CANT_CANCEL_TICK": { - "id": 13 - }, - "ID_OUT_OF_RANGE": { - "id": 14 - }, - "HANDLE_OUT_OF_RANGE": { - "id": 15 - }, - "INCAPABLE_HARDWARE": { - "id": 16 - }, - "ALREADY_OPEN": { - "id": 17 - }, - "STRING_TOO_LONG": { - "id": 18 - }, - "CORRUPT_CONFIGURATION": { - "id": 19 - }, - "TIMEOUT": { - "id": 20 - }, - "NO_PRIVILEGE": { - "id": 21 - }, - "DEVICE_DORMANT": { - "id": 22 - }, - "MEDIA_FAILURE": { - "id": 23 - }, - "BUFFER_OVERFLOW": { - "id": 24 - }, - "UPGRADE_SYNTAX_ERROR": { - "id": 25 - }, - "UPGRADE_DEPENDENCY_NOT_MET": { - "id": 26 - }, - "UPGRADE_MISSING": { - "id": 27 - }, - "UPGRADE_FRAGMENTED_BY_CLIB": { - "id": 28 - }, - "TRUNCATED": { - "id": 29 - }, - "INVALID_HEADER": { - "id": 30 - }, - "WONT_DELETE_CLIB": { - "id": 31 - }, - "BAD_REGISTER_VALUE": { - "id": 32 - }, - "NO_CHANGE_MADE": { - "id": 33 - }, - "NOT_ATOMIC": { - "id": 34 - }, - "CALENDAR_CHANGED": { - "id": 35 - }, - "WORM_FIELD": { - "id": 36 - }, - "CONVERSION_UNSUPPORTED": { - "id": 37 - }, - "CPU_PERMISSION_FAULT": { - "id": 38 - }, - "CPU_SOFTWARE_FAULT": { - "id": 39 - }, - "CPU_DECODE_FAULT": { - "id": 40 - }, - "CPU_ADDRESS_ACCESS_FAULT": { - "id": 41 - }, - "CPU_UNCAUGHT_FAULT": { - "id": 42 - }, - "ACCURACY_LOST": { - "id": 43 - }, - "EXIT_FAILURE": { - "id": 44 - }, - "CANT_CANCEL_CALLBACK": { - "id": 45 - }, - "RECOVERED_SPACE": { - "id": 46 - }, - "DRIVE_FULL": { - "id": 47 - }, - "NO_FILE_HANDLES_AVAILABLE": { - "id": 48 - }, - "EXCESSIVE_RESTARTS": { - "id": 49 - }, - "MPU_SETUP_FAILED": { - "id": 50 - }, - "DEVICE_NOT_OPEN": { - "id": 51 - }, - "NO_RESPONSE": { - "id": 52 - }, - "EXIT_WATCHDOG": { - "id": 53 - }, - "WONT_DELETE_SPECIAL": { - "id": 54 - }, - "WONT_UPGRADE_SPECIAL": { - "id": 55 - } - } - }, - "TESTMANAGER": { - "id": 98, - "version": { - "first": 0, - "last": 36 - }, - "registers": { - "OutputFile": { - "id": 0, - "details": [ - { - "type": "string", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + }, + "status": { + "BAD_TEST": { + "id": 0 }, - "description": "Access the test log filename.", - "version": { - "first": 0, - "last": 36 + "BAD_CONFIG": { + "id": 1 }, - "statictype": null - } - ] - }, - "TestNumber": { + "DID_NOT_STORE": { + "id": 2 + }, + "STORE_PENDING": { + "id": 3 + }, + "STORE_BUFFER_SIZE": { + "id": 4 + }, + "STRING_TOO_LONG": { + "id": 5 + }, + "BAD_DISPLAY_MODE": { + "id": 6 + }, + "GLASS_TOO_LONG": { + "id": 7 + }, + "SLOT_NOT_YOURS": { + "id": 8 + }, + "SUBLIST_TOO_LONG": { + "id": 9 + }, + "NO_TEMP_SENSOR": { + "id": 10 + }, + "UNDER_TEMP": { + "id": 11 + }, + "LOW_TEMP_WARNING": { + "id": 12 + }, + "HIGH_TEMP_WARNING": { + "id": 13 + }, + "OVER_TEMP": { + "id": 14 + }, + "MISMATCHING_LSB": { + "id": 15 + }, + "OUT_OF_RANGE_PWDIFF": { + "id": 16 + }, + "OUT_OF_RANGE_AMPLITUDE": { + "id": 17 + }, + "OUT_OF_RANGE_TOF": { + "id": 18 + }, + "OUT_OF_RANGE_DTOF": { + "id": 19 + }, + "TOF_TIMEOUT": { + "id": 20 + }, + "CAL_CHANGE": { + "id": 21 + }, + "OUT_OF_RANGE_INTERVAL": { + "id": 22 + }, + "VALIDATE_FAIL": { + "id": 23 + }, + "OUT_OF_RANGE_TEMP": { + "id": 24 + }, + "NOT_READY": { + "id": 25 + }, + "METROLOGY_ERROR": { + "id": 26 + }, + "GP30_ID_ERROR": { + "id": 27 + }, + "GP30_FLAG_ERROR": { + "id": 28 + }, + "GP30_TIMEOUT_ERROR": { + "id": 29 + }, + "GP30_REQUEST_ERROR": { + "id": 30 + }, + "GP30_SEQ_ERROR": { + "id": 31 + }, + "VALUE_SEALED": { + "id": 32 + }, + "IN_TEST_MODE": { + "id": 33 + }, + "UNKNOWN_STATE": { + "id": 34 + }, + "DISPLAY_INIT_SUCCEEDED": { + "id": 35 + }, + "DISPLAY_INIT_FAILED": { + "id": 36 + }, + "GP30_INIT_FAILED": { + "id": 37 + }, + "START_TIMER_SUCCEEDED": { + "id": 38 + }, + "START_TIMER_FAILED": { + "id": 39 + }, + "VOLUME_STORE_FAILED": { + "id": 40 + }, + "EMPTY_PIPE": { + "id": 41 + }, + "PARAMETER_ERROR": { + "id": 42 + }, + "GP30_INTERNAL_ERROR": { + "id": 43 + }, + "GLASS_TOO_SHORT": { + "id": 44 + }, + "STORE_CAL_FAILED": { + "id": 45 + }, + "STORE_CONF_FAILED": { + "id": 46 + }, + "MODE_CHANGE": { + "id": 47 + }, + "BAD_POW10": { + "id": 48 + }, + "BAD_DECIMAL_SEPARATOR": { + "id": 49 + }, + "BAD_UNITS": { + "id": 50 + }, + "BAD_ICONS": { + "id": 51 + }, + "BAD_THOUSAND_SEPARATOR": { + "id": 52 + }, + "NEW_LOCALE_REJECTED": { + "id": 53 + }, + "SET_ACCUMULATORS": { + "id": 54 + }, + "SEAL_OPENED": { + "id": 55 + }, + "CALIBRATION_RECALL_INCOMPLETE": { + "id": 56 + }, + "BAD_AMR_SETTINGS": { + "id": 57 + }, + "SUSPECT_CYCLE_SKIP": { + "id": 58 + }, + "LOOKUP_FILE_LOADED": { + "id": 59 + }, + "LOOKUP_FILE_METERSIZE_CHANGED": { + "id": 60 + }, + "LOOKUP_FILE_FAILURE": { + "id": 61 + }, + "LOOKUP_FILE_INVALID": { + "id": 62 + }, + "LOOKUP_CRC_MISMATCH": { + "id": 63 + }, + "LOOKUP_FILE_UNKNOWN_METERSIZE": { + "id": 64 + }, + "INSTALLATION_HIGH_TIME_DIFF": { + "id": 65 + }, + "INSTALLATION_LOW_FLOW_IGNORE": { + "id": 66 + }, + "INSTALLATION_BAD_CHANNELS": { + "id": 67 + }, + "INSTALLATION_FIXED": { + "id": 68 + } + } + }, + "HISTOGRAM": { + "id": 27, + "version": { + "first": 1, + "last": 4 + }, + "registers": {} + }, + "IRDA": { + "id": 20, + "version": { + "first": 10, + "last": 213 + }, + "registers": { + "PulseReportRate": { + "id": 0, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate at which pulse reports are sent to the IrDA pulse adapter", + "version": { + "first": 10, + "last": 97 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate at which pulse reports are sent to the IrDA pulse adapter", + "version": { + "first": 98, + "last": 136 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The rate at which pulse reports are sent to the IrDA pulse adapter", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "1 sec.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AdapterPresenceLimit": { + "id": 1, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", + "version": { + "first": 18, + "last": 28 + }, + "values": { + "default": 1, + "minimum": 1, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", + "version": { + "first": 29, + "last": 97 + }, + "values": { + "default": 3, + "minimum": 1, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", + "version": { + "first": 98, + "last": 136 + }, + "values": { + "default": 3, + "minimum": 1, + "maximum": 255 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of 15 minute periods we have to have received no valid IrDA messages to assume there is no adapter present", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 3, + "minimum": 1, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 3 + } + }, + "na": { + "values": { + "default": 3 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseSequence": { + "id": 2, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The present sequence number used in pulse reports", + "version": { + "first": 26, + "last": 97 + }, + "values": { + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The present sequence number used in pulse reports", + "version": { + "first": 98, + "last": 114 + }, + "values": { + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The present sequence number used in pulse reports", + "version": { + "first": 115, + "last": 136 + }, + "values": { + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The present sequence number used in pulse reports", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "StoreConfiguration": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 26, + "last": 97 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 98, + "last": 136 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 161, + "last": 213 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "You do need to use this if you change any parameters in IRDA and want to keep them.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "AMRDigits": { + "id": 4, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of digits to use for AMR", + "version": { + "first": 40, + "last": 52 + }, + "values": { + "default": 9, + "minimum": 0, + "maximum": 9 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of digits to use for AMR", + "version": { + "first": 53, + "last": 97 + }, + "values": { + "default": 9, + "minimum": 0, + "maximum": 9 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of digits to use for AMR", + "version": { + "first": 98, + "last": 136 + }, + "values": { + "default": 8, + "minimum": 0, + "maximum": 9 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of digits to use for AMR", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 8, + "minimum": 0, + "maximum": 9 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Cordonel NA can use a subset of the display digits for AMR readings. This is the number of digits to use.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AMROffset": { + "id": 5, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The offset of the AMR smallest digit from the right (always negative)", + "version": { + "first": 40, + "last": 97 + }, + "values": { + "default": 0, + "minimum": -9, + "maximum": 0 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The offset of the AMR smallest digit from the right (always negative)", + "version": { + "first": 98, + "last": 136 + }, + "values": { + "default": 0, + "minimum": -9, + "maximum": 0 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "int8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The offset of the AMR smallest digit from the right (always negative)", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 0, + "minimum": -9, + "maximum": 0 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Cordonel NA can use a subset of the display digits for AMR readings. This is the offset (from the right).", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "UI1203Fields": { + "id": 6, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A bitfield of the optional fields being used for UI-1203", + "version": { + "first": 40, + "last": 97 + }, + "values": { + "default": 268, + "minimum": 0, + "maximum": 268 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A bitfield of the optional fields being used for UI-1203", + "version": { + "first": 98, + "last": 136 + }, + "values": { + "default": 268, + "minimum": 0, + "maximum": 268 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A bitfield of the optional fields being used for UI-1203", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 268, + "minimum": 0, + "maximum": 268 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "These are the fields used in NA AMR reading strings.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "MfgDate": { + "id": 7, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A timestamp of meter manufacture in seconds since 1/1/2000 00:00:00 UTC", + "version": { + "first": 43, + "last": 136 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "time_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A timestamp of meter manufacture in seconds since 1/1/2000 00:00:00 UTC", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Simple timestamp, should be filled in at the end of manufacture. Time now.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "DisplayAMRDigits": { + "id": 8, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether or not to display AMR digits on the screen", + "version": { + "first": 92, + "last": 97 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether or not to display AMR digits on the screen", + "version": { + "first": 98, + "last": 136 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "infrequentlyupdated" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether or not to display AMR digits on the screen", + "version": { + "first": 161, + "last": 213 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "In NA the AMR digits should be displayed on the LCD periodically, in EMEA they shouldn't.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AdapterID": { + "id": 9, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The serial number of the current pulse adapter", + "version": { + "first": 193, + "last": 213 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "AdapterFwVersion": { + "id": 10, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The firmware version of the current pulse adapter", + "version": { + "first": 193, + "last": 213 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "ExtendedResolution": { + "id": 11, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Boolean controlled by UI-1236 to control resolution of cubic feet unit in some meter size", + "version": { + "first": 210, + "last": 213 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Internal use in firmware only.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + } + }, + "status": { + "BAD_CONFIG": { + "id": 0 + }, + "BAD_LENGTH": { + "id": 1 + }, + "OUT_OF_RANGE": { + "id": 2 + }, + "PENDING_STORE": { + "id": 3 + }, + "DID_NOT_STORE": { + "id": 4 + }, + "TOO_MANY_BYTES": { + "id": 5 + } + } + }, + "LOGGER": { + "id": 8, + "version": { + "first": 1, + "last": 19 + }, + "registers": { + "Quota": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A quota in bytes for the log. The Logger does not apply any policy to how the quota is allocated, this is left as a restriction to be applied on a product by product basis.", + "version": { + "first": 1, + "last": 19 + }, + "values": { + "default": 4096, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Drive": { + "id": 1, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The drive to write to.", + "version": { + "first": 1, + "last": 19 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TriggerLogFlush": { + "id": 2, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Writing TRUE will force a log flush", + "version": { + "first": 7, + "last": 19 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "StoreConfiguration": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 16, + "last": 19 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "You do need to use this if you change any parameters in LOGGER and want to keep them.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + } + }, + "status": { + "UNKNOWN_PARAMETER": { + "id": 0 + }, + "RESTARTED": { + "id": 1 + }, + "BLOCK_LISTING": { + "id": 2 + }, + "PENDING_STORE": { + "id": 3 + }, + "DID_NOT_STORE": { + "id": 4 + } + } + }, + "METROLOGYASST": { + "id": 18, + "version": { + "first": 4, + "last": 118 + }, + "registers": { + "ILoopMaxFlowRate": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The flow rate that gives max output on the current loop", + "version": { + "first": 5, + "last": 36 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The flow rate that gives max output on the current loop", + "version": { + "first": 82, + "last": 118 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Ignore, no current loop.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "StoreConfiguration": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing TRUE to this register stores the values of the other registers to the non-volatile memory", + "version": { + "first": 7, + "last": 81 + }, + "statictype": "dynamic" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing TRUE to this register stores the values of the other registers to the non-volatile memory", + "version": { + "first": 82, + "last": 118 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "You do need to use this if you change any parameters in METROLOGYASST and want to keep them.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "PulseWeight": { + "id": 2, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Volume represented by one pulse in ml. If this is zero pulse output will not be enabled", + "version": { + "first": 7, + "last": 81 + }, + "values": { + "default": 1000, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Volume represented by one pulse in ml. If this is zero pulse output will not be enabled", + "version": { + "first": 82, + "last": 101 + }, + "values": { + "default": 1000, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Volume represented by one pulse. Units of (2^-5)ml. If this is zero pulse output will not be enabled", + "version": { + "first": 102, + "last": 118 + }, + "values": { + "default": 32000, + "minimum": 1, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "G01 Pulse value (100 l/Imp., ...). Customer specific.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseMode": { + "id": 3, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.", + "version": { + "first": 7, + "last": 81 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.", + "version": { + "first": 82, + "last": 97 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 6 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.", + "version": { + "first": 98, + "last": 118 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "G02 Pulse type (Netted Imp./Tamp. (-), ). Customer specific.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseLength": { + "id": 4, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The length of a pulse. This is an enum of type pulse_length_t.", + "version": { + "first": 7, + "last": 72 + }, + "values": { + "default": 5, + "minimum": 0, + "maximum": 8 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The length of a pulse. This is an enum of type pulse_length_t.", + "version": { + "first": 73, + "last": 81 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 8 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The length of a pulse. This is an enum of type pulse_length_t.", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 10 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "G03 Pulse length (500ms, ). Customer specific.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FlowUnits": { + "id": 5, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of flow rate to display on the LCD. An enum of type displayflowunits_t", + "version": { + "first": 8, + "last": 81 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 8 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The units of flow rate to display on the LCD. An enum of type displayflowunits_t", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 8 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "C05 unit (m, kl, US-Gall./Imp.-Gall, Barrel, ...)", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FlowPoint": { + "id": 6, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Position of the decimal point on the LCD for flow rate. An enum of type displayflowpoint_t", + "version": { + "first": 8, + "last": 81 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 4 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Position of the decimal point on the LCD for flow rate. An enum of type displayflowpoint_t", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 4 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Counter size and unit. See FlowPoint.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ILoopRate": { + "id": 7, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The update rate for the current loop", + "version": { + "first": 9, + "last": 36 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The update rate for the current loop", + "version": { + "first": 82, + "last": 118 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Ignore, no current loop.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "TemperatureUnits": { + "id": 8, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Units for displaying temperature on the LCD. 0 is Celcius, 1 is Fahrenheit.", + "version": { + "first": 13, + "last": 81 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Units for displaying temperature on the LCD. 0 is Celcius, 1 is Fahrenheit.", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "C - EMEA/China / F - USA.", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "default": 1 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureUnits": { + "id": 9, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Units for displaying pressure on the LCD. 0 is Mpa, 1 is PSI.", + "version": { + "first": 13, + "last": 81 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + }, + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Units for displaying pressure on the LCD. 0 is Mpa, 1 is PSI.", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "Mpa - EMEA/China / PSI - USA / Bar - USA.", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "custom": [ + 1, + 2 + ] + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureRate": { + "id": 10, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time between pressure measurements in milliseconds", + "version": { + "first": 13, + "last": 71 + }, + "values": { + "default": 300000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time between pressure measurements in milliseconds", + "version": { + "first": 72, + "last": 81 + }, + "values": { + "default": 60000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time between pressure measurements in milliseconds", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 60000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 60000 + } + }, + "na": { + "values": { + "default": 60000 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureOffset": { + "id": 11, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", + "version": { + "first": 13, + "last": 58 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", + "version": { + "first": 59, + "last": 79 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", + "version": { + "first": 80, + "last": 81 + }, + "values": { + "default": 0, + "minimum": -2000000, + "maximum": 2000000 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Value in Pa to subtract from measured value to correct for atmospheric pressure", + "version": { + "first": 82, + "last": 118 + }, + "values": { + "default": 0, + "minimum": -2000000, + "maximum": 2000000 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "-> 0", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressurePresent": { + "id": 12, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether there is a pressure sensor present", + "version": { + "first": 63, + "last": 70 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static" + }, + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Whether there is a pressure sensor present", + "version": { + "first": 71, + "last": 118 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com" + ], + "remarks": "B09 Housing option (D,Y). Variant specific.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureMeasure": { + "id": 13, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write TRUE to trigger a pressure measurement, Read to get the latest measured value in Pa", + "version": { + "first": 65, + "last": 118 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "LatestFlowRate": { + "id": 14, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Returns the latest flow rate. Write 0 to change scaling to internal scaling, 1 to change to display scaling", + "version": { + "first": 92, + "last": 118 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "GenerateFwdPulses": { + "id": 15, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Generate some artificial pulses, used for testing", + "version": { + "first": 97, + "last": 118 + }, + "values": { + "minimum": 0, + "maximum": 255 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "For use in testing.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "GenerateRevPulses": { + "id": 16, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Generate some artificial pulses, used for testing", + "version": { + "first": 97, + "last": 118 + }, + "values": { + "minimum": 0, + "maximum": 255 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "For use in testing.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PulseEvenDistribution": { + "id": 17, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Boolean value for whether pulse output is to space the pulses evenly (TRUE) or grouped (FALSE)", + "version": { + "first": 98, + "last": 118 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 1, + "DN300": 0 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseResolution": { + "id": 18, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The number of bits of fractional resolution in a pulse event", + "version": { + "first": 98, + "last": 118 + }, + "values": { + "minimum": 0, + "maximum": 7 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "Read only.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "PressureCalibration": { + "id": 19, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Value in Pa to add to measured value after recalibration to correct for sensor drift over time", + "version": { + "first": 108, + "last": 111 + }, + "values": { + "default": 0, + "minimum": -1000000, + "maximum": 1000000 + }, + "statictype": "static" + }, + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Value in Pa to add to measured value after recalibration to correct for sensor drift over time", + "version": { + "first": 112, + "last": 118 + }, + "values": { + "default": 0, + "minimum": -4000000, + "maximum": 4000000 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 0 + } + }, + "na": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "DisplayEnable": { + "id": 20, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RW", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bitfield of the items to show on the display. 1 - flowrate, 2 - temperature, 4 - pressure. Note, disabling flowrate requires reboot for it to take effect.", + "version": { + "first": 116, + "last": 118 + }, + "values": { + "default": 7, + "minimum": 0, + "maximum": 7 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "Customer specific, controls display of items on row 2. NOTE: In 1.4 stream this can be used to work around bug where pressure is displayed with no pressure sensor (CORDHW-3065).", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureFlowRateCorrectionA": { + "id": 21, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Pressure readings must be corrected due to the water flow rate. This is the correction factor that is applied to the flow rate squared (units Pa / (ml/s)^2). Write 0x80000000 to fall back to the internal lookup table based on meter size. The number read back is the value being used either from the intenal lookup or having been written to this register.", + "version": { + "first": 118, + "last": 118 + }, + "values": { + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "TBD", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureFlowRateCorrectionB": { + "id": 22, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Pressure readings must be corrected due to the water flow rate. This is the correction factor that is applied to the flow rate (units Pa / (ml/s)). Write 0x80000000 to fall back to the internal lookup table based on meter size. The number read back is the value being used either from the intenal lookup or having been written to this register.", + "version": { + "first": 118, + "last": 118 + }, + "values": { + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "TBD", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + } + }, + "status": { + "BAD_CONFIG": { + "id": 0 + }, + "DID_NOT_STORE": { + "id": 1 + }, + "PENDING_STORE": { + "id": 2 + } + } + }, + "NA2WALARMS": { + "id": 23, + "version": { + "first": 41, + "last": 102 + }, + "registers": { + "StoreConfiguration": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 41, + "last": 102 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "You do need to use this if you change any parameters in NA2WALARMS and want to keep them.", + "region": { + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "PredefEnable": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bitmask of enabled predefined alarms", + "version": { + "first": 41, + "last": 102 + }, + "values": { + "default": 561047, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "NA has a series of alarms called 'predefined' these are the ones that should be enabled.", + "region": { + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + } + }, + "status": { + "SENSOR_INVALID": { + "id": 0 + }, + "UNKNOWN_PARAMETER": { + "id": 1 + }, + "ALARM_INVALID": { + "id": 2 + }, + "UNIMPLEMENTED": { + "id": 3 + }, + "UNCONFIGURED": { + "id": 4 + }, + "CONFIG_INVALID": { + "id": 5 + }, + "NO_LATEST": { + "id": 6 + }, + "FIXED_TYPE": { + "id": 7 + }, + "PREDEF_SET": { + "id": 8 + }, + "USERDEF_VOLUME_SET": { + "id": 9 + }, + "USERDEF_TEMPERATURE_SET": { + "id": 10 + }, + "USERDEF_PRESSURE_SET": { + "id": 11 + }, + "PREDEF_CLEAR": { + "id": 12 + }, + "USERDEF_VOLUME_CLEAR": { + "id": 13 + }, + "USERDEF_TEMPERATURE_CLEAR": { + "id": 14 + }, + "USERDEF_PRESSURE_CLEAR": { + "id": 15 + }, + "DID_NOT_STORE": { + "id": 16 + }, + "STORE_PENDING": { + "id": 17 + }, + "PREDEF_BACKUP_FAILED": { + "id": 18 + }, + "PREDEF_RESTORE_FAILED": { + "id": 19 + }, + "USERDEF_BACKUP_FAILED": { + "id": 20 + }, + "USERDEF_RESTORE_FAILED": { + "id": 21 + }, + "USERDEF_UNSUPPORTED_TYPE_FOR_SENSOR": { + "id": 22 + } + } + }, + "NA2WLOGGER": { + "id": 22, + "version": { + "first": 1, + "last": 200 + }, + "registers": { + "StoreConfiguration": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "RW", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Store all configuration items in non-volatile memory.", + "version": { + "first": 147, + "last": 200 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "LimitLogSize": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Override the maximum number of entries per log (0 keeps default)", + "version": { + "first": 147, + "last": 200 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + } + }, + "status": { + "UNKNOWN_PARAMETER": { + "id": 1 + }, + "NOT_MAIN_LOOP": { + "id": 2 + }, + "LOG_INVALID": { + "id": 3 + }, + "LOG_OPEN_FAILED": { + "id": 4 + }, + "LOG_CLOSE_FAILED": { + "id": 5 + }, + "LOG_REMOVE_FAILED": { + "id": 6 + }, + "LOG_FLUSH_FAILED": { + "id": 7 + }, + "LOG_CLEAR_FAILED": { + "id": 8 + }, + "LOG_BAD_REQUEST": { + "id": 9 + }, + "LOG_BAD_LIMIT": { + "id": 10 + }, + "LOG_BUSY": { + "id": 11 + }, + "QUERY_FAILED": { + "id": 12 + }, + "QUERY_UNKNOWN_SENSOR": { + "id": 13 + }, + "QUERY_UNKNOWN_LOGFILE": { + "id": 14 + }, + "QUERY_BAD_ARGS": { + "id": 15 + }, + "QUERY_NOT_ENOUGH_SPACE": { + "id": 16 + }, + "QUERY_NO_RECORDS_FOUND": { + "id": 17 + }, + "QUERY_FILE_READ_PROBLEM": { + "id": 18 + }, + "SETTINGS_STORE_FAILED": { + "id": 19 + }, + "SETTINGS_BAD_SENSORID": { + "id": 20 + }, + "SETTINGS_BAD_PERIOD": { + "id": 21 + }, + "SETTINGS_BAD_CHECKSUM": { + "id": 22 + }, + "SETTINGS_BAD_TIMESTAMP": { + "id": 23 + }, + "FILING_BAD": { + "id": 24 + }, + "BAD_RECORD": { + "id": 25 + }, + "RANGE_SENSORID_BAD": { + "id": 26 + }, + "STORE_PENDING": { + "id": 27 + }, + "DID_NOT_STORE": { + "id": 28 + } + } + }, + "NFC": { + "id": 21, + "version": { + "first": 1, + "last": 65 + }, + "registers": { + "EraseRMA": { + "id": 0, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RW" + }, + "description": "Writing TRUE to this register erases the RMA area", + "version": { + "first": 7, + "last": 65 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "You may wish to do this at the end of manufacture to clear all the old data out.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ForceUpdate": { + "id": 1, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Write to this to force an update of some data. 0 - NDEF readings, 1 - NDEF details, 2 - RMA details", + "version": { + "first": 49, + "last": 65 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + } + }, + "status": { + "BAD_CONFIG": { + "id": 0 + }, + "NDEF_WRITE_FAIL": { + "id": 1 + }, + "NDEF_VERIFY_FAIL": { + "id": 2 + }, + "NDEF_UPDATE_FAIL": { + "id": 3 + }, + "RMA_WRITE_FAIL": { + "id": 4 + }, + "RMA_VERIFY_FAIL": { + "id": 5 + }, + "RMA_BAD_ENTRY": { + "id": 6 + }, + "INIT_FAIL": { + "id": 7 + }, + "NDEF_CONFIG_FAIL": { + "id": 8 + }, + "RMA_CONFIG_FAIL": { + "id": 9 + }, + "NDEF_START_FAIL": { + "id": 10 + }, + "RMA_START_FAIL": { + "id": 11 + } + } + }, + "OPTICALINTERFACE": { + "id": 256, + "version": { + "first": 1, + "last": 365 + }, + "builds": { + "emea": [ + { + "id": 230, + "fw": "106E" + }, + { + "id": 230, + "fw": "106F" + }, + { + "id": 257, + "fw": "1107" + }, + { + "id": 257, + "fw": "1108" + }, + { + "id": 278, + "fw": "1247" + }, + { + "id": 318, + "fw": "130A" + }, + { + "id": 330, + "fw": "130B" + }, + { + "id": 331, + "fw": "13F3" + }, + { + "id": 346, + "fw": "1310" + }, + { + "id": 350, + "fw": "1416" + }, + { + "id": 351, + "fw": "14E0" + }, + { + "id": 358, + "fw": "14E1" + }, + { + "id": 359, + "fw": "14E2" + }, + { + "id": 360, + "fw": "14E3" + }, + { + "id": 361, + "fw": "1417" + }, + { + "id": 362, + "fw": "1420" + }, + { + "id": 363, + "fw": "1421" + }, + { + "id": 364, + "fw": "1422" + }, + { + "id": 365, + "fw": "1423" + } + ], + "na": [ + { + "id": 278, + "fw": "1228" + }, + { + "id": 310, + "fw": "2002" + }, + { + "id": 324, + "fw": "2006" + }, + { + "id": 352, + "fw": "2013" + } + ] + } + }, + "OPTICALPORT": { + "id": 5, + "version": { + "first": 1, + "last": 55 + }, + "registers": { + "BaudRateCapabilities": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Bitmask of supported rates on the given hardware.", + "version": { + "first": 2, + "last": 55 + }, + "statictype": "static" + } + ] + }, + "PacketSizeCapabilities": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Bitmask of supported packet sizes.", + "version": { + "first": 2, + "last": 55 + }, + "values": { + "default": 64 + }, + "statictype": "static" + } + ] + }, + "ProtocolVersion": { + "id": 2, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Version number as fixed point 16.16 format BCD.", + "version": { + "first": 2, + "last": 55 + }, + "statictype": "static" + } + ] + }, + "BaudRateSelected": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Baud rate in bits per second.", + "version": { + "first": 2, + "last": 55 + }, + "statictype": "dynamic" + } + ] + }, + "PacketSizeSelected": { + "id": 4, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Packet size in bytes.", + "version": { + "first": 2, + "last": 55 + }, + "statictype": "dynamic" + } + ] + }, + "ExternalUartControl": { + "id": 5, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "WO", + "lvl2": "WO", + "lvl3": "WO", + "lvl4": "WO", + "lvl5": "WO", + "lvl6": "WO", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Surrenders the UART to another application", + "version": { + "first": 49, + "last": 55 + }, + "statictype": "dynamic" + } + ] + } + }, + "status": { + "PAYLOAD_COUNT": { + "id": 0 + }, + "INVALID_SUBREASON": { + "id": 1 + }, + "INVALID_BAUDRATE": { + "id": 2 + }, + "INVALID_BUFFERSIZE": { + "id": 3 + }, + "CRCFAILURE": { + "id": 4 + }, + "UNRECOGNISEDCMD": { + "id": 5 + }, + "FRAMING": { + "id": 6 + }, + "OVERFLOW": { + "id": 7 + }, + "PACKETTIMEOUT": { + "id": 8 + }, + "INVALIDESCAPE": { + "id": 9 + }, + "UNKNOWN_PARAMETER": { + "id": 10 + }, + "TRAINING_FAILED": { + "id": 11 + }, + "NOBREAK": { + "id": 12 + } + } + }, + "PERIODICLOG": { + "id": 17, + "version": { + "first": 1, + "last": 77 + }, + "registers": { + "DataLogContents": { + "id": 0, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit Mask of the items to store in LOG memory", + "version": { + "first": 10, + "last": 77 + }, + "values": { + "default": 201335811, + "minimum": 3, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 201335811 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "DataLogPeriod": { + "id": 1, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage Period of the LOG memory in minutes", + "version": { + "first": 10, + "last": 77 + }, + "values": { + "default": 60, + "minimum": 1, + "maximum": 1440 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 60 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AverageFlowPeriod": { + "id": 2, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Averiging period for the Min/Max calculation of LOG&FDR memory", + "version": { + "first": 10, + "last": 77 + }, + "values": { + "default": 5, + "minimum": 1, + "maximum": 60 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 5 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FixedDateReadingContents": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bit Mask of the items to store in FDR memory", + "version": { + "first": 10, + "last": 77 + }, + "values": { + "default": 201335811, + "minimum": 3, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 201335811 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FixedDateDayOfMonth": { + "id": 4, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The day of month the FDR storage will take place at 00:00", + "version": { + "first": 10, + "last": 77 + }, + "values": { + "default": 1, + "minimum": 1, + "maximum": 28 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "jens.schulz@xylem.com", + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 1 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PeriodicLogLifeTimeCounter": { + "id": 5, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A counter used for internal purposes", + "version": { + "first": 15, + "last": 77 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ResetCounter": { + "id": 6, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A counter to monitor the application resets", + "version": { + "first": 20, + "last": 77 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + } + }, + "status": { + "FOPEN": { + "action": "Perform a FOPEN to any of the logging files logdata, fdrdata, evtdata ... ", + "description": "FOPEN action failed due to any reason (means fopen error)", + "id": 0 + }, + "BAD_CONFIG": { + "action": "Handle the internal dual logging file access by SensusRfRadio and by PeriodicLogging", + "description": "Mutual Exclude file access failed due to a wrong internal status order", + "id": 1 + }, + "STRING_TOO_LONG": { + "action": "Currently unused or not define action", + "description": "Currently not generated or returned", + "id": 2 + }, + "FILES_IN_USE": { + "action": "Handle the internal dual logging file access by SensusRfRadio and by PeriodicLogging", + "description": "File access denied because the other party has currently access to the file(s)", + "id": 3 + } + } + }, + "POWERMON": { "id": 1, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "version": { + "first": 17, + "last": 72 + }, + "registers": { + "BatteryVoltage": { + "id": 0, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Measured battery terminal voltage in 1mV units.", + "version": { + "first": 17, + "last": 72 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] }, - "description": "Access the test sequence number.", - "version": { - "first": 0, - "last": 36 + "BatteryManufacturer": { + "id": 1, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "String describing the battery brand.", + "version": { + "first": 17, + "last": 72 + }, + "values": { + "default": "Tadiran" + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] }, - "statictype": null - } - ] - }, - "TestStatus": { - "id": 2, - "details": [ - { - "type": "enum8", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "BatterySize": { + "id": 2, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "One of: 0 = battery absent; 1 = built in; 2 = other; 3 = AA; 4 = AAA; 5 = C; 6 = D; 255 = unknown", + "version": { + "first": 17, + "last": 72 + }, + "values": { + "default": 6, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "uwe.brehm@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 6 + } + }, + "na": { + "values": { + "default": 6 + } + } + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] }, - "description": "Access the Test Manager state variable.", - "version": { - "first": 0, - "last": 36 + "BatteryQuantity": { + "id": 4, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The number of installed batteries.", + "version": { + "first": 17, + "last": 59 + }, + "values": { + "default": 1 + }, + "statictype": "static" + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of installed batteries.", + "version": { + "first": 60, + "last": 72 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "uwe.brehm@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 2 + } + }, + "na": { + "values": { + "default": 2 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] }, - "statictype": null - } - ] - }, - "TrapError": { - "id": 3, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "BatteryRatedVoltage": { + "id": 5, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Datasheet terminal voltage in 100mV units as manufactured.", + "version": { + "first": 17, + "last": 72 + }, + "values": { + "default": 36, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "uwe.brehm@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] }, - "description": "Access the last recorded error code.", - "version": { - "first": 0, - "last": 36 + "BatteryVoltageMinThreshold": { + "id": 7, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Datasheet terminal voltage in 100mV units below which the cell is considered empty.", + "version": { + "first": 17, + "last": 72 + }, + "values": { + "default": 28, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "uwe.brehm@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] }, - "statictype": null - } - ] - }, - "TestParameter": { - "id": 4, - "details": [ - { - "type": "uint32_t", - "privilege": { - "lvl1": "RW", - "lvl2": "RW", - "lvl3": "RW", - "lvl4": "RW", - "lvl5": "RW", - "lvl6": "RW", - "lvl7": "RW", - "lvl8": "RW" + "BatterySelection": { + "id": 8, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Chosen manufacturer from the internal lookup table of known batteries.", + "version": { + "first": 20, + "last": 72 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "uwe.brehm@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] }, - "description": "Access the test parameter variable.", - "version": { - "first": 0, - "last": 36 + "TotalUsedCharge": { + "id": 9, + "details": [ + { + "type": "uint64_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Accumulated charge used in uAs.", + "version": { + "first": 24, + "last": 72 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] }, - "statictype": null - } - ] - } + "TotalUsedSeconds": { + "id": 10, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Elapsed time since manufacture in seconds.", + "version": { + "first": 39, + "last": 72 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "WarnFromClamp": { + "id": 11, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Time in seconds for which the projected end time cannot exceed.", + "version": { + "first": 39, + "last": 72 + }, + "values": { + "default": 473040000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "This should be set to the expected life of the meter. In the early days the expected lifetime will be this. Set to 22 years to include warehouse storage time.", + "region": { + "emea": { + "values": { + "default": 694224000 + } + }, + "na": { + "values": { + "default": 694224000 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "BatteryMilliAHrRating": { + "id": 12, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Datasheet capacity in mAh units as manufactured.", + "version": { + "first": 45, + "last": 72 + }, + "values": { + "default": 19000, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "uwe.brehm@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "StoreConfiguration": { + "id": 13, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 61, + "last": 72 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "You do need to use this if you change any parameters in POWERMON and want to keep them.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "CriticalRepeatLimit": { + "id": 14, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of 15 minute periods of consecutive low battery voltage required for the battery to be deemed critically low", + "version": { + "first": 66, + "last": 72 + }, + "values": { + "default": 96, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "RemainingSeconds": { + "id": 15, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "", + "version": { + "first": 69, + "last": 72, + "exclude": [ + 70 + ] + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "" + ], + "remarks": "Read-only value for remaining battery lifetime, not useful in manufacture, ignore", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + } + }, + "status": { + "TABLE_FULL": { + "id": 0 + }, + "UNKNOWN_PARAMETER": { + "id": 1 + }, + "OUT_OF_RANGE": { + "id": 2 + }, + "STOP_CYCLING": { + "id": 3 + }, + "TEMPERATURE_LIMIT": { + "id": 4 + }, + "BATTERY_STATUS_CHANGED": { + "id": 5 + }, + "BATTERY_CRITICAL": { + "id": 6 + }, + "PENDING_STORE": { + "id": 7 + }, + "DID_NOT_STORE": { + "id": 8 + } + } }, - "status": { - "FAIL": { - "id": 0 - }, - "UNKNOWN_PARAMETER": { - "id": 1 - }, - "READ_ONLY_PARAMETER": { - "id": 2 - }, - "BUSY": { - "id": 3 - }, - "STRING_TOO_LONG": { - "id": 4 - }, - "FOPEN_FAIL": { - "id": 5 - }, - "FSEEK_FAIL": { - "id": 6 - }, - "FWRITE_FAIL": { - "id": 7 - }, - "FCLOSE_FAIL": { - "id": 8 - }, - "MALFORMED_FILENAME": { - "id": 9 - }, - "UNKNOWN_ACTION": { - "id": 10 - }, - "FILEREMOVE_FAIL": { - "id": 11 - }, - "FREAD_FAIL": { - "id": 12 - } + "SENSUSRADIO": { + "id": 16, + "version": { + "first": 100, + "last": 553 + }, + "registers": { + "TxInterval": { + "id": 0, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The SensusRF transmission interval in seconds for the BUPs", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 15, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 15 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "OmTxInterval": { + "id": 1, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The Open Metering transmission interval in seconds", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 3600, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 900 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "LatInterval": { + "id": 2, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The Listen After Talk interval as number 'n'. After every 'n' BUPs follows a BUP-LAT", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 3, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 3 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "WakeupInterval": { + "id": 3, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The Wake Up interval in seconds 's'. Every 's' seconds will the meter sniff for a WakeUp tone. 's' == 0 means active sending and no sniffing", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 3, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 3 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "MbusState": { + "id": 4, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The internal MBus state (Open Metering). A bit oriented value. Do not write if you do not know details", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 7, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": true, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 7 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FrequencyIndicator": { + "id": 5, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A number that shows the radio frequency used. Normally 433 or 868", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 433, + "minimum": 433, + "maximum": 868 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Constant, do not change.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FrequencyOffset": { + "id": 6, + "details": [ + { + "type": "int16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A radio frequency calibration parameter", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": -32768, + "maximum": 32767 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": true, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PowerLevel": { + "id": 7, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A parameter for controling the radio power", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 127 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Read calibration value from data base, dependant on used variant.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "SystemState": { + "id": 9, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The internal System State of the Radio", + "version": { + "first": 100, + "last": 544 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Set to 0xFF at the end of parameterization to trigger shipping mode.", + "region": { + "emea": null + } + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The internal System State of the Radio", + "version": { + "first": 545, + "last": 553 + }, + "values": { + "default": 1, + "minimum": 1, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Set to 0xFF at the end of parameterization to trigger shipping mode.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "RadioAddress": { + "id": 10, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The radio address used by the meter", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Set final radio address.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "UtcTimeOffset": { + "id": 11, + "details": [ + { + "type": "int32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The offset the between meter time and UTC for time correction", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": -2147483648, + "maximum": 2147483647 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "SentBytesCounter": { + "id": 12, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of bytes sent during meter lifetime", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ReceivedBytesCounter": { + "id": 13, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of bytes received during meter lifetime", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ResetCounter": { + "id": 14, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of resets the application SensusRfRadio has performed over lifetime", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "BootLoaderState": { + "id": 15, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An internal temporary state (enum) regarding the firmwware update", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "LeakFlowThreshold": { + "id": 16, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The flow value of the leakage (low flow) detection", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 25, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "LeakFlowTimeThreshold": { + "id": 17, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time in minutes of the leakage (low flow) detection threshold", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 360, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "BrokenPipeFlowThreshold": { + "id": 18, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The flow value of the broken pipe (high flow) detection", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 2500, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "BrokenPipeFlowTimeThreshold": { + "id": 19, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time in Minutes of the broken pipe (high flow) detection threshold", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 180, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureMaxThreshold": { + "id": 20, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The pressure value of the maximum (high) pressure alarm", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 160, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureMinThreshold": { + "id": 21, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The pressure value of the minimum (low) pressure alarm", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 3, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureLimitTimeMaxThreshold": { + "id": 22, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time in seconds of the maximum (high) pressure alarm threshold", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureLimitTimeMinThreshold": { + "id": 23, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time in seconds of the minimum (low) pressure alarm threshold", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureMeasurePeriod": { + "id": 24, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period in seconds with which the pressure is measured (fix 60 sec)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 60, + "minimum": 60, + "maximum": 60 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureUnit": { + "id": 25, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An enum respresenting the unit of pressure (0= no pressure sensor, 1= MPas, 2= PSI, 3= Bar)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 3 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PressureGaugeOffset": { + "id": 26, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The gauge offset of the pressure sensor value in mBar", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "TemperatureMaxThreshold": { + "id": 27, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The temperature value of the maximum (high) temperature alarm", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 50, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureMinThreshold": { + "id": 28, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The temperature value of the minimum (low) temperature alarm", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 2, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureTimeMaxThreshold": { + "id": 29, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time in Minutes of the maximum (high) temperature alarm threshold", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureTimeMinThreshold": { + "id": 30, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The time in Minutes of the minimum (low) temperature alarm threshold", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 600, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureMeasurePeriod": { + "id": 31, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The period in seconds with which the temperature is measured (only 60 is valid)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 60, + "minimum": 60, + "maximum": 60 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TemperatureUnit": { + "id": 32, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An enum respresenting the unit of temperature (1= Celsius, 2= Fahrenheit)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 2 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseOutWidth": { + "id": 33, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An enumerator defining the currently active PulseWidth (0 ... 8 for non testmode values and 9 ... 15 for testmode)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 15 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseOutDivisor": { + "id": 34, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A number representing the pulse weight multiplicator 1, 10, 100 or 1000", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 1000 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PulseOutMode": { + "id": 35, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An enum (0 to 3) representing the pulse output mode (0= deactivated, ...)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 3 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "CurrentLoopMax": { + "id": 36, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A parameter regarding the non existing current loop output", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Not used anymore.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "CurrentLoopSource": { + "id": 37, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A parameter regarding the non existing current loop output", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Not used anymore.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "MainAlarmMask": { + "id": 38, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A byte value representing a mask of currently active (1) main alarms. These are the flow and genreral alarms", + "version": { + "first": 100, + "last": 544 + }, + "values": { + "default": 207, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at CUSTOMER APP.", + "region": { + "emea": null + } + } + }, + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A byte value representing a mask of currently active (1) main alarms. These are the flow and genreral alarms", + "version": { + "first": 545, + "last": 553 + }, + "values": { + "default": 207, + "minimum": 128, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at CUSTOMER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ExtendedAlarmMask": { + "id": 39, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A byte value representing a mask of currently active (1) extended alarms. These are the temperature and pressure related alarms", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 60, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at CUSTOMER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "HistoricalAlarmsDays": { + "id": 40, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A number of days (0 = off) after which alarms are cleared from the alarm byte values when they are no longer active", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 29, + "minimum": 0, + "maximum": 250 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": { + "values": { + "default": 29 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "TestModeTime": { + "id": 43, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value in minutes that defines the time the meter will stay in testmode after that mode was started", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Runtime value.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "EncryptionKey": { + "id": 44, + "details": [ + { + "type": "uint128_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The SensusRF encryption key (16 bytes) of the meter", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": true, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "D05 radio key (Sensus (standard), )", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Authentification": { + "id": 45, + "details": [ + { + "type": "uint96_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The SensusRF Authentification PINs (3 PINs of 4 byte each) of the meter", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "UpgFWVersion": { + "id": 46, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The version of the complete Meter firmware package as represented by application FlexNetVersion", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Unchanged.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CustomerText": { + "id": 47, + "details": [ + { + "type": "uint72_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An array of 9 bytes of freely programmable SensusRF customer Text", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Customer specific.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "RadioLastReadTime": { + "id": 48, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An uint32_t value representing the meter's system DateTime when the radio had last time sent a telegram", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "LowBatDateTime": { + "id": 49, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An uint32_t value representing the meter's system DateTime when the radio had detected first the low-battery status", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "VeryLowBatDateTime": { + "id": 50, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A copy of the LowBatDateTime time stamp", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Unit": { + "id": 51, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A byte value representing the currently active volume unit used by radio", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 19, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Dependant on territory setting acc SAP order.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ExtendedUnitFlags": { + "id": 52, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A byte value representing additional information regarding the unit derived from the volume unit when used for flow or alternate volume, 0x1x= liter per sec, 0xx1= kiloLiter", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 17 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": "custom", + "vako": true, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Customer specific. Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "OTAControlFlags": { + "id": 53, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A byte value normaly never changed regarding general behavior of the firmware related to Over The Air updates", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 1, + "minimum": 0, + "maximum": 255 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "1: if OTA update is allowed.", + "region": { + "emea": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "Tfx_Structure": { + "id": 54, + "details": [ + { + "type": "uint88_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A complex structure of 84 bytes related to the Tfx mode of the meter respectively the volume channel", + "version": { + "first": 100, + "last": 549 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + }, + { + "type": "uint672_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A complex structure of 84 bytes related to the Tfx mode of the meter respectively the volume channel", + "version": { + "first": 550, + "last": 553 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "Dewa_Structure": { + "id": 55, + "details": [ + { + "type": "uint64_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A structure of 4 uint16_t values used for the customer DEWA", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "DataLogContents": { + "id": 56, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A 4 byte bit mask representing whether the individual data items are logged in the periodic logging (1) or not (0)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 201335811, + "minimum": 3, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "DataLogPeriod": { + "id": 57, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A number in seconds representing the time period for storing data records into the periodic logging file (memory)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 60, + "minimum": 1, + "maximum": 1440 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "AverageFlowPeriod": { + "id": 58, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A number derived automatically from the DataLogPeriod that determines averaging periods in mimutes for min and max calculations", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 5, + "minimum": 1, + "maximum": 60 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "FixedDateReadingContents": { + "id": 59, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A 4 byte bit mask representing whether the individual data items are logged in the fixed date logging (1) or not (0)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 201335811, + "minimum": 3, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "FixedDateDayOfMonth": { + "id": 60, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The day of the month (0 = every day) on which at 00:00 the fixed date logging takes place", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 1, + "minimum": 1, + "maximum": 28 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at PERIODIC_LOGGER APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "MetroRadioLifeTimeCounter": { + "id": 61, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An uint32_t counter used originally for debugging during development. Meanwhile out of use", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": { + "values": { + "default": 0 + } + } + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PowerLevelOption": { + "id": 62, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An uint8_t value related to the power level used by the radio when an Irda module is present", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 127 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Read calibration value from data base, dependant on used variant.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ImpedanceCodeNew": { + "id": 63, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An uint16_t value used for adjusting the antenna impedance", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 32767 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Read calibration value from data base, dependant on used variant.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "ImpedanceCodeOption": { + "id": 64, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An uint16_t value used for adjusting the antenna impedance if an Irda module is present", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 4, + "minimum": 0, + "maximum": 32767 + }, + "statictype": "static", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Read calibration value from data base, dependant on used variant.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "IrDAModulePresent": { + "id": 65, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A parameter of type bool that signals the presence of an Irda module. The value is controlled by the meter", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 1 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignor because is set up at CUSTOMER APP?", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "StoreConfiguration": { + "id": 66, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Write 1 to store configuration values to non-volatile storage. Read back for status", + "version": { + "first": 100, + "last": 553 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "finalize" + } + } + ] + }, + "LifeTimeSeconds": { + "id": 67, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of seconds since the radio left the production (Set to 0 at the end of the production proccess)", + "version": { + "first": 100, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "DutyCycleCredit": { + "id": 68, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A value (counter) used only during development for release testing", + "version": { + "first": 412, + "last": 553 + }, + "values": { + "default": 4320000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ActivityCredit": { + "id": 69, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A counter used to control the radio activity which must not exceed certain regulatory limits", + "version": { + "first": 412, + "last": 553 + }, + "values": { + "default": 1000, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "PersistenceGroup1": { + "id": 70, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage item for HistoricalErrorLimitCounters Reverse(1, hi) and Leak(0, lo)", + "version": { + "first": 437, + "last": 553 + }, + "values": { + "default": 16711935, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PersistenceGroup2": { + "id": 71, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage item for HistoricalErrorLimitCounters Magnet(3, hi) and Air(2, lo)", + "version": { + "first": 437, + "last": 553 + }, + "values": { + "default": 16711935, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PersistenceGroup3": { + "id": 72, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage item for HistoricalErrorLimitCounters PressureMin(5, hi) and PressureMax(4, lo)", + "version": { + "first": 437, + "last": 553 + }, + "values": { + "default": 16711935, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PersistenceGroup4": { + "id": 73, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage item for HistoricalErrorLimitCounters TempMin(7, hi) and TempMax(6, lo)", + "version": { + "first": 437, + "last": 553 + }, + "values": { + "default": 16711935, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PressureCalibration": { + "id": 74, + "details": [ + { + "type": "int8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "int8_t value to add an offset to the measured pressure in 10mBar resolution (for value from -1270 to +1270 mBar for field calibration purposes). -128 is an invalid value", + "version": { + "first": 483, + "last": 553 + }, + "values": { + "default": 0, + "minimum": -127, + "maximum": 127 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because is set up at METROLOGYASST APP.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "TfxSecondaryChannelInfo_1": { + "id": 75, + "details": [ + { + "type": "uint48_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "a 6 bytes big complex structure for the Tfx settings of the secondary channel 1 (temperature)", + "version": { + "first": 494, + "last": 553 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "TfxSecondaryChannelInfo_2": { + "id": 76, + "details": [ + { + "type": "uint48_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "a 6 bytes big complex structure for the Tfx settings of the secondary channel 2 (pressure)", + "version": { + "first": 494, + "last": 553 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "OmsLastMessageCounter": { + "id": 77, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "An unit32_t value used to support/control the MB_MODE3_OMSv4B transmission uinque MCR", + "version": { + "first": 499, + "last": 553 + }, + "values": { + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "Can be ignored because these are temporary values just for information.", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PersistenceGroup5": { + "id": 78, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage item for HistoricalErrorLimitCounters NoFlowAlarm(7, hi) and Metrology Failure(6, lo)", + "version": { + "first": 536, + "last": 553 + }, + "values": { + "default": 16711935, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PersistenceGroup6": { + "id": 79, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Storage item for HistoricalErrorLimitCounters Reboot Alarm(7, hi) and reserved(6, lo)", + "version": { + "first": 536, + "last": 553 + }, + "values": { + "default": 16711680, + "minimum": 0, + "maximum": 4294967295 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": false, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "Gradient_Alarm_Telegram_Persistence": { + "id": 80, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Alarm persistence in Minutes for both pressure Gardient Alarm types", + "version": { + "first": 550, + "last": 553 + }, + "values": { + "default": 60, + "minimum": 0, + "maximum": 255 + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "joerg.lachenmayer@xylem.com" + ], + "remarks": "", + "region": { + "emea": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + } + }, + "status": { + "UNKNOWN_PARAMETER": { + "action": "According to the source code no action assigned to this error code", + "description": "It appears to be not used", + "id": 0 + }, + "BAD_CONFIG": { + "action": "Writing a new LOG or FDR content to Radio for forwarding to PeriodicLog", + "description": "A bit mask is written which is not valid (e.g. not all mandatory bits are equal to 1)", + "id": 1 + }, + "NO_CHANGE": { + "action": "Writing a new parameter value so several functions (e.g. Set HistoricalErrorLimitDays)", + "description": "The new value has no effect: New value == Old value)", + "id": 2 + }, + "STORE_PENDING": { + "action": "Writing SENSUSRADIO_STORECONFIGURATION to 1 ...", + "description": "The initiated storing action is still ongoing and the file system is busy. The final status is pending", + "id": 3 + }, + "DID_NOT_STORE": { + "action": "Writing SENSUSRADIO_STORECONFIGURATION to 1 ...", + "description": "This is a final status. The initiated storing action failed. An alternate status would be 'OK'", + "id": 4 + } + } + }, + "SYSTEM": { + "id": 0, + "version": { + "first": 141, + "last": 541 + }, + "registers": { + "TriggerUpgrade": { + "id": 0, + "details": [ + { + "type": "bool_t", + "privilege": { + "lvl1": "NA", + "lvl2": "NA", + "lvl3": "NA", + "lvl4": "NA", + "lvl5": "NA", + "lvl6": "NA", + "lvl7": "WO", + "lvl8": "WO" + }, + "description": "Writing TRUE to this register internally calls SysTriggerUpgrade() then returns the result.", + "version": { + "first": 141, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Firmware upgrade may well use these.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CheckPresence": { + "id": 1, + "details": [ + { + "type": "RPC", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing an application id number allows the version number of that application to be read back.", + "version": { + "first": 150, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Useful for checking the firmware that is loaded.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "PCBSerialNumber": { + "id": 2, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "A string reporting the PCB serial number, this string must be set using production equipment.", + "version": { + "first": 169, + "last": 541 + }, + "values": { + "default": "" + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "CustomerSerialNumber0": { + "id": 3, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A string reported relating to the customer, this string can be written only once after manufacture. If subsequent changes are needed CUSTOMERSERIALNUMBER1 must be used.", + "version": { + "first": 170, + "last": 541 + }, + "values": { + "default": "" + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CustomerSerialNumber1": { + "id": 4, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A string reported relating to the customer, this string can be written only once after manufacture. If subsequent changes are needed CUSTOMERSERIALNUMBER2 must be used.", + "version": { + "first": 170, + "last": 541 + }, + "values": { + "default": "" + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CustomerSerialNumber2": { + "id": 5, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A string reported relating to the customer, this string can be written only once after manufacture. If subsequent changes are needed CUSTOMERSERIALNUMBER3 must be used.", + "version": { + "first": 170, + "last": 541 + }, + "values": { + "default": "" + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CustomerSerialNumber3": { + "id": 6, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "A string reported relating to the customer, this string can be written only once after manufacture. This is the last customer serial number change slot.", + "version": { + "first": 170, + "last": 541 + }, + "values": { + "default": "" + }, + "statictype": "infrequentlyupdated", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "MonotonicSeconds": { + "id": 7, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "The number of seconds since reboot.", + "version": { + "first": 176, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "CalendarSeconds": { + "id": 8, + "details": [ + { + "type": "time_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "The number of seconds since 01-Jan-2000.", + "version": { + "first": 176, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": true, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "Time now. Write the current time during manufacture.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CoreRevision": { + "id": 9, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "A string reporting the product version string held in the system core binary.", + "version": { + "first": 196, + "last": 541 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [ + "alex.frost@xylem.com" + ], + "remarks": "This is effectively another application version number but for the Breeze Core and is worth looking at.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "DriveCapacity": { + "id": 10, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing a drive number returns the drive capacity in bytes, or 0 if the drive is not ready, or an error if the driver is not configured to be present.", + "version": { + "first": 233, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "ExitReason": { + "id": 11, + "details": [ + { + "type": "status_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing an application id number allows the exit error number of that application to be read back.", + "version": { + "first": 258, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "CorePlatform": { + "id": 12, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RO", + "lvl8": "RO" + }, + "description": "Reports the instruction set of the hosting microprocessor in b8-15 and allocated platform number in b0-7.", + "version": { + "first": 265, + "last": 541 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "n/a" + } + } + ] + }, + "CRC": { + "id": 13, + "details": [ + { + "type": "uint16_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing an application id number allows the CRC of that application to be read back.", + "version": { + "first": 279, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Useful for checking the firmware that is loaded.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + }, + "UpgradePermissions": { + "id": 14, + "details": [ + { + "type": "uint8_t", + "privilege": { + "lvl1": "RO", + "lvl2": "RO", + "lvl3": "RO", + "lvl4": "RO", + "lvl5": "RO", + "lvl6": "RO", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Bitfield of permissions releated to firmware upgrade", + "version": { + "first": 470, + "last": 541 + }, + "statictype": "static", + "production": { + "required": false, + "kitron": false, + "csd": "default", + "vako": false, + "operation_calibration": true, + "runtime_ignore": false, + "responsible": [ + "alex.frost@xylem.com", + "roland.drabesch@xylem.com" + ], + "remarks": "Set fix as final step at production.", + "region": { + "emea": { + "values": { + "default": 254 + } + }, + "na": { + "values": { + "default": 255 + } + } + } + }, + "fieldtool": { + "reset_permitted": "yes" + } + } + ] + }, + "CRC32": { + "id": 15, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Writing an application id number allows the 32 bit CRC of that application to be read back.", + "version": { + "first": 529, + "last": 541 + }, + "statictype": "dynamic", + "production": { + "required": false, + "kitron": false, + "csd": null, + "vako": false, + "operation_calibration": false, + "runtime_ignore": true, + "responsible": [], + "remarks": "Useful for checking the firmware that is loaded.", + "region": { + "emea": null, + "na": null + } + }, + "fieldtool": { + "reset_permitted": "no" + } + } + ] + } + }, + "status": { + "OK": { + "id": 0 + }, + "ZERO_APPS": { + "id": 1 + }, + "NO_MEMORY": { + "id": 2 + }, + "NOT_IMPLEMENTED": { + "id": 3 + }, + "BLOCK_NOT_FOUND": { + "id": 4 + }, + "NO_SUCH_VAR": { + "id": 5 + }, + "NO_CLIB": { + "id": 6 + }, + "KEY_FAILURE": { + "id": 7 + }, + "NO_SLOTS_FREE": { + "id": 8 + }, + "VECTOR_OUT_OF_RANGE": { + "id": 9 + }, + "BAD_VECTOR_RELEASE": { + "id": 10 + }, + "DRIVER_BUSY": { + "id": 11 + }, + "OUT_OF_RANGE": { + "id": 12 + }, + "CANT_CANCEL_TICK": { + "id": 13 + }, + "ID_OUT_OF_RANGE": { + "id": 14 + }, + "HANDLE_OUT_OF_RANGE": { + "id": 15 + }, + "INCAPABLE_HARDWARE": { + "id": 16 + }, + "ALREADY_OPEN": { + "id": 17 + }, + "STRING_TOO_LONG": { + "id": 18 + }, + "CORRUPT_CONFIGURATION": { + "id": 19 + }, + "TIMEOUT": { + "id": 20 + }, + "NO_PRIVILEGE": { + "id": 21 + }, + "DEVICE_DORMANT": { + "id": 22 + }, + "MEDIA_FAILURE": { + "id": 23 + }, + "BUFFER_OVERFLOW": { + "id": 24 + }, + "UPGRADE_SYNTAX_ERROR": { + "id": 25 + }, + "UPGRADE_DEPENDENCY_NOT_MET": { + "id": 26 + }, + "UPGRADE_MISSING": { + "id": 27 + }, + "UPGRADE_FRAGMENTED_BY_CLIB": { + "id": 28 + }, + "TRUNCATED": { + "id": 29 + }, + "INVALID_HEADER": { + "id": 30 + }, + "WONT_DELETE_CLIB": { + "id": 31 + }, + "BAD_REGISTER_VALUE": { + "id": 32 + }, + "NO_CHANGE_MADE": { + "id": 33 + }, + "NOT_ATOMIC": { + "id": 34 + }, + "CALENDAR_CHANGED": { + "id": 35 + }, + "WORM_FIELD": { + "id": 36 + }, + "CONVERSION_UNSUPPORTED": { + "id": 37 + }, + "CPU_PERMISSION_FAULT": { + "id": 38 + }, + "CPU_SOFTWARE_FAULT": { + "id": 39 + }, + "CPU_DECODE_FAULT": { + "id": 40 + }, + "CPU_ADDRESS_ACCESS_FAULT": { + "id": 41 + }, + "CPU_UNCAUGHT_FAULT": { + "id": 42 + }, + "ACCURACY_LOST": { + "id": 43 + }, + "EXIT_FAILURE": { + "id": 44 + }, + "CANT_CANCEL_CALLBACK": { + "id": 45 + }, + "RECOVERED_SPACE": { + "id": 46 + }, + "DRIVE_FULL": { + "id": 47 + }, + "NO_FILE_HANDLES_AVAILABLE": { + "id": 48 + }, + "EXCESSIVE_RESTARTS": { + "id": 49 + }, + "MPU_SETUP_FAILED": { + "id": 50 + }, + "DEVICE_NOT_OPEN": { + "id": 51 + }, + "NO_RESPONSE": { + "id": 52 + }, + "EXIT_WATCHDOG": { + "id": 53 + }, + "WONT_DELETE_SPECIAL": { + "id": 54 + }, + "WONT_UPGRADE_SPECIAL": { + "id": 55 + } + } + }, + "TESTMANAGER": { + "id": 98, + "version": { + "first": 0, + "last": 36 + }, + "registers": { + "OutputFile": { + "id": 0, + "details": [ + { + "type": "string", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Access the test log filename.", + "version": { + "first": 0, + "last": 36 + }, + "statictype": null + } + ] + }, + "TestNumber": { + "id": 1, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Access the test sequence number.", + "version": { + "first": 0, + "last": 36 + }, + "statictype": null + } + ] + }, + "TestStatus": { + "id": 2, + "details": [ + { + "type": "enum8", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Access the Test Manager state variable.", + "version": { + "first": 0, + "last": 36 + }, + "statictype": null + } + ] + }, + "TrapError": { + "id": 3, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Access the last recorded error code.", + "version": { + "first": 0, + "last": 36 + }, + "statictype": null + } + ] + }, + "TestParameter": { + "id": 4, + "details": [ + { + "type": "uint32_t", + "privilege": { + "lvl1": "RW", + "lvl2": "RW", + "lvl3": "RW", + "lvl4": "RW", + "lvl5": "RW", + "lvl6": "RW", + "lvl7": "RW", + "lvl8": "RW" + }, + "description": "Access the test parameter variable.", + "version": { + "first": 0, + "last": 36 + }, + "statictype": null + } + ] + } + }, + "status": { + "FAIL": { + "id": 0 + }, + "UNKNOWN_PARAMETER": { + "id": 1 + }, + "READ_ONLY_PARAMETER": { + "id": 2 + }, + "BUSY": { + "id": 3 + }, + "STRING_TOO_LONG": { + "id": 4 + }, + "FOPEN_FAIL": { + "id": 5 + }, + "FSEEK_FAIL": { + "id": 6 + }, + "FWRITE_FAIL": { + "id": 7 + }, + "FCLOSE_FAIL": { + "id": 8 + }, + "MALFORMED_FILENAME": { + "id": 9 + }, + "UNKNOWN_ACTION": { + "id": 10 + }, + "FILEREMOVE_FAIL": { + "id": 11 + }, + "FREAD_FAIL": { + "id": 12 + } + } } - } } diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs index 48aadb16..3bd6d953 100644 --- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs +++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/FM2014.cs @@ -35,7 +35,7 @@ *=======================================================================================\n */ -using NLog; +//using NLog; using System; using System.IO.Ports; using System.Threading; @@ -52,10 +52,10 @@ namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core /// /// Logger for raw data output /// - protected ILogger Logger - { - get; - } + //protected ILogger Logger + //{ + // get; + //} /// public String SerialNumber diff --git a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/IFM2014.cs b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/IFM2014.cs index 0483deea..7b64dc26 100644 --- a/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/IFM2014.cs +++ b/Common/Hardware/WaterMeter/MechanicalMeter/FM2014/FM2014Core/IFM2014.cs @@ -37,7 +37,7 @@ using System; using System.IO.Ports; -using NLog; +//using NLog; using Xylem.Common.CommonCore.Consts; namespace Sensus.Common.Hardware.WaterMeter.MechanicalMeter.FM2014.FM2014Core diff --git a/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj b/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj index 4e42f519..cb76a4b1 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj +++ b/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj @@ -10,6 +10,20 @@ latest Debug;Release;VPN_Debug + True + + + + False + False + + + + False + + + + False diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs index 2b6d6217..d3b9231f 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs @@ -803,7 +803,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps foreach (var row in table.Rows) { var testCase = NewTestRequirement(); - // Check if presets are required, if so copy all properties if (_presets.Meter != null) { @@ -847,7 +846,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps private void ReadPresetTable(Table table) { if (_presets.Meter == null) + { _presets = NewTestRequirement(); + } // Login is needed for building the MeterAppListVersion and generating the accessible register list. // This register list will be used to check for valid ranges. diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs index ecda626e..29d77e48 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs @@ -49,7 +49,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - CancellationToken. /// - /// + /// /// - Restore registers after reboot if failed - temporary workaround for FW-bug. /// public override StatusReturn ExecuteProcess() @@ -92,7 +92,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr return CancellationProcedure(); RegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler; - retValBol &= RegisterRestorer.CompareRegisters(CancellationToken); + retValBol &= RegisterRestorer.CompareRegisters(RegisterRestorer.RecoveryRegisters, CancellationToken); RegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; if (retValBol) @@ -112,9 +112,14 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr RegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; if (retValBol) { - EolProgress.ParametrizationCompareChecked = EOLStatus.OK; - Meter?.Logout(); - return StatusReturn.Warning; + if (RegisterRestorer.RestoreRegistersAfterReboot.Count == + RegisterRestorer.FailedComparisonRegisters.Count) + { + EolProgress.ParametrizationCompareChecked = EOLStatus.OK; + Meter?.Logout(); + // Display a warning for the 'after reboot' parameter recovery + return StatusReturn.Warning; + } } } diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs index 15342e54..069a84ea 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs @@ -248,7 +248,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr // Activate logging to output CalibCheckRegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler; // Read out all parameters from meter and compare it - if (!CalibCheckRegisterRestorer.ReadPresetRegisters(CancellationToken)) + if (!CalibCheckRegisterRestorer.ReadPresetRegisters(CalibCheckRegisterRestorer.RecoveryRegisters, + CancellationToken)) { // Stop logging CalibCheckRegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; @@ -1142,7 +1143,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr CalibCheckRegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler; // Compare the database value and the meter value (read in advance in the PreExecuteProcess) - if (!CalibCheckRegisterRestorer.CompareRegisters(CancellationToken)) + if (!CalibCheckRegisterRestorer.CompareRegisters(CalibCheckRegisterRestorer.RecoveryRegisters, + CancellationToken)) { // Stop logging CalibCheckRegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs index 75ad3d5e..e73fa079 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs @@ -153,14 +153,27 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr processState: ProcessState.GetProgrammingParameters, processInfo: Resources.StrStateGetProgrammingParameters, productionProcessNo: 3, - // Avoid automatic change after completion as parallel process is active - nextStateOnSuccess: BaseProductionProcess.DoNotChangeStateAfterCompletion, - // Kick off parallel process execution - kickOffParallelState: ProcessState.CreateEolProgress), - + nextStateOnSuccess: ProcessState.ExecFinalParametrization), + #endregion -------------------------------- GENERIC-STATES -------------------------------------------- #region ----------------------------------- EOL-STATES ------------------------------------------------ + new ProcessStateStruct( + productionProcess: new ExecFinalParametrization(Resources.StrStateFinalParametrization), + processState: ProcessState.ExecFinalParametrization, + processInfo: Resources.StrStateFinalParametrization, + productionProcessNo: 4, + nextStateOnSuccess: ProcessState.ExecStoreConfiguration, + // Wait for completion of all processes to avoid side effects + waitForAllProcesses: true), + + new ProcessStateStruct( + productionProcess: new ExecStoreConfiguration(Resources.StrStateStoreConfiguration), + processState: ProcessState.ExecStoreConfiguration, + processInfo: Resources.StrStateStoreConfiguration, + productionProcessNo: 5, + nextStateOnSuccess: ProcessState.CreateEolProgress), + // Precondition: - A new meter has to be detected // Create (hidden) EOL progress for sentinel. new ProcessStateStruct( @@ -179,22 +192,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr productionProcess: new ExecPasswordFile(Resources.StrStatePasswordFile), processState: ProcessState.ProcessPasswordFile, processInfo: Resources.StrStatePasswordFile, - productionProcessNo: 4, - nextStateOnSuccess: ProcessState.ExecFinalParametrization, - // Wait for completion of all processes to avoid side effects - waitForAllProcesses: true), - - new ProcessStateStruct( - productionProcess: new ExecFinalParametrization(Resources.StrStateFinalParametrization), - processState: ProcessState.ExecFinalParametrization, - processInfo: Resources.StrStateFinalParametrization, - productionProcessNo: 5, - nextStateOnSuccess: ProcessState.ExecStoreConfiguration), - - new ProcessStateStruct( - productionProcess: new ExecStoreConfiguration(Resources.StrStateStoreConfiguration), - processState: ProcessState.ExecStoreConfiguration, - processInfo: Resources.StrStateStoreConfiguration, productionProcessNo: 6, nextStateOnSuccess: ProcessState.CheckProductionState), diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs index 2b72d6a7..b703b07d 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs @@ -4218,7 +4218,8 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw { SetOverallProgressDisplayOn(Resources.StrRegisterReadoutActive); InfoProcessActive(lblRegisterReadout, Resources.StrRegisterCompareActive); - retVal = _registerRestorer.CompareRegisters(_cancellationToken); + retVal = _registerRestorer.CompareRegisters(_registerRestorer.RecoveryRegisters, + _cancellationToken); } else { From 96d19f66c8ed24f2729e37200d18fc62b70834b3 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Thu, 20 Nov 2025 17:26:53 +0100 Subject: [PATCH 06/13] ProductionUiCordonel: - setup for 'PERIODICLOG' versus 'SENSUSRADIO', - delay of 22 s after 'ExecFinalParametrization'before 'ExecStoreConfiguration' --- .../Genesis/GenesisCore/GenesisMeter.cs | 2 +- .../Genesis/GenesisCore/RegisterRestorer.cs | 10 +- .../Genesis/Registers/DataTypes/TimeT.cs | 8 ++ .../Steps/CommonProductionProcessSteps.cs | 1 + .../BaseProductionProcess.cs | 2 +- .../EolProcesses/EolProcessStatesDef.cs | 46 +++---- .../ProductionProcesses/IProductionProcess.cs | 1 + .../ProductionProcesses/ProcessController.cs | 118 ++++++++++++++++-- .../Properties/Resources.Designer.cs | 29 ++++- .../Properties/Resources.de.resx | 11 +- .../Properties/Resources.resx | 11 +- 11 files changed, 197 insertions(+), 42 deletions(-) diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index 547b1d65..1f752a72 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -2612,7 +2612,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore { Logger.Info($"Slot:{Slot} - {text}"); } - catch (Exception e) + catch (Exception) { // ignored } diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index ab94b1a3..eeecaaba 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -332,13 +332,21 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// Post programming parameters for EMEA region as NA region doesn't have radio and seal display shouldn't /// be executed. /// + /// + /// - Removed 'SENSUSRADIO_SystemState' as this will synchronize all parameters between this app and the + /// 'PERIODICLOG' app. Meaning, the 'SENSUSRADIO' app will overwrite the previously adjusted parameters of + /// the 'PERIODICLOG'. After writing the last 'PERIODICLOG' parameter a delay timer between finish exec- + /// parametrization and store all configs needs at least 20 s to update contents. + /// private static readonly List _finalizeProgrammingEmea = new List { // Set counter to 0 as this is a value how often the radio detected a reset new RecoveryRegisterItem("SENSUSRADIO_ResetCounter", new Byte[] { 0x00 }), // 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! + // ATTENTION: logout-delay-login required after this step! + // ATTENTION: 'PERIODICLOG' parameters which will be saved after at least 20 s and the 'SENSUSRADIO' will + // synchronize all parameters and therefore overwrite the previously written values. new RecoveryRegisterItem("SENSUSRADIO_SystemState", new Byte[] { 0xFF }), // Seal the display to lock against changes new RecoveryRegisterItem("GENESISFLOW_SealDisplay", new Byte[] { 0x01 }), diff --git a/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs b/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs index e1d65daa..65d0f549 100644 --- a/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs +++ b/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs @@ -8,6 +8,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes /// public class TimeT { + /// + /// Ctor: + /// - Takes actual date time as preset value + /// + public TimeT() + { + DateTimeUtc = DateTime.UtcNow; + } /// /// 1. Get seconds since 01. Jan 2000 00:00:00 UTC previously set by any call by /// or diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs index d3b9231f..0cb722c6 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.IO; using System.Linq; using System.Reflection; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs index 564548d4..3799f0c0 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs @@ -122,7 +122,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses /// public IGenesisMeter Meter { - protected get; set; + get; set; } /// diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs index e73fa079..45ff99e8 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs @@ -130,7 +130,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr productionProcessNo: 0, // CheckNewMeter will exit with repeated detect or connect nextStateOnSuccess: ProcessState.CheckNewMeter), - + new ProcessStateStruct( productionProcess: new ConnectCordonel(Resources.StrStateConnectCordonel), processState: ProcessState.ConnectCordonel, @@ -147,33 +147,17 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr nextStateOnSuccess: BaseProductionProcess.DoNotChangeStateAfterCompletion, // Kick off parallel process execution kickOffParallelState: ProcessState.GetProgrammingParameters), - + new ProcessStateStruct( productionProcess: new GetFinalParametrization(Resources.StrStateGetProgrammingParameters), processState: ProcessState.GetProgrammingParameters, processInfo: Resources.StrStateGetProgrammingParameters, productionProcessNo: 3, - nextStateOnSuccess: ProcessState.ExecFinalParametrization), + nextStateOnSuccess: ProcessState.CreateEolProgress), #endregion -------------------------------- GENERIC-STATES -------------------------------------------- #region ----------------------------------- EOL-STATES ------------------------------------------------ - new ProcessStateStruct( - productionProcess: new ExecFinalParametrization(Resources.StrStateFinalParametrization), - processState: ProcessState.ExecFinalParametrization, - processInfo: Resources.StrStateFinalParametrization, - productionProcessNo: 4, - nextStateOnSuccess: ProcessState.ExecStoreConfiguration, - // Wait for completion of all processes to avoid side effects - waitForAllProcesses: true), - - new ProcessStateStruct( - productionProcess: new ExecStoreConfiguration(Resources.StrStateStoreConfiguration), - processState: ProcessState.ExecStoreConfiguration, - processInfo: Resources.StrStateStoreConfiguration, - productionProcessNo: 5, - nextStateOnSuccess: ProcessState.CreateEolProgress), - // Precondition: - A new meter has to be detected // Create (hidden) EOL progress for sentinel. new ProcessStateStruct( @@ -181,7 +165,16 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr processState: ProcessState.CreateEolProgress, processInfo: Resources.StrStateCreateEolProgress, productionProcessNo: null, - nextStateOnSuccess: ProcessState.ProcessPasswordFile), + nextStateOnSuccess: ProcessState.ExecFinalParametrization), + + new ProcessStateStruct( + productionProcess: new ExecFinalParametrization(Resources.StrStateFinalParametrization), + processState: ProcessState.ExecFinalParametrization, + processInfo: Resources.StrStateFinalParametrization, + productionProcessNo: 4, + nextStateOnSuccess: ProcessState.ProcessPasswordFile, + // Wait for completion of all processes to avoid side effects + waitForAllProcesses: true), // Precondition: - The connection process has to be completed as a password change in the DB // will take place: Skeleton to Password Level 8. Not waiting for completion may cause side @@ -192,7 +185,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr productionProcess: new ExecPasswordFile(Resources.StrStatePasswordFile), processState: ProcessState.ProcessPasswordFile, processInfo: Resources.StrStatePasswordFile, - productionProcessNo: 6, + productionProcessNo: 5, nextStateOnSuccess: ProcessState.CheckProductionState), // Parametrization has to be completed as those needed to check e.g. the remaining FW based lifetime. @@ -200,8 +193,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr productionProcess: new CheckProductionState(Resources.StrStateCheckProductionState), processState: ProcessState.CheckProductionState, processInfo: Resources.StrStateCheckProductionState, - productionProcessNo: 7, - nextStateOnSuccess: ProcessState.RebootCordonel), + productionProcessNo: 6, + nextStateOnSuccess: ProcessState.ExecStoreConfiguration), + + new ProcessStateStruct( + productionProcess: new ExecStoreConfiguration(Resources.StrStateStoreConfiguration), + processState: ProcessState.ExecStoreConfiguration, + processInfo: Resources.StrStateStoreConfiguration, + productionProcessNo: 7, + nextStateOnSuccess: ProcessState.RebootCordonel), // Precondition: - The store configuration has to be executed to safe all settings // to non-volatile memory and checked if remaining valid after the reboot. diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs index 62cb3390..bf510ae7 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs @@ -101,6 +101,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses IGenesisMeter Meter { set; + get; } /// diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs index 6fe00b63..6d905086 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs @@ -1,14 +1,17 @@ -using System; +using LaaPackages.Features.Cordonel.Models; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; -using LaaPackages.Features.Cordonel.Models; +using System.Windows.Threading; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisStatus; +using Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum; using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EventArgs; +using Xylem.Common.Production.ProductionUiCordonel.Properties; using Timer = System.Threading.Timer; namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses @@ -98,6 +101,17 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses private Timer _processCtrlTimer; private const Int32 ProcessTimerCycleMs = 250; + // Delay timer between finish exec-parametrization and 'StoreConfiguration' as 'PERIODICLOG' doesn't + // have 'StoreConfiguration' and needs at least 20 s to update contents before 'StoreConfiguration' + // can be dispatched to 'SENSUSRADIO'. + private DispatcherTimer _paramExeFinishedToStoreConfigDelayTimer; + // Cycle time in milliseconds + private const Int32 ParamExeFinishedToStoreConfigDelayCycleMs = 1000; + // Time to keep in seconds + private const Int32 ParamExeFinishedToStoreConfigTimeS = 22; + private Boolean _paramExeFinishedToStoreConfigDelayTimerExceeded; + private DateTimeOffset _paramExeFinishedToStoreConfigDelayTimerStartTime; + /// /// Avoid waiting for a single process completion. /// @@ -126,9 +140,18 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses /// - Always RegisterWatchService on, /// - Always MinMaxCHeck on. /// + /// + /// - _paramExeFinishedToStoreConfigurationDelayTimer. + /// public ProcessController(Int32 slot, IProcessStateDef processSateDef) { + // Timer for cyclic call of state machine _processCtrlTimer = new Timer(TmrProcessCtrlCycle_Elapsed, null, ProcessTimerCycleMs, ProcessTimerCycleMs); + + // Delay timer between final-param-exec finished and start of 'StoreConfiguration' + _paramExeFinishedToStoreConfigDelayTimer = new DispatcherTimer(); + _paramExeFinishedToStoreConfigDelayTimer.Tick += TmrParamExeFinishedToStoreConfigCycle_Tick; + _paramExeFinishedToStoreConfigDelayTimer.Interval = TimeSpan.FromMilliseconds(ParamExeFinishedToStoreConfigDelayCycleMs); _slot = slot; _cancellationTokenSource = new CancellationTokenSource(); _cancellationToken = _cancellationTokenSource.Token; @@ -204,6 +227,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses { _processCtrlTimer?.Dispose(); _processCtrlTimer = null; + _paramExeFinishedToStoreConfigDelayTimer?.Stop(); + _paramExeFinishedToStoreConfigDelayTimer = null; _processStateDef = null; KillProcesses(); RemoveMeter(); @@ -226,6 +251,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses /// /// - Remove process events if process is finished or skipped. /// + /// + /// - Init and start the delay timer between finish exec-parametrization and 'StoreConfiguration + /// to all apps as 'PERIODICLOG' doesn't have 'StoreConfiguration' and needs at least 20 s to + /// update contents before 'SENSUSRADIO' tries to synchronize all settings. + /// private void ProcessStateChanged_Handler(Object sender, SingleProcessStateArgs e) { IProductionProcess pp = null; @@ -250,6 +280,22 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses case SingleProcessState.Running: break; } + // Delay timer init and start if parametrization exec finished but only for 'EMEA' region + if (pp != null && + pp.ProcessName != null && + pp.Meter != null && + pp.Meter.Region.Equals("EMEA") && + pp.ProcessName.Equals(Resources.StrStateFinalParametrization) && + e.SingleProcessState == SingleProcessState.Succeeded) + { + var teaTime = new TimeT(); + _paramExeFinishedToStoreConfigDelayTimerExceeded = false; + _paramExeFinishedToStoreConfigDelayTimerStartTime = teaTime.DateTimeUtc; + _paramExeFinishedToStoreConfigDelayTimer.Start(); + var msg = $"{Resources.StrMsgRebootDelayTimerStarted} {ParamExeFinishedToStoreConfigTimeS} s" + + $" - {teaTime}"; + OnProcessLogRequest?.Invoke(sender, new ProcessLogArgs(msg)); + } // signal state change to GUI OnProcessStateChanged?.Invoke(sender, e); } @@ -300,6 +346,30 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses StateMachine(); } + /// + /// Delay timer between parametrization exec finished and store config to support the 'PERIODICLOG' update + /// which needs at least 20 s after writing to update the internal contents. Not holding this time will cause + /// to take the value before the writing access as 'SENSUSRADIO' will synchronize all parameters if it receives + /// the 'StoreConfiguration' command. + /// + /// + /// + /// + /// - Initial + /// + private void TmrParamExeFinishedToStoreConfigCycle_Tick(Object state, System.EventArgs e) + { + var teaTime = new TimeT(); + var timeSpan = teaTime.DateTimeUtc - _paramExeFinishedToStoreConfigDelayTimerStartTime; + if (timeSpan.Seconds >= ParamExeFinishedToStoreConfigTimeS) + { + _paramExeFinishedToStoreConfigDelayTimerExceeded = true; + _paramExeFinishedToStoreConfigDelayTimer.Stop(); + var msg = $"{Resources.StrMsgRebootDelayTimerExceeded} {ParamExeFinishedToStoreConfigTimeS} s - {teaTime}"; + OnProcessLogRequest?.Invoke(this, new ProcessLogArgs(msg)); + } + } + #endregion --------------------------------------- Events ----------------------------------------------------- #region ------------------------------------------ State Machine ---------------------------------------------- @@ -732,25 +802,48 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses /// /// - Removed cancellationToken assignment. /// + /// + /// Delay timer between finish exec-parametrization and 'StoreConfiguration' as 'PERIODICLOG' doesn't + /// have 'StoreConfiguration' and needs at least 20 s to update contents before 'StoreConfiguration' + /// can be dispatched to 'SENSUSRADIO'. + /// private void StartProcess(ProcessStateStruct processStateStruct) { - // deny access if uninitialized + // Deny access if uninitialized if (Processes == null || processStateStruct.ProductionProcess == null) return; - // do not start a new process if any error or abort request is signaled + // Do not start a new process if any error or abort request is signaled if (AnyProcessRequiresAbortion() && !processStateStruct.StartAlways) { return; } - // process is waiting for execution after init, this overrides the eventually abort state + // Process is waiting for execution after init, this overrides the eventually abort state processStateStruct.ProductionProcess.InitProcess(); - // wait for a single process to complete before start of new depending on process + // Wait for '_paramExeFinishedToRebootDelayTimerExceeded' before 'StoreConfiguration' to all apps + while (processStateStruct.ProcessState == ProcessState.ExecStoreConfiguration && + _paramExeFinishedToStoreConfigDelayTimer != null && + _paramExeFinishedToStoreConfigDelayTimer.IsEnabled && + !_paramExeFinishedToStoreConfigDelayTimerExceeded) + { + var teaTime = new TimeT(); + var timeSpan = teaTime.DateTimeUtc - _paramExeFinishedToStoreConfigDelayTimerStartTime; + var msg = $"{Resources.StrMsgRebootDelayTimerActive} " + + $"{timeSpan.Seconds}/{ParamExeFinishedToStoreConfigTimeS} s - {teaTime}"; + OnProcessLogRequest?.Invoke(this, new ProcessLogArgs(msg)); + OnProcessProgressChanged?.Invoke(this, new ProcessProgressArgs(ParamExeFinishedToStoreConfigTimeS, + ProcessProgressArgs.ProcessProgressType.MaxActualProcessSteps)); + OnProcessProgressChanged?.Invoke(this, new ProcessProgressArgs(timeSpan.Seconds, + ProcessProgressArgs.ProcessProgressType.ActualProcessSteps)); + Thread.Sleep(1000); + } + + // Wait for a single process to complete before start of new depending on process if (processStateStruct.WaitForSingleProcess != null) { - // each process will have its own timer until a timeout will change the state + // Each process will have its own timer until a timeout will change the state while (Processes.Any(pp => !AnyProcessRequiresAbortion() && _processStateDef.GetStateOfProcess(pp) == processStateStruct.WaitForSingleProcess && WaitForProcess(pp))) @@ -759,10 +852,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses } } - // wait for all initialized processes to complete before start the new process + // Wait for all initialized processes to complete before start the new process if (processStateStruct.WaitForAllProcesses) { - // each process will have its own timer until a timeout will change the state, + // Each process will have its own timer until a timeout will change the state, // avoid checking the new process, which is not started due to this waiting loop while (Processes.Any(pp => pp.ProcessName != processStateStruct.ProductionProcess.ProcessName && WaitForProcess(pp) @@ -772,7 +865,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses } } - // if any process exits meanwhile with an error or abort request avoid a start of this process + // If any process exits meanwhile with an error or abort request avoid a start of this process if ((!processStateStruct.StartAlways && AnyProcessRequiresAbortion()) || processStateStruct.ProductionProcess.SingleProcessState == SingleProcessState.Idle || processStateStruct.ProductionProcess.SingleProcessState == SingleProcessState.Abort) @@ -789,12 +882,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses processStateStruct.ProductionProcess.ProductionStatus = _productionStatus; processStateStruct.ProductionProcess.ProductionRequirements = _cordonelRequirements; processStateStruct.ProductionProcess.EolProgress = _cordonelEolProgress; - // processStateStruct.ProductionProcess.CancellationToken = _cancellationToken; - // kick off process execution, the breakExitState will not be used + // Kick off process execution, the breakExitState will not be used processStateStruct.ProductionProcess.StartProcess(processStateStruct.NextStateOnSuccess, processStateStruct.ErrorExitState, processStateStruct.BreakExitState); - // connect process events to actual process + // Connect process events to actual process AddProcessEvents(processStateStruct.ProductionProcess); } diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs index f517f498..593a3f78 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs @@ -1644,6 +1644,33 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to Expired delay timer between parametrization and store config. + /// + internal static string StrMsgRebootDelayTimerActive { + get { + return ResourceManager.GetString("StrMsgRebootDelayTimerActive", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Stop: Delay timer between parametrization and store config after. + /// + internal static string StrMsgRebootDelayTimerExceeded { + get { + return ResourceManager.GetString("StrMsgRebootDelayTimerExceeded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Start: Delay timer between parametrization and store config for. + /// + internal static string StrMsgRebootDelayTimerStarted { + get { + return ResourceManager.GetString("StrMsgRebootDelayTimerStarted", resourceCulture); + } + } + /// /// Looks up a localized string similar to Estimated remaining lifetime. /// @@ -2563,7 +2590,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } /// - /// Looks up a localized string similar to WARNING: Service SIRT alarm mask setup skipped . + /// Looks up a localized string similar to WARNING: Service SIRT alarm mask check skipped . /// internal static string StrWarningMsgServiceSirtSkipped { get { diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 8b195c1f..475a4e8b 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -437,7 +437,7 @@ FEHLER: Service SIRT Start des Messageserves fehlgeschlagen - WARNUNG: Service SIRT Alarmmaskeneinstellung übersprungen + WARNUNG: Service SIRT Alarmmaskenüberprüfung ausgelassen FEHLER: Funkverschlüsselungscode fehlerhaft @@ -687,6 +687,15 @@ ACHTUNG + + + Start: Verzögerungszeit zwischen Parameterschreiben und Wertespeicherung für + + + Stop: Verzögerungszeit zwischen Parameterschreiben und Wertespeicherung nach + + + Abgelaufene Verzögerungszeit zwischen Parameterschreiben und Wertespeicherung Erlaubt diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.resx index b8b60f83..71bf1ff4 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.resx @@ -437,7 +437,7 @@ ERROR: Service SIRT message server start failed - WARNING: Service SIRT alarm mask setup skipped + WARNING: Service SIRT alarm mask check skipped ERROR: Radio encryption code wrong @@ -687,6 +687,15 @@ ATTENTION + + + Start: Delay timer between parametrization and store config for + + + Stop: Delay timer between parametrization and store config after + + + Expired delay timer between parametrization and store config Allowed From dc7caec28155db464a5f49b27560cb515c696bfb Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 21 Nov 2025 10:10:06 +0100 Subject: [PATCH 07/13] Submodule update --- .../Genesis/Registers/DataTypes/TimeT.cs | 2 +- Common/LaaPackages | 2 +- .../Steps/CommonProductionProcessSteps.cs | 2 +- .../ProductionUiCordonel/Model/EOLHandler.cs | 1 + .../EolProcesses/CheckAttachments.cs | 2 +- .../EolProcesses/CheckFinalParametrization.cs | 2 +- .../EolProcesses/CheckProductionState.cs | 2 +- .../EolProcesses/CheckRadio.cs | 4 +-- .../EolProcesses/ExecFinalParametrization.cs | 2 +- .../EolProcesses/ExecPasswordFile.cs | 2 +- .../EolProcesses/ExecRebootCordonel.cs | 2 +- .../EolProcesses/ExecStoreConfiguration.cs | 2 +- .../PrepareAssemblyRelease.cs | 1 - .../ProductionWindow.xaml.cs | 2 +- .../Properties/Resources.Designer.cs | 27 +++++++++++++++++++ .../Properties/Resources.de.resx | 9 +++++++ .../Properties/Resources.resx | 9 +++++++ 17 files changed, 59 insertions(+), 14 deletions(-) diff --git a/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs b/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs index 65d0f549..da8e20ea 100644 --- a/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs +++ b/Common/Hardware/WaterMeter/Genesis/Registers/DataTypes/TimeT.cs @@ -104,7 +104,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes { private set; get; - } = _fixedDateTime2000; + } /// /// Get string of UTC date and time universal language with 24 hours format diff --git a/Common/LaaPackages b/Common/LaaPackages index a9ef9051..8bda7ec6 160000 --- a/Common/LaaPackages +++ b/Common/LaaPackages @@ -1 +1 @@ -Subproject commit a9ef9051cabb74806a4ce0293794cf95756883e6 +Subproject commit 8bda7ec658f56be11f53f97ddf6616447d1abf36 diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs index 0cb722c6..cfd0ae8b 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; -using System.Data; using System.IO; using System.Linq; using System.Reflection; using FluentAssertions; using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Logic.ProductionToProductMapper.Files.Fw; using NUnit.Framework; using NCrunch.Framework; diff --git a/Common/Production/ProductionUiCordonel/Model/EOLHandler.cs b/Common/Production/ProductionUiCordonel/Model/EOLHandler.cs index d4c613b9..e8dc5b06 100644 --- a/Common/Production/ProductionUiCordonel/Model/EOLHandler.cs +++ b/Common/Production/ProductionUiCordonel/Model/EOLHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Net; using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Newtonsoft.Json; using Xylem.Common.CommonCore.Configuration; using Xylem.Common.Logic.SoftwareAccessHelper; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckAttachments.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckAttachments.cs index 46f08d13..ec1f5b3c 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckAttachments.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckAttachments.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Threading; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Newtonsoft.Json; using Xylem.Common.CommonCore.Configuration; using Xylem.Common.CommonCore.Consts; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs index 29d77e48..eee41e87 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; //using Xylem.Common.Hardware.WaterMeter.Genesis.Registers.DataTypes; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs index 069a84ea..0e790736 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Windows; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Logic.ProductionToProductMapper.Files.Fw; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs index eeacedd1..35333568 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs @@ -1,5 +1,4 @@ -using LaaPackages.Features.Cordonel.Models; -using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Linq; using SIRTCOM; using System; using System.Collections.Generic; @@ -8,6 +7,7 @@ using System.Net; using System.Threading; using System.Windows.Threading; using System.Xml.Linq; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Configuration; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs index d72ac822..018ae48b 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs @@ -1,6 +1,6 @@ using System; using System.Linq; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs index 0a0a3789..9bb1ceed 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs @@ -2,7 +2,7 @@ using System.Linq; using System.Text; using System.Threading; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs index ba947b0b..10376b2f 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs @@ -1,5 +1,5 @@ using System; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs index 8123bc65..77b7637f 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs @@ -1,5 +1,5 @@ using System; -using LaaPackages.Features.Cordonel.Models; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Production.ProductionUiCordonel.Properties; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs index 453f0489..991d786b 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts; -using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum; using Xylem.Common.Production.ProductionUiCordonel.Properties; using Xylem.Common.Production.ProductionUiCordonel.UserControls; diff --git a/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs b/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs index d2a01868..c1fa5ec1 100644 --- a/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs +++ b/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs @@ -845,7 +845,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel !string.IsNullOrEmpty(genesisMeter.MeterSize) ? genesisMeter.MeterSize : "?"); UpdateContentControl(lblMeterLengthValue, - (!string.IsNullOrEmpty(genesisMeter.MeterLength) && !genesisMeter.MeterLength.Equals("?")) ? + !string.IsNullOrEmpty(genesisMeter.MeterLength) && !genesisMeter.MeterLength.Equals("?") ? genesisMeter.MeterLength + " mm" : "?"); UpdateContentControl(lblInterfaceVersionValue, diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs index 593a3f78..1b2c2d74 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs @@ -492,6 +492,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to ERROR: CSD is locked for production. + /// + internal static string StrErrorMsgCsdLocked { + get { + return ResourceManager.GetString("StrErrorMsgCsdLocked", resourceCulture); + } + } + /// /// Looks up a localized string similar to ERROR: Data base access failed. /// @@ -2319,6 +2328,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to Success: CSD is approved for production. + /// + internal static string StrSuccessMsgCsdValid { + get { + return ResourceManager.GetString("StrSuccessMsgCsdValid", resourceCulture); + } + } + /// /// Looks up a localized string similar to Success: Database with Cordonel radio encryption key successfully crosschecked. /// @@ -2562,6 +2580,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } } + /// + /// Looks up a localized string similar to WARNING: CSD status and number are unknown. + /// + internal static string StrWarningMsgCsdStatusUnknown { + get { + return ResourceManager.GetString("StrWarningMsgCsdStatusUnknown", resourceCulture); + } + } + /// /// Looks up a localized string similar to WARNING: Parameter restored after reboot as it does not survive it. /// diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 475a4e8b..2fcf84b0 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -684,6 +684,15 @@ FEHLER: Hardwareneustarts über der erlaubten Grenze + + + FEHLER: CSD ist für die Production gesperrt + + + Erfolg: CSD ist zur Produktion freigegeben + + + WARNUNG: CSD Status und Nummer sind unbekannt ACHTUNG diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.resx index 71bf1ff4..9e377b10 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.resx @@ -684,6 +684,15 @@ ERROR: Hardware reboots higher than allowed threshold + + + ERROR: CSD is locked for production + + + Success: CSD is approved for production + + + WARNING: CSD status and number are unknown ATTENTION From ce4869b508e8b063efd5f580d20fd46155932b5a Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 21 Nov 2025 13:37:41 +0100 Subject: [PATCH 08/13] ProductionUiCordonel: - CSD validated --- Common/Common.sln.DotSettings | 20 +++++ Common/Common.sln.DotSettings.user | 2 + .../EolProcesses/CheckProductionState.cs | 79 ++++++++++++----- .../GenericModules/GenericChecks.cs | 84 ++++++++++++++++--- .../PickingProcesses/CheckProductionState.cs | 24 +++++- .../ProductionProcesses/ProcessController.cs | 6 +- .../Properties/Resources.Designer.cs | 30 +++++-- .../Properties/Resources.de.resx | 10 ++- .../Properties/Resources.resx | 14 +++- 9 files changed, 223 insertions(+), 46 deletions(-) diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings index 77a48996..cbbed362 100644 --- a/Common/Common.sln.DotSettings +++ b/Common/Common.sln.DotSettings @@ -1,15 +1,35 @@  Left + SUGGESTION + + SUGGESTION + WARNING WARNING WARNING WARNING + Arithmetic, Relational, Conditional + Arithmetic, Shift, Relational, Equality, Bitwise, Conditional, NullCoalescing, Lowest + NEXT_LINE + 1 + 120 DN FW LUT + False + False + False + False + False + False + False True True True + True + True + True + True True diff --git a/Common/Common.sln.DotSettings.user b/Common/Common.sln.DotSettings.user index f4c9b120..2776c8cb 100644 --- a/Common/Common.sln.DotSettings.user +++ b/Common/Common.sln.DotSettings.user @@ -1,5 +1,7 @@  + DO_NOT_SHOW DO_NOT_SHOW + True 2 True True diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs index 0e790736..8bbeac57 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs @@ -26,7 +26,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// Maximum of expected processing steps for this process to feed the GUI progress bar. /// - private const Int32 MaxActualProgressSteps = 23; + private const Int32 MaxActualProgressSteps = 24; /// /// Successfully test on flow test bench will return this const value. @@ -82,8 +82,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// public override StatusReturn PreExecuteProcess() { - if (Meter == null || - string.IsNullOrEmpty(Meter.PcbId) || + if (Meter == null || + string.IsNullOrEmpty(Meter.PcbId) || Meter.PcbId.Length < GenesisMeter.MinPcbIdLength || EolProgress == null) { @@ -334,6 +334,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// public override StatusReturn ExecuteProcess() { + var erroneousSequenceStep = false; + var warningSequenceStep = false; + #region ----------------------------------- Check EOL Progress -------------------------------------------- if (string.IsNullOrEmpty(CheckEolProgress(out var feedbackMsg))) { @@ -345,7 +348,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Requirements -------------------------------------------- - var eolStatus = CheckRequirements(out feedbackMsg); if (EOLStatus.FAIL == eolStatus) { @@ -357,8 +359,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr ActualProcessProgress++; #endregion - #region ----------------------------------- Check Production Order ---------------------------------------- + #region ----------------------------------- Validate CSD ------------------------------------------------- + eolStatus = ValidateCsd(out feedbackMsg); + if (EOLStatus.FAIL == eolStatus) + { + ErrorMsgDispatcher(feedbackMsg); + return StatusReturn.Failed; + } + if (EOLStatus.NA == eolStatus) + { + WarningMsgDispatcher(feedbackMsg); + } + + SuccessMsgDispatcher(feedbackMsg); + ActualProcessProgress++; + #endregion + + #region ----------------------------------- Check Production Order ---------------------------------------- // Production order if (EOLStatus.FAIL == CheckProductionOrderNumber(out feedbackMsg)) { @@ -386,7 +404,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Region -------------------------------------------------- - if (EOLStatus.FAIL == CheckRegion(out feedbackMsg)) { ErrorMsgDispatcher(feedbackMsg); @@ -398,7 +415,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check LUT CRC ------------------------------------------------- - if (string.IsNullOrEmpty(CheckLutCrc(out feedbackMsg))) { ErrorMsgDispatcher(feedbackMsg); @@ -410,7 +426,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Meter Size ---------------------------------------------- - if (string.IsNullOrEmpty(CheckMeterSize(out feedbackMsg))) { ErrorMsgDispatcher(feedbackMsg); @@ -422,7 +437,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Firmware and Apps --------------------------------------- - if (string.IsNullOrEmpty(CheckFwAndApps(out feedbackMsg))) { ErrorMsgDispatcher(feedbackMsg); @@ -434,9 +448,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Kitron Radio Signal Levels ------------------------------ - - var erroneousSequenceStep = false; - var warningSequenceStep = false; var statusReturn = CheckKitronRadioSignalLevels(out feedbackMsg); if (StatusReturn.Failed == statusReturn) @@ -460,7 +471,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Remaining Battery Load ---------------------------------- - if (EOLStatus.FAIL == CheckRemainingBatteryLoad(out feedbackMsg)) { ErrorMsgDispatcher(feedbackMsg); @@ -477,7 +487,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Remaining Life Time ------------------------------------- - if (EOLStatus.FAIL == CheckRemainingLifetime(out feedbackMsg)) { ErrorMsgDispatcher(feedbackMsg); @@ -494,7 +503,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Storage Months ------------------------------------------ - if (EOLStatus.FAIL == CheckStorageMonths(out feedbackMsg)) { ErrorMsgDispatcher(feedbackMsg); @@ -511,7 +519,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Preadjusment -------------------------------------------- - eolStatus = CheckPreadjustment(out feedbackMsg); if (EOLStatus.FAIL == eolStatus) { @@ -534,7 +541,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Flow Test State ----------------------------------------- - eolStatus = CheckFlowTestState(out feedbackMsg); if (EOLStatus.FAIL == eolStatus) { @@ -557,7 +563,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Calibration Values -------------------------------------- - // ATTENTION: // This step may exit with "skipped" here if "special-requirement" forces to skip the check of calibration. // All following checks will be skipped as well. @@ -589,7 +594,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Summarize Check Results --------------------------------------- - // One or more checks failed if (erroneousSequenceStep) return StatusReturn.Failed; @@ -708,6 +712,43 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr return EolProgress.RequirementRequestChecked; } + /// + /// Validate the CSD + /// + /// Software Requirement Specification: + /// [SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Validate_CSD + /// + /// + /// + /// + /// + /// - initial. + /// + private EOLStatus ValidateCsd(out String feedbackMsg) + { + feedbackMsg = ""; + if (ProductionRequirements == null || EolProgress == null) + { + feedbackMsg = Resources.StrErrorMsgProductionRequirements; + if (EolProgress != null) + EolProgress.RequirementRequestChecked = EOLStatus.FAIL; + return EOLStatus.FAIL; + } + + var statusReturn = GenericChecks.ValidateCsd(ProductionRequirements, out feedbackMsg); + if (StatusReturn.Failed == statusReturn) + { + return EOLStatus.FAIL; + } + + if (StatusReturn.Warning == statusReturn) + { + return EOLStatus.NA; + } + + return EOLStatus.OK; + } + /// /// Check production order number between meter and requirements. /// diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs index 0d20767f..118700ec 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs @@ -4,6 +4,7 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; +using LaaPackages.Features.Cordonel.Models.Values; using Xylem.Common.CommonCore.Configuration; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.Applications; @@ -65,16 +66,16 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener var strFwCalculatedLifeTimeYears = ""; if (productionStatus.FwCalculatedRemainingLifeTimeYears != null) { - strFwCalculatedLifeTimeYears = + strFwCalculatedLifeTimeYears = $@" - {Resources.StrMsgRemainingLifeTime}: " + - $"{productionStatus.FwCalculatedRemainingLifeTimeYears:F2} " + + $"{productionStatus.FwCalculatedRemainingLifeTimeYears:F2} " + $"{Resources.StrMsgYears} (Firmware)"; } // Build message for required versus calculated lifetime var lifeTime = $"{Resources.StrMsgRemainingLifeTime}: " + // Actual SW calculated lifetime based on readings from meter $"{productionStatus.RemainingLifeTimeYears:F2} " + - $"{Resources.StrMsgYears} (Software)" + + $"{Resources.StrMsgYears} (Software)" + // Optional FW calculation strFwCalculatedLifeTimeYears + $" - {Resources.StrMsgRequiredLifeTime}: " + @@ -83,7 +84,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener $"{Resources.StrMsgYears}"; // Check required years for assembly - if ((assemblyLine && + if ((assemblyLine && productionRequirements.RequiredLifeTimeYearsAssembly > productionStatus.RemainingLifeTimeYears) || (!assemblyLine && (productionRequirements.RequiredLifeTimeYearsShipping > productionStatus.RemainingLifeTimeYears || @@ -134,8 +135,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener var actualDate = DateTime.UtcNow.Date; var batteryAssemblyDate = productionStatus.BatteryAssemblyDateTimeUtc.Value.Date; - // Give one day more as rounding issue - var expirationDate = batteryAssemblyDate.AddDays((Double)productionRequirements.MaxStorageMonths * + // Allow one day more as rounding issue + var expirationDate = batteryAssemblyDate.AddDays((Double)productionRequirements.MaxStorageMonths * GenesisStatusHandler.DAYS_PER_MONTH + 1.0); var strStorageProduction = $"{Resources.StrLblKitronProductionDate}: " + $"{productionStatus.BatteryAssemblyDateTimeUtc.Value:dd-MMM-yyyy} - " + @@ -231,10 +232,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener var strStation = assemblyLine ? $"{productionRequirements.MaxDrainedBatteryLoadPercentAssembly:F2} %" : $"{productionRequirements.MaxDrainedBatteryLoadPercentShipping:F2} %"; - + // Create an output message addon for alternative power consumption calculation var strAlternativeCalc = productionStatus.AlternativeRequiredBatteryLoadPercent == null - ? "" : $" - {Resources.StrMsgRequirementAbsolutLimitDrainedBattery}: " + strStation ; + ? "" : $" - {Resources.StrMsgRequirementAbsolutLimitDrainedBattery}: " + strStation; var strBatLoad = $"{Resources.StrMsgDrainedBattery}: " + // Actual calculated battery load based on readings from meter @@ -246,7 +247,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener // This is the absolut limit even if the "AlternativeRequiredBatteryLoadPercent" will be used if ((assemblyLine && productionStatus.DrainedBatteryLoadPercent > - productionRequirements.MaxDrainedBatteryLoadPercentAssembly) || + productionRequirements.MaxDrainedBatteryLoadPercentAssembly) || (!assemblyLine && productionStatus.DrainedBatteryLoadPercent > productionRequirements.MaxDrainedBatteryLoadPercentShipping)) { @@ -472,6 +473,67 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener return StatusReturn.Okay; } + /// + /// Validate the CSD: + /// - A CSD number is needed, + /// - The CSD status has to allow production: + /// - are not allowed for production + /// - are not allowed for production + /// - are all the today's CSD for production 2025-Nov-21 (but not released) + /// - are all the today's CSD for production 2025-Nov-21 (but not released) + /// + /// + /// + /// + /// + /// - Initial. + /// + public static StatusReturn ValidateCsd(CordonelRequirements productionRequirements, out String feedbackMsg) + { + feedbackMsg = ""; + if (productionRequirements == null) + { + feedbackMsg = Resources.StrErrorMsgProductionRequirements; + return StatusReturn.Failed; + } + + // Extract CSD information. + var csd = productionRequirements.CSD; + if (csd == null || + csd.Status == CSDStatus.Null || + string.IsNullOrEmpty(csd.Name) || + string.IsNullOrEmpty(csd.Code) || + csd.IdentId == 0) + { + feedbackMsg = Resources.StrErrorMsgCsdNotReceived; + return StatusReturn.Failed; + } + + var csdId = $"{csd.Name} - Code: {csd.Code} - ID: {csd.IdentId}"; + + // Released is the best case + if (csd.Status == CSDStatus.Released) + { + feedbackMsg = $"{Resources.StrSuccessMsgCsdValid} - {csdId}"; + return StatusReturn.Okay; + } + // Known are all the today's CSD for production 2025-Nov-21 (but not released) + if (csd.Status == CSDStatus.Known) + { + feedbackMsg = $"{Resources.StrWarningMsgCsdKnown} - {csdId}"; + return StatusReturn.Warning; + } + + if (csd.Status == CSDStatus.New) + { + feedbackMsg = $"{Resources.StrErrorMsgCsdNewNotApproved} - {csdId}"; + return StatusReturn.Failed; + } + + feedbackMsg = $"{Resources.StrErrorMsgCsdBlocked} - {csdId}"; + return StatusReturn.Failed; + } + /// /// Check the measurements from Kitron for this specific Cordonel if it is an EMEA region. /// @@ -521,8 +583,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener if (!registerRestorer.RecoveryRegisters.Any(x => x.RegisterIdent.Equals("SENSUSRADIO_PowerLevel")) || !registerRestorer.RecoveryRegisters.Any(x => x.RegisterIdent.Equals("SENSUSRADIO_PowerLevelOption")) || !registerRestorer.RecoveryRegisters.Any(x => x.RegisterIdent.Equals("SENSUSRADIO_ImpedanceCodeNew")) || - !registerRestorer.RecoveryRegisters.Any(x => x.RegisterIdent.Equals("SENSUSRADIO_ImpedanceCodeOption")) ) - { + !registerRestorer.RecoveryRegisters.Any(x => x.RegisterIdent.Equals("SENSUSRADIO_ImpedanceCodeOption"))) + { feedbackMsg = Resources.StrErrorMsgRadioSignalLevels + " " + meterInfo; return StatusReturn.Failed; } diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs index fc314112..eb6c8151 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs @@ -20,7 +20,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki /// /// Maximum of expected processing steps for this process to feed the GUI progress bar. /// - private const Int32 MaxActualProgressSteps = 14; + private const Int32 MaxActualProgressSteps = 15; /// /// FW update package containing the ABC and the ADF. @@ -159,6 +159,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki /// public override StatusReturn ExecuteProcess() { + var erroneousSequenceStep = false; + var warningSequenceStep = false; #region ----------------------------------- Check Requirements -------------------------------------------- var statusReturn = GenericChecks.CheckRequirements(ProductionRequirements, out var feedbackMsg); @@ -172,6 +174,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki ActualProcessProgress++; #endregion + #region ----------------------------------- Validate CSD -------------------------------------------------- + + statusReturn = GenericChecks.ValidateCsd(ProductionRequirements, out feedbackMsg); + if (StatusReturn.Failed == statusReturn) + { + ErrorMsgDispatcher(feedbackMsg); + return StatusReturn.Failed; + } + + if (StatusReturn.Warning == statusReturn) + { + WarningMsgDispatcher(feedbackMsg); + } + + SuccessMsgDispatcher(feedbackMsg); + ActualProcessProgress++; + #endregion + #region ----------------------------------- Check Production Order ---------------------------------------- // Production order @@ -252,8 +272,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki #region ----------------------------------- Check Kitron Radio Signal Levels ------------------------------ - var erroneousSequenceStep = false; - var warningSequenceStep = false; statusReturn = GenericChecks.CheckKitronRadioSignalLevels(Meter, RegisterRestorer, ProductionRequirements.SkipRadioCheck, out feedbackMsg); diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs index 6d905086..f919dfe8 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs @@ -807,6 +807,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses /// have 'StoreConfiguration' and needs at least 20 s to update contents before 'StoreConfiguration' /// can be dispatched to 'SENSUSRADIO'. /// + /// + /// Abort enabled during waiting loop. + /// private void StartProcess(ProcessStateStruct processStateStruct) { // Deny access if uninitialized @@ -826,7 +829,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses while (processStateStruct.ProcessState == ProcessState.ExecStoreConfiguration && _paramExeFinishedToStoreConfigDelayTimer != null && _paramExeFinishedToStoreConfigDelayTimer.IsEnabled && - !_paramExeFinishedToStoreConfigDelayTimerExceeded) + !_paramExeFinishedToStoreConfigDelayTimerExceeded && + !AnyProcessRequiresAbortion()) { var teaTime = new TimeT(); var timeSpan = teaTime.DateTimeUtc - _paramExeFinishedToStoreConfigDelayTimerStartTime; diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs index 1b2c2d74..c255b213 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs @@ -493,11 +493,29 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } /// - /// Looks up a localized string similar to ERROR: CSD is locked for production. + /// Looks up a localized string similar to ERROR: CSD is blocked for production. /// - internal static string StrErrorMsgCsdLocked { + internal static string StrErrorMsgCsdBlocked { get { - return ResourceManager.GetString("StrErrorMsgCsdLocked", resourceCulture); + return ResourceManager.GetString("StrErrorMsgCsdBlocked", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: CSD is new and not approved for production. + /// + internal static string StrErrorMsgCsdNewNotApproved { + get { + return ResourceManager.GetString("StrErrorMsgCsdNewNotApproved", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: CSD status and number are unknown. + /// + internal static string StrErrorMsgCsdNotReceived { + get { + return ResourceManager.GetString("StrErrorMsgCsdNotReceived", resourceCulture); } } @@ -2581,11 +2599,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties { } /// - /// Looks up a localized string similar to WARNING: CSD status and number are unknown. + /// Looks up a localized string similar to WARNING: CSD is known and temporary used for production. /// - internal static string StrWarningMsgCsdStatusUnknown { + internal static string StrWarningMsgCsdKnown { get { - return ResourceManager.GetString("StrWarningMsgCsdStatusUnknown", resourceCulture); + return ResourceManager.GetString("StrWarningMsgCsdKnown", resourceCulture); } } diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 2fcf84b0..91156e2f 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -685,13 +685,19 @@ FEHLER: Hardwareneustarts über der erlaubten Grenze - + FEHLER: CSD ist für die Production gesperrt + + + ERROR: CSD ist neu aber und für die Production gesperrt Erfolg: CSD ist zur Produktion freigegeben - + + WARNUNG: CSD ist bekannt und temporär zur Produktion freigegeben + + WARNUNG: CSD Status und Nummer sind unbekannt diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.resx index 9e377b10..638066f7 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.resx @@ -685,14 +685,20 @@ ERROR: Hardware reboots higher than allowed threshold - - ERROR: CSD is locked for production + + ERROR: CSD is blocked for production + + + ERROR: CSD is new and not approved for production Success: CSD is approved for production - - WARNING: CSD status and number are unknown + + WARNING: CSD is known and temporary used for production + + + ERROR: CSD status and number are unknown ATTENTION From fabf20598dac48ce714d90cf0ece176e8462672f Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 21 Nov 2025 13:55:34 +0100 Subject: [PATCH 09/13] Refactor: - GenericChecks --- Common/Common.sln.DotSettings | 4 +- .../GenericModules/GenericChecks.cs | 38 +++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings index cbbed362..e96e9f51 100644 --- a/Common/Common.sln.DotSettings +++ b/Common/Common.sln.DotSettings @@ -1,6 +1,6 @@  Left - SUGGESTION + HINT SUGGESTION @@ -10,6 +10,8 @@ WARNING Arithmetic, Relational, Conditional Arithmetic, Shift, Relational, Equality, Bitwise, Conditional, NullCoalescing, Lowest + Remove + False NEXT_LINE 1 120 diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs index 118700ec..a2786126 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs @@ -41,10 +41,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener { if (meter == null || productionRequirements == null || - (assemblyLine && productionRequirements.RequiredLifeTimeYearsAssembly == null) || - (assemblyLine && productionRequirements.RequiredLifeTimeYearsAssembly <= 0) || - (!assemblyLine && productionRequirements.RequiredLifeTimeYearsShipping == null) || - (!assemblyLine && productionRequirements.RequiredLifeTimeYearsShipping <= 0) || + assemblyLine && productionRequirements.RequiredLifeTimeYearsAssembly == null || + assemblyLine && productionRequirements.RequiredLifeTimeYearsAssembly <= 0 || + !assemblyLine && productionRequirements.RequiredLifeTimeYearsShipping == null || + !assemblyLine && productionRequirements.RequiredLifeTimeYearsShipping <= 0 || productionStatus == null) { feedbackMsg = Resources.StrErrorMsgLifeTimeCalculation; @@ -84,12 +84,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener $"{Resources.StrMsgYears}"; // Check required years for assembly - if ((assemblyLine && - productionRequirements.RequiredLifeTimeYearsAssembly > productionStatus.RemainingLifeTimeYears) || - (!assemblyLine && - (productionRequirements.RequiredLifeTimeYearsShipping > productionStatus.RemainingLifeTimeYears || - // internally in FW calculated remaining lifetime visual for customer in DIAVASO - productionRequirements.RequiredLifeTimeYearsShipping > productionStatus.FwCalculatedRemainingLifeTimeYears))) + if (assemblyLine && + productionRequirements.RequiredLifeTimeYearsAssembly > productionStatus.RemainingLifeTimeYears || + !assemblyLine && + (productionRequirements.RequiredLifeTimeYearsShipping > productionStatus.RemainingLifeTimeYears || + // internally in FW calculated remaining lifetime visual for customer in DIAVASO + productionRequirements.RequiredLifeTimeYearsShipping > productionStatus.FwCalculatedRemainingLifeTimeYears)) { feedbackMsg = $"{Resources.StrErrorMsg}: {lifeTime}"; return StatusReturn.Failed; @@ -180,8 +180,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener { if (meter == null || productionRequirements == null || - (assemblyLine && productionRequirements.MaxDrainedBatteryLoadPercentAssembly == null) || - (!assemblyLine && productionRequirements.MaxDrainedBatteryLoadPercentShipping == null) || + assemblyLine && productionRequirements.MaxDrainedBatteryLoadPercentAssembly == null || + !assemblyLine && productionRequirements.MaxDrainedBatteryLoadPercentShipping == null || productionStatus == null) { feedbackMsg = Resources.StrErrorMsgBatteryLoadCalculation; @@ -246,10 +246,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener // This is the absolut limit even if the "AlternativeRequiredBatteryLoadPercent" will be used - if ((assemblyLine && productionStatus.DrainedBatteryLoadPercent > - productionRequirements.MaxDrainedBatteryLoadPercentAssembly) || - (!assemblyLine && productionStatus.DrainedBatteryLoadPercent > - productionRequirements.MaxDrainedBatteryLoadPercentShipping)) + if (assemblyLine && productionStatus.DrainedBatteryLoadPercent > + productionRequirements.MaxDrainedBatteryLoadPercentAssembly || + !assemblyLine && productionStatus.DrainedBatteryLoadPercent > + productionRequirements.MaxDrainedBatteryLoadPercentShipping) { feedbackMsg = $"{Resources.StrErrorMsg}: {strBatLoad}"; return StatusReturn.Failed; @@ -451,12 +451,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener isStandardActive = true; // At least one requirement needs to be active and a requirement number and version has to be set - if ((!isStandardActive && !isSpecialActive) || + if (!isStandardActive && !isSpecialActive || // The standard Id and version have always to be set even if the special is active productionRequirements.StandardId == null || productionRequirements.StandardVersion == null || // If the special is active the version and Id have to be defined - (isSpecialActive && (productionRequirements.SpecialId == null || - productionRequirements.SpecialVersion == null))) + isSpecialActive && (productionRequirements.SpecialId == null || + productionRequirements.SpecialVersion == null)) { feedbackMsg = Resources.StrErrorMsgRequirementInactive; return StatusReturn.Failed; From 677fb1cf3d5b6844f6513b13ad40888025a9b2b4 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 21 Nov 2025 16:46:04 +0100 Subject: [PATCH 10/13] ProductionUiCOrdonel.UnitTests: - extended --- .../Genesis/GenesisCore/RegisterRestorer.cs | 9 + .../Steps/CommonProductionProcessSteps.cs | 202 +++++++++++++----- 2 files changed, 162 insertions(+), 49 deletions(-) diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs index eeecaaba..20eb07c0 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/RegisterRestorer.cs @@ -401,6 +401,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore FailedComparisonRegisters = new List(); } + /// + /// Renew meter for Unit tests based on different meter + /// + /// + public void RenewMeter(IGenesisMeter currentGenesis) + { + _currentGenesis = currentGenesis; + } + /// /// Assign new genesis after reboot and keep the RegisterRestorer object. /// diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs index cfd0ae8b..2e16389d 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs @@ -9,6 +9,7 @@ using LaaPackages.Features.Cordonel.Models.Values; using Logic.ProductionToProductMapper.Files.Fw; using NUnit.Framework; using NCrunch.Framework; +using Newtonsoft.Json; using TechTalk.SpecFlow; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; @@ -34,37 +35,55 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// - This will be used to assign dynamic a function to be checked, /// - If it is null or empty, it is not assigned. /// - private String MethodToTest { set; get; } + private String MethodToTest + { + set; get; + } /// /// Marker for a private method. /// - private Boolean IsPrivateMethod { set; get; } + private Boolean IsPrivateMethod + { + set; get; + } /// /// Name of the property to be checked: /// - This will be used to assign dynamic a property to be checked. /// - private String PropertyToCheck { set; get; } + private String PropertyToCheck + { + set; get; + } /// /// Name the object type holding the results of the test including the property: /// - This will be used to assign dynamic a property to be checked. /// - private String ObjectTypeName { set; get; } + private String ObjectTypeName + { + set; get; + } /// /// Required to test the EOL progress and combine it with the individual result: /// - The required EOL progress will be crosschecked with the result of the EOL progress by eventually /// several individual methods or by preceding production processes. /// - private Boolean TestEolProgress { set; get; } + private Boolean TestEolProgress + { + set; get; + } /// /// The name of the production process to test. This is needed to call the correct type in the /// /// - private String TestName { set; get; } + private String TestName + { + set; get; + } /// /// The exec path of the assembly for debug in environment. @@ -88,19 +107,31 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// private struct TestResult { - public Int32 TestNo { set; get; } + public Int32 TestNo + { + set; get; + } - public EOLProgressModel EOLProgress { set; get; } + public EOLProgressModel EOLProgress + { + set; get; + } /// /// Used if property cannot be checked by an EOL progress. /// - public StatusReturn StatusReturn { set; get; } + public StatusReturn StatusReturn + { + set; get; + } /// /// Feedback message from tested routines /// - public String FeedbackMsg { set; get; } + public String FeedbackMsg + { + set; get; + } } /// @@ -108,63 +139,102 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// private struct TestRequirement { - public Int32 TestNo { set; get; } + public Int32 TestNo + { + set; get; + } - public String Comment { set; get; } + public String Comment + { + set; get; + } - public MockGenesis? Meter { set; get; } + public MockGenesis? Meter + { + set; get; + } /// /// Production requirements for check of production status and special requirements /// - public CordonelRequirements ProductionRequirements { set; get; } + public CordonelRequirements ProductionRequirements + { + set; get; + } /// /// EOL Progress as input where every single EOL property will be used to set the expected feedback /// to fulfill the single test. /// - public EOLProgressModel RequiredEOLProgress { set; get; } + public EOLProgressModel RequiredEOLProgress + { + set; get; + } /// /// Status of the Cordonel /// - public GenesisStatus CordonelDeviceStatus { set; get; } + public GenesisStatus CordonelDeviceStatus + { + set; get; + } /// /// Calibration register restorer of Cordonel /// - public RegisterRestorer CalibCheckRegisterRestorer { set; get; } + public RegisterRestorer CalibCheckRegisterRestorer + { + set; get; + } /// /// Register restorer of Cordonel for parametrization /// - public RegisterRestorer RegisterRestorer { set; get; } + public RegisterRestorer RegisterRestorer + { + set; get; + } /// /// Production status of the Cordonel /// - public List TestBenchState { set; get; } + public List TestBenchState + { + set; get; + } /// /// Used for partially or full compare on string result return /// - public Boolean PartiallyCompareStringResult { set; get; } + public Boolean PartiallyCompareStringResult + { + set; get; + } /// /// Loaded FW package from local disk /// - public List FwUpdatePackage { set; get; } + public List FwUpdatePackage + { + set; get; + } /// /// Used if property cannot be checked by an EOL progress. /// - public StatusReturn RequiredStatusReturn { set; get; } + public StatusReturn RequiredStatusReturn + { + set; get; + } /// /// Control to fail the Kitron radio param test /// - public Boolean KillRadioParam { set; get; } + public Boolean KillRadioParam + { + set; get; + } } /// @@ -185,6 +255,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// /// Presets needed to pass preceding tests or initialize some properties to a defined state /// + private String _presetTestCaseJson = ""; private TestRequirement _presets; #endregion ----------------------------- Production State Properties ------------------------------------------ @@ -241,11 +312,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps // As here a new test step will be initialized and possibly the test-case table needs to be pre-filled for // more complex tests of a huge routine to keep running until the real test to be executed will be reached, // the test-cases and results have to be cleared here! - _presets.Meter = null; _testCases.Clear(); _testResults.Clear(); _ppNamesExecSequence.Clear(); - + _presetTestCaseJson = ""; } [Given(@"Name the property to be checked for '(.*)'")] @@ -803,23 +873,45 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps // Generate list of tests out of the "Given" table and create test-cases foreach (var row in table.Rows) { - var testCase = NewTestRequirement(); - // Check if presets are required, if so copy all properties - if (_presets.Meter != null) + //var testCase = NewTestRequirement(); + //// Check if presets are required, if so copy all properties + //if (_presets.Meter != null) + //{ + // ClassAccess.CopyAllProperties(testCase.Meter, _presets.Meter); + // ClassAccess.CopyAllProperties(testCase.ProductionRequirements, _presets.ProductionRequirements); + // ClassAccess.CopyAllProperties(testCase.RequiredEOLProgress, _presets.RequiredEOLProgress); + // ClassAccess.CopyAllProperties(testCase.CalibCheckRegisterRestorer, + // _presets.CalibCheckRegisterRestorer); + // ClassAccess.CopyAllProperties(testCase.RegisterRestorer, _presets.RegisterRestorer); + // ClassAccess.CopyAllProperties(testCase.CordonelDeviceStatus, _presets.CordonelDeviceStatus); + // testCase.FwUpdatePackage.AddRange(_presets.FwUpdatePackage); + // testCase.TestBenchState.AddRange(_presets.TestBenchState); + //} + + TestRequirement testCase; + // Check if presets are required, if so copy all properties using the Json.Deserializer to create a + // new object!!! + if (_presets.Meter != null) { - ClassAccess.CopyAllProperties(testCase.Meter, _presets.Meter); - ClassAccess.CopyAllProperties(testCase.ProductionRequirements, _presets.ProductionRequirements); - ClassAccess.CopyAllProperties(testCase.RequiredEOLProgress, _presets.RequiredEOLProgress); - ClassAccess.CopyAllProperties(testCase.CalibCheckRegisterRestorer, - _presets.CalibCheckRegisterRestorer); - ClassAccess.CopyAllProperties(testCase.RegisterRestorer, _presets.RegisterRestorer); - ClassAccess.CopyAllProperties(testCase.CordonelDeviceStatus, _presets.CordonelDeviceStatus); - testCase.FwUpdatePackage.AddRange(_presets.FwUpdatePackage); - testCase.TestBenchState.AddRange(_presets.TestBenchState); + if (string.IsNullOrEmpty(_presetTestCaseJson)) + { + _presetTestCaseJson = JsonConvert.SerializeObject(_presets); + } + testCase = JsonConvert.DeserializeObject(_presetTestCaseJson); + //if (testCase.Meter == null) + //{ + // testCase.Meter = new MockGenesis(); + //} + } + else + { + testCase = NewTestRequirement(); } // Enable register compare even if not physically read from meter + testCase.RegisterRestorer.RenewMeter(testCase.Meter); testCase.RegisterRestorer.EnableCompareExternalSetRegisters(); + testCase.CalibCheckRegisterRestorer.RenewMeter(testCase.Meter); testCase.CalibCheckRegisterRestorer.EnableCompareExternalSetRegisters(); // Login is needed for building the MeterAppListVersion and generating the accessible register list. @@ -901,7 +993,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseInt(tableRow, "EOL Id", out strValue, out var intValue)) { - if (intValue != null) parsedTableRow.RequiredEOLProgress.Id = (Int32)intValue; + if (intValue != null) + parsedTableRow.RequiredEOLProgress.Id = (Int32)intValue; } var strHeader = "EOL StartDate"; @@ -978,7 +1071,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseInt(tableRow, "Requirement ProdOrderNo", out strValue, out intValue)) { - if (intValue != null) parsedTableRow.ProductionRequirements.ProductionOrderNr = (Int32)intValue; + if (intValue != null) + parsedTableRow.ProductionRequirements.ProductionOrderNr = (Int32)intValue; parsedTableRow.RequiredEOLProgress.RequirementOrderChecked = EOLStatus.OK; } @@ -988,7 +1082,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseInt(tableRow, "Cordonel PcbId", out strValue, out intValue)) { - if (parsedTableRow.Meter != null) parsedTableRow.Meter.PcbId = strValue; + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.PcbId = strValue; } if (ParseInt(tableRow, "Requirement PcbId", out strValue, out intValue)) @@ -999,7 +1094,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseInt(tableRow, "EOL PcbId", out strValue, out intValue)) { - if (intValue != null) parsedTableRow.RequiredEOLProgress.PcbId = (Int32)intValue; + if (intValue != null) + parsedTableRow.RequiredEOLProgress.PcbId = (Int32)intValue; } #endregion @@ -1008,7 +1104,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseString(tableRow, "Cordonel LUT CRC", out strValue)) { - if (parsedTableRow.Meter != null) parsedTableRow.Meter.LutCrc = strValue; + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.LutCrc = strValue; } if (ParseString(tableRow, "Requirement LUT CRC", out strValue)) @@ -1023,7 +1120,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseString(tableRow, "Cordonel Region", out strValue)) { - if (parsedTableRow.Meter != null) parsedTableRow.Meter.Region = strValue; + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.Region = strValue; } if (ParseString(tableRow, "Requirement Region", out strValue)) @@ -1106,7 +1204,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (parsedTableRow.Meter != null) { parsedTableRow.Meter.Login(); - if (floatValue != null) parsedTableRow.Meter.CoreRevision = (Int32)(floatValue * 100); + if (floatValue != null) + parsedTableRow.Meter.CoreRevision = (Int32)(floatValue * 100); parsedTableRow.Meter.StrCoreRevision = strValue; } } @@ -1175,7 +1274,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (ParseFloat(tableRow, "Actual Lifetime [days]", out strValue, out floatValue)) { - if (floatValue != null) parsedTableRow.CordonelDeviceStatus.ExceededLifeTime_s = + if (floatValue != null) + parsedTableRow.CordonelDeviceStatus.ExceededLifeTime_s = (UInt64)(floatValue * 24 * 3600); parsedTableRow.RequiredEOLProgress.ProductionStatusBatteryLoadChecked = EOLStatus.OK; parsedTableRow.RequiredEOLProgress.ProductionStatusRemainingLifeTimeChecked = EOLStatus.OK; @@ -1401,7 +1501,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (!string.IsNullOrEmpty(strValue) && strValue.Equals("X") && !singleSelectionLock) { singleSelectionLock = true; - if (parsedTableRow.Meter != null) parsedTableRow.Meter.OrderNumber = 0; + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.OrderNumber = 0; parsedTableRow.RequiredEOLProgress.RequirementOrderChecked = EOLStatus.FAIL; } } @@ -1431,7 +1532,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (!string.IsNullOrEmpty(strValue) && strValue.Equals("X")) { singleSelectionLock = true; - if (parsedTableRow.Meter != null) parsedTableRow.Meter.Region = "?"; + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.Region = "?"; parsedTableRow.RequiredEOLProgress.RequirementRegionChecked = EOLStatus.FAIL; } } @@ -1446,7 +1548,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps if (!string.IsNullOrEmpty(strValue) && strValue.Equals("X")) { singleSelectionLock = true; - if (parsedTableRow.Meter != null) parsedTableRow.Meter.LutCrc = "?"; + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.LutCrc = "?"; parsedTableRow.RequiredEOLProgress.ProductionStatusLutCrc = ""; } } @@ -1562,7 +1665,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps { if (!string.IsNullOrEmpty(strValue) && strValue.Equals("X") && !singleSelectionLock) { - if (parsedTableRow.Meter != null) parsedTableRow.Meter.ReLogin(); + if (parsedTableRow.Meter != null) + parsedTableRow.Meter.ReLogin(); PresetRegisterRestorer(parsedTableRow.CalibCheckRegisterRestorer, "GENESISFLOW_CalFactor1", RegisterConverter.ValueToByteArray((UInt16)0), RegisterConverter.ValueToByteArray((UInt16)1)); parsedTableRow.RequiredEOLProgress.ProductionStatusCalibrationChecked = EOLStatus.FAIL; From 1bd560de9d6a014a47c37a442d4ef2258a7d5f72 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Sat, 22 Nov 2025 11:36:08 +0100 Subject: [PATCH 11/13] ProductionUiCordonel.UnitTests: - reworked - UNFINISHED --- ...ductionProcessCheckProductionState.feature | 2 +- ...tionProcessCheckProductionState.feature.cs | 6 +- .../Steps/CommonProductionProcessSteps.cs | 87 +++++++++++-------- .../EolProcesses/CheckProductionState.cs | 4 + .../PickingProcesses/CheckProductionState.cs | 3 + 5 files changed, 61 insertions(+), 41 deletions(-) diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature index ca7fb7b6..14f43eff 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature +++ b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature @@ -466,7 +466,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckProductionStateProcess -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Check_Complete_Flow_Production_State +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_017]_Check_Complete_Flow_Production_State FUNCTION: Check the entire production process sequence except the database calls with all underlaying sub-processes. PRESETS: Preset all values with valid parameters to pass the test as "Okay" needed to successfully pass all underlaying tests: - EOL Id | EOL StartDate | Cordonel PcbId | EOL PcbId diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs index 98e275e1..e6c81d3d 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs @@ -1897,14 +1897,14 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Check_Complete_Flow_Production_State")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_017]_Check_Complete_Flow_Production_State")] [NUnit.Framework.CategoryAttribute("CheckProductionStateProcess")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_016_Check_Complete_Flow_Production_State() + public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_017_Check_Complete_Flow_Production_State() { string[] tagsOfScenario = new string[] { "CheckProductionStateProcess"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Check_Complete_Flow_Production_State", "FUNCTION: Check the entire production process sequence except the database calls " + + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_017]_Check_Complete_Flow_Production_State", "FUNCTION: Check the entire production process sequence except the database calls " + "with all underlaying sub-processes. \r\nPRESETS: Preset all values with valid par" + "ameters to pass the test as \"Okay\" needed to successfully pass all underlaying t" + "ests:\r\n - EOL Id | EOL StartDate | Cordonel PcbId | EOL PcbId\r\n " + diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs index 2e16389d..edae2d01 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs @@ -256,7 +256,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// Presets needed to pass preceding tests or initialize some properties to a defined state /// private String _presetTestCaseJson = ""; - private TestRequirement _presets; + /// + /// Presets needed to pass preceding tests or initialize some properties to a defined state + /// + private TestRequirement _presetTestCase; #endregion ----------------------------- Production State Properties ------------------------------------------ @@ -868,55 +871,52 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// /// - Login to build App list and registers. /// + /// + /// - New object with deep copy of presetTestCase using the Json serializer. + /// + /// + /// - Moved meter login for new test requirement and register restorers modification to + /// . + /// private void ReadTestTable(Table table) { // Generate list of tests out of the "Given" table and create test-cases foreach (var row in table.Rows) { - //var testCase = NewTestRequirement(); - //// Check if presets are required, if so copy all properties - //if (_presets.Meter != null) - //{ - // ClassAccess.CopyAllProperties(testCase.Meter, _presets.Meter); - // ClassAccess.CopyAllProperties(testCase.ProductionRequirements, _presets.ProductionRequirements); - // ClassAccess.CopyAllProperties(testCase.RequiredEOLProgress, _presets.RequiredEOLProgress); - // ClassAccess.CopyAllProperties(testCase.CalibCheckRegisterRestorer, - // _presets.CalibCheckRegisterRestorer); - // ClassAccess.CopyAllProperties(testCase.RegisterRestorer, _presets.RegisterRestorer); - // ClassAccess.CopyAllProperties(testCase.CordonelDeviceStatus, _presets.CordonelDeviceStatus); - // testCase.FwUpdatePackage.AddRange(_presets.FwUpdatePackage); - // testCase.TestBenchState.AddRange(_presets.TestBenchState); - //} - TestRequirement testCase; // Check if presets are required, if so copy all properties using the Json.Deserializer to create a - // new object!!! - if (_presets.Meter != null) + // new object as deep copy!!! + if (_presetTestCase.Meter != null) { if (string.IsNullOrEmpty(_presetTestCaseJson)) { - _presetTestCaseJson = JsonConvert.SerializeObject(_presets); + _presetTestCaseJson = JsonConvert.SerializeObject(_presetTestCase); } + // Create a new object with a deep copy of the _presetTestCase testCase = JsonConvert.DeserializeObject(_presetTestCaseJson); - //if (testCase.Meter == null) - //{ - // testCase.Meter = new MockGenesis(); - //} + + // Special meter properties which are not include in the deep copy + ClassAccess.CopyAllProperties(testCase.Meter, _presetTestCase.Meter); + + // Login is needed for building the MeterAppListVersion and generating the accessible register list. + // This register list will be used to check for valid ranges. + testCase.Meter?.Login(); } + // Preset is not required, a single testCase has to be created else { testCase = NewTestRequirement(); } - // Enable register compare even if not physically read from meter - testCase.RegisterRestorer.RenewMeter(testCase.Meter); - testCase.RegisterRestorer.EnableCompareExternalSetRegisters(); - testCase.CalibCheckRegisterRestorer.RenewMeter(testCase.Meter); - testCase.CalibCheckRegisterRestorer.EnableCompareExternalSetRegisters(); + //// Enable register compare even if not physically read from meter + //testCase.RegisterRestorer.RenewMeter(testCase.Meter); + //testCase.RegisterRestorer.EnableCompareExternalSetRegisters(); + //testCase.CalibCheckRegisterRestorer.RenewMeter(testCase.Meter); + //testCase.CalibCheckRegisterRestorer.EnableCompareExternalSetRegisters(); - // Login is needed for building the MeterAppListVersion and generating the accessible register list. - // This register list will be used to check for valid ranges. - testCase.Meter?.Login(); + //// Login is needed for building the MeterAppListVersion and generating the accessible register list. + //// This register list will be used to check for valid ranges. + //testCase.Meter?.Login(); // This is the multiple row test table defining individual test cases ReadTable(row, ref testCase); @@ -936,20 +936,23 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// /// - Login to build App list and registers. /// + /// + /// - Moved meter login to . + /// private void ReadPresetTable(Table table) { - if (_presets.Meter == null) + if (_presetTestCase.Meter == null) { - _presets = NewTestRequirement(); + _presetTestCase = NewTestRequirement(); } - // Login is needed for building the MeterAppListVersion and generating the accessible register list. - // This register list will be used to check for valid ranges. - _presets.Meter?.Login(); + //// Login is needed for building the MeterAppListVersion and generating the accessible register list. + //// This register list will be used to check for valid ranges. + //_presetTestCase.Meter?.Login(); // A preset table is limited to exclusively one row, those settings will be used for every test of the // test-cases! - ReadTable(table.Rows[0], ref _presets); + ReadTable(table.Rows[0], ref _presetTestCase); } /// @@ -1755,6 +1758,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// /// - Initial. /// + /// + /// - Init meter and enable change of values for register restorers. + /// private static TestRequirement NewTestRequirement() { var testCase = new TestRequirement @@ -1772,6 +1778,13 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps }; testCase.RegisterRestorer = new RegisterRestorer(testCase.Meter); testCase.CalibCheckRegisterRestorer = new RegisterRestorer(testCase.Meter); + // Enable register compare even if not physically read from meter + testCase.RegisterRestorer.EnableCompareExternalSetRegisters(); + testCase.CalibCheckRegisterRestorer.EnableCompareExternalSetRegisters(); + + // Login is needed for building the MeterAppListVersion and generating the accessible register list. + // This register list will be used to check for valid ranges. + testCase.Meter?.Login(); return testCase; } diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs index 8bbeac57..eba8e874 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs @@ -277,6 +277,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// be completed as the PcbId and the order number is needed. /// Checks: /// - Requirements are collected, + /// - Validate CSD, /// - EOL progress for Sentinel can be generated, /// - PcbId, /// - Region, @@ -332,6 +333,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - Check radio signal levels in parameter list. /// + /// + /// - Validate CSD. + /// public override StatusReturn ExecuteProcess() { var erroneousSequenceStep = false; diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs index eb6c8151..05ab8c21 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckProductionState.cs @@ -157,6 +157,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki /// /// - Initial. /// + /// + /// - Validate CSD. + /// public override StatusReturn ExecuteProcess() { var erroneousSequenceStep = false; From 36112483fbd527d44a09dadaf15b64b22ab87fa9 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Wed, 26 Nov 2025 15:24:38 +0100 Subject: [PATCH 12/13] ProductionUiCordonel: - BUGFIX: Exit with error if missing RSSI values from DB, ProductionUiCordonel.UnitTests: - CSD check --- Common/.shared/SharedAssemblyInfo.cs | 2 +- Common/Common.sln.DotSettings | 2 + Common/Common.sln.DotSettings.user | 7 +- Common/Common.sln.DotSettings.user.orig | 2 +- ...uence_Write_Store_Reboot_Verify.feature.cs | 38 +- ...ductionProcessCheckProductionState.feature | 60 +- ...tionProcessCheckProductionState.feature.cs | 1639 ++++++++--------- .../ProductionUiCordonel.UnitTests.csproj | 10 +- .../Steps/CommonProductionProcessSteps.cs | 84 +- .../EolProcesses/CheckProductionState.cs | 42 +- .../EolProcesses/CheckRadio.cs | 40 +- .../Properties/Resources.de.resx | 2 +- 12 files changed, 997 insertions(+), 931 deletions(-) diff --git a/Common/.shared/SharedAssemblyInfo.cs b/Common/.shared/SharedAssemblyInfo.cs index 21c95081..e2d225cc 100644 --- a/Common/.shared/SharedAssemblyInfo.cs +++ b/Common/.shared/SharedAssemblyInfo.cs @@ -13,4 +13,4 @@ using System.Reflection; // //[assembly: AssemblyVersion("1.2.*.0")] -[assembly: AssemblyVersion("2.8.11.*")] +[assembly: AssemblyVersion("2.8.12.*")] diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings index e96e9f51..5df685a7 100644 --- a/Common/Common.sln.DotSettings +++ b/Common/Common.sln.DotSettings @@ -1,4 +1,5 @@  + True Left HINT @@ -33,6 +34,7 @@ True True True + Disabled diff --git a/Common/Common.sln.DotSettings.user b/Common/Common.sln.DotSettings.user index 2776c8cb..1561af62 100644 --- a/Common/Common.sln.DotSettings.user +++ b/Common/Common.sln.DotSettings.user @@ -38,7 +38,12 @@ <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <Solution /> + <Not> + <TestAncestor> + <TestId>VsTest::48DA0272-9B14-4CC8-976F-A91E42DE4680::.NETFramework,Version=v4.8.1::executor://nunit3testexecutor/#Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features.CheckProductionStateFeature</TestId> + <TestId>VsTest::48DA0272-9B14-4CC8-976F-A91E42DE4680::.NETFramework,Version=v4.8.1::executor://nunit3testexecutor/#Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features.FinalParamSequence_Write_Store_Reboot_Read_VerifyFeature</TestId> + </TestAncestor> + </Not> </SessionState> diff --git a/Common/Common.sln.DotSettings.user.orig b/Common/Common.sln.DotSettings.user.orig index 39b664b4..1c2a1540 100644 --- a/Common/Common.sln.DotSettings.user.orig +++ b/Common/Common.sln.DotSettings.user.orig @@ -32,7 +32,7 @@ True <<<<<<< HEAD ======= - C:\Users\Thomas Müller\AppData\Local\Temp\JetBrains\ReSharperPlatformVs17\vAny_ab6433f6\CoverageData\_Common.-1885154465\Snapshot\snapshot.utdcvr + C:\Users\Thomas\AppData\Local\Temp\JetBrains\ReSharperPlatformVs17\vAny_ab6433f6\CoverageData\_Common.-1885154465\Snapshot\snapshot.utdcvr >>>>>>> origin/main True diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Features/FinalParamSequence_Write_Store_Reboot_Verify.feature.cs b/Common/Production/ProductionUiCordonel.UnitTests/Features/FinalParamSequence_Write_Store_Reboot_Verify.feature.cs index de8c97e8..3a994a5d 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Features/FinalParamSequence_Write_Store_Reboot_Verify.feature.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Features/FinalParamSequence_Write_Store_Reboot_Verify.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (https://www.specflow.org/). -// SpecFlow Version:3.3.0.0 -// SpecFlow Generator Version:3.1.0.0 +// SpecFlow Version:3.9.0.0 +// SpecFlow Generator Version:3.9.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -17,7 +17,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features using System.Linq; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [NUnit.Framework.TestFixtureAttribute()] [NUnit.Framework.DescriptionAttribute("FinalParamSequence_Write_Store_Reboot_Read_Verify")] @@ -26,7 +26,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features private TechTalk.SpecFlow.ITestRunner testRunner; - private string[] _featureTags = ((string[])(null)); + private static string[] featureTags = ((string[])(null)); #line 1 "FinalParamSequence_Write_Store_Reboot_Verify.feature" #line hidden @@ -35,11 +35,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features public virtual void FeatureSetup() { testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(); - TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "FinalParamSequence_Write_Store_Reboot_Read_Verify", @"Test the sequence of execute final parametrization, store all settings to FLASH memory, reboot the Cordonel and finally read back + TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "FinalParamSequence_Write_Store_Reboot_Read_Verify", @"Test the sequence of execute final parametrization, store all settings to FLASH memory, reboot the Cordonel and finally read back and verify the parameters which should remain persistent in non-volatile memory. This should avoid loosing of the parametrization if the Cordonel accidentally reboots in the field. With the reboot it loads all values from FLASH, if those cannot be loaded, it presets these values with defaults.This test used a MockGenesis and real data stored as MockRawParamsExamples for the DN50, the -DN80 and the US2.", ProgrammingLanguage.CSharp, ((string[])(null))); +DN80 and the US2.", ProgrammingLanguage.CSharp, featureTags); testRunner.OnFeatureStart(featureInfo); } @@ -51,28 +51,28 @@ DN80 and the US2.", ProgrammingLanguage.CSharp, ((string[])(null))); } [NUnit.Framework.SetUpAttribute()] - public virtual void TestInitialize() + public void TestInitialize() { } [NUnit.Framework.TearDownAttribute()] - public virtual void TestTearDown() + public void TestTearDown() { testRunner.OnScenarioEnd(); } - public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { testRunner.OnScenarioInitialize(scenarioInfo); testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext); } - public virtual void ScenarioStart() + public void ScenarioStart() { testRunner.OnScenarioStart(); } - public virtual void ScenarioCleanup() + public void ScenarioCleanup() { testRunner.CollectScenarioErrors(); } @@ -80,7 +80,7 @@ DN80 and the US2.", ProgrammingLanguage.CSharp, ((string[])(null))); [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_FINAL_PARAM_001]_Check_Param_Sequence")] [NUnit.Framework.CategoryAttribute("CheckFinalParamSequence")] - public virtual void SRS_TBF_EOL_PP_CHECK_FINAL_PARAM_001_Check_Param_Sequence() + public void SRS_TBF_EOL_PP_CHECK_FINAL_PARAM_001_Check_Param_Sequence() { string[] tagsOfScenario = new string[] { "CheckFinalParamSequence"}; @@ -113,21 +113,11 @@ DN80 and the US2.", ProgrammingLanguage.CSharp, ((string[])(null))); "\". \r\nCOMMENT: NCrunch needs programming parameters in a specific folder \r\n " + " \"[SolutionPath]\\Hardware\\WaterMeter\\Genesis\\MockGenesis\\MockRawParameterExa" + "mples\" as it copies all assemblies to a \r\n special NCrunch working fold" + - "er which is total separated from the project specific \"\\bin\\Debug\" folder!", tagsOfScenario, argumentsOfScenario); + "er which is total separated from the project specific \"\\bin\\Debug\" folder!", tagsOfScenario, argumentsOfScenario, featureTags); #line 11 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature index 14f43eff..024db988 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature +++ b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature @@ -76,7 +76,37 @@ Then Check the generic test results # ================================================================================================================================ @CheckProductionProperties -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_003]_Check_ProductionOrderNo +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_003]_Check_CSD_Status +FUNCTION: Check the Customer Specific Document (CSD) for its status. +PRESETS: none +INPUTS: "CSD ID" the identification number of the CSD, + "CSD Name" a string for verbose identification, + "CSD Code" the code in SAP, + "CSD Status" giving the status "Null", "New", "Blocked", "Known" or "Released". +OUTPUT: "StatusReturn" with results "Okay", "Failed" or "Warning" +#--------------------------------- Prepare Tests ---------------------------------------------------------------------------- +Given Initialize new test scenario for production process 'CheckProductionState' +And Name the object type holding the property 'StatusReturn' +And Name the private function to be checked for functionality 'ValidateCsd' + +#--------------------------------- Define Test-Cases ------------------------------------------------------------------------- +And Input matrix defining the test cases and results +| TestNo | CSD ID | CSD Name | CSD Code | CSD Status | StatusReturn | Comment | +| 1 | 3100782 | CSD 767978 Canal de Isabel | O1 | Released | Okay | Released CSD approved for production | +| 2 | 3100782 | CSD 767978 Canal de Isabel | O1 | Known | Warning | Known CSD temporary for production | +| 3 | 3100782 | CSD 767978 Canal de Isabel | O1 | New | Failed | New CSD invalid for production | +| 4 | 3100782 | CSD 767978 Canal de Isabel | O1 | Blocked | Failed | Blocked CSD invalid for production | +| 5 | null | CSD 767978 Canal de Isabel | O1 | Released | Failed | Invalid CSD ID invalid for production | +| 6 | 3100782 | null | O1 | Released | Failed | Invalid CSD Name invalid for production | +| 7 | 3100782 | CSD 767978 Canal de Isabel | null | Released | Failed | Invalid CSD Code invalid for production | + +When Execute the generic tests +Then Check the generic test results + +# ================================================================================================================================ + +@CheckProductionProperties +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_004]_Check_ProductionOrderNo FUNCTION: Compare the Cordonel production-order with the production-order from the requirement to validate that the correct requirements going to be used for the check of the actual production state. PRESETS: none @@ -100,7 +130,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCordonelProperties -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_004]_Check_PcbId +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_005]_Check_PcbId FUNCTION: Compare the PcbId from Cordonel, EOL-progress and requirement. PRESETS: none INPUTS: "Cordonel PcbId", EOL PcbId and "Requirement PcbId". If the requirement-PcbId id is "null" then the requirement is order based @@ -129,7 +159,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCordonelProperties -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_005]_Check_Region +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_006]_Check_Region FUNCTION: Compare the Region from Cordonel and requirement. PRESETS: none INPUTS: "Cordonel Region" and "Requirement Region". @@ -155,7 +185,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCordonelProperties -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_006]_Check_LUT_CRC +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_007]_Check_LUT_CRC FUNCTION: Check for the checksum (cyclic redundancy check - CRC) of the metrology lookup-table. PRESETS: none INPUTS: "Cordonel LUT CRC" and "Requirement LUT CRC" just a string representing a number in hex e.g. "0xEB7C. @@ -182,7 +212,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCordonelProperties -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_007]_Check_Meter_Size +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_008]_Check_Meter_Size FUNCTION: Compare the Meter Size from Cordonel and requirement. PRESETS: none INPUTS: "Cordonel Meter Size" and "Requirement Meter Size" as strings naming the size as e.g. "DN50", "US1_5" or "1 1/2 INC". @@ -209,7 +239,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCordonelProperties -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_008]_Check_FW_and_Apps +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_009]_Check_FW_and_Apps FUNCTION: Compare Cordonel installed Firmware and Apps with required Firmware. All Apps will be verified for their versions and CRC. The Core-Revision will be validated. @@ -255,7 +285,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckKitronRadioSignalLevels -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_009]_Check_Kitron_Radio_Signal_Levels +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_010]_Check_Kitron_Radio_Signal_Levels FUNCTION: Check if radio signal levels have been defined (contained in parameter list) FOR THIS cORDONEL SIZE AND LENGHT. PRESETS: none INPUTS: . @@ -283,7 +313,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckLifetimes -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_010]_Check_Remaining_Battery_Load +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_011]_Check_Remaining_Battery_Load FUNCTION: Compare the remaining battery load from Cordonel and the requirement. PRESETS: none INPUTS: "Normal Current [uA]" multiplied with exceeded lifetime together with "Production Drained [%] for an alternative threshold, @@ -319,7 +349,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckLifetimes -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_011]_Check_Remaining_Lifetime +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_012]_Check_Remaining_Lifetime FUNCTION: Compare the remaining life time reported by the Cordonel and the requirement. PRESETS: none INPUTS: "Actual Lifetime [days]" is the time in days the Cordonel after Kitron production, @@ -347,7 +377,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckLifetimeS -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_012]_Check_Storage_Months +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_013]_Check_Storage_Months FUNCTION: Compare the production date reported by the Cordonel with the actual date and check the requirement. PRESETS: none INPUTS: "Assembly Months before Now" as zero or negative floating point number or invalid if set to "null". @@ -375,7 +405,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCalibrations -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_013]_Check_Preadjustment +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_014]_Check_Preadjustment FUNCTION: Check the database content reporting a flow-test preadjustment. PRESETS: none INPUTS: "Test Bench Fields" the array of test bench fields @@ -405,7 +435,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCalibrations -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_014]_Check_Flow_Test_State +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_015]_Check_Flow_Test_State FUNCTION: Check the database content reporting the flow-test state. PRESETS: none INPUTS: "Test Bench Fields" the array of test bench fields @@ -436,7 +466,7 @@ Then Check the generic test results # ================================================================================================================================ @CheckCalibrations -Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_015]_Check_Calib_Factors +Scenario: [SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Check_Calib_Factors FUNCTION: Compare the calibration values reported by the Cordonel with the flow-test calibration values reported by the database. PRESETS: All calibration values not covered by this test in valid range. INPUTS: "Meter Calib Fact 1/2/3" Meter calibration factors 1, 2 and 3 stored in and read out from the Cordonel, @@ -512,6 +542,10 @@ And Input initializations for the test matrix and presets to pass the preceding | Standard Id | Standard Version | Standard IsActive | Standard IsApproved | Special Id | Special Version | Comment | | 10 | 5 | X | X | null | null | Standard Requirement is active and approved | +And Input initializations for the test matrix and presets to pass the preceding tests +| CSD ID | CSD Name | CSD Code | CSD Status | Comment | +| 3100782 | CSD 767978 Canal de Isabel | O1 | Released | Released CSD approved for production | + And Input initializations for the test matrix and presets to pass the preceding tests | Cordonel ProdOrderNo | Requirement ProdOrderNo | Comment | | 3118323 | 3118323 | Order number is identical | diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs index e6c81d3d..bca8f463 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Features/ProductionProcessCheckProductionState.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (https://www.specflow.org/). -// SpecFlow Version:3.3.0.0 -// SpecFlow Generator Version:3.1.0.0 +// SpecFlow Version:3.9.0.0 +// SpecFlow Generator Version:3.9.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -17,7 +17,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features using System.Linq; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [NUnit.Framework.TestFixtureAttribute()] [NUnit.Framework.DescriptionAttribute("CheckProductionState")] @@ -26,7 +26,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features private TechTalk.SpecFlow.ITestRunner testRunner; - private string[] _featureTags = ((string[])(null)); + private static string[] featureTags = ((string[])(null)); #line 1 "ProductionProcessCheckProductionState.feature" #line hidden @@ -35,8 +35,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features public virtual void FeatureSetup() { testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(); - TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "CheckProductionState", "Test the functionality of the executed production steps and preconditions needed " + - "for finalizing of the Cordonel and to prepare it \r\nfor shipping.", ProgrammingLanguage.CSharp, ((string[])(null))); + TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "CheckProductionState", "Test the functionality of the executed production steps and preconditions needed " + + "for finalizing of the Cordonel and to prepare it \r\nfor shipping.", ProgrammingLanguage.CSharp, featureTags); testRunner.OnFeatureStart(featureInfo); } @@ -48,28 +48,28 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features } [NUnit.Framework.SetUpAttribute()] - public virtual void TestInitialize() + public void TestInitialize() { } [NUnit.Framework.TearDownAttribute()] - public virtual void TestTearDown() + public void TestTearDown() { testRunner.OnScenarioEnd(); } - public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { testRunner.OnScenarioInitialize(scenarioInfo); testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext); } - public virtual void ScenarioStart() + public void ScenarioStart() { testRunner.OnScenarioStart(); } - public virtual void ScenarioCleanup() + public void ScenarioCleanup() { testRunner.CollectScenarioErrors(); } @@ -77,7 +77,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Features [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_001]_Check_EOL_Progress")] [NUnit.Framework.CategoryAttribute("CheckEolProgress")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_001_Check_EOL_Progress() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_001_Check_EOL_Progress() { string[] tagsOfScenario = new string[] { "CheckEolProgress"}; @@ -91,21 +91,11 @@ INPUTS: The values needed to be predefined automatically by the ""Sentinel"" o ""EOL PcbId"". ""Partial Compare"" ""X"" will be used to check if the string contains a substring defined in the ""StringReturn"". ""Partial Compare"" ""-"" will force the string being exact as defined! -OUTPUT: ""StringReturn"" as test result containing the expected string or ""null"" as error result from the method.", tagsOfScenario, argumentsOfScenario); +OUTPUT: ""StringReturn"" as test result containing the expected string or ""null"" as error result from the method.", tagsOfScenario, argumentsOfScenario, featureTags); #line 8 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } @@ -194,7 +184,7 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_002]_Check_Requirements")] [NUnit.Framework.CategoryAttribute("CheckProductionProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_002_Check_Requirements() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_002_Check_Requirements() { string[] tagsOfScenario = new string[] { "CheckProductionProperties"}; @@ -207,21 +197,11 @@ INPUTS: Requirements ""Standard Id"" just a number or ""null"", ""Special Id just a number or ""null"""", ""Special Version"" just a number or ""null"" and ""Special IsActive"" if ""X"" else ""-"". -OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); +OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); #line 39 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } @@ -434,82 +414,110 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_003]_Check_ProductionOrderNo")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_003]_Check_CSD_Status")] [NUnit.Framework.CategoryAttribute("CheckProductionProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_003_Check_ProductionOrderNo() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_003_Check_CSD_Status() { string[] tagsOfScenario = new string[] { "CheckProductionProperties"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_003]_Check_ProductionOrderNo", @"FUNCTION: Compare the Cordonel production-order with the production-order from the requirement to validate that the correct requirements - going to be used for the check of the actual production state. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_003]_Check_CSD_Status", @"FUNCTION: Check the Customer Specific Document (CSD) for its status. PRESETS: none -INPUTS: ""Cordonel ProdOrderNo"" and ""Requirement ProdOrderNo"" -OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); +INPUTS: ""CSD ID"" the identification number of the CSD, + ""CSD Name"" a string for verbose identification, + ""CSD Code"" the code in SAP, + ""CSD Status"" giving the status ""Null"", ""New"", ""Blocked"", ""Known"" or ""Released"". +OUTPUT: ""StatusReturn"" with results ""Okay"", ""Failed"" or ""Warning""", tagsOfScenario, argumentsOfScenario, featureTags); #line 79 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 86 +#line 88 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 87 -testRunner.And("Name the private function to be checked for functionality \'CheckProductionOrderNu" + - "mber\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden -#line 88 -testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden #line 89 -testRunner.And("Name the property to be checked for \'RequirementOrderChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the object type holding the property \'StatusReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 90 +testRunner.And("Name the private function to be checked for functionality \'ValidateCsd\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table4 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", - "Cordonel ProdOrderNo", - "Requirement ProdOrderNo", - "EOL Status", + "CSD ID", + "CSD Name", + "CSD Code", + "CSD Status", + "StatusReturn", "Comment"}); table4.AddRow(new string[] { "1", - "3118323", - "3118323", + "3100782", + "CSD 767978 Canal de Isabel", + "O1", + "Released", "Okay", - "Order number is identical"}); + "Released CSD approved for production"}); table4.AddRow(new string[] { "2", - "3118323", - "0", - "Failed", - "Unmatching Requirement Order number"}); + "3100782", + "CSD 767978 Canal de Isabel", + "O1", + "Known", + "Warning", + "Known CSD temporary for production"}); table4.AddRow(new string[] { "3", - "0", - "3118323", + "3100782", + "CSD 767978 Canal de Isabel", + "O1", + "New", "Failed", - "Unmatching Cordonel Order number"}); -#line 92 + "New CSD invalid for production"}); + table4.AddRow(new string[] { + "4", + "3100782", + "CSD 767978 Canal de Isabel", + "O1", + "Blocked", + "Failed", + "Blocked CSD invalid for production"}); + table4.AddRow(new string[] { + "5", + "null", + "CSD 767978 Canal de Isabel", + "O1", + "Released", + "Failed", + "Invalid CSD ID invalid for production"}); + table4.AddRow(new string[] { + "6", + "3100782", + "null", + "O1", + "Released", + "Failed", + "Invalid CSD Name invalid for production"}); + table4.AddRow(new string[] { + "7", + "3100782", + "CSD 767978 Canal de Isabel", + "null", + "Released", + "Failed", + "Invalid CSD Code invalid for production"}); +#line 93 testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table4, "And "); #line hidden -#line 97 +#line 103 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 98 +#line 104 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -517,113 +525,176 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_004]_Check_PcbId")] - [NUnit.Framework.CategoryAttribute("CheckCordonelProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_004_Check_PcbId() + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_004]_Check_ProductionOrderNo")] + [NUnit.Framework.CategoryAttribute("CheckProductionProperties")] + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_004_Check_ProductionOrderNo() { string[] tagsOfScenario = new string[] { - "CheckCordonelProperties"}; + "CheckProductionProperties"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_004]_Check_PcbId", @"FUNCTION: Compare the PcbId from Cordonel, EOL-progress and requirement. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_004]_Check_ProductionOrderNo", @"FUNCTION: Compare the Cordonel production-order with the production-order from the requirement to validate that the correct requirements + going to be used for the check of the actual production state. PRESETS: none -INPUTS: ""Cordonel PcbId"", EOL PcbId and ""Requirement PcbId"". If the requirement-PcbId id is ""null"" then the requirement is order based - and not just for a single Cordonel! -OUTPUT: ""EOL Status"" with results ""Okay"", ""Failed"" or ""Skipped""", tagsOfScenario, argumentsOfScenario); -#line 103 +INPUTS: ""Cordonel ProdOrderNo"" and ""Requirement ProdOrderNo"" +OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); +#line 109 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 110 +#line 116 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 111 -testRunner.And("Name the private function to be checked for functionality \'CheckPcbId\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 117 +testRunner.And("Name the private function to be checked for functionality \'CheckProductionOrderNu" + + "mber\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 112 +#line 118 testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 113 -testRunner.And("Name the property to be checked for \'RequirementPcbIdChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 119 +testRunner.And("Name the property to be checked for \'RequirementOrderChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table5 = new TechTalk.SpecFlow.Table(new string[] { + "TestNo", + "Cordonel ProdOrderNo", + "Requirement ProdOrderNo", + "EOL Status", + "Comment"}); + table5.AddRow(new string[] { + "1", + "3118323", + "3118323", + "Okay", + "Order number is identical"}); + table5.AddRow(new string[] { + "2", + "3118323", + "0", + "Failed", + "Unmatching Requirement Order number"}); + table5.AddRow(new string[] { + "3", + "0", + "3118323", + "Failed", + "Unmatching Cordonel Order number"}); +#line 122 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table5, "And "); +#line hidden +#line 127 +testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 128 +testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden + } + this.ScenarioCleanup(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_005]_Check_PcbId")] + [NUnit.Framework.CategoryAttribute("CheckCordonelProperties")] + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_005_Check_PcbId() + { + string[] tagsOfScenario = new string[] { + "CheckCordonelProperties"}; + System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_005]_Check_PcbId", @"FUNCTION: Compare the PcbId from Cordonel, EOL-progress and requirement. +PRESETS: none +INPUTS: ""Cordonel PcbId"", EOL PcbId and ""Requirement PcbId"". If the requirement-PcbId id is ""null"" then the requirement is order based + and not just for a single Cordonel! +OUTPUT: ""EOL Status"" with results ""Okay"", ""Failed"" or ""Skipped""", tagsOfScenario, argumentsOfScenario, featureTags); +#line 133 +this.ScenarioInitialize(scenarioInfo); +#line hidden + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) + { + testRunner.SkipScenario(); + } + else + { + this.ScenarioStart(); +#line 140 +testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line hidden +#line 141 +testRunner.And("Name the private function to be checked for functionality \'CheckPcbId\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 142 +testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 143 +testRunner.And("Name the property to be checked for \'RequirementPcbIdChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden + TechTalk.SpecFlow.Table table6 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Cordonel PcbId", "EOL PcbId", "Requirement PcbId", "EOL Status", "Comment"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "1", "182100041", "182100041", "null", "Skipped", "Order based requirement"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "2", "182100041", "182100041", "182100041", "Okay", "PcbId is identical"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "3", "182100041", "0", "182100041", "Failed", "Unmatching EOL Progress PcbId"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "4", "182100041", "182100041", "0", "Failed", "Unmatching Requirement PcbId"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "5", "0", "182100041", "182100041", "Failed", "Unmatching Cordonel PcbId"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "6", "1821000", "182100041", "182100041", "Failed", "Cordonel PcbId to short"}); - table5.AddRow(new string[] { + table6.AddRow(new string[] { "7", "null", "182100041", "182100041", "Failed", "Cordonel PcbId is null"}); -#line 116 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table5, "And "); +#line 146 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table6, "And "); #line hidden -#line 126 +#line 156 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 127 +#line 157 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -631,97 +702,87 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_005]_Check_Region")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_006]_Check_Region")] [NUnit.Framework.CategoryAttribute("CheckCordonelProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_005_Check_Region() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_006_Check_Region() { string[] tagsOfScenario = new string[] { "CheckCordonelProperties"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_005]_Check_Region", "FUNCTION: Compare the Region from Cordonel and requirement. \r\nPRESETS: none\r\nINP" + + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_006]_Check_Region", "FUNCTION: Compare the Region from Cordonel and requirement. \r\nPRESETS: none\r\nINP" + "UTS: \"Cordonel Region\" and \"Requirement Region\". \r\nOUTPUT: \"EOL Status\" with" + - " results \"Okay\" or \"Failed\"", tagsOfScenario, argumentsOfScenario); -#line 132 + " results \"Okay\" or \"Failed\"", tagsOfScenario, argumentsOfScenario, featureTags); +#line 162 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 138 +#line 168 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 139 +#line 169 testRunner.And("Name the private function to be checked for functionality \'CheckRegion\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 140 +#line 170 testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 141 +#line 171 testRunner.And("Name the property to be checked for \'RequirementRegionChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table6 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table7 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Cordonel Region", "Requirement Region", "EOL Status", "Comment"}); - table6.AddRow(new string[] { + table7.AddRow(new string[] { "1", "EMEA", "EMEA", "Okay", "Region is identical"}); - table6.AddRow(new string[] { + table7.AddRow(new string[] { "2", "NA", "NA", "Okay", "Region is identical"}); - table6.AddRow(new string[] { + table7.AddRow(new string[] { "3", "EMEA", "NA", "Failed", "Unmatched Region"}); - table6.AddRow(new string[] { + table7.AddRow(new string[] { "4", "null", "EMEA", "Failed", "Unknown Cordonel Region"}); - table6.AddRow(new string[] { + table7.AddRow(new string[] { "5", "EMEA", "null", "Failed", "Unknown Requirement Region"}); - table6.AddRow(new string[] { + table7.AddRow(new string[] { "6", "null", "null", "Failed", "Unspecified Region"}); -#line 144 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table6, "And "); +#line 174 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table7, "And "); #line hidden -#line 152 +#line 182 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 153 +#line 183 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -729,98 +790,88 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_006]_Check_LUT_CRC")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_007]_Check_LUT_CRC")] [NUnit.Framework.CategoryAttribute("CheckCordonelProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_006_Check_LUT_CRC() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_007_Check_LUT_CRC() { string[] tagsOfScenario = new string[] { "CheckCordonelProperties"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_006]_Check_LUT_CRC", @"FUNCTION: Check for the checksum (cyclic redundancy check - CRC) of the metrology lookup-table. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_007]_Check_LUT_CRC", @"FUNCTION: Check for the checksum (cyclic redundancy check - CRC) of the metrology lookup-table. PRESETS: none INPUTS: ""Cordonel LUT CRC"" and ""Requirement LUT CRC"" just a string representing a number in hex e.g. ""0xEB7C. -OUTPUT: ""StringReturn"" as test result containing the expected string or ""null"" as error result from the method.", tagsOfScenario, argumentsOfScenario); -#line 158 +OUTPUT: ""StringReturn"" as test result containing the expected string or ""null"" as error result from the method.", tagsOfScenario, argumentsOfScenario, featureTags); +#line 188 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 164 +#line 194 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 165 +#line 195 testRunner.And("Name the private function to be checked for functionality \'CheckLutCrc\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 166 +#line 196 testRunner.And("Name the object type holding the property \'StringReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 167 +#line 197 testRunner.And("Name the property to be checked for \'ProductionStatusLutCrc\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table7 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table8 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Cordonel LUT CRC", "Requirement LUT CRC", "StringReturn", "Comment"}); - table7.AddRow(new string[] { + table8.AddRow(new string[] { "1", "0xEB7C", "0xEB7C", "0xEB7C", "LUT CRC is identical"}); - table7.AddRow(new string[] { + table8.AddRow(new string[] { "2", "0x0000", "0xEB7C", "null", "Wrong Cordonel LUT CRC"}); - table7.AddRow(new string[] { + table8.AddRow(new string[] { "3", "0xEB7C", "0x0000", "null", "Wrong Requirement LUT CRC"}); - table7.AddRow(new string[] { + table8.AddRow(new string[] { "4", "null", "0xEB7C", "null", "Cordonel LUT CRC undefined"}); - table7.AddRow(new string[] { + table8.AddRow(new string[] { "5", "0xEB7C", "null", "null", "Requirement LUT CRC undefined"}); - table7.AddRow(new string[] { + table8.AddRow(new string[] { "6", "null", "null", "null", "LUT CRC\'s undefined"}); -#line 170 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table7, "And "); +#line 200 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table8, "And "); #line hidden -#line 179 +#line 209 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 180 +#line 210 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -828,98 +879,88 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_007]_Check_Meter_Size")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_008]_Check_Meter_Size")] [NUnit.Framework.CategoryAttribute("CheckCordonelProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_007_Check_Meter_Size() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_008_Check_Meter_Size() { string[] tagsOfScenario = new string[] { "CheckCordonelProperties"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_007]_Check_Meter_Size", @"FUNCTION: Compare the Meter Size from Cordonel and requirement. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_008]_Check_Meter_Size", @"FUNCTION: Compare the Meter Size from Cordonel and requirement. PRESETS: none INPUTS: ""Cordonel Meter Size"" and ""Requirement Meter Size"" as strings naming the size as e.g. ""DN50"", ""US1_5"" or ""1 1/2 INC"". -OUTPUT: ""StringReturn"" as test result containing the expected string or ""null"" as error result from the method.", tagsOfScenario, argumentsOfScenario); -#line 185 +OUTPUT: ""StringReturn"" as test result containing the expected string or ""null"" as error result from the method.", tagsOfScenario, argumentsOfScenario, featureTags); +#line 215 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 191 +#line 221 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 192 +#line 222 testRunner.And("Name the private function to be checked for functionality \'CheckMeterSize\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 193 +#line 223 testRunner.And("Name the object type holding the property \'StringReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 194 +#line 224 testRunner.And("Name the property to be checked for \'ProductionStatusMeterSize\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table8 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table9 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Cordonel Meter Size", "Requirement Meter Size", "StringReturn", "Comment"}); - table8.AddRow(new string[] { + table9.AddRow(new string[] { "1", "DN50", "DN50", "DN50", "Meter size is identical"}); - table8.AddRow(new string[] { + table9.AddRow(new string[] { "2", "US1_5", "1 1/2 INC", "1 1/2 INC", "Meter size is identical but uses different naming"}); - table8.AddRow(new string[] { + table9.AddRow(new string[] { "3", "DN80", "1 1/2 INC", "null", "Wrong Requirement Meter size"}); - table8.AddRow(new string[] { + table9.AddRow(new string[] { "4", "null", "DN50", "null", "Cordonel Meter size undefined"}); - table8.AddRow(new string[] { + table9.AddRow(new string[] { "5", "DN50", "null", "null", "Requirement Meter size undefined"}); - table8.AddRow(new string[] { + table9.AddRow(new string[] { "6", "null", "null", "null", "Meter sizes undefined"}); -#line 197 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table8, "And "); +#line 227 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table9, "And "); #line hidden -#line 206 +#line 236 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 207 +#line 237 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -927,14 +968,14 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_008]_Check_FW_and_Apps")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_009]_Check_FW_and_Apps")] [NUnit.Framework.CategoryAttribute("CheckCordonelProperties")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_008_Check_FW_And_Apps() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_009_Check_FW_And_Apps() { string[] tagsOfScenario = new string[] { "CheckCordonelProperties"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_008]_Check_FW_and_Apps", "FUNCTION: Compare Cordonel installed Firmware and Apps with required Firmware.\r\n " + + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_009]_Check_FW_and_Apps", "FUNCTION: Compare Cordonel installed Firmware and Apps with required Firmware.\r\n " + " All Apps will be verified for their versions and CRC. \r\n The C" + "ore-Revision will be validated.\r\nPRESETS: none\r\nINPUTS: \"Cordonel Core Revisi" + "on\" as float specifying the Breeze operating system version, it will be checked " + @@ -956,40 +997,30 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S "nch needs programming parameters in a specific folder \r\n \"[SolutionPath" + "]\\Hardware\\WaterMeter\\Genesis\\MockGenesis\\MockFwExamples\" as it copies all assem" + "blies to a \r\n special NCrunch working folder which is total separated f" + - "rom the project specific \"\\bin\\Debug\" folder!", tagsOfScenario, argumentsOfScenario); -#line 212 + "rom the project specific \"\\bin\\Debug\" folder!", tagsOfScenario, argumentsOfScenario, featureTags); +#line 242 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 236 +#line 266 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 237 +#line 267 testRunner.And("Name the private function to be checked for functionality \'CheckFwAndApps\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 238 +#line 268 testRunner.And("Name the object type holding the property \'StringReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 239 +#line 269 testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table9 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table10 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Cordonel Core Revision", "Cordonel FW Version", @@ -1000,7 +1031,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "Change App CRC", "StringReturn", "Comment"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "1", "1.71", "R1.3.0B", @@ -1011,7 +1042,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "-", "R1.3.0B", "FW Version is identical"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "2", "1.71", "R2.0.06", @@ -1022,7 +1053,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "-", "R2.0.06", "FW Version is identical"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "3", "1.60", "R1.3.0B", @@ -1033,7 +1064,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "-", "null", "Core revision is incompatible"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "4", "1.71", "R1.3.0B", @@ -1044,7 +1075,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "-", "null", "Wrong FW version installed"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "5", "1.71", "R1.3.0B", @@ -1055,7 +1086,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "-", "null", "Genesis flow is invalid"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "6", "1.71", "R1.3.0B", @@ -1066,7 +1097,7 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "-", "null", "Genesis flow version modified"}); - table9.AddRow(new string[] { + table10.AddRow(new string[] { "7", "1.71", "R1.3.0B", @@ -1077,13 +1108,13 @@ testRunner.And("Name the property to be checked for \'ProductionStatusFwVersion\ "X", "null", "Genesis flow CRC modified"}); -#line 242 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table9, "And "); +#line 272 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table10, "And "); #line hidden -#line 252 +#line 282 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 253 +#line 283 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -1091,78 +1122,68 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_009]_Check_Kitron_Radio_Signal_Levels")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_010]_Check_Kitron_Radio_Signal_Levels")] [NUnit.Framework.CategoryAttribute("CheckKitronRadioSignalLevels")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_009_Check_Kitron_Radio_Signal_Levels() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_010_Check_Kitron_Radio_Signal_Levels() { string[] tagsOfScenario = new string[] { "CheckKitronRadioSignalLevels"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_009]_Check_Kitron_Radio_Signal_Levels", @"FUNCTION: Check if radio signal levels have been defined (contained in parameter list) FOR THIS cORDONEL SIZE AND LENGHT. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_010]_Check_Kitron_Radio_Signal_Levels", @"FUNCTION: Check if radio signal levels have been defined (contained in parameter list) FOR THIS cORDONEL SIZE AND LENGHT. PRESETS: none INPUTS: . OUTPUT: ""StatusReturn"" with results ""Okay"" or ""Failed"" COMMENT: NCrunch needs programming parameters in a specific folder ""[SolutionPath]\Hardware\WaterMeter\Genesis\MockGenesis\MockRawParameterExamples"" as it copies all assemblies to a - special NCrunch working folder which is total separated from the project specific ""\bin\Debug"" folder!", tagsOfScenario, argumentsOfScenario); -#line 258 + special NCrunch working folder which is total separated from the project specific ""\bin\Debug"" folder!", tagsOfScenario, argumentsOfScenario, featureTags); +#line 288 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 267 +#line 297 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 268 +#line 298 testRunner.And("Name the private function to be checked for functionality \'CheckKitronRadioSignal" + "Levels\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 269 +#line 299 testRunner.And("Name the object type holding the property \'StatusReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 273 +#line 303 testRunner.And("Define production process for sequencing before test \'ExecFinalParametrization\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 274 +#line 304 testRunner.And("Define production process for sequencing before test \'CheckFinalParametrization\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table10 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table11 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Cordonel Meter Size", "StatusReturn", "Comment"}); - table10.AddRow(new string[] { + table11.AddRow(new string[] { "1", "DN50", "Okay", "Valid Kitron radio calibration values"}); - table10.AddRow(new string[] { + table11.AddRow(new string[] { "2", "DN02", "Failed", "Missing Kitron radio calibration values"}); -#line 277 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table10, "And "); +#line 307 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table11, "And "); #line hidden -#line 281 +#line 311 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 282 +#line 312 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -1170,14 +1191,14 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_010]_Check_Remaining_Battery_Load")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_011]_Check_Remaining_Battery_Load")] [NUnit.Framework.CategoryAttribute("CheckLifetimes")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_010_Check_Remaining_Battery_Load() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_011_Check_Remaining_Battery_Load() { string[] tagsOfScenario = new string[] { "CheckLifetimes"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_010]_Check_Remaining_Battery_Load", @"FUNCTION: Compare the remaining battery load from Cordonel and the requirement. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_011]_Check_Remaining_Battery_Load", @"FUNCTION: Compare the remaining battery load from Cordonel and the requirement. PRESETS: none INPUTS: ""Normal Current [uA]"" multiplied with exceeded lifetime together with ""Production Drained [%] for an alternative threshold, set to ""null"" if the standard check based on ""Max Drained [%]"" shall be used. @@ -1188,162 +1209,11 @@ INPUTS: ""Normal Current [uA]"" multiplied with exceeded lifetime together wit lifetime, set to 0 to create an error. ""Max Drained [%]"" Threshold for allowed drainage at EOL in standard check. If alternative threshold is active then this is the ABSOLUTE LIMIT. -OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); -#line 286 -this.ScenarioInitialize(scenarioInfo); -#line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) - { - testRunner.SkipScenario(); - } - else - { - this.ScenarioStart(); -#line 300 -testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); -#line hidden -#line 301 -testRunner.And("Name the private function to be checked for functionality \'CheckRemainingBatteryL" + - "oad\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden -#line 302 -testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden -#line 303 -testRunner.And("Name the property to be checked for \'ProductionStatusBatteryLoadChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden - TechTalk.SpecFlow.Table table11 = new TechTalk.SpecFlow.Table(new string[] { - "TestNo", - "Normal Current [uA]", - "Production Supplement [%]", - "Actual Lifetime [days]", - "Actual Drained [%]", - "Max Drained [%]", - "EOL Status", - "Comment"}); - table11.AddRow(new string[] { - "1", - "119.8", - "1.5", - "90", - "2.0", - "5.0", - "Okay", - "Alternative threshold okay"}); - table11.AddRow(new string[] { - "2", - "119.8", - "1.5", - "90", - "2.5", - "5.0", - "Failed", - "Alternative threshold exceeded"}); - table11.AddRow(new string[] { - "3", - "119.8", - "1.5", - "180", - "2.5", - "2.0", - "Failed", - "Absolute max drained limit exceeded"}); - table11.AddRow(new string[] { - "4", - "null", - "null", - "90", - "2.0", - "2.0", - "Okay", - "Normal threshold okay"}); - table11.AddRow(new string[] { - "5", - "null", - "null", - "90", - "2.5", - "2.0", - "Failed", - "Normal threshold exceeded"}); - table11.AddRow(new string[] { - "6", - "null", - "null", - "0", - "2.0", - "5.0", - "Failed", - "Lifetime of 0 days error"}); - table11.AddRow(new string[] { - "7", - "null", - "null", - "90", - "0.0", - "5.0", - "Failed", - "Drained load of 0 % error"}); - table11.AddRow(new string[] { - "8", - "null", - "null", - "90", - "2.0", - "null", - "Failed", - "Max remaining battery load is null"}); -#line 306 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table11, "And "); -#line hidden +OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); #line 316 -testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); -#line hidden -#line 317 -testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); -#line hidden - } - this.ScenarioCleanup(); - } - - [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_011]_Check_Remaining_Lifetime")] - [NUnit.Framework.CategoryAttribute("CheckLifetimes")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_011_Check_Remaining_Lifetime() - { - string[] tagsOfScenario = new string[] { - "CheckLifetimes"}; - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_011]_Check_Remaining_Lifetime", @"FUNCTION: Compare the remaining life time reported by the Cordonel and the requirement. -PRESETS: none -INPUTS: ""Actual Lifetime [days]"" is the time in days the Cordonel after Kitron production, - ""Actual Drained [%]"" is used to calculate the drained load to forecast the remaining lifetime, - ""Required Lifetime [years]"" Threshold for remaining lifetime. -OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); -#line 322 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } @@ -1354,71 +1224,202 @@ this.ScenarioInitialize(scenarioInfo); testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden #line 331 -testRunner.And("Name the private function to be checked for functionality \'CheckRemainingLifetime" + - "\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the private function to be checked for functionality \'CheckRemainingBatteryL" + + "oad\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden #line 332 testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden #line 333 -testRunner.And("Name the property to be checked for \'ProductionStatusRemainingLifeTimeChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the property to be checked for \'ProductionStatusBatteryLoadChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table12 = new TechTalk.SpecFlow.Table(new string[] { + "TestNo", + "Normal Current [uA]", + "Production Supplement [%]", + "Actual Lifetime [days]", + "Actual Drained [%]", + "Max Drained [%]", + "EOL Status", + "Comment"}); + table12.AddRow(new string[] { + "1", + "119.8", + "1.5", + "90", + "2.0", + "5.0", + "Okay", + "Alternative threshold okay"}); + table12.AddRow(new string[] { + "2", + "119.8", + "1.5", + "90", + "2.5", + "5.0", + "Failed", + "Alternative threshold exceeded"}); + table12.AddRow(new string[] { + "3", + "119.8", + "1.5", + "180", + "2.5", + "2.0", + "Failed", + "Absolute max drained limit exceeded"}); + table12.AddRow(new string[] { + "4", + "null", + "null", + "90", + "2.0", + "2.0", + "Okay", + "Normal threshold okay"}); + table12.AddRow(new string[] { + "5", + "null", + "null", + "90", + "2.5", + "2.0", + "Failed", + "Normal threshold exceeded"}); + table12.AddRow(new string[] { + "6", + "null", + "null", + "0", + "2.0", + "5.0", + "Failed", + "Lifetime of 0 days error"}); + table12.AddRow(new string[] { + "7", + "null", + "null", + "90", + "0.0", + "5.0", + "Failed", + "Drained load of 0 % error"}); + table12.AddRow(new string[] { + "8", + "null", + "null", + "90", + "2.0", + "null", + "Failed", + "Max remaining battery load is null"}); +#line 336 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table12, "And "); +#line hidden +#line 346 +testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 347 +testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden + } + this.ScenarioCleanup(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_012]_Check_Remaining_Lifetime")] + [NUnit.Framework.CategoryAttribute("CheckLifetimes")] + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_012_Check_Remaining_Lifetime() + { + string[] tagsOfScenario = new string[] { + "CheckLifetimes"}; + System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_012]_Check_Remaining_Lifetime", @"FUNCTION: Compare the remaining life time reported by the Cordonel and the requirement. +PRESETS: none +INPUTS: ""Actual Lifetime [days]"" is the time in days the Cordonel after Kitron production, + ""Actual Drained [%]"" is used to calculate the drained load to forecast the remaining lifetime, + ""Required Lifetime [years]"" Threshold for remaining lifetime. +OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); +#line 352 +this.ScenarioInitialize(scenarioInfo); +#line hidden + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) + { + testRunner.SkipScenario(); + } + else + { + this.ScenarioStart(); +#line 360 +testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line hidden +#line 361 +testRunner.And("Name the private function to be checked for functionality \'CheckRemainingLifetime" + + "\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 362 +testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 363 +testRunner.And("Name the property to be checked for \'ProductionStatusRemainingLifeTimeChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden + TechTalk.SpecFlow.Table table13 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Actual Lifetime [days]", "Required Lifetime [years]", "Actual Drained [%]", "EOL Status", "Comment"}); - table12.AddRow(new string[] { + table13.AddRow(new string[] { "1", "90", "20.0", "1.0", "Okay", "Remaining lifetime as required"}); - table12.AddRow(new string[] { + table13.AddRow(new string[] { "2", "365", "5.0", "10.0", "Okay", "Remaining lifetime as required"}); - table12.AddRow(new string[] { + table13.AddRow(new string[] { "3", "90", "20.0", "2.0", "Failed", "Remaining lifetime to short"}); - table12.AddRow(new string[] { + table13.AddRow(new string[] { "4", "0", "20.0", "1.0", "Failed", "Actual lifetime of 0 days error"}); - table12.AddRow(new string[] { + table13.AddRow(new string[] { "5", "90", "20.0", "0.0", "Failed", "Actual drained load of 0 % error"}); - table12.AddRow(new string[] { + table13.AddRow(new string[] { "6", "90", "null", "1.0", "Failed", "Required lifetime is null"}); -#line 336 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table12, "And "); +#line 366 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table13, "And "); #line hidden -#line 345 +#line 375 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 346 +#line 376 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -1426,208 +1427,83 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_012]_Check_Storage_Months")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_013]_Check_Storage_Months")] [NUnit.Framework.CategoryAttribute("CheckLifetimeS")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_012_Check_Storage_Months() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_013_Check_Storage_Months() { string[] tagsOfScenario = new string[] { "CheckLifetimeS"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_012]_Check_Storage_Months", @"FUNCTION: Compare the production date reported by the Cordonel with the actual date and check the requirement. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_013]_Check_Storage_Months", @"FUNCTION: Compare the production date reported by the Cordonel with the actual date and check the requirement. PRESETS: none INPUTS: ""Assembly Months before Now"" as zero or negative floating point number or invalid if set to ""null"". ""Max Storage Months"" floating point number of months allowed until production has to be finalized. -OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); -#line 350 +OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); +#line 380 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 357 +#line 387 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 358 +#line 388 testRunner.And("Name the private function to be checked for functionality \'CheckStorageMonths\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 359 +#line 389 testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 360 +#line 390 testRunner.And("Name the property to be checked for \'MaxStorageMonthsChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table13 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table14 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Assembly Months before Now", "Max Storage Months", "EOL Status", "Comment"}); - table13.AddRow(new string[] { + table14.AddRow(new string[] { "1", "-3.0", "3.0", "Okay", "Storage months in range"}); - table13.AddRow(new string[] { + table14.AddRow(new string[] { "2", "-3.0", "2.0", "Failed", "Exceeded maximal allowed storage time"}); - table13.AddRow(new string[] { + table14.AddRow(new string[] { "3", "null", "2.0", "Failed", "Error assembly months are null"}); - table13.AddRow(new string[] { + table14.AddRow(new string[] { "4", "-3.0", "null", "Failed", "Error max storage months are null"}); - table13.AddRow(new string[] { + table14.AddRow(new string[] { "5", "3.0", "3.0", "Failed", "Error assembly time lies in the future"}); - table13.AddRow(new string[] { + table14.AddRow(new string[] { "6", "-3.0", "-3.0", "Failed", "Error storage months is negative"}); -#line 363 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table13, "And "); -#line hidden -#line 372 -testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); -#line hidden -#line 373 -testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); -#line hidden - } - this.ScenarioCleanup(); - } - - [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_013]_Check_Preadjustment")] - [NUnit.Framework.CategoryAttribute("CheckCalibrations")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_013_Check_Preadjustment() - { - string[] tagsOfScenario = new string[] { - "CheckCalibrations"}; - System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_013]_Check_Preadjustment", @"FUNCTION: Check the database content reporting a flow-test preadjustment. -PRESETS: none -INPUTS: ""Test Bench Fields"" the array of test bench fields - ""Test Bench State[4]"" the field containing a number if preadjustment successfully executed, null if not. - ""Skip Calib"" to skip all calibration related checks -OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); -#line 378 -this.ScenarioInitialize(scenarioInfo); -#line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) - { - testRunner.SkipScenario(); - } - else - { - this.ScenarioStart(); -#line 386 -testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); -#line hidden -#line 387 -testRunner.And("Name the private function to be checked for functionality \'CheckPreadjustment\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden -#line 388 -testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden -#line 389 -testRunner.And("Name the property to be checked for \'ProductionStatusZeroFlowChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line hidden - TechTalk.SpecFlow.Table table14 = new TechTalk.SpecFlow.Table(new string[] { - "TestNo", - "Test Bench Fields", - "Test Bench State[4]", - "Skip Calib", - "EOL Status", - "Comment"}); - table14.AddRow(new string[] { - "1", - "5", - "21", - "X", - "Skipped", - "Skipped calibration checks by requirement"}); - table14.AddRow(new string[] { - "2", - "5", - "21", - "-", - "Okay", - "Test bench preadjustment succeeded"}); - table14.AddRow(new string[] { - "3", - "5", - "0", - "-", - "Okay", - "Test bench preadjustment succeeded"}); - table14.AddRow(new string[] { - "4", - "5", - "500", - "-", - "Okay", - "Test bench preadjustment succeeded"}); - table14.AddRow(new string[] { - "5", - "4", - "21", - "-", - "Failed", - "Error test bench fields too little"}); - table14.AddRow(new string[] { - "6", - "5", - "null", - "-", - "Failed", - "Error test bench status[4] is null"}); - table14.AddRow(new string[] { - "7", - "null", - "21", - "-", - "Failed", - "Error test bench fields null"}); -#line 392 +#line 393 testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table14, "And "); #line hidden #line 402 @@ -1641,33 +1517,23 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_014]_Check_Flow_Test_State")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_014]_Check_Preadjustment")] [NUnit.Framework.CategoryAttribute("CheckCalibrations")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_014_Check_Flow_Test_State() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_014_Check_Preadjustment() { string[] tagsOfScenario = new string[] { "CheckCalibrations"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_014]_Check_Flow_Test_State", @"FUNCTION: Check the database content reporting the flow-test state. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_014]_Check_Preadjustment", @"FUNCTION: Check the database content reporting a flow-test preadjustment. PRESETS: none INPUTS: ""Test Bench Fields"" the array of test bench fields - ""Test Bench State[5]"" the field containing a number of 30 if calibration succeeded - ""Skip Calib"" to skip all calibration related checks if set to ""X"" else ""-"". -OUTPUT: ""EOL Status"" with results ""Skipped"", ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); + ""Test Bench State[4]"" the field containing a number if preadjustment successfully executed, null if not. + ""Skip Calib"" to skip all calibration related checks +OUTPUT: ""EOL Status"" with results ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); #line 408 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } @@ -1678,84 +1544,77 @@ this.ScenarioInitialize(scenarioInfo); testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden #line 417 -testRunner.And("Name the private function to be checked for functionality \'CheckFlowTestState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the private function to be checked for functionality \'CheckPreadjustment\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden #line 418 testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden #line 419 -testRunner.And("Name the property to be checked for \'ProductionStatusCalibrationChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the property to be checked for \'ProductionStatusZeroFlowChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table15 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Test Bench Fields", - "Test Bench State[5]", + "Test Bench State[4]", "Skip Calib", "EOL Status", "Comment"}); table15.AddRow(new string[] { "1", - "6", - "30", + "5", + "21", "X", "Skipped", "Skipped calibration checks by requirement"}); table15.AddRow(new string[] { "2", - "6", - "30", + "5", + "21", "-", "Okay", - "Test bench calibration succeeded"}); + "Test bench preadjustment succeeded"}); table15.AddRow(new string[] { "3", - "6", - "30", + "5", + "0", "-", "Okay", - "Test bench calibration succeeded"}); + "Test bench preadjustment succeeded"}); table15.AddRow(new string[] { "4", "5", - "30", + "500", + "-", + "Okay", + "Test bench preadjustment succeeded"}); + table15.AddRow(new string[] { + "5", + "4", + "21", "-", "Failed", "Error test bench fields too little"}); table15.AddRow(new string[] { + "6", "5", - "6", - "29", + "null", "-", "Failed", - "Error test bench status[5] number to small"}); - table15.AddRow(new string[] { - "6", - "6", - "31", - "-", - "Failed", - "Error test bench status[5] number to large"}); + "Error test bench status[4] is null"}); table15.AddRow(new string[] { "7", - "6", "null", - "-", - "Failed", - "Error test bench status[5] is null"}); - table15.AddRow(new string[] { - "8", - "null", - "30", + "21", "-", "Failed", "Error test bench fields null"}); #line 422 testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table15, "And "); #line hidden -#line 433 +#line 432 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 434 +#line 433 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } @@ -1763,126 +1622,104 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S } [NUnit.Framework.TestAttribute()] - [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_015]_Check_Calib_Factors")] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_015]_Check_Flow_Test_State")] [NUnit.Framework.CategoryAttribute("CheckCalibrations")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_015_Check_Calib_Factors() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_015_Check_Flow_Test_State() { string[] tagsOfScenario = new string[] { "CheckCalibrations"}; System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_015]_Check_Calib_Factors", @"FUNCTION: Compare the calibration values reported by the Cordonel with the flow-test calibration values reported by the database. -PRESETS: All calibration values not covered by this test in valid range. -INPUTS: ""Meter Calib Fact 1/2/3"" Meter calibration factors 1, 2 and 3 stored in and read out from the Cordonel, - ""DB Calib Fact 1/2/3"" Required calibration factors 1, 2 and 3 reported by the database. + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_015]_Check_Flow_Test_State", @"FUNCTION: Check the database content reporting the flow-test state. +PRESETS: none +INPUTS: ""Test Bench Fields"" the array of test bench fields + ""Test Bench State[5]"" the field containing a number of 30 if calibration succeeded ""Skip Calib"" to skip all calibration related checks if set to ""X"" else ""-"". -OUTPUT: ""StatusReturn"" with results ""Skipped"", ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario); -#line 439 +OUTPUT: ""EOL Status"" with results ""Skipped"", ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); +#line 438 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 447 +#line 446 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden +#line 447 +testRunner.And("Name the private function to be checked for functionality \'CheckFlowTestState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden #line 448 -testRunner.And("Name the private function to be checked for functionality \'CheckCalibrationValues" + - "\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the object type holding the property \'EOLStatus\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden #line 449 -testRunner.And("Name the object type holding the property \'StatusReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +testRunner.And("Name the property to be checked for \'ProductionStatusCalibrationChecked\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table16 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", - "Meter Calib Fact 1", - "Meter Calib Fact 2", - "Meter Calib Fact 3", - "DB Calib Fact 1", - "DB Calib Fact 2", - "DB Calib Fact 3", + "Test Bench Fields", + "Test Bench State[5]", "Skip Calib", - "StatusReturn", + "EOL Status", "Comment"}); table16.AddRow(new string[] { "1", - "10000", - "20000", - "30000", - "10000", - "20000", - "30000", + "6", + "30", "X", "Skipped", - "Skipped calib checks per requirement"}); + "Skipped calibration checks by requirement"}); table16.AddRow(new string[] { "2", - "10000", - "20000", - "30000", - "10000", - "20000", - "30000", + "6", + "30", "-", "Okay", - "Valid calib factors"}); + "Test bench calibration succeeded"}); table16.AddRow(new string[] { "3", - "15625", - "20000", - "30000", - "15625", - "20000", - "30000", + "6", + "30", "-", "Okay", - "Valid calib factors (1 default)"}); + "Test bench calibration succeeded"}); table16.AddRow(new string[] { "4", - "15625", - "15625", - "30000", - "15625", - "15625", - "30000", - "-", - "Okay", - "Valid calib factors (2 defaults)"}); - table16.AddRow(new string[] { "5", - "15625", - "15625", - "15625", - "15625", - "15625", - "15625", - "-", - "Warning", - "Invalid Meter calib factors (3 defaults)"}); - table16.AddRow(new string[] { - "6", - "10000", - "20000", - "30000", - "10000", - "44444", - "30000", + "30", "-", "Failed", - "Inconsistent calib factors DB to Meter"}); + "Error test bench fields too little"}); + table16.AddRow(new string[] { + "5", + "6", + "29", + "-", + "Failed", + "Error test bench status[5] number to small"}); + table16.AddRow(new string[] { + "6", + "6", + "31", + "-", + "Failed", + "Error test bench status[5] number to large"}); + table16.AddRow(new string[] { + "7", + "6", + "null", + "-", + "Failed", + "Error test bench status[5] is null"}); + table16.AddRow(new string[] { + "8", + "null", + "30", + "-", + "Failed", + "Error test bench fields null"}); #line 452 testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table16, "And "); #line hidden @@ -1896,10 +1733,134 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S this.ScenarioCleanup(); } + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Check_Calib_Factors")] + [NUnit.Framework.CategoryAttribute("CheckCalibrations")] + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_016_Check_Calib_Factors() + { + string[] tagsOfScenario = new string[] { + "CheckCalibrations"}; + System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary(); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_016]_Check_Calib_Factors", @"FUNCTION: Compare the calibration values reported by the Cordonel with the flow-test calibration values reported by the database. +PRESETS: All calibration values not covered by this test in valid range. +INPUTS: ""Meter Calib Fact 1/2/3"" Meter calibration factors 1, 2 and 3 stored in and read out from the Cordonel, + ""DB Calib Fact 1/2/3"" Required calibration factors 1, 2 and 3 reported by the database. + ""Skip Calib"" to skip all calibration related checks if set to ""X"" else ""-"". +OUTPUT: ""StatusReturn"" with results ""Skipped"", ""Okay"" or ""Failed""", tagsOfScenario, argumentsOfScenario, featureTags); +#line 469 +this.ScenarioInitialize(scenarioInfo); +#line hidden + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) + { + testRunner.SkipScenario(); + } + else + { + this.ScenarioStart(); +#line 477 +testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line hidden +#line 478 +testRunner.And("Name the private function to be checked for functionality \'CheckCalibrationValues" + + "\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden +#line 479 +testRunner.And("Name the object type holding the property \'StatusReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line hidden + TechTalk.SpecFlow.Table table17 = new TechTalk.SpecFlow.Table(new string[] { + "TestNo", + "Meter Calib Fact 1", + "Meter Calib Fact 2", + "Meter Calib Fact 3", + "DB Calib Fact 1", + "DB Calib Fact 2", + "DB Calib Fact 3", + "Skip Calib", + "StatusReturn", + "Comment"}); + table17.AddRow(new string[] { + "1", + "10000", + "20000", + "30000", + "10000", + "20000", + "30000", + "X", + "Skipped", + "Skipped calib checks per requirement"}); + table17.AddRow(new string[] { + "2", + "10000", + "20000", + "30000", + "10000", + "20000", + "30000", + "-", + "Okay", + "Valid calib factors"}); + table17.AddRow(new string[] { + "3", + "15625", + "20000", + "30000", + "15625", + "20000", + "30000", + "-", + "Okay", + "Valid calib factors (1 default)"}); + table17.AddRow(new string[] { + "4", + "15625", + "15625", + "30000", + "15625", + "15625", + "30000", + "-", + "Okay", + "Valid calib factors (2 defaults)"}); + table17.AddRow(new string[] { + "5", + "15625", + "15625", + "15625", + "15625", + "15625", + "15625", + "-", + "Warning", + "Invalid Meter calib factors (3 defaults)"}); + table17.AddRow(new string[] { + "6", + "10000", + "20000", + "30000", + "10000", + "44444", + "30000", + "-", + "Failed", + "Inconsistent calib factors DB to Meter"}); +#line 482 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table17, "And "); +#line hidden +#line 493 +testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line hidden +#line 494 +testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line hidden + } + this.ScenarioCleanup(); + } + [NUnit.Framework.TestAttribute()] [NUnit.Framework.DescriptionAttribute("[SRS_TBF_EOL_PP_CHECK_PROD_STATE_017]_Check_Complete_Flow_Production_State")] [NUnit.Framework.CategoryAttribute("CheckProductionStateProcess")] - public virtual void SRS_TBF_EOL_PP_CHECK_PROD_STATE_017_Check_Complete_Flow_Production_State() + public void SRS_TBF_EOL_PP_CHECK_PROD_STATE_017_Check_Complete_Flow_Production_State() { string[] tagsOfScenario = new string[] { "CheckProductionStateProcess"}; @@ -1924,62 +1885,52 @@ testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.S " Leave all others as \"-\" to observe better the unique setup!\r\nOUTPUT: \"Status" + "Return\" with results \"Okay\" or \"Failed\", \r\n additional check of complet" + "e EOL progress status. The expected EOL result will be set with the preset value" + - "s and \r\n modified with the \"Kill x\" from \"Okay\" to \"Failed\" ", tagsOfScenario, argumentsOfScenario); -#line 469 + "s and \r\n modified with the \"Kill x\" from \"Okay\" to \"Failed\" ", tagsOfScenario, argumentsOfScenario, featureTags); +#line 499 this.ScenarioInitialize(scenarioInfo); #line hidden - bool isScenarioIgnored = default(bool); - bool isFeatureIgnored = default(bool); - if ((tagsOfScenario != null)) - { - isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((this._featureTags != null)) - { - isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any(); - } - if ((isScenarioIgnored || isFeatureIgnored)) + if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags))) { testRunner.SkipScenario(); } else { this.ScenarioStart(); -#line 492 +#line 522 testRunner.Given("Initialize new test scenario for production process \'CheckProductionState\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line hidden -#line 493 +#line 523 testRunner.And("Name the public function to be checked for functionality \'ExecuteProcess\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 494 +#line 524 testRunner.And("Name the object type holding the property \'StatusReturn\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 497 +#line 527 testRunner.And("Activate EOL progress check", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 501 +#line 531 testRunner.And("Define production process for sequencing before test \'ExecFinalParametrization\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden -#line 502 +#line 532 testRunner.And("Define production process for sequencing before test \'CheckFinalParametrization\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden - TechTalk.SpecFlow.Table table17 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table18 = new TechTalk.SpecFlow.Table(new string[] { "EOL Id", "EOL StartDate", "Cordonel PcbId", "EOL PcbId", "Comment"}); - table17.AddRow(new string[] { + table18.AddRow(new string[] { "123", "UTC Now", "182100041", "182100041", "EOL Progress successfully created"}); -#line 507 +#line 537 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + - "", ((string)(null)), table17, "And "); + "", ((string)(null)), table18, "And "); #line hidden - TechTalk.SpecFlow.Table table18 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table19 = new TechTalk.SpecFlow.Table(new string[] { "Standard Id", "Standard Version", "Standard IsActive", @@ -1987,7 +1938,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "Special Id", "Special Version", "Comment"}); - table18.AddRow(new string[] { + table19.AddRow(new string[] { "10", "5", "X", @@ -1995,147 +1946,163 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "null", "null", "Standard Requirement is active and approved"}); -#line 511 -testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + - "", ((string)(null)), table18, "And "); -#line hidden - TechTalk.SpecFlow.Table table19 = new TechTalk.SpecFlow.Table(new string[] { - "Cordonel ProdOrderNo", - "Requirement ProdOrderNo", - "Comment"}); - table19.AddRow(new string[] { - "3118323", - "3118323", - "Order number is identical"}); -#line 515 +#line 541 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table19, "And "); #line hidden TechTalk.SpecFlow.Table table20 = new TechTalk.SpecFlow.Table(new string[] { - "Cordonel PcbId", - "EOL PcbId", - "Requirement PcbId", + "CSD ID", + "CSD Name", + "CSD Code", + "CSD Status", "Comment"}); table20.AddRow(new string[] { - "182100041", - "182100041", - "182100041", - "PcbId is identical"}); -#line 519 + "3100782", + "CSD 767978 Canal de Isabel", + "O1", + "Released", + "Released CSD approved for production"}); +#line 545 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table20, "And "); #line hidden TechTalk.SpecFlow.Table table21 = new TechTalk.SpecFlow.Table(new string[] { - "Cordonel Region", - "Requirement Region", + "Cordonel ProdOrderNo", + "Requirement ProdOrderNo", "Comment"}); table21.AddRow(new string[] { - "EMEA", - "EMEA", - "Region is identical"}); -#line 523 + "3118323", + "3118323", + "Order number is identical"}); +#line 549 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table21, "And "); #line hidden TechTalk.SpecFlow.Table table22 = new TechTalk.SpecFlow.Table(new string[] { - "Cordonel LUT CRC", - "Requirement LUT CRC", + "Cordonel PcbId", + "EOL PcbId", + "Requirement PcbId", "Comment"}); table22.AddRow(new string[] { - "0xEB7C", - "0xEB7C", - "LUT CRC is identical"}); -#line 527 + "182100041", + "182100041", + "182100041", + "PcbId is identical"}); +#line 553 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table22, "And "); #line hidden TechTalk.SpecFlow.Table table23 = new TechTalk.SpecFlow.Table(new string[] { - "Cordonel Meter Size", - "Requirement Meter Size", + "Cordonel Region", + "Requirement Region", "Comment"}); table23.AddRow(new string[] { - "DN50", - "DN50", - "Meter size is identical"}); -#line 531 + "EMEA", + "EMEA", + "Region is identical"}); +#line 557 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table23, "And "); #line hidden TechTalk.SpecFlow.Table table24 = new TechTalk.SpecFlow.Table(new string[] { - "Cordonel Core Revision", - "Cordonel FW Version", - "Requirement FW Version", + "Cordonel LUT CRC", + "Requirement LUT CRC", "Comment"}); table24.AddRow(new string[] { - "1.71", - "R1.3.0B", - "R1.3.0B", - "FW Version is identical"}); -#line 535 + "0xEB7C", + "0xEB7C", + "LUT CRC is identical"}); +#line 561 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table24, "And "); #line hidden TechTalk.SpecFlow.Table table25 = new TechTalk.SpecFlow.Table(new string[] { - "Max Drained [%]", + "Cordonel Meter Size", + "Requirement Meter Size", "Comment"}); table25.AddRow(new string[] { - "2.0", - "Normal threshold okay"}); -#line 539 + "DN50", + "DN50", + "Meter size is identical"}); +#line 565 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table25, "And "); #line hidden TechTalk.SpecFlow.Table table26 = new TechTalk.SpecFlow.Table(new string[] { - "Actual Lifetime [days]", - "Required Lifetime [years]", - "Actual Drained [%]", + "Cordonel Core Revision", + "Cordonel FW Version", + "Requirement FW Version", "Comment"}); table26.AddRow(new string[] { - "90", - "20.0", - "1.0", - "Remaining lifetime as required"}); -#line 543 + "1.71", + "R1.3.0B", + "R1.3.0B", + "FW Version is identical"}); +#line 569 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table26, "And "); #line hidden TechTalk.SpecFlow.Table table27 = new TechTalk.SpecFlow.Table(new string[] { - "Assembly Months before Now", - "Max Storage Months", + "Max Drained [%]", "Comment"}); table27.AddRow(new string[] { - "-3.0", - "3.0", - "Storage months in range"}); -#line 547 + "2.0", + "Normal threshold okay"}); +#line 573 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table27, "And "); #line hidden TechTalk.SpecFlow.Table table28 = new TechTalk.SpecFlow.Table(new string[] { - "Test Bench Fields", - "Test Bench State[4]", + "Actual Lifetime [days]", + "Required Lifetime [years]", + "Actual Drained [%]", "Comment"}); table28.AddRow(new string[] { - "5", - "21", - "Test bench preadjustment succeeded"}); -#line 551 + "90", + "20.0", + "1.0", + "Remaining lifetime as required"}); +#line 577 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table28, "And "); #line hidden TechTalk.SpecFlow.Table table29 = new TechTalk.SpecFlow.Table(new string[] { - "Test Bench Fields", - "Test Bench State[5]", + "Assembly Months before Now", + "Max Storage Months", "Comment"}); table29.AddRow(new string[] { - "6", - "30", - "Test bench calibration succeeded"}); -#line 555 + "-3.0", + "3.0", + "Storage months in range"}); +#line 581 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + "", ((string)(null)), table29, "And "); #line hidden TechTalk.SpecFlow.Table table30 = new TechTalk.SpecFlow.Table(new string[] { + "Test Bench Fields", + "Test Bench State[4]", + "Comment"}); + table30.AddRow(new string[] { + "5", + "21", + "Test bench preadjustment succeeded"}); +#line 585 +testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + + "", ((string)(null)), table30, "And "); +#line hidden + TechTalk.SpecFlow.Table table31 = new TechTalk.SpecFlow.Table(new string[] { + "Test Bench Fields", + "Test Bench State[5]", + "Comment"}); + table31.AddRow(new string[] { + "6", + "30", + "Test bench calibration succeeded"}); +#line 589 +testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + + "", ((string)(null)), table31, "And "); +#line hidden + TechTalk.SpecFlow.Table table32 = new TechTalk.SpecFlow.Table(new string[] { "Meter Calib Fact 1", "Meter Calib Fact 2", "Meter Calib Fact 3", @@ -2143,7 +2110,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "DB Calib Fact 2", "DB Calib Fact 3", "Comment"}); - table30.AddRow(new string[] { + table32.AddRow(new string[] { "10000", "20000", "30000", @@ -2151,11 +2118,11 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "20000", "30000", "Valid calib factors"}); -#line 559 +#line 593 testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + - "", ((string)(null)), table30, "And "); + "", ((string)(null)), table32, "And "); #line hidden - TechTalk.SpecFlow.Table table31 = new TechTalk.SpecFlow.Table(new string[] { + TechTalk.SpecFlow.Table table33 = new TechTalk.SpecFlow.Table(new string[] { "TestNo", "Kill EOL", "Kill Requ", @@ -2174,7 +2141,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "Kill RadioParam", "StatusReturn", "Comment"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "1", "-", "-", @@ -2193,7 +2160,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Okay", "Test sequence complete"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "2", "X", "-", @@ -2212,7 +2179,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill EOL generation"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "3", "-", "X", @@ -2231,7 +2198,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill requirement"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "4", "-", "-", @@ -2250,7 +2217,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill production order check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "5", "-", "-", @@ -2269,7 +2236,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill PcbId check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "6", "-", "-", @@ -2288,7 +2255,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill region check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "7", "-", "-", @@ -2307,7 +2274,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill LUT check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "8", "-", "-", @@ -2326,7 +2293,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill meter size check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "9", "-", "-", @@ -2345,7 +2312,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill FW check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "10", "-", "-", @@ -2364,7 +2331,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill battery load check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "11", "-", "-", @@ -2383,7 +2350,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill life time check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "12", "-", "-", @@ -2402,7 +2369,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill storage time check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "13", "-", "-", @@ -2421,7 +2388,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill preadjustment check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "14", "-", "-", @@ -2440,7 +2407,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill flow test check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "15", "-", "-", @@ -2459,7 +2426,7 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "-", "Failed", "Detected kill calibrations check"}); - table31.AddRow(new string[] { + table33.AddRow(new string[] { "16", "-", "-", @@ -2478,13 +2445,13 @@ testRunner.And("Input initializations for the test matrix and presets to pass th "X", "Failed", "Detected kill radio parameter"}); -#line 564 -testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table31, "And "); +#line 598 +testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table33, "And "); #line hidden -#line 583 +#line 617 testRunner.When("Execute the generic tests", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden -#line 584 +#line 618 testRunner.Then("Check the generic test results", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden } diff --git a/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj b/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj index cb76a4b1..69cf290b 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj +++ b/Common/Production/ProductionUiCordonel.UnitTests/ProductionUiCordonel.UnitTests.csproj @@ -27,10 +27,14 @@ - + + + - - + + + + diff --git a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs index edae2d01..aa04f810 100644 --- a/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs +++ b/Common/Production/ProductionUiCordonel.UnitTests/Steps/CommonProductionProcessSteps.cs @@ -813,6 +813,31 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps } } + /// + /// Change naming string to CSD Status + /// + /// + /// + /// + /// - Initial. + /// + private static CSDStatus GetCsdStatusReturnFromName(String strCsdStatusReturn) + { + switch (strCsdStatusReturn) + { + case "Blocked": + return CSDStatus.Blocked; + case "New": + return CSDStatus.New; + case "Known": + return CSDStatus.Known; + case "Released": + return CSDStatus.Released; + default: + return CSDStatus.Null; + } + } + /// /// Change EOLStatus enum to string /// @@ -878,6 +903,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// - Moved meter login for new test requirement and register restorers modification to /// . /// + /// + /// - Init register restorers. + /// + /// + /// - CSD parsing. + /// private void ReadTestTable(Table table) { // Generate list of tests out of the "Given" table and create test-cases @@ -886,7 +917,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps TestRequirement testCase; // Check if presets are required, if so copy all properties using the Json.Deserializer to create a // new object as deep copy!!! - if (_presetTestCase.Meter != null) + if (_presetTestCase.Meter != null) { if (string.IsNullOrEmpty(_presetTestCaseJson)) { @@ -894,10 +925,16 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps } // Create a new object with a deep copy of the _presetTestCase testCase = JsonConvert.DeserializeObject(_presetTestCaseJson); - + // Special meter properties which are not include in the deep copy ClassAccess.CopyAllProperties(testCase.Meter, _presetTestCase.Meter); + testCase.RegisterRestorer = new RegisterRestorer(testCase.Meter); + testCase.CalibCheckRegisterRestorer = new RegisterRestorer(testCase.Meter); + // Enable register compare even if not physically read from meter + testCase.RegisterRestorer.EnableCompareExternalSetRegisters(); + testCase.CalibCheckRegisterRestorer.EnableCompareExternalSetRegisters(); + // Login is needed for building the MeterAppListVersion and generating the accessible register list. // This register list will be used to check for valid ranges. testCase.Meter?.Login(); @@ -908,16 +945,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps testCase = NewTestRequirement(); } - //// Enable register compare even if not physically read from meter - //testCase.RegisterRestorer.RenewMeter(testCase.Meter); - //testCase.RegisterRestorer.EnableCompareExternalSetRegisters(); - //testCase.CalibCheckRegisterRestorer.RenewMeter(testCase.Meter); - //testCase.CalibCheckRegisterRestorer.EnableCompareExternalSetRegisters(); - - //// Login is needed for building the MeterAppListVersion and generating the accessible register list. - //// This register list will be used to check for valid ranges. - //testCase.Meter?.Login(); - // This is the multiple row test table defining individual test cases ReadTable(row, ref testCase); _testCases.Add(testCase); @@ -946,10 +973,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps _presetTestCase = NewTestRequirement(); } - //// Login is needed for building the MeterAppListVersion and generating the accessible register list. - //// This register list will be used to check for valid ranges. - //_presetTestCase.Meter?.Login(); - // A preset table is limited to exclusively one row, those settings will be used for every test of the // test-cases! ReadTable(table.Rows[0], ref _presetTestCase); @@ -1081,6 +1104,31 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps #endregion + #region ----------------------------------- Parse CSD ----------------------------------------------------- + + if (ParseInt(tableRow, "CSD ID", out strValue, out intValue)) + { + if (intValue != null) + parsedTableRow.ProductionRequirements.CSD.IdentId = (Int32)intValue; + } + + if (ParseString(tableRow, "CSD Name", out strValue)) + { + parsedTableRow.ProductionRequirements.CSD.Name = strValue; + } + + if (ParseString(tableRow, "CSD Code", out strValue)) + { + parsedTableRow.ProductionRequirements.CSD.Code = strValue; + } + + if (ParseString(tableRow, "CSD Status", out strValue)) + { + parsedTableRow.ProductionRequirements.CSD.Status = GetCsdStatusReturnFromName(strValue); + } + + #endregion + #region ----------------------------------- Parse PcbId --------------------------------------------------- if (ParseInt(tableRow, "Cordonel PcbId", out strValue, out intValue)) @@ -1761,6 +1809,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps /// /// - Init meter and enable change of values for register restorers. /// + /// + /// - CSD. + /// private static TestRequirement NewTestRequirement() { var testCase = new TestRequirement @@ -1776,6 +1827,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.UnitTests.Steps BatteryQuantity = 2 } }; + testCase.ProductionRequirements.CSD = new CordonelCSD(); testCase.RegisterRestorer = new RegisterRestorer(testCase.Meter); testCase.CalibCheckRegisterRestorer = new RegisterRestorer(testCase.Meter); // Enable register compare even if not physically read from meter diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs index eba8e874..16ae10b5 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs @@ -364,19 +364,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Validate CSD ------------------------------------------------- - eolStatus = ValidateCsd(out feedbackMsg); - if (EOLStatus.FAIL == eolStatus) + var statusReturn = ValidateCsd(out feedbackMsg); + if (StatusReturn.Failed == statusReturn) { ErrorMsgDispatcher(feedbackMsg); - return StatusReturn.Failed; + //return StatusReturn.Failed; + // Do not return immediately to avoid multiple special-requirements on multiple errors + erroneousSequenceStep = true; } - - if (EOLStatus.NA == eolStatus) + if (StatusReturn.Warning == statusReturn) { WarningMsgDispatcher(feedbackMsg); + warningSequenceStep = true; + } + if (StatusReturn.Okay == statusReturn) + { + SuccessMsgDispatcher(feedbackMsg); } - SuccessMsgDispatcher(feedbackMsg); ActualProcessProgress++; #endregion @@ -452,7 +457,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr #endregion #region ----------------------------------- Check Kitron Radio Signal Levels ------------------------------ - var statusReturn = CheckKitronRadioSignalLevels(out feedbackMsg); + statusReturn = CheckKitronRadioSignalLevels(out feedbackMsg); if (StatusReturn.Failed == statusReturn) { @@ -725,32 +730,19 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// /// - /// + /// /// - initial. /// - private EOLStatus ValidateCsd(out String feedbackMsg) + private StatusReturn ValidateCsd(out String feedbackMsg) { feedbackMsg = ""; - if (ProductionRequirements == null || EolProgress == null) + if (ProductionRequirements == null ) { feedbackMsg = Resources.StrErrorMsgProductionRequirements; - if (EolProgress != null) - EolProgress.RequirementRequestChecked = EOLStatus.FAIL; - return EOLStatus.FAIL; + return StatusReturn.Failed; } - var statusReturn = GenericChecks.ValidateCsd(ProductionRequirements, out feedbackMsg); - if (StatusReturn.Failed == statusReturn) - { - return EOLStatus.FAIL; - } - - if (StatusReturn.Warning == statusReturn) - { - return EOLStatus.NA; - } - - return EOLStatus.OK; + return GenericChecks.ValidateCsd(ProductionRequirements, out feedbackMsg); } /// diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs index 35333568..bdd78cc3 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs @@ -189,6 +189,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - Service SIRT verbose output and additional error handling and warning. /// + /// + /// - Exit with error if database content for RSSI cannot be loaded. + /// public override StatusReturn ExecuteProcess() { // This will force to reset all values, Sentinel and Prepare shipping will fail based on EOL Progress @@ -292,12 +295,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr } var ServicePorts = new List(); - if (sirtConfig.ServiceSirtComport433MHz != null && + if (sirtConfig.ServiceSirtComport433MHz != null && int.TryParse(sirtConfig.ServiceSirtComport433MHz.Replace("COM", ""), out var serviceSirtComport)) { ServicePorts.Add(serviceSirtComport); } - if (sirtConfig.ServiceSirtComport868MHz != null && + if (sirtConfig.ServiceSirtComport868MHz != null && int.TryParse(sirtConfig.ServiceSirtComport868MHz.Replace("COM", ""), out serviceSirtComport)) { ServicePorts.Add(serviceSirtComport); @@ -351,7 +354,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr // Clear the measurement as on a retry started from main control the old values will be displayed ClearRssiMeasurement(); // kick off RSSI test - StartRssiMeasurement(); + if (!StartRssiMeasurement(out var errorMsg)) + return SetTestFailed(errorMsg); // Exit if meanwhile cancellation is required if (CancellationToken.IsCancellationRequested) @@ -525,7 +529,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr private void UpdateUc() { _checkRadioUserControl.SetUi(new UcRadioCheck.UiContainer(_rssiPamSirtDbMin, _rssiSemiCordonelDbMin, - _rssiPamSirtMeasuredByCordonel, _rssiSemiCordonelMeasuredBySirt, _rssiPamSirtDbMax, _rssiSemiCordonelDbMax)); + _rssiPamSirtMeasuredByCordonel, _rssiSemiCordonelMeasuredBySirt, _rssiPamSirtDbMax, + _rssiSemiCordonelDbMax)); } /// @@ -535,8 +540,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - Initial /// - private void StartRssiMeasurement() + /// + /// - Exit with error if database content for RSSI cannot be loaded. + /// + private Boolean StartRssiMeasurement(out String errorMsg) { + errorMsg = ""; // disable all buttons during ongoing measurement process DisableAllButtons(); UpdateUc(); @@ -544,7 +553,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr try { ActualProcessProgress++; - GetRssiMinMaxValuesFromDb(_sirtBoxNr, Meter.OrderNumber); + if (!GetRssiMinMaxValuesFromDb(_sirtBoxNr, Meter.OrderNumber, out errorMsg)) + return false; SendPamListenSemi((Int32)_radioAddressCordonel, _rssiSirtComport, _radioEncryptionKey); UpdateUc(); ActualProcessProgress++; @@ -554,7 +564,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr _testFinished = true; Meter?.WriteLog(ex.Message); LogNewStatusMsg(Resources.StrErrorMsgRadioCheck); + return false; } + + return true; } /// @@ -675,8 +688,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr /// /// - Initial /// - private void GetRssiMinMaxValuesFromDb(Byte BoxNr, Int32 productionOrderNo) + /// + /// - Exit with error if database content for RSSI cannot be loaded. + /// + private Boolean GetRssiMinMaxValuesFromDb(Byte BoxNr, Int32 productionOrderNo, out String errorMsg) { + errorMsg = ""; try { if (_dataContainer != null) @@ -685,8 +702,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr var body = LocalWebRequest.GetRequest(url, 300000, out var httpStatus); if (httpStatus != HttpStatusCode.OK || string.IsNullOrEmpty(body)) { - ErrorMsgDispatcher(Resources.StrErrorMsgGetRadioRssiLimitsFromDb); - return; + errorMsg = Resources.StrErrorMsgGetRadioRssiLimitsFromDb; + return false; } var o = JObject.Parse(body); @@ -707,8 +724,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr catch (Exception ex) { Meter?.WriteLog(ex.Message); - ErrorMsgDispatcher(Resources.StrErrorMsgGetRadioRssiLimitsFromDb); + errorMsg = Resources.StrErrorMsgGetRadioRssiLimitsFromDb; + return false; } + + return true; } /// diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx index 91156e2f..d3e2743f 100644 --- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx +++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx @@ -689,7 +689,7 @@ FEHLER: CSD ist für die Production gesperrt - ERROR: CSD ist neu aber und für die Production gesperrt + ERROR: CSD ist neu aber für die Production gesperrt Erfolg: CSD ist zur Produktion freigegeben From 9d33456128631ae7e75c42d27a112592b7e60fd7 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Wed, 26 Nov 2025 15:34:44 +0100 Subject: [PATCH 13/13] ProductionUiCordonel: - allow CSDStatus.Known as valid with Warning msg --- .../ProductionProcesses/EolProcesses/CheckProductionState.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs index 16ae10b5..6a95f974 100644 --- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs +++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckProductionState.cs @@ -375,7 +375,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr if (StatusReturn.Warning == statusReturn) { WarningMsgDispatcher(feedbackMsg); - warningSequenceStep = true; + //TODO THW removed until 'CSDStatus.Released' is the only valid status + //warningSequenceStep = true; } if (StatusReturn.Okay == statusReturn) {