diff --git a/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs b/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs
index 09038ef3..e40db91a 100644
--- a/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs
+++ b/Common/Hardware/Interfaces/Ports/SerialPorts/BaseSerialPort.cs
@@ -630,8 +630,8 @@ 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!
+ ///
+ /// - Flush buffer 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.
///
@@ -655,18 +655,19 @@ 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));
+ // flush the buffer for MOXA, to avoid two subsequent communications assembled to one communication!
+ _serialPort.BaseStream.Flush();
+
+ OnRawRecordSendOut?.Invoke(this, new ListBytePortDataEventArgs(txByteList, DateTimeOffset.UtcNow));
}
catch (Exception ex)
{
_byteDataLogger.Error($"{Ident} {ex.Message}");
}
}
+
#region Prop
#endregion
}
diff --git a/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs b/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs
index a8f2e4c2..3a3ea303 100644
--- a/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs
+++ b/Common/Hardware/Interfaces/Ports/SerialPorts/IrdaSerialPort.cs
@@ -22,13 +22,6 @@ 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
@@ -36,8 +29,7 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
PhysicalWrite(wakeUpBurst);
//delay at least 500 µs
- var delayPattern = new Byte[] { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
- PhysicalWrite(delayPattern);
+ Thread.Sleep(1);
//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 38b2c3fa..365b1d05 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration.json
@@ -3,7 +3,7 @@
"id": 9,
"version": {
"first": 1,
- "last": 152
+ "last": 154
},
"registers": {
"AlarmStatus0": {
@@ -24,7 +24,7 @@
"description": "8 bit counts corresponding to alarms 0-3.",
"version": {
"first": 1,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -48,7 +48,7 @@
"description": "8 bit counts corresponding to alarms 4-7.",
"version": {
"first": 1,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -91,7 +91,7 @@
"description": "Any set bits manually clear the corresponding alarm.",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -115,7 +115,7 @@
"description": "8 bit counts corresponding to alarms 8-11.",
"version": {
"first": 26,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -139,7 +139,7 @@
"description": "8 bit counts corresponding to alarms 12-15.",
"version": {
"first": 26,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -163,7 +163,7 @@
"description": "8 bit counts corresponding to alarms 16-19.",
"version": {
"first": 26,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -187,7 +187,7 @@
"description": "8 bit counts corresponding to alarms 20-23.",
"version": {
"first": 26,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -211,7 +211,7 @@
"description": "8 bit counts corresponding to alarms 24-27.",
"version": {
"first": 26,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -235,7 +235,7 @@
"description": "8 bit counts corresponding to alarms 28-31.",
"version": {
"first": 26,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -283,7 +283,7 @@
"description": "Bit set of those alarms which are being monitored.",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 4294967295,
@@ -336,7 +336,7 @@
"description": "Bit set of those alarms which will generate events.",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 4294967295,
@@ -389,7 +389,7 @@
"description": "Bit set of those alarms which are displayed with IDs and the alarm icon.",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 4294967295,
@@ -437,7 +437,7 @@
"description": "Alarms that have their display automatically cleared",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"statictype": "static"
}
@@ -533,7 +533,7 @@
"description": "Flow rate above which broken pipe alarm is set in 1/256 l/h",
"version": {
"first": 133,
- "last": 152
+ "last": 154
},
"values": {
"default": 639999,
@@ -610,7 +610,7 @@
"description": "Time threshold for leak alarm in minutes",
"version": {
"first": 119,
- "last": 152
+ "last": 154
},
"values": {
"default": 360,
@@ -687,7 +687,7 @@
"description": "Number of measurements in reverse flow required to set reverse flow alarm",
"version": {
"first": 143,
- "last": 152
+ "last": 154
},
"values": {
"default": 15,
@@ -716,7 +716,7 @@
"description": "Timezone in which this application is set to run.",
"version": {
"first": 24,
- "last": 152
+ "last": 154
},
"values": {
"default": 0,
@@ -745,7 +745,7 @@
"description": "A name for the arrangement of applications on the meter",
"version": {
"first": 130,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -792,7 +792,7 @@
"description": "The number of times the meter has rebooted",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"minimum": 0,
@@ -868,7 +868,7 @@
"description": "Time threshold for broken pipe alarm in minutes",
"version": {
"first": 119,
- "last": 152
+ "last": 154
},
"values": {
"default": 180,
@@ -969,7 +969,7 @@
"description": "Flow rate above which leak alarm can be set in 1/256 l/h",
"version": {
"first": 133,
- "last": 152
+ "last": 154
},
"values": {
"default": 6399,
@@ -998,7 +998,7 @@
"description": "Charge in uAs available in manufacturing (read only)",
"version": {
"first": 84,
- "last": 152
+ "last": 154
},
"values": {
"default": 181440000
@@ -1073,7 +1073,7 @@
"description": "High temperature alarm threshold in 0.1°C",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 500,
@@ -1126,7 +1126,7 @@
"description": "Time threshold for high temperature alarm in seconds",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 600,
@@ -1203,7 +1203,7 @@
"description": "Low temperature alarm threshold in 0.1°C",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 20,
@@ -1256,7 +1256,7 @@
"description": "Time threshold for low temperature alarm in seconds",
"version": {
"first": 111,
- "last": 152
+ "last": 154
},
"values": {
"default": 600,
@@ -1333,7 +1333,7 @@
"description": "High pressure alarm threshold in Pa",
"version": {
"first": 122,
- "last": 152
+ "last": 154
},
"values": {
"default": 1600000,
@@ -1410,7 +1410,7 @@
"description": "Time threshold for high pressure alarm in seconds",
"version": {
"first": 119,
- "last": 152
+ "last": 154
},
"values": {
"default": 600,
@@ -1487,7 +1487,7 @@
"description": "Low pressure alarm threshold in Pa",
"version": {
"first": 122,
- "last": 152
+ "last": 154
},
"values": {
"default": 30000,
@@ -1564,7 +1564,7 @@
"description": "Time threshold for low pressure alarm in seconds",
"version": {
"first": 119,
- "last": 152
+ "last": 154
},
"values": {
"default": 600,
@@ -1612,7 +1612,7 @@
"description": "Store all configuration items in non-volatile memory.",
"version": {
"first": 131,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -1636,7 +1636,7 @@
"description": "Customer serial number string",
"version": {
"first": 139,
- "last": 152
+ "last": 154
},
"statictype": "static"
}
@@ -1660,7 +1660,7 @@
"description": "Internal backup of calendar seconds",
"version": {
"first": 145,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -1684,7 +1684,7 @@
"description": "Time meter was determined to have been installed. 0 means not installed",
"version": {
"first": 147,
- "last": 152
+ "last": 154
},
"statictype": "infrequentlyupdated"
}
@@ -1708,7 +1708,7 @@
"description": "Read to view the string used as a decimal point for this locale",
"version": {
"first": 151,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -1732,7 +1732,7 @@
"description": "Read to view the string used as a thousands separarator for this locale",
"version": {
"first": 151,
- "last": 152
+ "last": 154
},
"statictype": "dynamic"
}
@@ -2106,7 +2106,7 @@
"id": 10,
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"registers": {
"GP30Test": {
@@ -2127,7 +2127,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2151,7 +2151,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2175,7 +2175,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2199,7 +2199,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2223,7 +2223,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2247,7 +2247,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2271,7 +2271,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2295,7 +2295,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2319,7 +2319,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2343,7 +2343,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2367,7 +2367,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2391,7 +2391,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2415,7 +2415,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2439,7 +2439,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 1003
},
"statictype": null
}
@@ -2691,7 +2691,7 @@
"id": 16,
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"registers": {
"TxInterval": {
@@ -2712,7 +2712,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 15,
@@ -2741,7 +2741,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 3600,
@@ -2770,7 +2770,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 3,
@@ -2799,7 +2799,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 3,
@@ -2828,7 +2828,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 7,
@@ -2857,7 +2857,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 433,
@@ -2886,7 +2886,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -2915,7 +2915,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -2944,7 +2944,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 1,
@@ -2973,7 +2973,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3002,7 +3002,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3031,7 +3031,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3060,7 +3060,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3089,7 +3089,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3118,7 +3118,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"statictype": "static"
}
@@ -3142,7 +3142,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 25,
@@ -3171,7 +3171,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 360,
@@ -3200,7 +3200,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 2500,
@@ -3229,7 +3229,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 180,
@@ -3258,7 +3258,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 160,
@@ -3287,7 +3287,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 3,
@@ -3316,7 +3316,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 600,
@@ -3345,7 +3345,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 600,
@@ -3374,7 +3374,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 60,
@@ -3403,7 +3403,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3432,7 +3432,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3461,7 +3461,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 50,
@@ -3490,7 +3490,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 2,
@@ -3519,7 +3519,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 600,
@@ -3548,7 +3548,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 600,
@@ -3577,7 +3577,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 60,
@@ -3606,7 +3606,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"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": 482
+ "last": 485
},
"values": {
"default": 4,
@@ -3664,7 +3664,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 1,
@@ -3693,7 +3693,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 1,
@@ -3722,7 +3722,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"statictype": "infrequentlyupdated"
}
@@ -3746,7 +3746,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"statictype": "infrequentlyupdated"
}
@@ -3770,7 +3770,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 207,
@@ -3799,7 +3799,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 60,
@@ -3828,7 +3828,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 29,
@@ -3857,7 +3857,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3886,7 +3886,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"statictype": "static"
}
@@ -3910,7 +3910,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"statictype": "static"
}
@@ -3934,7 +3934,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3963,7 +3963,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -3992,7 +3992,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4021,7 +4021,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4050,7 +4050,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4079,7 +4079,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 19,
@@ -4108,7 +4108,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4137,7 +4137,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 1,
@@ -4166,7 +4166,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"statictype": "dynamic"
}
@@ -4190,7 +4190,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4219,7 +4219,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 201335811,
@@ -4248,7 +4248,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 60,
@@ -4277,7 +4277,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 5,
@@ -4306,7 +4306,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 201335811,
@@ -4335,7 +4335,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 1,
@@ -4364,7 +4364,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4393,7 +4393,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4422,7 +4422,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 4,
@@ -4451,7 +4451,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 4,
@@ -4480,7 +4480,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4509,7 +4509,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4538,7 +4538,7 @@
"description": "Lorem ipsum",
"version": {
"first": 100,
- "last": 482
+ "last": 485
},
"values": {
"default": 0,
@@ -4567,7 +4567,7 @@
"description": "Lorem ipsum",
"version": {
"first": 412,
- "last": 482
+ "last": 485
},
"values": {
"default": 4320000,
@@ -4596,7 +4596,7 @@
"description": "Lorem ipsum",
"version": {
"first": 412,
- "last": 482
+ "last": 485
},
"values": {
"default": 1000,
@@ -4625,7 +4625,7 @@
"description": "Storage item for HistoricalErrorLimitCounters Reverse(1, hi) and Leak(0, lo)",
"version": {
"first": 437,
- "last": 482
+ "last": 485
},
"values": {
"default": 16711935,
@@ -4654,7 +4654,7 @@
"description": "Storage item for HistoricalErrorLimitCounters Magnet(3, hi) and Air(2, lo)",
"version": {
"first": 437,
- "last": 482
+ "last": 485
},
"values": {
"default": 16711935,
@@ -4683,7 +4683,7 @@
"description": "Storage item for HistoricalErrorLimitCounters PressureMin(5, hi) and PressureMax(4, lo)",
"version": {
"first": 437,
- "last": 482
+ "last": 485
},
"values": {
"default": 16711935,
@@ -4712,7 +4712,7 @@
"description": "Storage item for HistoricalErrorLimitCounters TempMin(7, hi) and TempMax(6, lo)",
"version": {
"first": 437,
- "last": 482
+ "last": 485
},
"values": {
"default": 16711935,
@@ -4722,6 +4722,93 @@
"statictype": "infrequentlyupdated"
}
]
+ },
+ "PressureCalibration": {
+ "id": 74,
+ "details": [
+ {
+ "type": "int16_t",
+ "privilege": {
+ "lvl1": "RW",
+ "lvl2": "RW",
+ "lvl3": "RW",
+ "lvl4": "RW",
+ "lvl5": "RW",
+ "lvl6": "RW",
+ "lvl7": "RW",
+ "lvl8": "RW"
+ },
+ "description": "Lorem ipsum",
+ "version": {
+ "first": 483,
+ "last": 485
+ },
+ "values": {
+ "default": 0,
+ "minimum": -128,
+ "maximum": 127
+ },
+ "statictype": "infrequentlyupdated"
+ }
+ ]
+ },
+ "TfxSecondaryChannelInfo_1": {
+ "id": 75,
+ "details": [
+ {
+ "type": "int32_t",
+ "privilege": {
+ "lvl1": "RW",
+ "lvl2": "RW",
+ "lvl3": "RW",
+ "lvl4": "RW",
+ "lvl5": "RW",
+ "lvl6": "RW",
+ "lvl7": "RW",
+ "lvl8": "RW"
+ },
+ "description": "Lorem ipsum",
+ "version": {
+ "first": 482,
+ "last": 485
+ },
+ "values": {
+ "default": 0,
+ "minimum": -128,
+ "maximum": 127
+ },
+ "statictype": "infrequentlyupdated"
+ }
+ ]
+ },
+ "TfxSecondaryChannelInfo_2": {
+ "id": 76,
+ "details": [
+ {
+ "type": "int32_t",
+ "privilege": {
+ "lvl1": "RW",
+ "lvl2": "RW",
+ "lvl3": "RW",
+ "lvl4": "RW",
+ "lvl5": "RW",
+ "lvl6": "RW",
+ "lvl7": "RW",
+ "lvl8": "RW"
+ },
+ "description": "Lorem ipsum",
+ "version": {
+ "first": 482,
+ "last": 485
+ },
+ "values": {
+ "default": 0,
+ "minimum": -128,
+ "maximum": 127
+ },
+ "statictype": "infrequentlyupdated"
+ }
+ ]
}
},
"status": {
@@ -4746,7 +4833,7 @@
"id": 4,
"version": {
"first": 3,
- "last": 221
+ "last": 224
},
"registers": {
"Privilege": {
@@ -4767,7 +4854,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": 221
+ "last": 224
},
"values": {
"default": 0,
@@ -4796,7 +4883,7 @@
"description": "Password for logging in, requires 3 consecutive writes",
"version": {
"first": 3,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4820,7 +4907,7 @@
"description": "Remote file operations, use this to open a file on the meter, handle returned",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4844,7 +4931,7 @@
"description": "Remote file operations, use this to close a file on the meter",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4868,7 +4955,7 @@
"description": "Remote file operations, use this to read bytes from an open file",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4892,7 +4979,7 @@
"description": "Remote file operations, use this to write bytes to an open file",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4916,7 +5003,7 @@
"description": "Remote file operations, use this to seek within an open file",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4940,7 +5027,7 @@
"description": "Remote file operations, use this to determine position within an open file",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4964,7 +5051,7 @@
"description": "Remote file operations, use this to delete a file",
"version": {
"first": 20,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -4988,7 +5075,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": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -5012,7 +5099,7 @@
"description": "Returns a list of files in the filesystem that matches a string containing wildcards passed in",
"version": {
"first": 49,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -5036,7 +5123,7 @@
"description": "String containing the PCB serial number. Note, this can be read at any login level including 0",
"version": {
"first": 59,
- "last": 221
+ "last": 224
},
"statictype": "static"
}
@@ -5060,7 +5147,7 @@
"description": "Bitmask of login levels permitted to manipulate dangerous files",
"version": {
"first": 59,
- "last": 221
+ "last": 224
},
"statictype": "static"
}
@@ -5084,7 +5171,7 @@
"description": "Remote file operations, use this to flush write buffers to an open file",
"version": {
"first": 66,
- "last": 221
+ "last": 224
},
"statictype": "dynamic"
}
@@ -5193,7 +5280,7 @@
"id": 21,
"version": {
"first": 1,
- "last": 54
+ "last": 56
},
"registers": {
"EraseRMA": {
@@ -5214,7 +5301,7 @@
"description": "Writing TRUE to this register erases the RMA area",
"version": {
"first": 7,
- "last": 54
+ "last": 56
},
"statictype": "dynamic"
}
@@ -5238,7 +5325,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": 54
+ "last": 56
},
"statictype": "dynamic"
}
@@ -5312,7 +5399,7 @@
"id": 0,
"version": {
"first": 141,
- "last": 509
+ "last": 511
},
"registers": {
"TriggerUpgrade": {
@@ -5333,7 +5420,7 @@
"description": "Writing TRUE to this register internally calls SysTriggerUpgrade() then returns the result.",
"version": {
"first": 141,
- "last": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5357,7 +5444,7 @@
"description": "Writing an application id number allows the version number of that application to be read back.",
"version": {
"first": 150,
- "last": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5381,7 +5468,7 @@
"description": "A string reporting the PCB serial number, this string must be set using production equipment.",
"version": {
"first": 169,
- "last": 509
+ "last": 511
},
"values": {
"default": ""
@@ -5408,7 +5495,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": 509
+ "last": 511
},
"values": {
"default": ""
@@ -5435,7 +5522,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": 509
+ "last": 511
},
"values": {
"default": ""
@@ -5462,7 +5549,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": 509
+ "last": 511
},
"values": {
"default": ""
@@ -5489,7 +5576,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": 509
+ "last": 511
},
"values": {
"default": ""
@@ -5516,7 +5603,7 @@
"description": "The number of seconds since reboot.",
"version": {
"first": 176,
- "last": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5540,7 +5627,7 @@
"description": "The number of seconds since 01-Jan-2000.",
"version": {
"first": 176,
- "last": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5564,7 +5651,7 @@
"description": "A string reporting the product version string held in the system core binary.",
"version": {
"first": 196,
- "last": 509
+ "last": 511
},
"statictype": "static"
}
@@ -5588,7 +5675,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": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5612,7 +5699,7 @@
"description": "Writing an application id number allows the exit error number of that application to be read back.",
"version": {
"first": 258,
- "last": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5636,7 +5723,7 @@
"description": "Reports the instruction set of the hosting microprocessor in b8-15 and allocated platform number in b0-7.",
"version": {
"first": 265,
- "last": 509
+ "last": 511
},
"statictype": "static"
}
@@ -5660,7 +5747,7 @@
"description": "Writing an application id number allows the CRC of that application to be read back.",
"version": {
"first": 279,
- "last": 509
+ "last": 511
},
"statictype": "dynamic"
}
@@ -5684,7 +5771,7 @@
"description": "Bitfield of permissions releated to firmware upgrade",
"version": {
"first": 470,
- "last": 509
+ "last": 511
},
"statictype": "static"
}
@@ -5963,7 +6050,7 @@
"id": 18,
"version": {
"first": 4,
- "last": 108
+ "last": 110
},
"registers": {
"ILoopMaxFlowRate": {
@@ -6003,7 +6090,7 @@
"description": "The flow rate that gives max output on the current loop",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"statictype": "static"
}
@@ -6046,7 +6133,7 @@
"description": "Writing TRUE to this register stores the values of the other registers to the non-volatile memory",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"statictype": "dynamic"
}
@@ -6118,7 +6205,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": 108
+ "last": 110
},
"values": {
"default": 32000,
@@ -6195,7 +6282,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": 108
+ "last": 110
},
"values": {
"default": 0,
@@ -6272,7 +6359,7 @@
"description": "The length of a pulse. This is an enum of type pulse_length_t.",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 4,
@@ -6325,7 +6412,7 @@
"description": "The units of flow rate to display on the LCD. An enum of type displayflowunits_t",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 4,
@@ -6378,7 +6465,7 @@
"description": "Position of the decimal point on the LCD for flow rate. An enum of type displayflowpoint_t",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 2,
@@ -6426,7 +6513,7 @@
"description": "The update rate for the current loop",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"statictype": "static"
}
@@ -6474,7 +6561,7 @@
"description": "Units for displaying temperature on the LCD. 0 – Celcius, 1 – Fahrenheit.",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 0,
@@ -6527,7 +6614,7 @@
"description": "Units for displaying pressure on the LCD. 0 – Mpa, 1 – PSI.",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 0,
@@ -6604,7 +6691,7 @@
"description": "Time between pressure measurements in milliseconds",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 60000,
@@ -6705,7 +6792,7 @@
"description": "Value in Pa to subtract from measured value to correct for atmospheric pressure",
"version": {
"first": 82,
- "last": 108
+ "last": 110
},
"values": {
"default": 0,
@@ -6758,7 +6845,7 @@
"description": "Whether there is a pressure sensor present",
"version": {
"first": 71,
- "last": 108
+ "last": 110
},
"values": {
"default": 0,
@@ -6787,7 +6874,7 @@
"description": "Write TRUE to trigger a pressure measurement, Read to get the latest measured value in Pa",
"version": {
"first": 65,
- "last": 108
+ "last": 110
},
"statictype": "dynamic"
}
@@ -6811,7 +6898,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": 108
+ "last": 110
},
"statictype": "dynamic"
}
@@ -6835,7 +6922,7 @@
"description": "Generate some artificial pulses, used for testing",
"version": {
"first": 97,
- "last": 108
+ "last": 110
},
"values": {
"minimum": 0,
@@ -6863,7 +6950,7 @@
"description": "Generate some artificial pulses, used for testing",
"version": {
"first": 97,
- "last": 108
+ "last": 110
},
"values": {
"minimum": 0,
@@ -6891,7 +6978,7 @@
"description": "Boolean value for whether pulse output is to space the pulses evenly (TRUE) or grouped (FALSE)",
"version": {
"first": 98,
- "last": 108
+ "last": 110
},
"values": {
"default": 1,
@@ -6920,7 +7007,7 @@
"description": "The number of bits of fractional resolution in a pulse event",
"version": {
"first": 98,
- "last": 108
+ "last": 110
},
"values": {
"minimum": 0,
@@ -6948,7 +7035,7 @@
"description": "Value in Pa to add to measured value after recalibration to correct for sensor drift over time",
"version": {
"first": 108,
- "last": 108
+ "last": 110
},
"statictype": "static"
}
@@ -6977,7 +7064,7 @@
"id": 8,
"version": {
"first": 1,
- "last": 17
+ "last": 18
},
"registers": {
"Quota": {
@@ -6998,7 +7085,7 @@
"description": "A quota in bytes for the log. The Logger does not apply any policy to how the quota is allocated, this is left as a restriction to be applied on a product by product basis.",
"version": {
"first": 1,
- "last": 17
+ "last": 18
},
"values": {
"default": 4096,
@@ -7027,7 +7114,7 @@
"description": "The drive to write to.",
"version": {
"first": 1,
- "last": 17
+ "last": 18
},
"values": {
"default": 1,
@@ -7056,7 +7143,7 @@
"description": "Writing TRUE will force a log flush",
"version": {
"first": 7,
- "last": 17
+ "last": 18
},
"statictype": "dynamic"
}
@@ -7080,7 +7167,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 16,
- "last": 17
+ "last": 18
},
"statictype": "dynamic"
}
@@ -7119,7 +7206,7 @@
"id": 98,
"version": {
"first": null,
- "last": null
+ "last": 36
},
"registers": {
"OutputFile": {
@@ -7140,7 +7227,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 36
},
"statictype": null
}
@@ -7164,7 +7251,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 36
},
"statictype": null
}
@@ -7188,7 +7275,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 36
},
"statictype": null
}
@@ -7212,7 +7299,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 36
},
"statictype": null
}
@@ -7236,7 +7323,7 @@
"description": "Lorem ipsum",
"version": {
"first": null,
- "last": null
+ "last": 36
},
"statictype": null
}
@@ -7315,7 +7402,7 @@
"id": 17,
"version": {
"first": 1,
- "last": 70
+ "last": 72
},
"registers": {
"DataLogContents": {
@@ -7336,7 +7423,7 @@
"description": "Bit Mask of the items to store in LOG memory",
"version": {
"first": 10,
- "last": 70
+ "last": 72
},
"values": {
"default": 201335811,
@@ -7365,7 +7452,7 @@
"description": "Storage Period of the LOG memory in minutes",
"version": {
"first": 10,
- "last": 70
+ "last": 72
},
"values": {
"default": 60,
@@ -7394,7 +7481,7 @@
"description": "Averiging period for the Min/Max calculation of LOG&FDR memory",
"version": {
"first": 10,
- "last": 70
+ "last": 72
},
"values": {
"default": 5,
@@ -7423,7 +7510,7 @@
"description": "Bit Mask of the items to store in FDR memory",
"version": {
"first": 10,
- "last": 70
+ "last": 72
},
"values": {
"default": 201335811,
@@ -7452,7 +7539,7 @@
"description": "The day of month the FDR storage will take place at 00:00",
"version": {
"first": 10,
- "last": 70
+ "last": 72
},
"values": {
"default": 1,
@@ -7481,7 +7568,7 @@
"description": "A counter used for internal purposes",
"version": {
"first": 15,
- "last": 70
+ "last": 72
},
"values": {
"default": 0,
@@ -7510,7 +7597,7 @@
"description": "A counter to monitor the application resets",
"version": {
"first": 20,
- "last": 70
+ "last": 72
},
"values": {
"default": 0,
@@ -7549,7 +7636,7 @@
"id": 1,
"version": {
"first": 17,
- "last": 67
+ "last": 68
},
"registers": {
"BatteryVoltage": {
@@ -7570,7 +7657,7 @@
"description": "Measured battery terminal voltage in 1mV units.",
"version": {
"first": 17,
- "last": 67
+ "last": 68
},
"statictype": "dynamic"
}
@@ -7594,7 +7681,7 @@
"description": "String describing the battery brand.",
"version": {
"first": 17,
- "last": 67
+ "last": 68
},
"values": {
"default": "Tadiran"
@@ -7621,7 +7708,7 @@
"description": "One of: 0 = battery absent; 1 = built in; 2 = other; 3 = AA; 4 = AAA; 5 = C; 6 = D; 255 = unknown",
"version": {
"first": 17,
- "last": 67
+ "last": 68
},
"values": {
"default": 6,
@@ -7672,7 +7759,7 @@
"description": "The number of installed batteries.",
"version": {
"first": 60,
- "last": 67
+ "last": 68
},
"values": {
"default": 1,
@@ -7701,7 +7788,7 @@
"description": "Datasheet terminal voltage in 100mV units as manufactured.",
"version": {
"first": 17,
- "last": 67
+ "last": 68
},
"values": {
"default": 36,
@@ -7730,7 +7817,7 @@
"description": "Datasheet terminal voltage in 100mV units below which the cell is considered empty.",
"version": {
"first": 17,
- "last": 67
+ "last": 68
},
"values": {
"default": 28,
@@ -7759,7 +7846,7 @@
"description": "Chosen manufacturer from the internal lookup table of known batteries.",
"version": {
"first": 20,
- "last": 67
+ "last": 68
},
"values": {
"default": 0,
@@ -7788,7 +7875,7 @@
"description": "Accumulated charge used in uAs.",
"version": {
"first": 24,
- "last": 67
+ "last": 68
},
"statictype": "dynamic"
}
@@ -7812,7 +7899,7 @@
"description": "Elapsed time since manufacture in seconds.",
"version": {
"first": 39,
- "last": 67
+ "last": 68
},
"statictype": "dynamic"
}
@@ -7836,7 +7923,7 @@
"description": "Time in seconds for which the projected end time cannot exceed.",
"version": {
"first": 39,
- "last": 67
+ "last": 68
},
"values": {
"default": 473040000,
@@ -7865,7 +7952,7 @@
"description": "Datasheet capacity in mAh units as manufactured.",
"version": {
"first": 45,
- "last": 67
+ "last": 68
},
"values": {
"default": 19000,
@@ -7894,7 +7981,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 61,
- "last": 67
+ "last": 68
},
"statictype": "dynamic"
}
@@ -7918,7 +8005,7 @@
"description": "The number of 15 minute periods of consecutive low battery voltage required for the battery to be deemed critically low",
"version": {
"first": 66,
- "last": 67
+ "last": 68
},
"values": {
"default": 96,
@@ -7982,7 +8069,7 @@
"id": 15,
"version": {
"first": 7,
- "last": 606
+ "last": 303
},
"registers": {
"SampleRate": {
@@ -8051,7 +8138,7 @@
"description": "The rate in Hz that each GP30 takes measurements",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 2,
@@ -8123,7 +8210,7 @@
"description": "The rate in Hz that each GP30 takes measurements",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 2,
@@ -8176,7 +8263,7 @@
"description": "The first hit level in the upstream direction for channel 1, units of 0.88mV",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -8248,7 +8335,7 @@
"description": "The first hit level in the upstream direction for channel 1, units of 0.88mV",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -8301,7 +8388,7 @@
"description": "The first hit level in the upstream direction for channel 2, units of 0.88mV",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -8373,7 +8460,7 @@
"description": "The first hit level in the upstream direction for channel 2, units of 0.88mV",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -8426,7 +8513,7 @@
"description": "The first hit level in the upstream direction for channel 3, units of 0.88mV",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -8498,7 +8585,7 @@
"description": "The first hit level in the upstream direction for channel 3, units of 0.88mV",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -8551,7 +8638,7 @@
"description": "The first hit level in the downstream direction for channel 1, units of 0.88mV",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -8623,7 +8710,7 @@
"description": "The first hit level in the downstream direction for channel 1, units of 0.88mV",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -8676,7 +8763,7 @@
"description": "The first hit level in the downstream direction for channel 2, units of 0.88mV",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -8748,7 +8835,7 @@
"description": "The first hit level in the downstream direction for channel 2, units of 0.88mV",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -8801,7 +8888,7 @@
"description": "The first hit level in the downstream direction for channel 3, units of 0.88mV",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -8873,7 +8960,7 @@
"description": "The first hit level in the downstream direction for channel 3, units of 0.88mV",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -8926,7 +9013,7 @@
"description": "The hit number to consider as the first hit",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 6,
@@ -8998,7 +9085,7 @@
"description": "The hit number to consider as the first hit",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 6,
@@ -9051,7 +9138,7 @@
"description": "Where to stop running the amplitude peak detection",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 19,
@@ -9123,7 +9210,7 @@
"description": "Where to stop running the amplitude peak detection",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 19,
@@ -9176,7 +9263,7 @@
"description": "The number of pulses to fire for a measurement",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 17,
@@ -9248,7 +9335,7 @@
"description": "The number of pulses to fire for a measurement",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 17,
@@ -9301,7 +9388,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": 302
+ "last": 303
},
"values": {
"default": -6,
@@ -9373,7 +9460,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": 606
+ "last": 303
},
"values": {
"default": -6,
@@ -9426,7 +9513,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": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -9498,7 +9585,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": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -9575,7 +9662,7 @@
"description": "The meter pipe size",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 1,
@@ -9647,7 +9734,7 @@
"description": "The meter pipe size",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 1,
@@ -9724,7 +9811,7 @@
"description": "The calibration factor for ultrasonic channel 1",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 15625,
@@ -9796,7 +9883,7 @@
"description": "The calibration factor for ultrasonic channel 1",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 15625,
@@ -9873,7 +9960,7 @@
"description": "The calibration factor for ultrasonic channel 2",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 15625,
@@ -9945,7 +10032,7 @@
"description": "The calibration factor for ultrasonic channel 2",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 15625,
@@ -10022,7 +10109,7 @@
"description": "The calibration factor for ultrasonic channel 3",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 15625,
@@ -10094,7 +10181,7 @@
"description": "The calibration factor for ultrasonic channel 3",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 15625,
@@ -10171,7 +10258,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": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -10243,7 +10330,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": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -10320,7 +10407,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": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -10392,7 +10479,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": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -10469,7 +10556,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": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -10541,7 +10628,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": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -10570,7 +10657,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": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -10627,7 +10714,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": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -10670,7 +10757,7 @@
"description": "Write 1 to reset all accumulated volume to zero",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -10727,7 +10814,7 @@
"description": "Write 1 to reset all accumulated volume to zero",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -10775,7 +10862,7 @@
"description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -10847,7 +10934,7 @@
"description": "The forward flow direction. 0 - undecided, 1 - right, 2 - left",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -10924,7 +11011,7 @@
"description": "The type of data output by the green LED",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -10996,7 +11083,7 @@
"description": "The type of data output by the green LED",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -11025,7 +11112,7 @@
"description": "Write 1 to store calibration values to non-volatile storage. Read back for status",
"version": {
"first": 54,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -11082,7 +11169,7 @@
"description": "Write 1 to store calibration values to non-volatile storage. Read back for status",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -11106,7 +11193,7 @@
"description": "The forward flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 54,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -11163,7 +11250,7 @@
"description": "The forward flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -11187,7 +11274,7 @@
"description": "The reverse flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 54,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -11244,7 +11331,7 @@
"description": "The reverse flow accumulator volume. The scale depends on the meter size",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -11292,7 +11379,7 @@
"description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 200,
@@ -11364,7 +11451,7 @@
"description": "The volume that must pass in LowFlowMaxPeriod for it to be registered as real flow. Units of ml",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 200,
@@ -11417,7 +11504,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": 302
+ "last": 303
},
"values": {
"default": 3932160,
@@ -11489,7 +11576,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": 606
+ "last": 303
},
"values": {
"default": 3932160,
@@ -11542,7 +11629,7 @@
"description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -11614,7 +11701,7 @@
"description": "The amount of flow in ml to accumulate before updating the main scaled accumulators.",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -11667,7 +11754,7 @@
"description": "The net volume in ml that must flow in one direction for the forward arrow to be set",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 5000000,
@@ -11739,7 +11826,7 @@
"description": "The net volume in ml that must flow in one direction for the forward arrow to be set",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 5000000,
@@ -11792,7 +11879,7 @@
"description": "The fire buffer within the GP30 on channel 1 to be used",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 1,
@@ -11864,7 +11951,7 @@
"description": "The fire buffer within the GP30 on channel 1 to be used",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 1,
@@ -11917,7 +12004,7 @@
"description": "The fire buffer within the GP30 on channel 2 to be used",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 1,
@@ -11989,7 +12076,7 @@
"description": "The fire buffer within the GP30 on channel 2 to be used",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 1,
@@ -12042,7 +12129,7 @@
"description": "The fire buffer within the GP30 on channel 3 to be used",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 1,
@@ -12114,7 +12201,7 @@
"description": "The fire buffer within the GP30 on channel 3 to be used",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 1,
@@ -12162,7 +12249,7 @@
"description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -12219,7 +12306,7 @@
"description": "Write 1 to put GenesisFlow in Active mode. This is the normal measurement mode",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -12243,7 +12330,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": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -12315,7 +12402,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": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -12368,7 +12455,7 @@
"description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 309237,
@@ -12440,7 +12527,7 @@
"description": "The maximum delta time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 309237,
@@ -12493,7 +12580,7 @@
"description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 24739011,
@@ -12565,7 +12652,7 @@
"description": "The maximum absolute time of flight, above this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 24739011,
@@ -12618,7 +12705,7 @@
"description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 13743895,
@@ -12690,7 +12777,7 @@
"description": "The minimum absolute time of flight, below this the measurement is deemed bad. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 13743895,
@@ -12743,7 +12830,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 1",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -12815,7 +12902,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 1",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -12868,7 +12955,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 2",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -12940,7 +13027,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 2",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -12993,7 +13080,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 3",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -13065,7 +13152,7 @@
"description": "The percentage of the measured amplitude to use for the first hit level for channel 3",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -13118,7 +13205,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": 302
+ "last": 303
},
"values": {
"default": 4,
@@ -13190,7 +13277,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": 606
+ "last": 303
},
"values": {
"default": 4,
@@ -13243,7 +13330,7 @@
"description": "Minimum absolute first hit level value",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 20,
@@ -13315,7 +13402,7 @@
"description": "Minimum absolute first hit level value",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 20,
@@ -13368,7 +13455,7 @@
"description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 16,
@@ -13440,7 +13527,7 @@
"description": "The number of ToF errors to allow before resetting the first hit levels to FirstHitMinimum",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 16,
@@ -13493,7 +13580,7 @@
"description": "The period (in seconds) between first hit level updates",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 10,
@@ -13565,7 +13652,7 @@
"description": "The period (in seconds) between first hit level updates",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 10,
@@ -13618,7 +13705,7 @@
"description": "The time (in seconds) to maintain zero flow after leaving empty pipe",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 30,
@@ -13690,7 +13777,7 @@
"description": "The time (in seconds) to maintain zero flow after leaving empty pipe",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 30,
@@ -13743,7 +13830,7 @@
"description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -13815,7 +13902,7 @@
"description": "The calibration offset for the temperature measurement on channel 1. In units of 2^-38 seconds",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -13868,7 +13955,7 @@
"description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -13940,7 +14027,7 @@
"description": "The calibration offset for the temperature measurement on channel 2. In units of 2^-38 seconds",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -13993,7 +14080,7 @@
"description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -14065,7 +14152,7 @@
"description": "The calibration offset for the temperature measurement on channel 3. In units of 2^-38 seconds",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -14117,7 +14204,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": 302
+ "last": 303
},
"values": {
"minimum": 0,
@@ -14186,7 +14273,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": 606
+ "last": 303
},
"values": {
"minimum": 0,
@@ -14233,7 +14320,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
},
@@ -14290,7 +14377,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"statictype": "dynamic"
}
@@ -14338,7 +14425,7 @@
"description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -14410,7 +14497,7 @@
"description": "Write 1 to stop various display related registers being changed. Read back 1 for 'sealed' 0 for 'unsealed'",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -14463,7 +14550,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": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -14535,7 +14622,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": 606
+ "last": 303
},
"values": {
"default": 0,
@@ -14588,7 +14675,7 @@
"description": "Maximum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 2936012800,
@@ -14660,7 +14747,7 @@
"description": "Maximum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 2936012800,
@@ -14713,7 +14800,7 @@
"description": "Minimum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 209715200,
@@ -14785,7 +14872,7 @@
"description": "Minimum amplitude for a valid signal in 2^-22mV units",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 209715200,
@@ -14838,7 +14925,7 @@
"description": "Number of hard errors to allow before declaring a fatal error",
"version": {
"first": 268,
- "last": 302
+ "last": 303
},
"values": {
"default": 4,
@@ -14910,7 +14997,7 @@
"description": "Number of hard errors to allow before declaring a fatal error",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 4,
@@ -14939,7 +15026,7 @@
"description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)",
"version": {
"first": 273,
- "last": 302
+ "last": 303
},
"values": {
"default": 1,
@@ -15011,7 +15098,7 @@
"description": "The timeout for an ultrasonic measurement (0 - 128us, 1 - 256us, 2 - 1024us, 3 - 4096us)",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 1,
@@ -15040,7 +15127,7 @@
"description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units",
"version": {
"first": 280,
- "last": 302
+ "last": 303
},
"values": {
"default": 109951,
@@ -15112,7 +15199,7 @@
"description": "The maximum deviation of a valid delta tof from the recent mean. In 2^-38 seconds units",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 109951,
@@ -15141,7 +15228,7 @@
"description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius",
"version": {
"first": 289,
- "last": 302
+ "last": 303
},
"values": {
"default": 8192,
@@ -15213,7 +15300,7 @@
"description": "The maximum range of temperatures between channels before one is rejected. In units of 2^-12 degrees celcius",
"version": {
"first": 601,
- "last": 606
+ "last": 303
},
"values": {
"default": 8192,
@@ -15242,7 +15329,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": 302
+ "last": 303
},
"values": {
"default": 137438,
@@ -15314,7 +15401,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": 606
+ "last": 303
},
"values": {
"default": 137438,
@@ -15343,7 +15430,7 @@
"description": "Read for the current loaded lookup table CRC, write to set the expected CRC.",
"version": {
"first": 295,
- "last": 302
+ "last": 303
},
"statictype": "dynamic"
}
@@ -15367,7 +15454,7 @@
"description": "Whether to display leading zeros on row 2. If false leading zeros will be replaced with a space",
"version": {
"first": 302,
- "last": 302
+ "last": 303
},
"values": {
"default": 0,
@@ -15711,7 +15798,7 @@
"id": 20,
"version": {
"first": 10,
- "last": 200
+ "last": 203
},
"registers": {
"PulseReportRate": {
@@ -15780,7 +15867,7 @@
"description": "The rate at which pulse reports are sent to the IrDA pulse adapter",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"default": 0,
@@ -15881,7 +15968,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": 200
+ "last": 203
},
"values": {
"default": 3,
@@ -15979,7 +16066,7 @@
"description": "The present sequence number used in pulse reports",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"minimum": 0,
@@ -16045,7 +16132,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"statictype": "dynamic"
}
@@ -16141,7 +16228,7 @@
"description": "The number of digits to use for AMR",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"default": 8,
@@ -16218,7 +16305,7 @@
"description": "The offset of the AMR smallest digit from the right (always negative)",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"default": 0,
@@ -16295,7 +16382,7 @@
"description": "A bitfield of the optional fields being used for UI-1203",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"default": 268,
@@ -16348,7 +16435,7 @@
"description": "A timestamp of meter manufacture in seconds since 1/1/2000 00:00:00 UTC",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"default": 0,
@@ -16425,7 +16512,7 @@
"description": "Whether or not to display AMR digits on the screen",
"version": {
"first": 161,
- "last": 200
+ "last": 203
},
"values": {
"default": 0,
@@ -16454,7 +16541,7 @@
"description": "The serial number of the current pulse adapter",
"version": {
"first": 193,
- "last": 200
+ "last": 203
},
"statictype": "infrequentlyupdated"
}
@@ -16478,7 +16565,7 @@
"description": "The firmware version of the current pulse adapter",
"version": {
"first": 193,
- "last": 200
+ "last": 203
},
"statictype": "infrequentlyupdated"
}
@@ -16522,7 +16609,7 @@
"id": 23,
"version": {
"first": 41,
- "last": 99
+ "last": 100
},
"registers": {
"StoreConfiguration": {
@@ -16543,7 +16630,7 @@
"description": "Write 1 to store configuration values to non-volatile storage. Read back for status",
"version": {
"first": 41,
- "last": 99
+ "last": 100
},
"statictype": "dynamic"
}
@@ -16567,7 +16654,7 @@
"description": "Bitmask of enabled predefined alarms",
"version": {
"first": 41,
- "last": 99
+ "last": 100
},
"values": {
"default": 561047,
@@ -16701,7 +16788,7 @@
"id": 22,
"version": {
"first": 1,
- "last": 195
+ "last": 197
},
"registers": {
"StoreConfiguration": {
@@ -16722,7 +16809,7 @@
"description": "Store all configuration items in non-volatile memory.",
"version": {
"first": 147,
- "last": 195
+ "last": 197
},
"statictype": "dynamic"
}
@@ -16746,7 +16833,7 @@
"description": "Override the maximum number of entries per log (0 keeps default)",
"version": {
"first": 147,
- "last": 195
+ "last": 197
},
"statictype": "static"
}
@@ -16765,7 +16852,7 @@
"id": 26,
"version": {
"first": 1,
- "last": 17
+ "last": 18
},
"registers": {
"UpgState": {
@@ -16786,7 +16873,7 @@
"description": "Lorem Ipsum",
"version": {
"first": 2,
- "last": 17
+ "last": 18
},
"statictype": "dynamic"
}
@@ -16810,7 +16897,7 @@
"description": "Lorem Ipsum",
"version": {
"first": 2,
- "last": 17
+ "last": 18
},
"statictype": "dynamic"
}
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs
index 9763ef1d..7b000d42 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateState.cs
@@ -40,7 +40,7 @@
///
/// Download the CRC, the meter size and store calibration as preparation for the lookup table
///
- PrepareLutDownload,
+ FinalizeLutDownload,
///
/// Erase lookup table file
///
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateStateInfo.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateStateInfo.cs
index 0ad537a2..d3c0e8a4 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateStateInfo.cs
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/Consts/LutUpdateStateInfo.cs
@@ -44,7 +44,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
StateInfos[7].State = LutUpdateState.CompareLutFile;
StateInfos[7].Message = "Compare LUT file";
- StateInfos[8].State = LutUpdateState.PrepareLutDownload;
+ StateInfos[8].State = LutUpdateState.FinalizeLutDownload;
StateInfos[8].Message = "Init meter size and LUT file CRC";
StateInfos[9].State = LutUpdateState.EraseLutFile;
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs
index 87258a41..2d83eaec 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs
@@ -152,6 +152,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
//the package file describes all files needed for a specific release
private String _packageDescriptionFile;
+ // manual stop of update process
+ private Boolean _stopUpdateProcess;
+ private Int32 _actualUpdateFileCtr;
+
///
/// Enable partial file writes of single parts with gaps in between
///
@@ -615,7 +619,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
return _actualOperation;
}
- private Int32 _actualUpdateFileCtr;
///
/// Returns the FW Update state
@@ -668,8 +671,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
_genesisMeter?.ReLogin();
}
- private Boolean _stopUpdateProcess;
-
///
/// Stop the update process
///
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs
index 751745c5..6a88b894 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs
@@ -104,6 +104,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
// error message for display of error reason
public String ErrorMessage;
+ // manual stop of update process
+ private Boolean _stopUpdateProcess;
+
+
///
/// Register subset needed to adjust for update performance content before update
///
@@ -166,7 +170,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
///
public MeterLutUpdate(GenesisMeter genesisMeter)
{
- if (genesisMeter == null) return;
+ if (genesisMeter == null)
+ return;
AssignGenesis(genesisMeter);
if (genesisMeter.MeterAppListVersion.Any(f => f.AppName == "GENESISFLOW" && f.IsInstalled))
@@ -200,7 +205,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
///
public void Dispose()
{
- if (_meterFile == null) return;
+ if (_meterFile == null)
+ return;
_meterFile.OnProcessUpdate -= ProcessUpdate_Event;
_meterFile = null;
}
@@ -263,8 +269,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
_genesisMeter?.ReLogin();
}
- private Boolean _stopUpdateProcess;
-
///
/// Stop the update process
///
@@ -364,7 +368,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
_lutUpdateState = LutUpdateState.Idle;
_meterFile = new MeterFile(_genesisMeter);
- if (_meterFile != null) _meterFile.OnProcessUpdate += ProcessUpdate_Event;
+ if (_meterFile != null)
+ _meterFile.OnProcessUpdate += ProcessUpdate_Event;
_genesisMeter?.ReLogin();
_genesisMeter?.SetProcessState(DisplayCodes.FwUpdateActive, false);
@@ -398,7 +403,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
///
public Boolean ExitPreparation(Boolean returnValue)
{
- if (_meterFile != null) _meterFile.OnProcessUpdate -= ProcessUpdate_Event;
+ if (_meterFile != null)
+ _meterFile.OnProcessUpdate -= ProcessUpdate_Event;
_meterFile = null;
ReestablishMeterFileSystem();
@@ -447,12 +453,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
case LutUpdateState.StartInitial:
_updateProcedureRetryCtr = 0;
- _lutUpdateState = LutUpdateState.PrepareLutDownload;
- break;
-
- case LutUpdateState.PrepareLutDownload:
- _lutUpdateState =
- PrepareLutDownload() ? LutUpdateState.EraseLutFile : LutUpdateState.StepFailed;
+ //TODO THW Test only _lutUpdateState = LutUpdateState.EraseLutFile;
+ _lutUpdateState = LutUpdateState.DownloadLutFile;
break;
case LutUpdateState.EraseLutFile:
@@ -464,7 +466,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
break;
case LutUpdateState.UploadLutFile:
- _lutUpdateState = UploadAndCompareLutFiles() ? LutUpdateState.Idle : LutUpdateState.StepFailed;
+ _lutUpdateState = UploadAndCompareLutFiles() ? LutUpdateState.FinalizeLutDownload : LutUpdateState.StepFailed;
+ break;
+
+ case LutUpdateState.FinalizeLutDownload:
+ _lutUpdateState =
+ FinalizeLutDownload() ? LutUpdateState.Idle : LutUpdateState.StepFailed;
break;
case LutUpdateState.CompareLutFile:
@@ -516,7 +523,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
// check if LUT file contains data
if (LutFile?.BinData == null || LutFile.BinData.Count < SizeLutFile)
{
- ErrorMessage += "File size mismatch!";
+ ErrorMessage = "File size mismatch!";
return false;
}
@@ -524,7 +531,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
// extract the identifier and check, if this is a LUT file
LutFile.StrLutFileId =
Encoding.UTF8.GetString(LutFile.BinData.ToArray(), IndexLutFileId, IndexDataLength);
- if (LutFile.StrLutFileId != StrLutFileId) return false;
+ if (LutFile.StrLutFileId != StrLutFileId)
+ return false;
LutFile.MeterSize = (MeterSize)LutFile.BinData[IndexMeterSize];
LutFile.FileCrc = (UInt16)(LutFile.BinData[IndexCrc] + (LutFile.BinData[IndexCrc + 1] << 8));
@@ -541,7 +549,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
var calculatedCrc = Crc16Ccitt.CalculateMsb1021(payload.ToArray());
if (calculatedCrc != LutFile.FileCrc)
{
- ErrorMessage += "CRC mismatch!";
+ ErrorMessage = "CRC mismatch!";
return false;
}
@@ -557,54 +565,96 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
///
/// - Initial
///
- private Boolean PrepareLutDownload()
+ private Boolean FinalizeLutDownload()
{
var returnValue = true;
var retryCtr = 0;
- if (LutFile == null || _genesisMeter == null || _meterFile == null) return false;
- //set extended timeout for trigger upgrade response delay
+ if (LutFile == null || _genesisMeter == null || _meterFile == null)
+ return false;
+ // set extended timeout for trigger upgrade response delay
_genesisMeter.TransmitProtocol.SetResponseTimeout(5000);
do
{
- _actualOperation = "Write Lut CRC to meter";
- _operationCtr++;
- if (!_genesisMeter.WriteRegister(Register.Genesisflow.LookupFileCrc, LutFile.FileCrc))
- {
- ErrorMessage += "Meter LUT CRC could not be set!\n";
- _operationCtr--;
- returnValue = false;
- }
- else
- {
- _operationCtr++;
- _actualOperation = "Write meter size";
- if (!_genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, new[] { (Byte)LutFile.MeterSize }))
- {
- ErrorMessage = "Meter size could not be set!\n";
- _operationCtr--;
- returnValue = false;
- }
- else
- {
- _operationCtr++;
- _actualOperation = "Store calibration to meter";
- if (!_genesisMeter.WriteRegister(Register.Genesisflow.StoreCalibration, 1))
- {
- ErrorMessage += "Meter store calibration failed!\n";
- _operationCtr--;
- returnValue = false;
- }
- }
- }
-
+ // for repeated entry
if (!returnValue)
{
ReestablishMeterFileSystem();
}
+
+ _actualOperation = "Write Lut CRC to meter";
+ _operationCtr++;
+ returnValue = _genesisMeter.WriteRegister(Register.Genesisflow.LookupFileCrc, LutFile.FileCrc);
+ if (!returnValue)
+ {
+ const String txt = "Meter LUT CRC could not be set!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ _operationCtr--;
+ continue;
+ }
+
+ _operationCtr++;
+ _actualOperation = "Write meter size";
+ returnValue =
+ _genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, new[] { (Byte)LutFile.MeterSize });
+ if (!returnValue)
+ {
+ const String txt = "Meter size could not be set!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ _operationCtr--;
+ continue;
+ }
+
+ _operationCtr++;
+ _actualOperation = "Store calibration to meter";
+ returnValue = _genesisMeter.WriteRegister(Register.Genesisflow.StoreCalibration, 1);
+ if (!returnValue)
+ {
+ const String txt = "Meter store calibration failed!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ _operationCtr--;
+ continue;
+ }
+
+ _operationCtr++;
+ _actualOperation = "Read LUT CRC";
+ var lutCrc = RegisterConverter.ConvertTo(
+ _genesisMeter.ReadRegister(Register.Genesisflow.LookupFileCrc));
+
+ if ((lutCrc & 0x80000000) != 0)
+ {
+ const String txt = "Meter LUT CRC could not be set!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ _operationCtr--;
+ returnValue = false;
+ continue;
+ }
+
+ _operationCtr++;
+ _actualOperation = "Read meter size";
+ var meterSize = (MeterSize)RegisterConverter.ConvertTo(
+ _genesisMeter.ReadRegister(Register.Genesisflow.MeterSize));
+
+ if (meterSize != LutFile.MeterSize)
+ {
+ const String txt = "Meter size could not be set!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ _operationCtr--;
+ returnValue = false;
+ continue;
+ }
+
+ ErrorMessage = "";
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs("Meter size and LUT CRC correctly set!\n"));
+
} while (!returnValue && retryCtr++ < RegisterWriteRetries && !StopUpdateProcess);
- //set timeout back to default value
+ // set timeout back to default value
_genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
return returnValue && !StopUpdateProcess;
@@ -628,10 +678,18 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
}
_meterFilesDrive1.Clear();
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs("\nRead meter files drive 1"));
if (!_meterFile.ReadMeterFileCatalog(out var meterFilesDrive1, MeterFile.StrMeterDrive1,
- MeterFile.WildcardAll.ToString())) return false;
+ MeterFile.WildcardAll.ToString()))
+ return false;
_meterFilesDrive1.AddRange(meterFilesDrive1);
+
+ // inform overlay system of found files
+ foreach (var meterFile in _meterFilesDrive1)
+ {
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(meterFile));
+ }
return true;
}
@@ -644,20 +702,35 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
///
private Boolean EraseFile(String fileDriveName)
{
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($"\nErasing {fileDriveName}"));
var returnValue = _meterFile.UnlockEraseWriteMeterFile(fileDriveName);
- //erase returns always TRUE, even if the erasure failed! Check with catalogue
+ // erase returns always TRUE, even if the erasure failed! Check with catalogue
_meterFile.EraseMeterFile(fileDriveName);
+ // give the meter a certain time to erase
+ Thread.Sleep(1000);
+
if (ReadMeterFilesDrive1())
{
if (_meterFilesDrive1.Contains(fileDriveName))
{
returnValue = false;
+ var txt = $"Failed to erase {fileDriveName}!";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ }
+ else
+ {
+ ErrorMessage = "";
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($"Successfully erased {fileDriveName}"));
}
}
else
{
returnValue = false;
+ const String txt = "Meter files read error!";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
}
return returnValue;
}
@@ -672,7 +745,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
//counters for actual process information
var retryCtr = 0;
- if (LutFile == null) return false;
+ if (LutFile == null)
+ return false;
//set extended timeout for trigger upgrade response delay
_genesisMeter.TransmitProtocol.SetResponseTimeout(10000);
@@ -693,13 +767,22 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
foreach (var fileToErase in filesToErase)
{
- if (!_meterFilesDrive1.Contains(fileToErase)) continue;
+ if (!_meterFilesDrive1.Contains(fileToErase))
+ continue;
_operationCtr++;
_actualOperation = $"Erase {fileToErase}";
- if (EraseFile(fileToErase)) continue;
+ var txt = $"LUT file {fileToErase} erased!\n";
+ if (EraseFile(fileToErase))
+ {
+ ErrorMessage = "";
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ continue;
+ }
- ErrorMessage += $"LUT file {fileToErase} not erased!\n";
+ txt = $"LUT file {fileToErase} not erased!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
returnValue = false;
_operationCtr--;
}
@@ -728,7 +811,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
//counters for actual process information
var retryCtr = 0;
- if (LutFile == null) return false;
+ if (LutFile == null)
+ return false;
//set extended timeout for trigger upgrade response delay
_genesisMeter.TransmitProtocol.SetResponseTimeout(10000);
@@ -744,14 +828,22 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
_operationCtr++;
_actualOperation = $"Write {fileToDownload}";
-
+
// logout and re-login to clear all ongoing processes and clear the Genesis buffers
ReestablishMeterFileSystem();
_meterFile.UnlockEraseWriteMeterFile(fileToDownload);
- if (_meterFile.WriteMeterFile(fileToDownload, LutFile.BinData.ToArray())) continue;
+ var txt = $"{fileToDownload} successfully written\n";
+ if (_meterFile.WriteMeterFile(fileToDownload, LutFile.BinData.ToArray()))
+ {
+ ErrorMessage = "";
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ continue;
+ }
- ErrorMessage += $"Writing of {fileToDownload} failed!\n";
+ txt = $"Writing of {fileToDownload} failed!\n";
+ ErrorMessage = txt;
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
returnValue = false;
_operationCtr--;
}
@@ -759,14 +851,20 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
// read all files on drive 1
_operationCtr++;
_actualOperation = "Read installed meter files drive 1";
-
+
if (ReadMeterFilesDrive1())
{
foreach (var checkInstalledFile in filesToDownload)
{
- if (_meterFilesDrive1.Contains(checkInstalledFile)) continue;
+ if (_meterFilesDrive1.Contains(checkInstalledFile))
+ {
+ ErrorMessage = "";
+ var txt = $"{checkInstalledFile} found in meter\n";
+ OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
+ continue;
+ }
- ErrorMessage += $"LUT file {StrLutMeterFileName} not installed!\n";
+ ErrorMessage = $"LUT file {StrLutMeterFileName} not installed!\n";
returnValue = false;
}
}
@@ -798,7 +896,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
//counters for actual process information
var retryCtr = 0;
- if (LutFile == null) return false;
+ if (LutFile == null)
+ return false;
//set extended timeout for trigger upgrade response delay
_genesisMeter.TransmitProtocol.SetResponseTimeout(10000);
@@ -814,7 +913,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
_operationCtr++;
_actualOperation = $"Read {fileToUpload}";
-
+
// logout and re-login to clear all ongoing processes and clear the Genesis buffers
ReestablishMeterFileSystem();
@@ -823,11 +922,17 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
// compare the entire buffer which also includes the header of the file
if (!binData.SequenceEqual(LutFile.BinData))
{
- ErrorMessage += $"Meter LUT file is unequal to downloaded {fileToUpload}!\n";
+ ErrorMessage = $"Meter LUT file is unequal to downloaded {fileToUpload}!\n";
returnValue = false;
_operationCtr--;
-
}
+ else
+ {
+ OnProcessUpdate?.Invoke(this,
+ new ProcessExecEventArgs($"LUT file {fileToUpload} of meter successfully compared!\n"));
+
+ }
+
continue;
}
diff --git a/Common/ProductionUiCordonel/ProductionUiCordonel.csproj b/Common/ProductionUiCordonel/ProductionUiCordonel.csproj
index 0c9a9a6c..34ac5be4 100644
--- a/Common/ProductionUiCordonel/ProductionUiCordonel.csproj
+++ b/Common/ProductionUiCordonel/ProductionUiCordonel.csproj
@@ -77,7 +77,7 @@
..\Hardware\WaterMeter\Genesis\GenesisConfig\bin\Debug\NLog.dll
- ..\..\packages\Sirt\SIRTCOM.dll
+ .\SIRTCOM.dll
diff --git a/Common/ProductionUiCordonel/SIRTCOM.dll b/Common/ProductionUiCordonel/SIRTCOM.dll
new file mode 100644
index 00000000..9ef0cf07
Binary files /dev/null and b/Common/ProductionUiCordonel/SIRTCOM.dll differ
diff --git a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs
index 015616a0..a13b5bd6 100644
--- a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs
+++ b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs
@@ -668,7 +668,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
return;
}
- lblOverall.Text = @"Data base connection..";
+ lblOverall.Text = @"Establish data base connection..";
lblOverall.Visible = true;
Update();
_currentGenesis?.DisposeMeter();
diff --git a/Common/Ui/GenesisToolBox/FrmHistory.Designer.cs b/Common/Ui/GenesisToolBox/FrmHistory.Designer.cs
new file mode 100644
index 00000000..d3cbae97
--- /dev/null
+++ b/Common/Ui/GenesisToolBox/FrmHistory.Designer.cs
@@ -0,0 +1,105 @@
+namespace Xylem.Common.Ui.GenesisToolBox
+{
+ partial class FrmHistory
+ {
+ ///
+ /// 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.rtbHistory = new System.Windows.Forms.RichTextBox();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // rtbHistory
+ //
+ this.rtbHistory.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.rtbHistory.Location = new System.Drawing.Point(3, 53);
+ this.rtbHistory.Name = "rtbHistory";
+ this.rtbHistory.Size = new System.Drawing.Size(378, 673);
+ this.rtbHistory.TabIndex = 31;
+ this.rtbHistory.Text = "";
+ this.rtbHistory.TextChanged += new System.EventHandler(this.rtbHistory_TextChanged);
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 1;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel1.Controls.Add(this.rtbHistory, 0, 1);
+ this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 2;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 111F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(384, 729);
+ this.tableLayoutPanel1.TabIndex = 38;
+ //
+ // tableLayoutPanel2
+ //
+ this.tableLayoutPanel2.ColumnCount = 2;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 1;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(378, 44);
+ this.tableLayoutPanel2.TabIndex = 36;
+ //
+ // FrmHistory
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(384, 729);
+ this.ControlBox = false;
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.MaximizeBox = false;
+ this.MaximumSize = new System.Drawing.Size(400, 768);
+ this.MinimizeBox = false;
+ this.MinimumSize = new System.Drawing.Size(400, 768);
+ this.Name = "FrmHistory";
+ this.ShowIcon = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
+ this.Text = "FW-Update Process History";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmHistory_FormClosing);
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ public System.Windows.Forms.RichTextBox rtbHistory;
+ }
+}
\ No newline at end of file
diff --git a/Common/Ui/GenesisToolBox/FrmHistory.cs b/Common/Ui/GenesisToolBox/FrmHistory.cs
new file mode 100644
index 00000000..f4b16c22
--- /dev/null
+++ b/Common/Ui/GenesisToolBox/FrmHistory.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Windows.Forms;
+
+namespace Xylem.Common.Ui.GenesisToolBox
+{
+ ///
+ /// History display of update process
+ ///
+ [Serializable]
+ public partial class FrmHistory : Form
+ {
+ ///
+ /// Ctor
+ ///
+ public FrmHistory()
+ {
+ InitializeComponent();
+ }
+
+ private void FrmHistory_FormClosing(Object sender, FormClosingEventArgs e)
+ {
+ //avoid destroying of object
+ e.Cancel = true;
+ //instead just hide it
+ Hide();
+ }
+
+ ///
+ /// Select always the last line for the display.
+ ///
+ private void rtbHistory_TextChanged(Object sender, EventArgs e)
+ {
+ //rtbHistory.SelectionStart = rtbHistory.Text.Length;
+ //rtbHistory.ScrollToCaret();
+ }
+ }
+}
diff --git a/Common/Ui/GenesisToolBox/FrmHistory.resx b/Common/Ui/GenesisToolBox/FrmHistory.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/Common/Ui/GenesisToolBox/FrmHistory.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.cs b/Common/Ui/GenesisToolBox/FrmLutUpdate.cs
index 2cbf965a..6598538a 100644
--- a/Common/Ui/GenesisToolBox/FrmLutUpdate.cs
+++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.cs
@@ -9,6 +9,7 @@ using Logic.ProductionToProductMapper.Cordonel;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
+using Xylem.Common.Utils.ProcessExec.EventArguments;
namespace Xylem.Common.Ui.GenesisToolBox
@@ -42,6 +43,22 @@ namespace Xylem.Common.Ui.GenesisToolBox
private const String StrLutFileInvalid = "LUT FILE INVALID";
private const String StrLutFileValid = "LUT file loaded";
+ // external update remarks form
+ private readonly FrmHistory _frmHistory = new FrmHistory();
+
+ private readonly Version _version;
+
+ // status information
+ private static readonly Color ColorDefault = Color.Black;
+ private static readonly Color ColorSuccess = Color.Green;
+ private static readonly Color ColorProcessFailed = Color.Red;
+ //private static readonly Color ColorOngoingProcess = Color.Blue;
+ //private static readonly Color ColorUnknownStatus = Color.Gray;
+ //private const String SuccessSign = @"✔";
+ //private const String FailedSign = @"✘";
+
+ private const String StrSeparator = "-----------------------------------------------------" +
+ "-----------------------------------------------------";
#endregion
#region FormControls
@@ -54,6 +71,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
var cultureInfo = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
+ _version = Assembly.GetExecutingAssembly().GetName().Version;
}
///
@@ -84,11 +102,17 @@ namespace Xylem.Common.Ui.GenesisToolBox
private void FrmLutUpdate_FormClosing(Object sender, FormClosingEventArgs e)
{
+ _frmHistory?.Close();
_currentGenesis?.Logout();
_meterBatch?.RemoveAllMeters();
_meterBatch?.Dispose();
- _meterLutUpdate?.Dispose();
- _meterLutUpdate = null;
+ if (_meterLutUpdate != null)
+ {
+ _meterLutUpdate.OnProcessUpdate -= ProcessUpdate_Event;
+ _meterLutUpdate.Dispose();
+ _meterLutUpdate = null;
+ }
+
Dispose();
}
@@ -134,6 +158,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
btnStopFwUpdate.Enabled = false;
}
#endregion
+
#region BoardControls
private void Connect()
{
@@ -148,7 +173,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
return;
}
- lblOverall.Text = @"Data base connection..";
+ lblOverall.Text = @"Establish data base connection..";
lblOverall.Visible = true;
Update();
_currentGenesis?.DisposeMeter();
@@ -166,6 +191,19 @@ namespace Xylem.Common.Ui.GenesisToolBox
_currentGenesis._configuration.UseRegisterWatchService = false;
_currentGenesis._configuration.UseMinMaxCheck = false;
+ var xPosition = Location.X + Size.Width;
+ var yPosition = Location.Y;
+ if (_frmHistory != null)
+ {
+ _frmHistory.SetDesktopLocation(xPosition, yPosition);
+ _frmHistory.Show();
+ }
+
+ ClearHistoryWindow();
+ LogText(StrSeparator);
+ LogText($"GenesisToolBox: {_version.Major}.{_version.Minor}.{_version.Build}");
+ LogText($"Date: {DateTime.Now.ToShortDateString()}");
+ LogText(StrSeparator);
Task.Factory.StartNew(() =>
{
ViewProgressPcb(true);
@@ -193,18 +231,27 @@ namespace Xylem.Common.Ui.GenesisToolBox
tbxMeterFw.Text = _currentGenesis.FwVersion;
tbxMeterMeterSize.Text = _currentGenesis.MeterSize;
tbxMeterLutCrc.Text = _currentGenesis.LutCrc;
+ LogText("Meter FW Version: " + _currentGenesis.FwVersion);
+ LogText("Meter LUT CRC: " + _currentGenesis.LutCrc);
+ LogText("Meter Size: " + _currentGenesis.MeterSize);
lblConnectPcb.ForeColor = Color.Green;
CheckUpdateEnabled();
_currentGenesis.Logout();
+ LogInstalledMeterFw();
}));
- }).ContinueWith(delegate { ViewProgressPcb(false); });
+ }).ContinueWith(delegate
+ {
+ ViewProgressPcb(false);
+ });
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
+ LogErrorText(ex.Message);
}
}
#endregion
+
#region ProcessControls
private void ViewProgressPcb(Boolean isActive)
{
@@ -293,14 +340,17 @@ namespace Xylem.Common.Ui.GenesisToolBox
var txt = StrUpdateErrorMessage;
if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
{
- txt += "\n\n";
+ txt += "\n";
txt += _meterLutUpdate?.ErrorMessage;
}
+
+ LogErrorText(txt);
MessageBoxShow(txt, @"FAILED",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
+ LogSuccessText(StrUpdateSuccessMessage);
MessageBoxShow(StrUpdateSuccessMessage, @"SUCCESS",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
@@ -308,8 +358,109 @@ namespace Xylem.Common.Ui.GenesisToolBox
}
}
+ ///
+ /// Display installed meter FW.
+ ///
+ ///
+ /// - Init.
+ ///
+ private void LogInstalledMeterFw()
+ {
+ if (_currentGenesis == null)
+ return;
+ LogText(StrSeparator);
+ LogText($"PCB ID: {_currentGenesis.PcbId}");
+ LogText($"Core Version: {_currentGenesis.CoreRevision}");
+ LogText($"Region and radio: {_currentGenesis.RegionRadio}");
+ LogText("");
+ LogText("Installed Applications:");
+ foreach (var app in _currentGenesis.MeterAppListVersion)
+ {
+ var versionString = app.IsInstalled ? $"V: {app.StrVersion} - CRC: 0x{app.Crc:X4}" :
+ "App NOT Installed";
+ LogText($"AppId: 0x{app.AppId:X2} - {versionString} - " + $"AppName: {app.AppName}");
+
+ if (app.IsInstalled)
+ {
+ var appVersion = new CordonelAppVersion(app.AppId, app.StrVersion);
+
+ // Copy metrology update permission
+ if (app.AppName == MeterFwUpdateCapability.MetrologyName &&
+ _currentGenesis.MetrologyUpgradePermission != MeterFwUpdateCapability.MetrologyUpgradePermitted)
+ {
+ appVersion.IsUpdateable = false;
+ }
+ }
+ }
+ LogText(StrSeparator);
+ }
+
+ ///
+ /// Clear history window.
+ ///
+ ///
+ /// - Initial
+ ///
+ private void ClearHistoryWindow()
+ {
+ if (_frmHistory != null && _frmHistory.rtbHistory.InvokeRequired)
+ {
+ _frmHistory.rtbHistory.Invoke(new Action(() => { _frmHistory.rtbHistory.Clear(); }));
+ }
+ else
+ _frmHistory?.rtbHistory.Clear();
+
+ }
+
+ ///
+ /// Output exclusively to user update remarks text window.
+ ///
+ ///
+ /// - Color added.
+ ///
+ private void LogText(String txtHistory)
+ {
+ InfoWindowColoredText(txtHistory, ColorDefault);
+ }
+
+ ///
+ /// Output exclusively to user update remarks text window.
+ ///
+ private void LogErrorText(String txtHistory)
+ {
+ InfoWindowColoredText(txtHistory, ColorProcessFailed);
+ }
+
+ ///
+ /// Output exclusively to user update remarks text window.
+ ///
+ private void LogSuccessText(String txtHistory)
+ {
+ InfoWindowColoredText(txtHistory, ColorSuccess);
+ }
+
+ ///
+ /// Output exclusively to user update remarks text window.
+ ///
+ private void InfoWindowColoredText(String txtHistory, Color color)
+ {
+ if (_frmHistory?.rtbHistory == null)
+ return;
+ Invoke(new Action(() =>
+ {
+ _frmHistory.rtbHistory.SuspendLayout();
+ _frmHistory.rtbHistory.SelectionStart = _frmHistory.rtbHistory.Text.Length;
+ _frmHistory.rtbHistory.SelectionLength = 0;
+ _frmHistory.rtbHistory.SelectionColor = color;
+ _frmHistory.rtbHistory.AppendText($"{txtHistory}{Environment.NewLine}");
+ _frmHistory.rtbHistory.SelectionColor = _frmHistory.rtbHistory.ForeColor;
+ _frmHistory.rtbHistory.ScrollToCaret();
+ _frmHistory.rtbHistory.ResumeLayout();
+ }));
+ }
#endregion
+
#region Checks
private void CheckUpdateEnabled()
{
@@ -323,6 +474,23 @@ namespace Xylem.Common.Ui.GenesisToolBox
}
#endregion
+ #region Events
+
+ ///
+ /// Process update event for displaying messages in historxy window
+ ///
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public virtual void ProcessUpdate_Event(Object sender, ProcessExecEventArgs e)
+ {
+ LogText(e.OverallProcessMessage);
+ }
+
+ #endregion
+
#region TimerControls
private void tmrProgressUpdate_Tick(Object sender, EventArgs e)
{
@@ -341,7 +509,8 @@ namespace Xylem.Common.Ui.GenesisToolBox
lblActualProcess.Text = _meterLutUpdate?.GetActualOperation();
var overallProgress = (Int32)(_meterLutUpdate?.OverallProcessCtrPercent ?? 0);
- if (overallProgress < 0) overallProgress = 0;
+ if (overallProgress < 0)
+ overallProgress = 0;
barOverallProgressUpdate.Value = overallProgress > 100 ? 100 : overallProgress;
barOverallProgressUpdate.Update();
@@ -393,10 +562,12 @@ namespace Xylem.Common.Ui.GenesisToolBox
var lutFilePathName = dlgOpenLuFile.FileName;
+ lblLutFileLoadedInfo.Text = "";
tbxLutFilePathName.Text = lutFilePathName;
if (_meterLutUpdate == null)
{
_meterLutUpdate = new MeterLutUpdate(_currentGenesis);
+ _meterLutUpdate.OnProcessUpdate += ProcessUpdate_Event;
}
if (_meterLutUpdate == null)
@@ -411,6 +582,10 @@ namespace Xylem.Common.Ui.GenesisToolBox
tbxFileCrc.Text = $@"0x{_meterLutUpdate.LutFile.FileCrc:X4}";
tbxFileMeterSize.Text = MeterSizeConverter.ConvertMeterSizeEnumToSizeName(_meterLutUpdate.LutFile.MeterSize);
_lutFileValid = true;
+
+ LogText("LUT File Meter Size: " + tbxFileMeterSize.Text);
+ LogText("LUT File CRC: " + tbxFileCrc.Text);
+
}
else
{
@@ -423,6 +598,8 @@ namespace Xylem.Common.Ui.GenesisToolBox
{
txt = StrLutFileInvalid;
}
+
+ LogErrorText(txt);
lblLutFileLoadedInfo.ForeColor = Color.Red;
lblLutFileLoadedInfo.Text = txt;
tbxFileCrc.Text = @" --- ";
@@ -447,6 +624,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
return;
}
+ lblLutFileLoadedInfo.Text = "";
SetControlsDownloadIsOngoing();
StartStopDownload(true);
@@ -458,7 +636,10 @@ namespace Xylem.Common.Ui.GenesisToolBox
{
_lutFileSuccessfulWritten = _meterLutUpdate.UpdateMeterLut();
Thread.Sleep(1000);
- }).ContinueWith(delegate { StartStopDownload(false); });
+ }).ContinueWith(delegate
+ {
+ StartStopDownload(false);
+ });
}
private void btnStopFwUpdate_Click(Object sender, EventArgs e)
diff --git a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
index 39508397..ae7418a7 100644
--- a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
+++ b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
@@ -194,6 +194,12 @@
FrmFrozenMeter.cs
+
+ Form
+
+
+ FrmHistory.cs
+
Form
@@ -344,6 +350,9 @@
FrmFrozenMeter.cs
+
+ FrmHistory.cs
+
FrmLutUpdate.cs
Designer
@@ -425,7 +434,7 @@
- Always
+ PreserveNewest
@@ -552,6 +561,10 @@
{4b88b0d3-e791-4774-9521-eabeacdc420e}
Logging
+
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}
+ ProcessExec
+
{60765bf4-6165-4f2f-8756-1c699826265d}
LegacyGenCtl