Cordonel ReBoot with "Pseudo FW Update" PSU:

- Taking the installed FLEXNETVERSION, rebuilding it, download and reinstall it, send trigger upgrade to finalize.
This commit is contained in:
Thomas Wiedebusch
2022-08-11 12:02:52 +02:00
parent 46e8aefd8c
commit 58e82c24a1
12 changed files with 926 additions and 88 deletions
@@ -0,0 +1,53 @@
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
{
/// <summary>
/// Genesis meter reset via PSU (pseudo update) states
/// </summary>
public enum MeterResetPsuState
{
/// <summary>
/// FW Update State Idle
/// </summary>
Idle,
/// <summary>
/// FW update single step failed
/// </summary>
StepFailed,
/// <summary>
/// Try it again
/// </summary>
RepeatReset,
/// <summary>
/// Reset failed
/// </summary>
ResetFailed,
/// <summary>
/// Reset succeeded
/// </summary>
ResetSucceeded,
/// <summary>
/// Start initial FW update
/// </summary>
StartInitial,
/// <summary>
/// Build the FLEXNETVERSION file upg18
/// </summary>
BuildUpgradeFile,
/// <summary>
/// Download upgrade file upg18
/// </summary>
DownloadUpgradeFile,
/// <summary>
/// Download upgrade file upg18
/// </summary>
DownloadUpgradeCtrlFile,
/// <summary>
/// Trigger Upgrade
/// </summary>
TriggerUpgrade,
/// <summary>
/// Delimiter for list
/// </summary>
ResetStateListDelimiter
}
}
@@ -0,0 +1,73 @@
using System;
using System.Linq;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
{
/// <summary>
/// Concatenation of state and string
/// </summary>
public static class MeterResetPsuStateInfo
{
/// <summary>
/// Build state information
/// </summary>
private static readonly MeterResetPsuStateText[] StateInfos;
/// <summary>
/// Ctor
/// </summary>
static MeterResetPsuStateInfo()
{
StateInfos = new MeterResetPsuStateText[(Int32)MeterResetPsuState.ResetStateListDelimiter];
StateInfos[0].State = MeterResetPsuState.Idle;
StateInfos[0].Message = "";
StateInfos[1].State = MeterResetPsuState.StepFailed;
StateInfos[1].Message = "Processing Step Failed";
StateInfos[2].State = MeterResetPsuState.RepeatReset;
StateInfos[2].Message = "Repeat reset";
StateInfos[3].State = MeterResetPsuState.ResetFailed;
StateInfos[3].Message = "Reset Failed";
StateInfos[4].State = MeterResetPsuState.ResetSucceeded;
StateInfos[4].Message = "Reset succeeded";
StateInfos[5].State = MeterResetPsuState.StartInitial;
StateInfos[5].Message = "Initial start";
StateInfos[6].State = MeterResetPsuState.BuildUpgradeFile;
StateInfos[6].Message = "Build flexnetversion upgrade file";
StateInfos[7].State = MeterResetPsuState.DownloadUpgradeFile;
StateInfos[7].Message = "Download flexnetversion upgrade file";
StateInfos[8].State = MeterResetPsuState.DownloadUpgradeCtrlFile;
StateInfos[8].Message = "Download upgrade control file";
StateInfos[9].State = MeterResetPsuState.TriggerUpgrade;
StateInfos[9].Message = "Trigger upgrade";
}
/// <summary>
/// Get the current information
/// </summary>
/// <param name="state">state to search for information text</param>
public static String GetTextFromState(MeterResetPsuState state)
{
return (from stateInfo in StateInfos
where stateInfo.State == state select stateInfo.Message).FirstOrDefault();
}
/// <summary>
/// Get the state of the text
/// </summary>
/// <param name="text">information text to search if state is assigned</param>
public static MeterResetPsuState GetStateFromText(String text)
{
return (from stateInfo in StateInfos
where stateInfo.Message == text select stateInfo.State).FirstOrDefault();
}
}
}
@@ -0,0 +1,19 @@
using System;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
{
/// <summary>
/// Concatenation between lokup table update state and text
/// </summary>
public struct MeterResetPsuStateText
{
/// <summary>
/// The state of the firmware update
/// </summary>
public MeterResetPsuState State;
/// <summary>
/// The message text of the lookup table update state
/// </summary>
public String Message;
}
}