diff --git a/Common/.shared/SharedAssemblyInfo.cs b/Common/.shared/SharedAssemblyInfo.cs
index e04c1696..b35ecebf 100644
--- a/Common/.shared/SharedAssemblyInfo.cs
+++ b/Common/.shared/SharedAssemblyInfo.cs
@@ -14,5 +14,5 @@ using System.Reflection;
//[assembly: AssemblyVersion("1.2.*.0")]
-[assembly: AssemblyVersion("1.0.3.*")]
+[assembly: AssemblyVersion("2.2.0.*")]
[assembly: AssemblyFileVersion("1.3.0.10")]
\ No newline at end of file
diff --git a/Common/Common.sln.DotSettings.user b/Common/Common.sln.DotSettings.user
index 5b1490a2..eb584f9a 100644
--- a/Common/Common.sln.DotSettings.user
+++ b/Common/Common.sln.DotSettings.user
@@ -22,6 +22,9 @@
<Assembly Path="D:\Projekte\SENSUS_tfs_workspaces\WorkBenchV2\Main\Common\Ui\IrdaFunctionalTestApp\bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.dll" />
</AssemblyExplorer>
True
+ <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
+ <Solution />
+</SessionState>
<data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName>D:\Workspace\WorkBenchV2\Main\ZeroFlowTool\bin\Debug\GenesisDisplayTool.exe</FileName><WorkingDirectory>D:\Workspace\WorkBenchV2\Main\ZeroFlowTool\bin\Debug</WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="PerformanceInfo"><MeasureType>Sampling</MeasureType><MeterKind>Rdtsc</MeterKind><InjectInfo><SymbolSearch><SearchPaths /></SymbolSearch><Scope><PatternFilters /><DenyAttributeFilters /></Scope></InjectInfo></Info><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath></HostOptions></data>
<data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName IsNull="False"></FileName><WorkingDirectory IsNull="False"></WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="PerformanceInfo"><MeasureType>TracingInject</MeasureType><MeterKind>Rdtsc</MeterKind><InjectInfo><SymbolSearch><SearchPaths /></SymbolSearch><Scope><PatternFilters><Item /></PatternFilters><DenyAttributeFilters /></Scope></InjectInfo></Info><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath></HostOptions></data>
<data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName IsNull="False"></FileName><WorkingDirectory IsNull="False"></WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="TimelineInfo" /><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath><ReprofileDisableReason>LaunchedByReSharperUnitTestRunner</ReprofileDisableReason></HostOptions></data>
diff --git a/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs b/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs
index abee5a89..09038ef3 100644
--- a/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs
+++ b/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs
@@ -630,6 +630,11 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
///
/// - Doubling of sync byte in protocol behind sync byte itself implemented
///
+ ///
+ /// - RTS signal trial as MOXA sometimes takes two messages and combines these two one!
+ /// As the Genesis needs a separated wake-up message with a following delay before the
+ /// real payload message, this causes a lot of trouble.
+ ///
protected void PhysicalWrite(Byte[] txBuffer)
{
try
@@ -649,7 +654,11 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
}
}
}
+
+ _serialPort.RtsEnable = true;
_serialPort.Write(txByteList.ToArray(), 0, txByteList.Count);
+ _serialPort.RtsEnable = false;
+
OnRawRecordSendOut?.Invoke(this, new ListBytePortDataEventArgs(txByteList, DateTimeOffset.UtcNow));
}
diff --git a/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs b/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs
index 166fffb4..b1ec6ff1 100644
--- a/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs
+++ b/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs
@@ -22,15 +22,22 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
/// - wakeup burst pattern changed from 2 times 0xF0 to 4 times 0x01,
/// - required delay from 500µs to 1ms between wakeup burst and data.
///
+ ///
+ /// - Generated the required delay with an 8 Byte pattern, as MOXA interface collects data
+ /// and sends it in one burst, meaning it sends the wake up and payload without delay.
+ /// So including a pattern instead will force this delay. At 115.200 kBit/s a Byte of 8 Bit
+ /// one start and one stop step resulting in 10 bits with a Byte length of 86.8 µs. An 8
+ /// Byte pattern will generate a 694 µs delay.
+ ///
protected override void SpecificPortWrite(Byte[] tx)
{
- //send wake up burst with two 0xF0 byte
- //var wakeUpBurst = new Byte[] { 0xF0, 0xF0 };
+ //send wake up burst
var wakeUpBurst = new Byte[] { 0x01, 0x01, 0x01, 0x01 };
PhysicalWrite(wakeUpBurst);
- //delay at least 1ms
- Thread.Sleep(1);
+ //delay at least 500 µs
+ var delayPattern = new Byte[] { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+ PhysicalWrite(delayPattern);
//send the IrDA record
PhysicalWrite(tx);
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json b/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json
index d2daeafe..38b2c3fa 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json
@@ -2691,7 +2691,7 @@
"id": 16,
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"registers": {
"TxInterval": {
@@ -2712,7 +2712,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 15,
@@ -2741,7 +2741,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 3600,
@@ -2770,7 +2770,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 3,
@@ -2799,7 +2799,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 3,
@@ -2828,7 +2828,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 7,
@@ -2857,7 +2857,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 433,
@@ -2886,7 +2886,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -2915,7 +2915,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -2944,7 +2944,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 1,
@@ -2973,7 +2973,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3002,7 +3002,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3031,7 +3031,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3060,7 +3060,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3089,7 +3089,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3118,7 +3118,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"statictype": "static"
}
@@ -3142,7 +3142,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 25,
@@ -3171,7 +3171,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 360,
@@ -3200,7 +3200,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 2500,
@@ -3229,7 +3229,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 180,
@@ -3258,7 +3258,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 160,
@@ -3287,7 +3287,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 3,
@@ -3316,7 +3316,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 600,
@@ -3345,7 +3345,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 600,
@@ -3374,7 +3374,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 60,
@@ -3403,7 +3403,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3432,7 +3432,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3461,7 +3461,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 50,
@@ -3490,7 +3490,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 2,
@@ -3519,7 +3519,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 600,
@@ -3548,7 +3548,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 600,
@@ -3577,7 +3577,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 60,
@@ -3606,7 +3606,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 1,
@@ -3635,7 +3635,7 @@
"description": "An enumerator defining the currently active PulseWidth (0 ... 8 for non testmode values and 9 ... 15 for testmode)",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 4,
@@ -3664,7 +3664,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 1,
@@ -3693,7 +3693,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 1,
@@ -3722,7 +3722,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"statictype": "infrequentlyupdated"
}
@@ -3746,7 +3746,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"statictype": "infrequentlyupdated"
}
@@ -3770,7 +3770,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 207,
@@ -3799,7 +3799,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 60,
@@ -3828,7 +3828,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 29,
@@ -3857,7 +3857,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3886,7 +3886,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"statictype": "static"
}
@@ -3910,7 +3910,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"statictype": "static"
}
@@ -3934,7 +3934,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3963,7 +3963,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -3992,7 +3992,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4021,7 +4021,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4050,7 +4050,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4079,7 +4079,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 19,
@@ -4108,7 +4108,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4137,7 +4137,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 1,
@@ -4166,7 +4166,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"statictype": "dynamic"
}
@@ -4190,7 +4190,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4219,7 +4219,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 201335811,
@@ -4248,7 +4248,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 60,
@@ -4277,7 +4277,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 5,
@@ -4306,7 +4306,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 201335811,
@@ -4335,7 +4335,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 1,
@@ -4364,7 +4364,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4393,7 +4393,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4422,7 +4422,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 4,
@@ -4451,7 +4451,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 4,
@@ -4480,7 +4480,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4509,7 +4509,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4538,7 +4538,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 477
+ "last": 482
},
"values": {
"default": 0,
@@ -4567,7 +4567,7 @@
"description": "Lorem ipsum",
"version": {
"first": 412,
- "last": 477
+ "last": 482
},
"values": {
"default": 4320000,
@@ -4596,7 +4596,7 @@
"description": "Lorem ipsum",
"version": {
"first": 412,
- "last": 477
+ "last": 482
},
"values": {
"default": 1000,
@@ -4625,7 +4625,7 @@
"description": "Storage item for HistoricalErrorLimitCounters Reverse(1, hi) and Leak(0, lo)",
"version": {
"first": 437,
- "last": 477
+ "last": 482
},
"values": {
"default": 16711935,
@@ -4654,7 +4654,7 @@
"description": "Storage item for HistoricalErrorLimitCounters Magnet(3, hi) and Air(2, lo)",
"version": {
"first": 437,
- "last": 477
+ "last": 482
},
"values": {
"default": 16711935,
@@ -4683,7 +4683,7 @@
"description": "Storage item for HistoricalErrorLimitCounters PressureMin(5, hi) and PressureMax(4, lo)",
"version": {
"first": 437,
- "last": 477
+ "last": 482
},
"values": {
"default": 16711935,
@@ -4712,7 +4712,7 @@
"description": "Storage item for HistoricalErrorLimitCounters TempMin(7, hi) and TempMax(6, lo)",
"version": {
"first": 437,
- "last": 477
+ "last": 482
},
"values": {
"default": 16711935,
@@ -4746,7 +4746,7 @@
"id": 4,
"version": {
"first": 3,
- "last": 219
+ "last": 221
},
"registers": {
"Privilege": {
@@ -4767,7 +4767,7 @@
"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": 219
+ "last": 221
},
"values": {
"default": 0,
@@ -4796,7 +4796,7 @@
"description": "Password for logging in, requires 3 consecutive writes",
"version": {
"first": 3,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4820,7 +4820,7 @@
"description": "Remote file operations, use this to open a file on the meter, handle returned",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4844,7 +4844,7 @@
"description": "Remote file operations, use this to close a file on the meter",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4868,7 +4868,7 @@
"description": "Remote file operations, use this to read bytes from an open file",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4892,7 +4892,7 @@
"description": "Remote file operations, use this to write bytes to an open file",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4916,7 +4916,7 @@
"description": "Remote file operations, use this to seek within an open file",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4940,7 +4940,7 @@
"description": "Remote file operations, use this to determine position within an open file",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4964,7 +4964,7 @@
"description": "Remote file operations, use this to delete a file",
"version": {
"first": 20,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -4988,7 +4988,7 @@
"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": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -5012,7 +5012,7 @@
"description": "Returns a list of files in the filesystem that matches a string containing wildcards passed in",
"version": {
"first": 49,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -5036,7 +5036,7 @@
"description": "String containing the PCB serial number. Note, this can be read at any login level including 0",
"version": {
"first": 59,
- "last": 219
+ "last": 221
},
"statictype": "static"
}
@@ -5060,7 +5060,7 @@
"description": "Bitmask of login levels permitted to manipulate dangerous files",
"version": {
"first": 59,
- "last": 219
+ "last": 221
},
"statictype": "static"
}
@@ -5084,7 +5084,7 @@
"description": "Remote file operations, use this to flush write buffers to an open file",
"version": {
"first": 66,
- "last": 219
+ "last": 221
},
"statictype": "dynamic"
}
@@ -5193,7 +5193,7 @@
"id": 21,
"version": {
"first": 1,
- "last": 53
+ "last": 54
},
"registers": {
"EraseRMA": {
@@ -5214,7 +5214,7 @@
"description": "Writing TRUE to this register erases the RMA area",
"version": {
"first": 7,
- "last": 53
+ "last": 54
},
"statictype": "dynamic"
}
@@ -5238,7 +5238,7 @@
"description": "Write to this to force an update of some data. 0 - NDEF readings, 1 - NDEF details, 2 - RMA details",
"version": {
"first": 49,
- "last": 53
+ "last": 54
},
"statictype": "dynamic"
}
@@ -5312,7 +5312,7 @@
"id": 0,
"version": {
"first": 141,
- "last": 498
+ "last": 509
},
"registers": {
"TriggerUpgrade": {
@@ -5333,7 +5333,7 @@
"description": "Writing TRUE to this register internally calls SysTriggerUpgrade() then returns the result.",
"version": {
"first": 141,
- "last": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5357,7 +5357,7 @@
"description": "Writing an application id number allows the version number of that application to be read back.",
"version": {
"first": 150,
- "last": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5381,7 +5381,7 @@
"description": "A string reporting the PCB serial number, this string must be set using production equipment.",
"version": {
"first": 169,
- "last": 498
+ "last": 509
},
"values": {
"default": ""
@@ -5408,7 +5408,7 @@
"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": 498
+ "last": 509
},
"values": {
"default": ""
@@ -5435,7 +5435,7 @@
"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": 498
+ "last": 509
},
"values": {
"default": ""
@@ -5462,7 +5462,7 @@
"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": 498
+ "last": 509
},
"values": {
"default": ""
@@ -5489,7 +5489,7 @@
"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": 498
+ "last": 509
},
"values": {
"default": ""
@@ -5516,7 +5516,7 @@
"description": "The number of seconds since reboot.",
"version": {
"first": 176,
- "last": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5540,7 +5540,7 @@
"description": "The number of seconds since 01-Jan-2000.",
"version": {
"first": 176,
- "last": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5564,7 +5564,7 @@
"description": "A string reporting the product version string held in the system core binary.",
"version": {
"first": 196,
- "last": 498
+ "last": 509
},
"statictype": "static"
}
@@ -5588,7 +5588,7 @@
"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": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5612,7 +5612,7 @@
"description": "Writing an application id number allows the exit error number of that application to be read back.",
"version": {
"first": 258,
- "last": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5636,7 +5636,7 @@
"description": "Reports the instruction set of the hosting microprocessor in b8-15 and allocated platform number in b0-7.",
"version": {
"first": 265,
- "last": 498
+ "last": 509
},
"statictype": "static"
}
@@ -5660,7 +5660,7 @@
"description": "Writing an application id number allows the CRC of that application to be read back.",
"version": {
"first": 279,
- "last": 498
+ "last": 509
},
"statictype": "dynamic"
}
@@ -5684,7 +5684,7 @@
"description": "Bitfield of permissions releated to firmware upgrade",
"version": {
"first": 470,
- "last": 498
+ "last": 509
},
"statictype": "static"
}
@@ -5963,7 +5963,7 @@
"id": 18,
"version": {
"first": 4,
- "last": 107
+ "last": 108
},
"registers": {
"ILoopMaxFlowRate": {
@@ -6003,7 +6003,7 @@
"description": "The flow rate that gives max output on the current loop",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"statictype": "static"
}
@@ -6046,7 +6046,7 @@
"description": "Writing TRUE to this register stores the values of the other registers to the non-volatile memory",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"statictype": "dynamic"
}
@@ -6118,7 +6118,7 @@
"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": 107
+ "last": 108
},
"values": {
"default": 32000,
@@ -6195,7 +6195,7 @@
"description": "The way pulses are output on the two available channels. This is an enum of type pulse_mode_t.",
"version": {
"first": 98,
- "last": 107
+ "last": 108
},
"values": {
"default": 0,
@@ -6272,7 +6272,7 @@
"description": "The length of a pulse. This is an enum of type pulse_length_t.",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 4,
@@ -6325,7 +6325,7 @@
"description": "The units of flow rate to display on the LCD. An enum of type displayflowunits_t",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 4,
@@ -6378,7 +6378,7 @@
"description": "Position of the decimal point on the LCD for flow rate. An enum of type displayflowpoint_t",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 2,
@@ -6426,7 +6426,7 @@
"description": "The update rate for the current loop",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"statictype": "static"
}
@@ -6474,7 +6474,7 @@
"description": "Units for displaying temperature on the LCD. 0 – Celcius, 1 – Fahrenheit.",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 0,
@@ -6527,7 +6527,7 @@
"description": "Units for displaying pressure on the LCD. 0 – Mpa, 1 – PSI.",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 0,
@@ -6604,7 +6604,7 @@
"description": "Time between pressure measurements in milliseconds",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 60000,
@@ -6705,7 +6705,7 @@
"description": "Value in Pa to subtract from measured value to correct for atmospheric pressure",
"version": {
"first": 82,
- "last": 107
+ "last": 108
},
"values": {
"default": 0,
@@ -6758,7 +6758,7 @@
"description": "Whether there is a pressure sensor present",
"version": {
"first": 71,
- "last": 107
+ "last": 108
},
"values": {
"default": 0,
@@ -6787,7 +6787,7 @@
"description": "Write TRUE to trigger a pressure measurement, Read to get the latest measured value in Pa",
"version": {
"first": 65,
- "last": 107
+ "last": 108
},
"statictype": "dynamic"
}
@@ -6811,7 +6811,7 @@
"description": "Returns the latest flow rate. Write 0 to change scaling to internal scaling, 1 to change to display scaling",
"version": {
"first": 92,
- "last": 107
+ "last": 108
},
"statictype": "dynamic"
}
@@ -6835,7 +6835,7 @@
"description": "Generate some artificial pulses, used for testing",
"version": {
"first": 97,
- "last": 107
+ "last": 108
},
"values": {
"minimum": 0,
@@ -6863,7 +6863,7 @@
"description": "Generate some artificial pulses, used for testing",
"version": {
"first": 97,
- "last": 107
+ "last": 108
},
"values": {
"minimum": 0,
@@ -6891,7 +6891,7 @@
"description": "Boolean value for whether pulse output is to space the pulses evenly (TRUE) or grouped (FALSE)",
"version": {
"first": 98,
- "last": 107
+ "last": 108
},
"values": {
"default": 1,
@@ -6920,7 +6920,7 @@
"description": "The number of bits of fractional resolution in a pulse event",
"version": {
"first": 98,
- "last": 107
+ "last": 108
},
"values": {
"minimum": 0,
@@ -6929,6 +6929,30 @@
"statictype": "dynamic"
}
]
+ },
+ "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": 108
+ },
+ "statictype": "static"
+ }
+ ]
}
},
"status": {
@@ -7958,7 +7982,7 @@
"id": 15,
"version": {
"first": 7,
- "last": 605
+ "last": 606
},
"registers": {
"SampleRate": {
@@ -8027,7 +8051,7 @@
"description": "The rate in Hz that each GP30 takes measurements",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 2,
@@ -8075,7 +8099,7 @@
"description": "The rate in Hz that each GP30 takes measurements",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 2,
@@ -8099,7 +8123,7 @@
"description": "The rate in Hz that each GP30 takes measurements",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 2,
@@ -8152,7 +8176,7 @@
"description": "The first hit level in the upstream direction for channel 1, units of 0.88mV",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -8200,7 +8224,7 @@
"description": "The first hit level in the upstream direction for channel 1, units of 0.88mV",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -8224,7 +8248,7 @@
"description": "The first hit level in the upstream direction for channel 1, units of 0.88mV",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -8277,7 +8301,7 @@
"description": "The first hit level in the upstream direction for channel 2, units of 0.88mV",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -8325,7 +8349,7 @@
"description": "The first hit level in the upstream direction for channel 2, units of 0.88mV",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -8349,7 +8373,7 @@
"description": "The first hit level in the upstream direction for channel 2, units of 0.88mV",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -8402,7 +8426,7 @@
"description": "The first hit level in the upstream direction for channel 3, units of 0.88mV",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -8450,7 +8474,7 @@
"description": "The first hit level in the upstream direction for channel 3, units of 0.88mV",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -8474,7 +8498,7 @@
"description": "The first hit level in the upstream direction for channel 3, units of 0.88mV",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -8527,7 +8551,7 @@
"description": "The first hit level in the downstream direction for channel 1, units of 0.88mV",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -8575,7 +8599,7 @@
"description": "The first hit level in the downstream direction for channel 1, units of 0.88mV",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -8599,7 +8623,7 @@
"description": "The first hit level in the downstream direction for channel 1, units of 0.88mV",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -8652,7 +8676,7 @@
"description": "The first hit level in the downstream direction for channel 2, units of 0.88mV",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -8700,7 +8724,7 @@
"description": "The first hit level in the downstream direction for channel 2, units of 0.88mV",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -8724,7 +8748,7 @@
"description": "The first hit level in the downstream direction for channel 2, units of 0.88mV",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -8777,7 +8801,7 @@
"description": "The first hit level in the downstream direction for channel 3, units of 0.88mV",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -8825,7 +8849,7 @@
"description": "The first hit level in the downstream direction for channel 3, units of 0.88mV",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -8849,7 +8873,7 @@
"description": "The first hit level in the downstream direction for channel 3, units of 0.88mV",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -8902,7 +8926,7 @@
"description": "The hit number to consider as the first hit",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 6,
@@ -8950,7 +8974,7 @@
"description": "The hit number to consider as the first hit",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 6,
@@ -8974,7 +8998,7 @@
"description": "The hit number to consider as the first hit",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 6,
@@ -9027,7 +9051,7 @@
"description": "Where to stop running the amplitude peak detection",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 19,
@@ -9075,7 +9099,7 @@
"description": "Where to stop running the amplitude peak detection",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 19,
@@ -9099,7 +9123,7 @@
"description": "Where to stop running the amplitude peak detection",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 19,
@@ -9152,7 +9176,7 @@
"description": "The number of pulses to fire for a measurement",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 17,
@@ -9200,7 +9224,7 @@
"description": "The number of pulses to fire for a measurement",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 17,
@@ -9224,7 +9248,7 @@
"description": "The number of pulses to fire for a measurement",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 17,
@@ -9277,7 +9301,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": -6,
@@ -9325,7 +9349,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": -6,
@@ -9349,7 +9373,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": -6,
@@ -9402,7 +9426,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -9450,7 +9474,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -9474,7 +9498,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -9551,7 +9575,7 @@
"description": "The meter pipe size",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 1,
@@ -9599,7 +9623,7 @@
"description": "The meter pipe size",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 1,
@@ -9623,7 +9647,7 @@
"description": "The meter pipe size",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 1,
@@ -9700,7 +9724,7 @@
"description": "The calibration factor for ultrasonic channel 1",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 15625,
@@ -9748,7 +9772,7 @@
"description": "The calibration factor for ultrasonic channel 1",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 15625,
@@ -9772,7 +9796,7 @@
"description": "The calibration factor for ultrasonic channel 1",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 15625,
@@ -9849,7 +9873,7 @@
"description": "The calibration factor for ultrasonic channel 2",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 15625,
@@ -9897,7 +9921,7 @@
"description": "The calibration factor for ultrasonic channel 2",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 15625,
@@ -9921,7 +9945,7 @@
"description": "The calibration factor for ultrasonic channel 2",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 15625,
@@ -9998,7 +10022,7 @@
"description": "The calibration factor for ultrasonic channel 3",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 15625,
@@ -10046,7 +10070,7 @@
"description": "The calibration factor for ultrasonic channel 3",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 15625,
@@ -10070,7 +10094,7 @@
"description": "The calibration factor for ultrasonic channel 3",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 15625,
@@ -10147,7 +10171,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -10195,7 +10219,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -10219,7 +10243,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -10296,7 +10320,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -10344,7 +10368,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -10368,7 +10392,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -10445,7 +10469,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -10493,7 +10517,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -10517,7 +10541,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -10546,7 +10570,7 @@
"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": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -10584,7 +10608,7 @@
"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": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -10603,7 +10627,7 @@
"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": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -10646,7 +10670,7 @@
"description": "Write 1 to reset all accumulated volume to zero",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -10684,7 +10708,7 @@
"description": "Write 1 to reset all accumulated volume to zero",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -10703,7 +10727,7 @@
"description": "Write 1 to reset all accumulated volume to zero",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -10751,7 +10775,7 @@
"description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -10799,7 +10823,7 @@
"description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -10823,7 +10847,7 @@
"description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -10900,7 +10924,7 @@
"description": "The type of data output by the green LED",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -10948,7 +10972,7 @@
"description": "The type of data output by the green LED",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -10972,7 +10996,7 @@
"description": "The type of data output by the green LED",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -11001,7 +11025,7 @@
"description": "Write 1 to store calibration values to non-volatile storage. Read back for status",
"version": {
"first": 54,
- "last": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -11039,7 +11063,7 @@
"description": "Write 1 to store calibration values to non-volatile storage. Read back for status",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -11058,7 +11082,7 @@
"description": "Write 1 to store calibration values to non-volatile storage. Read back for status",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -11082,7 +11106,7 @@
"description": "The forward flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 54,
- "last": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -11120,7 +11144,7 @@
"description": "The forward flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -11139,7 +11163,7 @@
"description": "The forward flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -11163,7 +11187,7 @@
"description": "The reverse flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 54,
- "last": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -11201,7 +11225,7 @@
"description": "The reverse flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -11220,7 +11244,7 @@
"description": "The reverse flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -11268,7 +11292,7 @@
"description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 200,
@@ -11316,7 +11340,7 @@
"description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 200,
@@ -11340,7 +11364,7 @@
"description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 200,
@@ -11393,7 +11417,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 3932160,
@@ -11441,7 +11465,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 3932160,
@@ -11465,7 +11489,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 3932160,
@@ -11518,7 +11542,7 @@
"description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -11566,7 +11590,7 @@
"description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -11590,7 +11614,7 @@
"description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -11643,7 +11667,7 @@
"description": "The net volume in ml that must flow in one direction for the forward arrow to be set",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 5000000,
@@ -11691,7 +11715,7 @@
"description": "The net volume in ml that must flow in one direction for the forward arrow to be set",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 5000000,
@@ -11715,7 +11739,7 @@
"description": "The net volume in ml that must flow in one direction for the forward arrow to be set",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 5000000,
@@ -11768,7 +11792,7 @@
"description": "The fire buffer within the GP30 on channel 1 to be used",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 1,
@@ -11816,7 +11840,7 @@
"description": "The fire buffer within the GP30 on channel 1 to be used",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 1,
@@ -11840,7 +11864,7 @@
"description": "The fire buffer within the GP30 on channel 1 to be used",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 1,
@@ -11893,7 +11917,7 @@
"description": "The fire buffer within the GP30 on channel 2 to be used",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 1,
@@ -11941,7 +11965,7 @@
"description": "The fire buffer within the GP30 on channel 2 to be used",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 1,
@@ -11965,7 +11989,7 @@
"description": "The fire buffer within the GP30 on channel 2 to be used",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 1,
@@ -12018,7 +12042,7 @@
"description": "The fire buffer within the GP30 on channel 3 to be used",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 1,
@@ -12066,7 +12090,7 @@
"description": "The fire buffer within the GP30 on channel 3 to be used",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 1,
@@ -12090,7 +12114,7 @@
"description": "The fire buffer within the GP30 on channel 3 to be used",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 1,
@@ -12138,7 +12162,7 @@
"description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -12176,7 +12200,7 @@
"description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -12195,7 +12219,7 @@
"description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -12219,7 +12243,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -12267,7 +12291,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -12291,7 +12315,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -12344,7 +12368,7 @@
"description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 309237,
@@ -12392,7 +12416,7 @@
"description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 309237,
@@ -12416,7 +12440,7 @@
"description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 309237,
@@ -12469,7 +12493,7 @@
"description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 24739011,
@@ -12517,7 +12541,7 @@
"description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 24739011,
@@ -12541,7 +12565,7 @@
"description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 24739011,
@@ -12594,7 +12618,7 @@
"description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 13743895,
@@ -12642,7 +12666,7 @@
"description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 13743895,
@@ -12666,7 +12690,7 @@
"description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 13743895,
@@ -12719,7 +12743,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 1",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -12767,7 +12791,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 1",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -12791,7 +12815,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 1",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -12844,7 +12868,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 2",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -12892,7 +12916,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 2",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -12916,7 +12940,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 2",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -12969,7 +12993,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 3",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -13017,7 +13041,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 3",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -13041,7 +13065,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 3",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -13094,7 +13118,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 4,
@@ -13142,7 +13166,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 4,
@@ -13166,7 +13190,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 4,
@@ -13219,7 +13243,7 @@
"description": "Minimum absolute first hit level value",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 20,
@@ -13267,7 +13291,7 @@
"description": "Minimum absolute first hit level value",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 20,
@@ -13291,7 +13315,7 @@
"description": "Minimum absolute first hit level value",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 20,
@@ -13344,7 +13368,7 @@
"description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 16,
@@ -13392,7 +13416,7 @@
"description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 16,
@@ -13416,7 +13440,7 @@
"description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 16,
@@ -13469,7 +13493,7 @@
"description": "The period (in seconds) between first hit level updates",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 10,
@@ -13517,7 +13541,7 @@
"description": "The period (in seconds) between first hit level updates",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 10,
@@ -13541,7 +13565,7 @@
"description": "The period (in seconds) between first hit level updates",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 10,
@@ -13594,7 +13618,7 @@
"description": "The time (in seconds) to maintain zero flow after leaving empty pipe",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 30,
@@ -13642,7 +13666,7 @@
"description": "The time (in seconds) to maintain zero flow after leaving empty pipe",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 30,
@@ -13666,7 +13690,7 @@
"description": "The time (in seconds) to maintain zero flow after leaving empty pipe",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 30,
@@ -13719,7 +13743,7 @@
"description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -13767,7 +13791,7 @@
"description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -13791,7 +13815,7 @@
"description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -13844,7 +13868,7 @@
"description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -13892,7 +13916,7 @@
"description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -13916,7 +13940,7 @@
"description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -13969,7 +13993,7 @@
"description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -14017,7 +14041,7 @@
"description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -14041,7 +14065,7 @@
"description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -14093,7 +14117,7 @@
"description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius",
"version": {
"first": 205,
- "last": 295
+ "last": 302
},
"values": {
"minimum": 0,
@@ -14139,7 +14163,7 @@
"description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"minimum": 0,
@@ -14162,7 +14186,7 @@
"description": "Write the current temperature to this register to trigger a calibration step. In units of 2^-12 degrees celcius",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"minimum": 0,
@@ -14209,7 +14233,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"statictype": "dynamic"
},
@@ -14247,7 +14271,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"statictype": "dynamic"
},
@@ -14266,7 +14290,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"statictype": "dynamic"
}
@@ -14314,7 +14338,7 @@
"description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -14362,7 +14386,7 @@
"description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -14386,7 +14410,7 @@
"description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -14439,7 +14463,7 @@
"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": 295
+ "last": 302
},
"values": {
"default": 0,
@@ -14487,7 +14511,7 @@
"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": 508
+ "last": 509
},
"values": {
"default": 0,
@@ -14511,7 +14535,7 @@
"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": 605
+ "last": 606
},
"values": {
"default": 0,
@@ -14564,7 +14588,7 @@
"description": "Maximum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 2936012800,
@@ -14612,7 +14636,7 @@
"description": "Maximum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 2936012800,
@@ -14636,7 +14660,7 @@
"description": "Maximum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 2936012800,
@@ -14689,7 +14713,7 @@
"description": "Minimum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 209715200,
@@ -14737,7 +14761,7 @@
"description": "Minimum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 209715200,
@@ -14761,7 +14785,7 @@
"description": "Minimum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 209715200,
@@ -14814,7 +14838,7 @@
"description": "Number of hard errors to allow before declaring a fatal error",
"version": {
"first": 268,
- "last": 295
+ "last": 302
},
"values": {
"default": 4,
@@ -14862,7 +14886,7 @@
"description": "Number of hard errors to allow before declaring a fatal error",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 4,
@@ -14886,7 +14910,7 @@
"description": "Number of hard errors to allow before declaring a fatal error",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 4,
@@ -14915,7 +14939,7 @@
"description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)",
"version": {
"first": 273,
- "last": 295
+ "last": 302
},
"values": {
"default": 1,
@@ -14963,7 +14987,7 @@
"description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 1,
@@ -14987,7 +15011,7 @@
"description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 1,
@@ -15016,7 +15040,7 @@
"description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units",
"version": {
"first": 280,
- "last": 295
+ "last": 302
},
"values": {
"default": 109951,
@@ -15064,7 +15088,7 @@
"description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units",
"version": {
"first": 500,
- "last": 508
+ "last": 509
},
"values": {
"default": 109951,
@@ -15088,7 +15112,7 @@
"description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 109951,
@@ -15117,7 +15141,7 @@
"description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius",
"version": {
"first": 289,
- "last": 295
+ "last": 302
},
"values": {
"default": 8192,
@@ -15165,7 +15189,7 @@
"description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius",
"version": {
"first": 504,
- "last": 508
+ "last": 509
},
"values": {
"default": 8192,
@@ -15189,7 +15213,7 @@
"description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 8192,
@@ -15218,7 +15242,7 @@
"description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units",
"version": {
"first": 289,
- "last": 295
+ "last": 302
},
"values": {
"default": 137438,
@@ -15266,7 +15290,7 @@
"description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units",
"version": {
"first": 504,
- "last": 508
+ "last": 509
},
"values": {
"default": 137438,
@@ -15290,7 +15314,7 @@
"description": "The maximum range of delta time of flight between channels before one is rejected. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 605
+ "last": 606
},
"values": {
"default": 137438,
@@ -15300,6 +15324,59 @@
"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": 302
+ },
+ "statictype": "dynamic"
+ }
+ ]
+ },
+ "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": 302
+ },
+ "values": {
+ "default": 0,
+ "minimum": 0,
+ "maximum": 1
+ },
+ "statictype": "static"
+ }
+ ]
}
},
"status": {
@@ -15597,6 +15674,36 @@
"action": "Lorem Ipsum",
"description": "Lorem Ipsum",
"id": 58
+ },
+ "LOOKUP_FILE_LOADED": {
+ "action": "Lorem Ipsum",
+ "description": "Lorem Ipsum",
+ "id": 59
+ },
+ "LOOKUP_FILE_METERSIZE_CHANGED": {
+ "action": "Lorem Ipsum",
+ "description": "Lorem Ipsum",
+ "id": 60
+ },
+ "LOOKUP_FILE_FAILURE": {
+ "action": "Lorem Ipsum",
+ "description": "Lorem Ipsum",
+ "id": 61
+ },
+ "LOOKUP_FILE_INVALID": {
+ "action": "Lorem Ipsum",
+ "description": "Lorem Ipsum",
+ "id": 62
+ },
+ "LOOKUP_CRC_MISMATCH": {
+ "action": "Lorem Ipsum",
+ "description": "Lorem Ipsum",
+ "id": 63
+ },
+ "LOOKUP_FILE_UNKNOWN_METERSIZE": {
+ "action": "Lorem Ipsum",
+ "description": "Lorem Ipsum",
+ "id": 64
}
}
},
@@ -15604,7 +15711,7 @@
"id": 20,
"version": {
"first": 10,
- "last": 198
+ "last": 200
},
"registers": {
"PulseReportRate": {
@@ -15673,7 +15780,7 @@
"description": "The rate at which pulse reports are sent to the IrDA pulse adapter",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"default": 0,
@@ -15774,7 +15881,7 @@
"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": 198
+ "last": 200
},
"values": {
"default": 3,
@@ -15872,7 +15979,7 @@
"description": "The present sequence number used in pulse reports",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"minimum": 0,
@@ -15938,7 +16045,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"statictype": "dynamic"
}
@@ -16034,7 +16141,7 @@
"description": "The number of digits to use for AMR",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"default": 8,
@@ -16111,7 +16218,7 @@
"description": "The offset of the AMR smallest digit from the right (always negative)",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"default": 0,
@@ -16188,7 +16295,7 @@
"description": "A bitfield of the optional fields being used for UI-1203",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"default": 268,
@@ -16241,7 +16348,7 @@
"description": "A timestamp of meter manufacture in seconds since 1/1/2000 00:00:00 UTC",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"default": 0,
@@ -16318,7 +16425,7 @@
"description": "Whether or not to display AMR digits on the screen",
"version": {
"first": 161,
- "last": 198
+ "last": 200
},
"values": {
"default": 0,
@@ -16347,7 +16454,7 @@
"description": "The serial number of the current pulse adapter",
"version": {
"first": 193,
- "last": 198
+ "last": 200
},
"statictype": "infrequentlyupdated"
}
@@ -16371,7 +16478,7 @@
"description": "The firmware version of the current pulse adapter",
"version": {
"first": 193,
- "last": 198
+ "last": 200
},
"statictype": "infrequentlyupdated"
}
@@ -16415,7 +16522,7 @@
"id": 23,
"version": {
"first": 41,
- "last": 98
+ "last": 99
},
"registers": {
"StoreConfiguration": {
@@ -16436,7 +16543,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 41,
- "last": 98
+ "last": 99
},
"statictype": "dynamic"
}
@@ -16460,7 +16567,7 @@
"description": "Bitmask of enabled predefined alarms",
"version": {
"first": 41,
- "last": 98
+ "last": 99
},
"values": {
"default": 561047,
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs
new file mode 100644
index 00000000..9763ef1d
--- /dev/null
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs
@@ -0,0 +1,53 @@
+namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
+{
+ ///
+ /// Genesis meter lookup table update states
+ ///
+ public enum LutUpdateState
+ {
+ ///
+ /// Metrology lookup table update state Idle
+ ///
+ Idle,
+ ///
+ /// Single step failed
+ ///
+ StepFailed,
+ ///
+ /// Entire process failed
+ ///
+ UpdateFailed,
+ ///
+ /// Start initial FW update
+ ///
+ StartInitial,
+ ///
+ /// Repeat update
+ ///
+ RepeatLutUpdate,
+ ///
+ /// Upload lookup table file
+ ///
+ UploadLutFile,
+ ///
+ /// Download lookup table file
+ ///
+ DownloadLutFile,
+ ///
+ /// Compare lookup table file
+ ///
+ CompareLutFile,
+ ///
+ /// Download the CRC, the meter size and store calibration as preparation for the lookup table
+ ///
+ PrepareLutDownload,
+ ///
+ /// Erase lookup table file
+ ///
+ EraseLutFile,
+ ///
+ /// Delimiter for list
+ ///
+ LutUpdateStateListDelimiter
+ }
+}
\ No newline at end of file
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj b/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj
index 4c35b507..a5438823 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj
@@ -66,11 +66,13 @@
Properties\SharedAssemblyInfo.cs
+
+
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs
new file mode 100644
index 00000000..2a98d1f5
--- /dev/null
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs
@@ -0,0 +1,553 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using Xylem.Common.Hardware.WaterMeter.Genesis.Applications;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Properties;
+using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
+using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
+using Xylem.Common.Utils.ProcessExec;
+using Xylem.Common.Utils.ProcessExec.EventArguments;
+
+namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
+{
+ ///
+ /// Meter lookup table for metrology update procedure
+ ///
+ public class MeterLutUpdate : IProcessState
+ {
+ #region Variables
+
+ ///
+ /// Port scan result event for message dispatcher to caller
+ ///
+ public event EventHandler OnProcessUpdate;
+
+ //disk and name of lookup file
+ private const String StrLutFileName = "1\\mettbl";
+
+ //disk and name of lookup file
+ private const String StrLutBackupFileName = "1\\mettbl_b";
+
+ // string as identifier for Genesis lookup table
+ private const String TablesFileMagic = "GEN_LUT";
+
+ private const String StrProcessLut = "Processing metrology lookup table";
+
+ //trigger update retries
+ private const Int32 RegisterWriteRetries = 2;
+
+ //update reties for files
+ private const Int32 FileWriteRetries = 0;
+
+ //retry of entire update procedure
+ private const Int32 UpdateProcedureRetries = 5;
+
+ //threshold to increase the file write timing
+ private const Int32 IncreaseTimeoutUpdateProcedureRetries = 4;
+
+ private Int32 _updateProcedureRetryCtr;
+
+ private GenesisMeter _genesisMeter;
+ private MeterFile _meterFile;
+
+ // Text for caller to inform about actual process being carried out
+ private String _actualOperation;
+ private LutUpdateState _lutUpdateState;
+
+ // Process counter for caller to monitor actual progress
+ private Int32 _processedBytesCtr;
+ private Int32 _overallBytesCtr;
+
+ // Look up table file
+ private Int32 _lutCrc;
+ private Byte _meterSize;
+ public FileApplications LutFile;
+
+
+ #endregion
+
+ #region Events
+
+ ///
+ /// Process update event
+ ///
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public virtual void ProcessUpdate_Event(Object sender, ProcessExecEventArgs e)
+ {
+ // copy text from overall messages to actual, because this is from sub-routine
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(StrProcessLut,
+ OverallProcessCtrPercent, _actualOperation, e.OverallProcessPercent));
+ }
+
+ #endregion
+
+ #region Information
+
+ ///
+ /// Process counter in percent
+ ///
+ ///
+ /// - Initial
+ ///
+ public Double OverallProcessCtrPercent
+ {
+ get
+ {
+ var processFileBytes = _meterFile?.ProcessedBytesCtr ?? 0;
+ return 100.0 * (processFileBytes + _processedBytesCtr) /
+ (_overallBytesCtr > 0 ? _overallBytesCtr : 1);
+ }
+ }
+
+ ///
+ /// Single file process counter in percent
+ ///
+ ///
+ /// - Initial
+ ///
+ public Double SingleFileProcessCtrPercent => _meterFile?.ProcessCtrPercent ?? 0;
+
+ #endregion
+
+ #region CtorAssignment
+
+ ///
+ /// Ctor
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public MeterLutUpdate(GenesisMeter genesisMeter)
+ {
+ if (genesisMeter == null) return;
+ AssignGenesis(genesisMeter);
+ }
+
+ ///
+ /// Assign new genesis
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public void AssignGenesis(GenesisMeter genesisMeter)
+ {
+ _genesisMeter = genesisMeter;
+ _actualOperation = "";
+ LutFile = null;
+ _lutUpdateState = LutUpdateState.Idle;
+ }
+
+ ///
+ /// Dispose
+ ///
+ public void Dispose()
+ {
+ if (_meterFile == null) return;
+ _meterFile.OnProcessUpdate -= ProcessUpdate_Event;
+ _meterFile = null;
+ }
+
+ #endregion
+
+ #region ProcessInformation
+
+ ///
+ /// Returns the actual file in process for update
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public String GetActualOperation()
+ {
+ return _actualOperation;
+ }
+
+ ///
+ /// Returns the LUT Update state
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public String GetLutUpdateStateOperation()
+ {
+ return _lutUpdateState == LutUpdateState.Idle ? "" : "Downloading...";
+ }
+ #endregion
+
+ #region Actions
+
+ ///
+ /// Try to re-establish the file system, therefor logout to close all open files
+ /// and login again.
+ ///
+ ///
+ /// - Initial
+ ///
+ ///
+ /// - Enable auto-logon added
+ ///
+ ///
+ /// - Removed auto-logon
+ ///
+ public void ReestablishMeterFileSystem()
+ {
+ _genesisMeter?.Logout();
+ _genesisMeter?.ReLogin();
+ }
+
+ private Boolean _stopUpdateProcess;
+
+ ///
+ /// Stop the update process
+ ///
+ public Boolean StopUpdateProcess
+ {
+ get => _stopUpdateProcess;
+ set
+ {
+ _stopUpdateProcess = value;
+ if (_meterFile != null)
+ {
+ _meterFile.StopProcess = value;
+ }
+
+ _lutUpdateState = LutUpdateState.UpdateFailed;
+ }
+ }
+
+ ///
+ /// Update meter lookup table
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public Boolean UpdateMeterLut()
+ {
+ if (!UpdatePreparation())
+ {
+ return false;
+ }
+
+ _lutUpdateState = LutUpdateState.StartInitial;
+ while (_lutUpdateState != LutUpdateState.Idle && !StopUpdateProcess)
+ {
+ LutUpdateStateMachine();
+ }
+
+ return ExitPreparation(true);
+ }
+
+ ///
+ /// Upload lookup table file and compare with the loaded from file system
+ ///
+ ///
+ /// - Initial
+ ///
+ public Boolean VerifyLutFile()
+ {
+ if (!UpdatePreparation())
+ {
+ return false;
+ }
+
+ return ExitPreparation(true);
+ }
+
+ ///
+ /// Reset lookup table update process and all lists and counters
+ ///
+ ///
+ /// - Initial
+ ///
+ public void ResetAll()
+ {
+ LutFile = null;
+ //remove the update stop action
+ StopUpdateProcess = false;
+
+ //reset all counters
+ _processedBytesCtr = 0;
+ _overallBytesCtr = 0;
+ _updateProcedureRetryCtr = 0;
+
+ //set state machine for automatic FW update
+ _lutUpdateState = LutUpdateState.Idle;
+ _actualOperation = "";
+
+ //logout/login/auto-login
+ ReestablishMeterFileSystem();
+ _genesisMeter?.Logout();
+ }
+
+ ///
+ /// Common update preparation and check
+ ///
+ ///
+ /// - Initial
+ ///
+ public Boolean UpdatePreparation()
+ {
+ _actualOperation = "";
+ _lutUpdateState = LutUpdateState.Idle;
+
+ _meterFile = new MeterFile(_genesisMeter);
+ if (_meterFile != null) _meterFile.OnProcessUpdate += ProcessUpdate_Event;
+ _genesisMeter?.ReLogin();
+ _genesisMeter?.SetProcessState(DisplayCodes.FwUpdateActive, false);
+
+ if (_genesisMeter == null || !_genesisMeter.IsLoggedOn)
+ {
+ return false;
+ }
+
+ //set default timeout for file write operation
+ _meterFile.SetDefaultFileWriteTimeout();
+
+ //remove the update stop action
+ StopUpdateProcess = false;
+ return true;
+ }
+
+ ///
+ /// Common exit routine
+ ///
+ ///
+ /// - Initial
+ ///
+ public Boolean ExitPreparation(Boolean returnValue)
+ {
+ if (_meterFile != null) _meterFile.OnProcessUpdate -= ProcessUpdate_Event;
+ _meterFile = null;
+ ReestablishMeterFileSystem();
+ _genesisMeter?.Logout();
+ if (!StopUpdateProcess)
+ {
+ return returnValue;
+ }
+
+ _actualOperation = Resources.StrWaiting;
+ return false;
+ }
+
+ #endregion
+
+ #region StateMachine
+
+ ///
+ /// State machine for metrology lookup table update process
+ ///
+ ///
+ /// - Initial
+ ///
+ private void LutUpdateStateMachine()
+ {
+ switch (_lutUpdateState)
+ {
+ case LutUpdateState.Idle:
+ break;
+
+ case LutUpdateState.StartInitial:
+ _updateProcedureRetryCtr = 0;
+ _lutUpdateState = LutUpdateState.PrepareLutDownload;
+ break;
+
+ case LutUpdateState.PrepareLutDownload:
+ _lutUpdateState = PrepareLutDownload() ? LutUpdateState.DownloadLutFile : LutUpdateState.StepFailed;
+ break;
+
+ case LutUpdateState.DownloadLutFile:
+ _lutUpdateState = DownloadLutFile() ? LutUpdateState.Idle : LutUpdateState.StepFailed;
+ break;
+
+ case LutUpdateState.StepFailed:
+ _processedBytesCtr = 0;
+ _overallBytesCtr = 0;
+
+ _lutUpdateState = _updateProcedureRetryCtr++ < UpdateProcedureRetries
+ ? LutUpdateState.RepeatLutUpdate
+ : LutUpdateState.UpdateFailed;
+ break;
+
+ case LutUpdateState.RepeatLutUpdate:
+ _processedBytesCtr = 0;
+ _overallBytesCtr = 0;
+ _lutUpdateState = LutUpdateState.DownloadLutFile;
+ if (_updateProcedureRetryCtr >= IncreaseTimeoutUpdateProcedureRetries)
+ {
+ _meterFile?.SetExtremeFileWriteTimeout();
+ }
+
+ break;
+
+ case LutUpdateState.UpdateFailed:
+ _processedBytesCtr = 0;
+ _overallBytesCtr = 0;
+ StopUpdateProcess = true;
+ _lutUpdateState = LutUpdateState.Idle;
+ break;
+
+ case LutUpdateState.UploadLutFile:
+ break;
+
+ case LutUpdateState.CompareLutFile:
+ break;
+
+ case LutUpdateState.EraseLutFile:
+ break;
+
+ default:
+ _lutUpdateState = LutUpdateState.Idle;
+ break;
+
+ }
+ }
+
+ #endregion
+
+ #region LutFile
+ ///
+ /// Check the content of the metrology lookup table file:
+ /// - begins with "APP>",
+ /// - Application ID at position 0x28,
+ /// - CRC at position 0x04 LSB, 0x05 MSB
+ /// - Version at position 0x06 and 0x07 decimal
+ /// - Build upgrade meter file name
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ private static Boolean ValidateLutFile()
+ {
+ //var fileApp = new FileApplications();
+ //fileApp.AppId = fileApp.BinData[FileAppAppIdIndex];
+ //fileApp.Crc = (UInt16)(fileApp.BinData[FileAppCrcIndex] + (fileApp.BinData[FileAppCrcIndex + 1] << 8));
+ //fileApp.Version = (UInt32)((fileApp.BinData[FileAppVersionIndex] & 0x0F)
+ // + ((fileApp.BinData[FileAppVersionIndex] & 0xF0) >> 4) * 10
+ // + (fileApp.BinData[FileAppVersionIndex + 1] & 0x0F) * 100
+ // + ((fileApp.BinData[FileAppVersionIndex + 1] & 0xF0) >> 4) * 1000);
+
+ //fileApp.StrVersion = GenesisMeter.BuildFwVersionString(fileApp.BinData[FileAppVersionIndex + 1],
+ // fileApp.BinData[FileAppVersionIndex]);
+ //var fileAppStartId = Encoding.UTF8.GetString(fileApp.BinData.ToArray(), 0, 4);
+ ////check update file start identifier
+ //if (fileAppStartId != StrFileAppStartId)
+ //{
+ // return false;
+ //}
+
+ ////TODO THW check CRC
+ ////TODO THW check upgrade file name against content to select a valid package
+ ////the meter file name is needed for writing the file to the meter or reading it back
+ //fileApp.MeterFilename = StrUpgradeAppPartialFileName + $"{fileApp.AppId:X2}";
+ return true;
+ }
+
+ ///
+ /// Download the CRC, the meter size and store calibration as preparation for the lookup table
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ private Boolean PrepareLutDownload()
+ {
+ Boolean returnValue;
+
+ var retryCtr = 0;
+
+ //set extended timeout for trigger upgrade response delay
+ _genesisMeter.TransmitProtocol.SetResponseTimeout(5000);
+ do
+ {
+ returnValue = _genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, _meterSize);
+ returnValue &= _genesisMeter.WriteRegister(Register.Genesisflow.LookupFileCrc, _lutCrc);
+ returnValue &= _genesisMeter.WriteRegister(Register.Genesisflow.StoreCalibration, 1);
+
+ if (!returnValue)
+ {
+ ReestablishMeterFileSystem();
+ }
+ } while (!returnValue && retryCtr++ < RegisterWriteRetries && !StopUpdateProcess);
+
+ //set timeout back to default value
+ _genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
+
+ return returnValue && !StopUpdateProcess;
+ }
+
+ ///
+ /// Download the metrology lookup table files
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ private Boolean DownloadLutFile()
+ {
+
+ //counters for actual process information
+ _processedBytesCtr = 0;
+ _overallBytesCtr = 0;
+ var retryCtr = 0;
+ Boolean returnValue;
+
+ //write file portion and retry if not successful
+ do
+ {
+ returnValue = _meterFile.WriteMeterFile(StrLutFileName, LutFile.BinData.ToArray());
+ returnValue &= _meterFile.WriteMeterFile(StrLutBackupFileName, LutFile.BinData.ToArray());
+
+ if (!returnValue)
+ {
+ ReestablishMeterFileSystem();
+ }
+ } while (!returnValue && retryCtr++ < FileWriteRetries && !StopUpdateProcess);
+
+ returnValue &= retryCtr <= FileWriteRetries;
+
+ //update information for process bar
+ _processedBytesCtr += LutFile.BinData.Count;
+
+ return !StopUpdateProcess && returnValue;
+ }
+
+ ///
+ /// Load file from memory
+ ///
+ /// to binary files
+ ///
+ ///
+ /// - Initial
+ ///
+ public Boolean LoadLutFile(String filePathName)
+ {
+ if (!File.Exists(filePathName))
+ {
+ return false;
+ }
+
+ LutFile = null;
+ LutFile = new FileApplications(filePathName)
+ {
+ BinData = new List(File.ReadAllBytes(filePathName))
+ };
+
+ // validate the file
+ return ValidateLutFile();
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs b/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs
index 85ac4fa1..2581f845 100644
--- a/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs
+++ b/Common/Hardware/WaterMeter/Genesis/Registers/Registers.cs
@@ -81,6 +81,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
public static readonly String StartHit = "GENESISFLOW_StartHit";
public static readonly String NumFirePulses = "GENESISFLOW_NumFirePulses";
+ public static readonly String LookupFileCrc = "GENESISFLOW_LookupFileCrc";
};
diff --git a/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache b/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache
index 133b97f0..0028f628 100644
--- a/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache
+++ b/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-0d85a5b3a7561b41163c20e5dc7713bcd0d65555
+f64d563def603c89cafafa61a3219ba97e1e344c
diff --git a/Common/Ui/GenesisToolBox/FrmFwUpdate.Designer.cs b/Common/Ui/GenesisToolBox/FrmFwUpdate.Designer.cs
index d2b310f7..07efe0f6 100644
--- a/Common/Ui/GenesisToolBox/FrmFwUpdate.Designer.cs
+++ b/Common/Ui/GenesisToolBox/FrmFwUpdate.Designer.cs
@@ -259,7 +259,7 @@
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(116, 25);
this.button1.TabIndex = 0;
- this.button1.Text = "Set Trigger Active";
+ this.button1.Text = "Clear Display";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
diff --git a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs
index eb4d098d..a2cd2905 100644
--- a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs
+++ b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs
@@ -18,7 +18,6 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Logic.ProductionOrderCore.FW;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Ui.GenesisToolBox.Properties;
@@ -120,13 +119,12 @@ namespace Xylem.Common.Ui.GenesisToolBox
"This is a stepwise update, proceed until update is completed!\n";
private const String StrUpdateErrorMessage =
"FW UPDATE FAILED!\n\n";
- private FwSource fwSource = FwSource.File;
+ private FwSource _fwSource = FwSource.File;
private enum FwSource
{
File,
- Production,
- Db,
-
+// Production,
+ Db
}
#endregion
#region FormControls
@@ -1026,7 +1024,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
{
_packageFileToFileAppsValidated = _meterFwUpdate.ValidateFileAppsWithPackageFile();
}
- catch (Exception e)
+ catch (Exception)
{
if (_meterFwUpdate.CoreRevisionMaximum == null)
MessageBoxShow(@"Core Revision missing in ADF!", @"FAILED",
@@ -1170,9 +1168,10 @@ namespace Xylem.Common.Ui.GenesisToolBox
private void btnOpenPackageControlFile_Click(Object sender, EventArgs e)
{
- ////reload last path
+ //reload last path
dlgOpenPackageFile.InitialDirectory = DefaultPackageFile;
+ dlgOpenPackageFile.DefaultExt = ".txt";
if (dlgOpenPackageFile.ShowDialog() != DialogResult.OK)
{
return;
@@ -1653,11 +1652,11 @@ namespace Xylem.Common.Ui.GenesisToolBox
private void checkSelectionChanged(FwSource newMode)
{
- if (newMode == fwSource)
+ if (newMode == _fwSource)
{
return;
}
- fwSource = newMode;
+ _fwSource = newMode;
}
private void PushFwFile(MeterFwUpdate meterFwUpdate)
@@ -1774,14 +1773,14 @@ namespace Xylem.Common.Ui.GenesisToolBox
private void button1_Click(Object sender, EventArgs e)
{
- if (_currentGenesis == null || !_currentGenesis.IsLoggedOn)
+ if (_currentGenesis == null ) return;
+ if (!_currentGenesis.IsLoggedOn)
{
- return;
- }
- else
- {
- _currentGenesis.SetLcdText(true, new Byte[] { 0x00, 0x00, 0x00, 0x00 });
+ _currentGenesis.Login();
}
+
+ _currentGenesis.SetLcdText(true, new Byte[] { 0x00, 0x00, 0x00, 0x00 });
+ _currentGenesis.Logout();
}
private void btnFixBat_Click(Object sender, EventArgs e)
diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs b/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs
new file mode 100644
index 00000000..b9d48a98
--- /dev/null
+++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs
@@ -0,0 +1,368 @@
+namespace Xylem.Common.Ui.GenesisToolBox
+{
+ partial class FrmLutUpdate
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.grpSetup = new System.Windows.Forms.GroupBox();
+ this.lblCoreRevision = new System.Windows.Forms.Label();
+ this.btnConnect = new System.Windows.Forms.Button();
+ this.lblConnectPcb = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.cbComSlot = new System.Windows.Forms.ComboBox();
+ this.lblWaitingForMeterResponse = new System.Windows.Forms.Label();
+ this.btnStopFwUpdate = new System.Windows.Forms.Button();
+ this.btnDownloadLutFile = new System.Windows.Forms.Button();
+ this.lblOverall = new System.Windows.Forms.Label();
+ this.barSingleProgressUpdate = new System.Windows.Forms.ProgressBar();
+ this.lblActualProcess = new System.Windows.Forms.Label();
+ this.barOverallProgressUpdate = new System.Windows.Forms.ProgressBar();
+ this.tmrProgressUpdate = new System.Windows.Forms.Timer(this.components);
+ this.dlgOpenLuFile = new System.Windows.Forms.OpenFileDialog();
+ this.lblFwUpdateInfo = new System.Windows.Forms.Label();
+ this.pictureBox1 = new System.Windows.Forms.PictureBox();
+ this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.tbxLutFilePathName = new System.Windows.Forms.TextBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.btnOpenLutFile = new System.Windows.Forms.Button();
+ this.label9 = new System.Windows.Forms.Label();
+ this.lblUpdateTime = new System.Windows.Forms.Label();
+ this.lblLutFileLoadedInfo = new System.Windows.Forms.Label();
+ this.grpSetup.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // grpSetup
+ //
+ this.grpSetup.Controls.Add(this.lblCoreRevision);
+ this.grpSetup.Controls.Add(this.btnConnect);
+ this.grpSetup.Controls.Add(this.lblConnectPcb);
+ this.grpSetup.Controls.Add(this.label2);
+ this.grpSetup.Controls.Add(this.cbComSlot);
+ this.grpSetup.Location = new System.Drawing.Point(12, 56);
+ this.grpSetup.Name = "grpSetup";
+ this.grpSetup.Size = new System.Drawing.Size(248, 153);
+ this.grpSetup.TabIndex = 24;
+ this.grpSetup.TabStop = false;
+ this.grpSetup.Text = "Connection";
+ //
+ // lblCoreRevision
+ //
+ this.lblCoreRevision.AutoSize = true;
+ this.lblCoreRevision.Location = new System.Drawing.Point(7, 53);
+ this.lblCoreRevision.Name = "lblCoreRevision";
+ this.lblCoreRevision.Size = new System.Drawing.Size(55, 13);
+ this.lblCoreRevision.TabIndex = 25;
+ this.lblCoreRevision.Text = "----------------";
+ //
+ // btnConnect
+ //
+ this.btnConnect.Location = new System.Drawing.Point(10, 118);
+ this.btnConnect.Name = "btnConnect";
+ this.btnConnect.Size = new System.Drawing.Size(116, 24);
+ this.btnConnect.TabIndex = 24;
+ this.btnConnect.Text = "Connect";
+ this.btnConnect.UseVisualStyleBackColor = true;
+ this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
+ //
+ // lblConnectPcb
+ //
+ this.lblConnectPcb.AutoSize = true;
+ this.lblConnectPcb.Location = new System.Drawing.Point(7, 26);
+ this.lblConnectPcb.Name = "lblConnectPcb";
+ this.lblConnectPcb.Size = new System.Drawing.Size(100, 13);
+ this.lblConnectPcb.TabIndex = 23;
+ this.lblConnectPcb.Text = "NOT CONNECTED";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(7, 85);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(28, 13);
+ this.label2.TabIndex = 20;
+ this.label2.Text = "Slot:";
+ //
+ // cbComSlot
+ //
+ this.cbComSlot.FormattingEnabled = true;
+ this.cbComSlot.Items.AddRange(new object[] {
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "15",
+ "16",
+ "17",
+ "18",
+ "19",
+ "20"});
+ this.cbComSlot.Location = new System.Drawing.Point(37, 81);
+ this.cbComSlot.Name = "cbComSlot";
+ this.cbComSlot.Size = new System.Drawing.Size(37, 21);
+ this.cbComSlot.TabIndex = 5;
+ this.cbComSlot.Text = "1";
+ this.cbComSlot.SelectedIndexChanged += new System.EventHandler(this.cbComSlot_SelectedIndexChanged);
+ //
+ // lblWaitingForMeterResponse
+ //
+ this.lblWaitingForMeterResponse.AutoSize = true;
+ this.lblWaitingForMeterResponse.ForeColor = System.Drawing.Color.Red;
+ this.lblWaitingForMeterResponse.Location = new System.Drawing.Point(532, 223);
+ this.lblWaitingForMeterResponse.Name = "lblWaitingForMeterResponse";
+ this.lblWaitingForMeterResponse.Size = new System.Drawing.Size(182, 13);
+ this.lblWaitingForMeterResponse.TabIndex = 18;
+ this.lblWaitingForMeterResponse.Text = "WAITING FOR METER RESPONSE";
+ //
+ // btnStopFwUpdate
+ //
+ this.btnStopFwUpdate.Location = new System.Drawing.Point(310, 118);
+ this.btnStopFwUpdate.Name = "btnStopFwUpdate";
+ this.btnStopFwUpdate.Size = new System.Drawing.Size(116, 25);
+ this.btnStopFwUpdate.TabIndex = 8;
+ this.btnStopFwUpdate.Text = "STOP";
+ this.btnStopFwUpdate.UseVisualStyleBackColor = true;
+ this.btnStopFwUpdate.Click += new System.EventHandler(this.btnStopFwUpdate_Click);
+ //
+ // btnDownloadLutFile
+ //
+ this.btnDownloadLutFile.Location = new System.Drawing.Point(310, 86);
+ this.btnDownloadLutFile.Name = "btnDownloadLutFile";
+ this.btnDownloadLutFile.Size = new System.Drawing.Size(116, 25);
+ this.btnDownloadLutFile.TabIndex = 0;
+ this.btnDownloadLutFile.Text = "Download";
+ this.btnDownloadLutFile.UseVisualStyleBackColor = true;
+ this.btnDownloadLutFile.Click += new System.EventHandler(this.btnDownloadLutFile_Click);
+ //
+ // lblOverall
+ //
+ this.lblOverall.AutoSize = true;
+ this.lblOverall.Location = new System.Drawing.Point(21, 260);
+ this.lblOverall.Name = "lblOverall";
+ this.lblOverall.Size = new System.Drawing.Size(80, 13);
+ this.lblOverall.TabIndex = 7;
+ this.lblOverall.Text = "Overall process";
+ //
+ // barSingleProgressUpdate
+ //
+ this.barSingleProgressUpdate.Location = new System.Drawing.Point(12, 239);
+ this.barSingleProgressUpdate.Name = "barSingleProgressUpdate";
+ this.barSingleProgressUpdate.Size = new System.Drawing.Size(702, 18);
+ this.barSingleProgressUpdate.TabIndex = 6;
+ this.barSingleProgressUpdate.Visible = false;
+ //
+ // lblActualProcess
+ //
+ this.lblActualProcess.AutoSize = true;
+ this.lblActualProcess.Location = new System.Drawing.Point(21, 223);
+ this.lblActualProcess.Name = "lblActualProcess";
+ this.lblActualProcess.Size = new System.Drawing.Size(76, 13);
+ this.lblActualProcess.TabIndex = 4;
+ this.lblActualProcess.Text = "Process status";
+ //
+ // barOverallProgressUpdate
+ //
+ this.barOverallProgressUpdate.Location = new System.Drawing.Point(12, 276);
+ this.barOverallProgressUpdate.Name = "barOverallProgressUpdate";
+ this.barOverallProgressUpdate.Size = new System.Drawing.Size(702, 18);
+ this.barOverallProgressUpdate.TabIndex = 3;
+ this.barOverallProgressUpdate.Visible = false;
+ //
+ // tmrProgressUpdate
+ //
+ this.tmrProgressUpdate.Interval = 200;
+ this.tmrProgressUpdate.Tick += new System.EventHandler(this.tmrProgressUpdate_Tick);
+ //
+ // dlgOpenLuFile
+ //
+ this.dlgOpenLuFile.Filter = "metrology lookup tables (*.lut)|*.lut";
+ //
+ // lblFwUpdateInfo
+ //
+ this.lblFwUpdateInfo.AutoSize = true;
+ this.lblFwUpdateInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lblFwUpdateInfo.Location = new System.Drawing.Point(12, 34);
+ this.lblFwUpdateInfo.Name = "lblFwUpdateInfo";
+ this.lblFwUpdateInfo.Size = new System.Drawing.Size(72, 13);
+ this.lblFwUpdateInfo.TabIndex = 27;
+ this.lblFwUpdateInfo.Text = "Version: 0.0.0";
+ //
+ // pictureBox1
+ //
+ this.pictureBox1.Image = global::Xylem.Common.Ui.GenesisToolBox.Properties.Resources.SensusLogoXylem;
+ this.pictureBox1.Location = new System.Drawing.Point(611, 3);
+ this.pictureBox1.Name = "pictureBox1";
+ this.pictureBox1.Size = new System.Drawing.Size(102, 54);
+ this.pictureBox1.TabIndex = 29;
+ this.pictureBox1.TabStop = false;
+ //
+ // openFileDialog1
+ //
+ this.openFileDialog1.FileName = "openFileDialog1";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.lblLutFileLoadedInfo);
+ this.groupBox1.Controls.Add(this.btnDownloadLutFile);
+ this.groupBox1.Controls.Add(this.tbxLutFilePathName);
+ this.groupBox1.Controls.Add(this.label4);
+ this.groupBox1.Controls.Add(this.btnStopFwUpdate);
+ this.groupBox1.Controls.Add(this.btnOpenLutFile);
+ this.groupBox1.Location = new System.Drawing.Point(278, 56);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(436, 153);
+ this.groupBox1.TabIndex = 28;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Lookup Table";
+ //
+ // tbxLutFilePathName
+ //
+ this.tbxLutFilePathName.Location = new System.Drawing.Point(104, 23);
+ this.tbxLutFilePathName.Name = "tbxLutFilePathName";
+ this.tbxLutFilePathName.ReadOnly = true;
+ this.tbxLutFilePathName.Size = new System.Drawing.Size(322, 20);
+ this.tbxLutFilePathName.TabIndex = 2;
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(10, 26);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(63, 13);
+ this.label4.TabIndex = 1;
+ this.label4.Text = "Path Name:";
+ //
+ // btnOpenLutFile
+ //
+ this.btnOpenLutFile.Location = new System.Drawing.Point(310, 53);
+ this.btnOpenLutFile.Name = "btnOpenLutFile";
+ this.btnOpenLutFile.Size = new System.Drawing.Size(116, 26);
+ this.btnOpenLutFile.TabIndex = 0;
+ this.btnOpenLutFile.Text = "Open";
+ this.btnOpenLutFile.UseVisualStyleBackColor = true;
+ this.btnOpenLutFile.Click += new System.EventHandler(this.btnOpenLutFile_Click);
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Location = new System.Drawing.Point(250, 223);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(101, 13);
+ this.label9.TabIndex = 30;
+ this.label9.Text = "UpdateTime [min:s]:";
+ //
+ // lblUpdateTime
+ //
+ this.lblUpdateTime.AutoSize = true;
+ this.lblUpdateTime.Location = new System.Drawing.Point(357, 223);
+ this.lblUpdateTime.Name = "lblUpdateTime";
+ this.lblUpdateTime.Size = new System.Drawing.Size(28, 13);
+ this.lblUpdateTime.TabIndex = 31;
+ this.lblUpdateTime.Text = "0:00";
+ //
+ // lblLutFileLoadedInfo
+ //
+ this.lblLutFileLoadedInfo.AutoSize = true;
+ this.lblLutFileLoadedInfo.Location = new System.Drawing.Point(10, 53);
+ this.lblLutFileLoadedInfo.Name = "lblLutFileLoadedInfo";
+ this.lblLutFileLoadedInfo.Size = new System.Drawing.Size(97, 13);
+ this.lblLutFileLoadedInfo.TabIndex = 9;
+ this.lblLutFileLoadedInfo.Text = "LUT file not loaded";
+ //
+ // FrmLutUpdate
+ //
+ this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(723, 317);
+ this.Controls.Add(this.lblUpdateTime);
+ this.Controls.Add(this.label9);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.lblWaitingForMeterResponse);
+ this.Controls.Add(this.pictureBox1);
+ this.Controls.Add(this.lblOverall);
+ this.Controls.Add(this.lblFwUpdateInfo);
+ this.Controls.Add(this.barSingleProgressUpdate);
+ this.Controls.Add(this.lblActualProcess);
+ this.Controls.Add(this.grpSetup);
+ this.Controls.Add(this.barOverallProgressUpdate);
+ this.Name = "FrmLutUpdate";
+ this.Text = "Metrology Lookup Table Update";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmLutUpdate_FormClosing);
+ this.Load += new System.EventHandler(this.FrmLutUpdate_Load);
+ this.grpSetup.ResumeLayout(false);
+ this.grpSetup.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox grpSetup;
+ private System.Windows.Forms.Button btnConnect;
+ private System.Windows.Forms.Label lblConnectPcb;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox cbComSlot;
+ private System.Windows.Forms.Button btnDownloadLutFile;
+ private System.Windows.Forms.ProgressBar barOverallProgressUpdate;
+ private System.Windows.Forms.Timer tmrProgressUpdate;
+ private System.Windows.Forms.Label lblActualProcess;
+ private System.Windows.Forms.Label lblOverall;
+ private System.Windows.Forms.ProgressBar barSingleProgressUpdate;
+ private System.Windows.Forms.OpenFileDialog dlgOpenLuFile;
+ private System.Windows.Forms.Label lblFwUpdateInfo;
+ private System.Windows.Forms.Button btnStopFwUpdate;
+ private System.Windows.Forms.PictureBox pictureBox1;
+ private System.Windows.Forms.OpenFileDialog openFileDialog1;
+ private System.Windows.Forms.Label lblWaitingForMeterResponse;
+ private System.Windows.Forms.Label lblCoreRevision;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox tbxLutFilePathName;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Button btnOpenLutFile;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label lblUpdateTime;
+ private System.Windows.Forms.Label lblLutFileLoadedInfo;
+ }
+}
\ No newline at end of file
diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.cs b/Common/Ui/GenesisToolBox/FrmLutUpdate.cs
new file mode 100644
index 00000000..81a7521b
--- /dev/null
+++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.cs
@@ -0,0 +1,464 @@
+using System;
+using System.Drawing;
+using System.Globalization;
+using System.Reflection;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
+using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
+
+
+namespace Xylem.Common.Ui.GenesisToolBox
+{
+ ///
+ /// FW update form
+ ///
+ public partial class FrmLutUpdate : Form
+ {
+ #region Variables
+ private readonly MeterBatch _meterBatch = new MeterBatch();
+ private GenesisMeter _currentGenesis;
+ private const String StrConnecting = "Connecting to PCB";
+ private const String StrNotConnected = "NOT CONNECTED";
+ private const String StrCoreRevision = "System Core Revision: ";
+ private const String StrPartPcbConnected = "Connected to PCB ID: ";
+ private const String StrOverallProcess = "Overall Process";
+
+ private MeterLutUpdate _meterLutUpdate;
+
+ private String _lastFwUpdateState;
+ private Int32 _lastSingleProgress;
+ private DateTimeOffset _startTime;
+ private Boolean _resetTimeMeasurement;
+ private readonly Boolean _updateGui = true;
+ private Boolean _lutFileValid;
+
+ private Boolean _tryConnectPcb;
+ private Boolean _lutFileSuccessfulWritten;
+ private const String StrUpdateErrorMessage = "METROLOGY LOOKUP TABLE UPDATE FAILED!\n\n";
+ private const String StrUpdateSuccessMessage = "Metrology lookup table successfulley written!\n\n";
+ private const String StrLutFileInvalid = "LUT FILE INVALID";
+ private const String StrLutFileValid = "LUT file loaded";
+
+ #endregion
+
+ #region FormControls
+ ///
+ /// Ctor FW update
+ ///
+ public FrmLutUpdate()
+ {
+ InitializeComponent();
+ var cultureInfo = new CultureInfo("en-GB");
+ Thread.CurrentThread.CurrentUICulture = cultureInfo;
+ Thread.CurrentThread.CurrentCulture = cultureInfo;
+ }
+
+ ///
+ /// Clear data table and set genesis to not connected
+ ///
+ private void Init()
+ {
+ ProcessViewControl(false);
+ lblConnectPcb.Text = StrNotConnected;
+ lblCoreRevision.Text = "";
+ lblConnectPcb.ForeColor = Color.Red;
+ lblWaitingForMeterResponse.Visible = false;
+ btnConnect.Enabled = true;
+ btnDownloadLutFile.ForeColor = Color.DarkGreen;
+ btnStopFwUpdate.ForeColor = Color.Red;
+ SetControlDownloadsLocked();
+ btnStopFwUpdate.Enabled = false;
+ btnOpenLutFile.Enabled = true;
+ }
+
+ private void FrmLutUpdate_Load(Object sender, EventArgs e)
+ {
+ var version = Assembly.GetExecutingAssembly().GetName().Version;
+ lblFwUpdateInfo.Text = $@"Version: {version.Major}.{version.Minor}.{version.Build}";
+ _resetTimeMeasurement = true;
+ Init();
+ }
+
+ private void FrmLutUpdate_FormClosing(Object sender, FormClosingEventArgs e)
+ {
+ _currentGenesis?.Logout();
+ _meterBatch?.RemoveAllMeters();
+ _meterBatch?.Dispose();
+ _meterLutUpdate?.Dispose();
+ _meterLutUpdate = null;
+ Dispose();
+ }
+
+ private void cbComSlot_SelectedIndexChanged(Object sender, EventArgs e)
+ {
+ _resetTimeMeasurement = true;
+ Init();
+ }
+ #endregion
+ #region ActivationControls
+
+ private void SetControlDownloadsLocked()
+ {
+ btnDownloadLutFile.Enabled = false;
+ btnStopFwUpdate.Enabled = false;
+ btnConnect.Enabled = true;
+ }
+
+ private void SetControlsDownloadIsOngoing()
+ {
+ btnConnect.Enabled = false;
+ btnOpenLutFile.Enabled = false;
+
+ btnDownloadLutFile.Enabled = false;
+ btnStopFwUpdate.Enabled = true;
+ }
+
+ private void SetControlsDownloadIsFinished()
+ {
+ _currentGenesis.RequestProtocol.AdditionalRetryTimeoutMs = 0;
+ btnConnect.Enabled = true;
+ btnOpenLutFile.Enabled = true;
+
+ btnDownloadLutFile.Enabled = true;
+ btnStopFwUpdate.Enabled = false;
+ }
+ #endregion
+ #region BoardControls
+ private void Connect()
+ {
+ try
+ {
+ Init();
+ Int32 slotNr;
+
+ if (string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) ||
+ !int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNr))
+ {
+ return;
+ }
+
+ _currentGenesis?.DisposeMeter();
+ //dispose old meter
+ _meterBatch.RemoveAllMeters();
+ _currentGenesis = null;
+ Thread.Sleep(200);
+
+ //assign new meter and assign meter to FW update file if this exists
+ _currentGenesis = new GenesisMeter();
+
+ _currentGenesis.SetupFromConfigFile(slotNr);
+ _meterBatch.AddMeter(_currentGenesis);
+
+ _currentGenesis._configuration.UseRegisterWatchService = false;
+ _currentGenesis._configuration.UseMinMaxCheck = false;
+
+ Task.Factory.StartNew(() =>
+ {
+ ViewProgressPcb(true);
+
+ _meterBatch.MetersLogin();
+
+ if (!_currentGenesis.IsLoggedOn)
+ {
+ Thread.Sleep(2000);
+ _meterBatch.MetersLogin();
+ }
+
+ if (!_currentGenesis.IsLoggedOn)
+ {
+ return;
+ }
+
+ _meterLutUpdate?.AssignGenesis(_currentGenesis);
+
+ Invoke(new Action(() =>
+ {
+ lblConnectPcb.Text = StrPartPcbConnected + _currentGenesis.PcbId;
+ lblCoreRevision.Text = StrCoreRevision + _currentGenesis.CoreRevision;
+ lblConnectPcb.ForeColor = Color.Green;
+ CheckUpdateEnabled();
+ _currentGenesis.Logout();
+ }));
+ }).ContinueWith(delegate { ViewProgressPcb(false); });
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ #endregion
+ #region ProcessControls
+ private void ViewProgressPcb(Boolean isActive)
+ {
+ if (_updateGui)
+ {
+ if (isActive)
+ {
+ Invoke(new Action(() =>
+ {
+ _tryConnectPcb = true;
+ ProcessViewControl(true);
+ lblActualProcess.Text = StrConnecting;
+ lblOverall.Text = StrOverallProcess;
+ }));
+ }
+ else
+ {
+ Invoke(new Action(() =>
+ {
+ _tryConnectPcb = false;
+ ProcessViewControl(false);
+ }));
+ }
+ }
+ }
+
+ ///
+ /// View all process bars and labels
+ ///
+ private void ProcessViewControl(Boolean view)
+ {
+ if (view)
+ {
+ lblActualProcess.Visible = true;
+ lblOverall.Visible = true;
+ barOverallProgressUpdate.Visible = true;
+ barSingleProgressUpdate.Visible = true;
+ _lastFwUpdateState = "";
+ tmrProgressUpdate.Enabled = true;
+ }
+ else
+ {
+ lblActualProcess.Visible = false;
+ lblOverall.Visible = false;
+ barOverallProgressUpdate.Visible = false;
+ barSingleProgressUpdate.Visible = false;
+ tmrProgressUpdate.Enabled = false;
+ _lastFwUpdateState = "";
+ lblWaitingForMeterResponse.Visible = false;
+ lblActualProcess.Text = "";
+ lblOverall.Text = "";
+ }
+
+ //common actions and settings
+ lblActualProcess.Update();
+ lblOverall.Update();
+ barOverallProgressUpdate.Value = 0;
+ barOverallProgressUpdate.Update();
+ barSingleProgressUpdate.Value = 0;
+ barSingleProgressUpdate.Update();
+ Update();
+ }
+
+ private void StartStopDownload(Boolean isActive)
+ {
+ if (isActive)
+ {
+ Invoke(new Action(() =>
+ {
+ _lastFwUpdateState = "";
+ ProcessViewControl(true);
+ tmrProgressUpdate.Enabled = true;
+ }));
+ }
+ else
+ {
+ Invoke(new Action(() =>
+ {
+ ProcessViewControl(false);
+ SetControlsDownloadIsFinished();
+
+ if (_lutFileSuccessfulWritten)
+ {
+ MessageBoxShow(StrUpdateErrorMessage, @"FAILED",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ else
+ {
+ MessageBoxShow(StrUpdateSuccessMessage, @"SUCCESS",
+ MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ }));
+ }
+ }
+
+
+ #endregion
+ #region Checks
+ private void CheckUpdateEnabled()
+ {
+ //this check has been placed here to force display update
+ if (_meterLutUpdate != null && _currentGenesis != null && _lutFileValid)
+ {
+ SetControlDownloadsLocked();
+ return;
+ }
+ SetControlDownloadsLocked();
+ }
+ #endregion
+
+ #region TimerControls
+ private void tmrProgressUpdate_Tick(Object sender, EventArgs e)
+ {
+ //cbxManualControl.Visible = true;
+ if (_tryConnectPcb)
+ {
+ barOverallProgressUpdate.Value = barOverallProgressUpdate.Value + 1 > 100 ? 0 :
+ barOverallProgressUpdate.Value + 1;
+ barSingleProgressUpdate.Value = barSingleProgressUpdate.Value + 4 > 100 ? 0 :
+ barSingleProgressUpdate.Value + 4;
+ lblOverall.Text = StrOverallProcess;
+ }
+ else
+ {
+ lblOverall.Text = _meterLutUpdate?.GetLutUpdateStateOperation();
+ lblActualProcess.Text = _meterLutUpdate?.GetActualOperation();
+
+ var overallProgress = (Int32)(_meterLutUpdate?.OverallProcessCtrPercent ?? 0);
+ barOverallProgressUpdate.Value = overallProgress > 100 ? 100 : overallProgress;
+ barOverallProgressUpdate.Update();
+
+ var singleProgress = (Int32)(_meterLutUpdate?.SingleFileProcessCtrPercent ?? 0);
+ if (_meterLutUpdate?.GetLutUpdateStateOperation() != _lastFwUpdateState)
+ {
+ _lastFwUpdateState = _meterLutUpdate?.GetLutUpdateStateOperation();
+ lblWaitingForMeterResponse.Visible = false;
+ }
+ else
+ {
+ //if the communication gets frozen
+ lblWaitingForMeterResponse.Visible = _lastSingleProgress == singleProgress;
+ }
+
+ barSingleProgressUpdate.Value = singleProgress > 100 ? 100 : singleProgress;
+ _lastSingleProgress = singleProgress;
+ barSingleProgressUpdate.Update();
+ }
+ SetTimeDisplay();
+ Update();
+ }
+
+ private void SetTimeDisplay()
+ {
+ var time = DateTimeOffset.UtcNow;
+ var timeSpan = time - _startTime;
+ lblUpdateTime.Text = $@"{(UInt32)timeSpan.TotalMinutes}:{timeSpan.Seconds:00}";
+ }
+ #endregion
+ #region Buttons
+ private void btnConnect_Click(Object sender, EventArgs e)
+ {
+ if (_resetTimeMeasurement)
+ {
+ _startTime = DateTimeOffset.UtcNow;
+ _resetTimeMeasurement = false;
+ }
+ Connect();
+
+ }
+
+ private void btnOpenLutFile_Click(Object sender, EventArgs e)
+ {
+ if (dlgOpenLuFile.ShowDialog() != DialogResult.OK)
+ {
+ return;
+ }
+
+ var lutFilePathName = dlgOpenLuFile.FileName;
+
+ tbxLutFilePathName.Text = lutFilePathName;
+ if (_meterLutUpdate == null)
+ {
+ _meterLutUpdate = new MeterLutUpdate(_currentGenesis);
+ }
+
+ if (_meterLutUpdate == null)
+ {
+ return;
+ }
+
+ if (_meterLutUpdate.LoadLutFile(lutFilePathName))
+ {
+ lblLutFileLoadedInfo.ForeColor = Color.Green;
+ lblLutFileLoadedInfo.Text = StrLutFileValid;
+ _lutFileValid = true;
+ }
+ else
+ {
+ lblLutFileLoadedInfo.ForeColor = Color.Red;
+ lblLutFileLoadedInfo.Text = StrLutFileInvalid;
+ _lutFileValid = false;
+ }
+
+ CheckUpdateEnabled();
+ _resetTimeMeasurement = true;
+ }
+
+
+ ///
+ /// Download LUT file
+ ///
+ ///
+ ///
+ private void btnDownloadLutFile_Click(Object sender, EventArgs e)
+ {
+ if (_currentGenesis == null || _meterLutUpdate?.LutFile == null)
+ {
+ return;
+ }
+
+ SetControlsDownloadIsOngoing();
+ StartStopDownload(true);
+
+ _startTime = DateTimeOffset.UtcNow;
+ _resetTimeMeasurement = false;
+
+
+ Task.Factory.StartNew(() =>
+ {
+ _lutFileSuccessfulWritten = _meterLutUpdate.UpdateMeterLut();
+ Thread.Sleep(1000);
+ }).ContinueWith(delegate { StartStopDownload(false); });
+ }
+
+ private void btnStopFwUpdate_Click(Object sender, EventArgs e)
+ {
+ if (_meterLutUpdate != null)
+ {
+ _meterLutUpdate.StopUpdateProcess = true;
+ }
+ }
+
+ #endregion
+ #region ExternalCalls
+
+ public MsgEventArgs LastMsgEvent;
+ public class MsgEventArgs : EventArgs
+ {
+ public String Text;
+ public String Caption;
+ public MessageBoxButtons Buttons;
+ public MessageBoxIcon Icon;
+ }
+ public event EventHandler OnMsgPopUp;
+ private void MessageBoxShow(String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon)
+ {
+ if (_updateGui)
+ {
+ MessageBox.Show(text, caption, buttons, icon);
+ }
+ else
+ {
+ LastMsgEvent = new MsgEventArgs() { Text = text, Caption = caption, Buttons = buttons, Icon = icon };
+ OnMsgPopUp?.Invoke(this, LastMsgEvent);
+ }
+
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.resx b/Common/Ui/GenesisToolBox/FrmLutUpdate.resx
new file mode 100644
index 00000000..9543967f
--- /dev/null
+++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 274, 17
+
+
+ 144, 17
+
+
+ 432, 17
+
+
\ No newline at end of file
diff --git a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
index 55764fc2..39508397 100644
--- a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
+++ b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
@@ -194,6 +194,12 @@
FrmFrozenMeter.cs
+
+ Form
+
+
+ FrmLutUpdate.cs
+
Form
@@ -338,6 +344,10 @@
FrmFrozenMeter.cs
+
+ FrmLutUpdate.cs
+ Designer
+
FrmFwUpdate.cs
Designer
diff --git a/Common/Ui/GenesisToolBox/frmMainForm.Designer.cs b/Common/Ui/GenesisToolBox/frmMainForm.Designer.cs
index 5bc56209..7592a277 100644
--- a/Common/Ui/GenesisToolBox/frmMainForm.Designer.cs
+++ b/Common/Ui/GenesisToolBox/frmMainForm.Designer.cs
@@ -49,6 +49,7 @@
this.BtnFileSplit = new System.Windows.Forms.Button();
this.btnFiles = new System.Windows.Forms.Button();
this.btnLegacyTestApp = new System.Windows.Forms.Button();
+ this.btnLutUpdate = new System.Windows.Forms.Button();
this.gpGerneral.SuspendLayout();
this.gpLAA.SuspendLayout();
this.gbDeveloper.SuspendLayout();
@@ -56,6 +57,7 @@
//
// gpGerneral
//
+ this.gpGerneral.Controls.Add(this.btnLutUpdate);
this.gpGerneral.Controls.Add(this.button1);
this.gpGerneral.Controls.Add(this.btnFreeze);
this.gpGerneral.Controls.Add(this.btnConfiguration);
@@ -69,14 +71,14 @@
this.gpGerneral.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.gpGerneral.Location = new System.Drawing.Point(13, 12);
this.gpGerneral.Name = "gpGerneral";
- this.gpGerneral.Size = new System.Drawing.Size(181, 449);
+ this.gpGerneral.Size = new System.Drawing.Size(181, 503);
this.gpGerneral.TabIndex = 19;
this.gpGerneral.TabStop = false;
this.gpGerneral.Text = "General";
//
// button1
//
- this.button1.Location = new System.Drawing.Point(5, 411);
+ this.button1.Location = new System.Drawing.Point(4, 455);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(152, 40);
this.button1.TabIndex = 16;
@@ -87,7 +89,7 @@
// btnFreeze
//
this.btnFreeze.Enabled = false;
- this.btnFreeze.Location = new System.Drawing.Point(6, 365);
+ this.btnFreeze.Location = new System.Drawing.Point(5, 409);
this.btnFreeze.Name = "btnFreeze";
this.btnFreeze.Size = new System.Drawing.Size(152, 40);
this.btnFreeze.TabIndex = 15;
@@ -97,7 +99,7 @@
//
// btnConfiguration
//
- this.btnConfiguration.Location = new System.Drawing.Point(6, 321);
+ this.btnConfiguration.Location = new System.Drawing.Point(5, 365);
this.btnConfiguration.Name = "btnConfiguration";
this.btnConfiguration.Size = new System.Drawing.Size(152, 40);
this.btnConfiguration.TabIndex = 14;
@@ -108,7 +110,7 @@
// btnCalender
//
this.btnCalender.Enabled = false;
- this.btnCalender.Location = new System.Drawing.Point(6, 278);
+ this.btnCalender.Location = new System.Drawing.Point(5, 322);
this.btnCalender.Name = "btnCalender";
this.btnCalender.Size = new System.Drawing.Size(151, 39);
this.btnCalender.TabIndex = 13;
@@ -169,7 +171,7 @@
//
// btnSetup
//
- this.btnSetup.Location = new System.Drawing.Point(5, 15);
+ this.btnSetup.Location = new System.Drawing.Point(6, 15);
this.btnSetup.Name = "btnSetup";
this.btnSetup.Size = new System.Drawing.Size(152, 40);
this.btnSetup.TabIndex = 1;
@@ -290,18 +292,28 @@
this.btnLegacyTestApp.UseVisualStyleBackColor = true;
this.btnLegacyTestApp.Click += new System.EventHandler(this.btnLegacyTestApp_Click);
//
+ // btnLutUpdate
+ //
+ this.btnLutUpdate.Location = new System.Drawing.Point(7, 279);
+ this.btnLutUpdate.Name = "btnLutUpdate";
+ this.btnLutUpdate.Size = new System.Drawing.Size(151, 39);
+ this.btnLutUpdate.TabIndex = 17;
+ this.btnLutUpdate.Text = "Metrology Lookup Table Download";
+ this.btnLutUpdate.UseVisualStyleBackColor = true;
+ this.btnLutUpdate.Click += new System.EventHandler(this.btnLutUpdate_Click);
+ //
// FrmMainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(390, 457);
+ this.ClientSize = new System.Drawing.Size(390, 517);
this.Controls.Add(this.gbDeveloper);
this.Controls.Add(this.gpLAA);
this.Controls.Add(this.gpGerneral);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.MaximizeBox = false;
- this.MaximumSize = new System.Drawing.Size(410, 500);
- this.MinimumSize = new System.Drawing.Size(410, 500);
+ this.MaximumSize = new System.Drawing.Size(410, 560);
+ this.MinimumSize = new System.Drawing.Size(410, 560);
this.Name = "FrmMainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Genesis ToolBox";
@@ -336,6 +348,7 @@
private System.Windows.Forms.Button btnLegacyTestApp;
private System.Windows.Forms.Button btnFreeze;
private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button btnLutUpdate;
}
}
diff --git a/Common/Ui/GenesisToolBox/frmMainForm.cs b/Common/Ui/GenesisToolBox/frmMainForm.cs
index 67a73fe8..3df230f1 100644
--- a/Common/Ui/GenesisToolBox/frmMainForm.cs
+++ b/Common/Ui/GenesisToolBox/frmMainForm.cs
@@ -331,5 +331,13 @@ namespace Xylem.Common.Ui.GenesisToolBox
{
}
+
+ private void btnLutUpdate_Click(object sender, EventArgs e)
+ {
+ var form = new FrmLutUpdate();
+ form.Show();
+ form.Closed += Form_Closed;
+ Hide();
+ }
}
}
diff --git a/Docu/Hardware/Genesis/CORDFW-MetrologyTableProvisioning-250222-1232.pdf b/Docu/Hardware/Genesis/CORDFW-MetrologyTableProvisioning-250222-1232.pdf
new file mode 100644
index 00000000..5f4ecc0d
Binary files /dev/null and b/Docu/Hardware/Genesis/CORDFW-MetrologyTableProvisioning-250222-1232.pdf differ
diff --git a/Docu/Hardware/Genesis/CORDFW-MetrologyTableProvisioninginManufacturing-250222-1228.pdf b/Docu/Hardware/Genesis/CORDFW-MetrologyTableProvisioninginManufacturing-250222-1228.pdf
new file mode 100644
index 00000000..ca1b1f15
Binary files /dev/null and b/Docu/Hardware/Genesis/CORDFW-MetrologyTableProvisioninginManufacturing-250222-1228.pdf differ
diff --git a/Docu/Hardware/Genesis/Metrology+Table+Provisioning.docm b/Docu/Hardware/Genesis/Metrology+Table+Provisioning.docm
new file mode 100644
index 00000000..3d77f898
Binary files /dev/null and b/Docu/Hardware/Genesis/Metrology+Table+Provisioning.docm differ
diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs
index 61c484f8..b2411ea4 100644
--- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs
+++ b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs
@@ -4432,7 +4432,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
///
/// Get the content of one selected FW update report from DB.
///
- /// report filled with content
+ /// report filled with content
///
///
///
diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj
index 61ac967b..a884d9a2 100644
--- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj
+++ b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj
@@ -58,10 +58,10 @@
false
- D8B4896173CF7130DF43C53CECCE6E4A7595CA5C
+ 3D39BF7375F751B96081DE64F2A442ABD8A73321
- FwUpdateBuilder_TemporaryKey.pfx
+ FwUpdateBuilder_1_TemporaryKey.pfx
true
@@ -161,6 +161,7 @@
Resources.resx
True
+
PreserveNewest
diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FwUpdateLoader.csproj b/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FwUpdateLoader.csproj
index 8afa929e..c678d98b 100644
--- a/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FwUpdateLoader.csproj
+++ b/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FwUpdateLoader.csproj
@@ -58,10 +58,10 @@
false
- 550FE4A801FCFB0A36EB3B198C4A6E6A92020511
+ 5ED6B0B9BFFE7DD309362274CB9BF34BAE31CEEE
- FwUpdateLoader_TemporaryKey.pfx
+ FwUpdateLoader_1_TemporaryKey.pfx
true
@@ -146,6 +146,7 @@
Resources.de.resx
True
+