CUST: - FwUpdateSw: - communication problems at app detection

This commit is contained in:
Thomas Wiedebusch 2024-04-24 15:16:49 +02:00
parent 7526894cea
commit 8cc64f9a8c
11 changed files with 94 additions and 66 deletions

View File

@ -124,7 +124,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Properties {
}
/// <summary>
/// Looks up a localized string similar to Reading registers after update.
/// Looks up a localized string similar to Reading registers after maintenance.
/// </summary>
internal static string StrReadRegistersAfterUpdate {
get {
@ -133,7 +133,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Properties {
}
/// <summary>
/// Looks up a localized string similar to Reading registers before update.
/// Looks up a localized string similar to Reading registers before maintenance.
/// </summary>
internal static string StrReadRegistersBeforeUpdate {
get {

View File

@ -148,10 +148,10 @@
<value>Schreibe Register</value>
</data>
<data name="StrReadRegistersBeforeUpdate" xml:space="preserve">
<value>Lese Register vor dem Firmware Update</value>
<value>Lese Register vor der Wartung</value>
</data>
<data name="StrReadRegistersAfterUpdate" xml:space="preserve">
<value>Lese Register nach dem Firmware Update</value>
<value>Lese Register nach der Wartung</value>
</data>
<data name="StrRegisterRecoveryExec" xml:space="preserve">
<value>Ausführung Konfigurationswiederherstellungssequenz....</value>

View File

@ -139,10 +139,10 @@
<value>Scan port</value>
</data>
<data name="StrReadRegistersAfterUpdate" xml:space="preserve">
<value>Reading registers after update</value>
<value>Reading registers after maintenance</value>
</data>
<data name="StrReadRegistersBeforeUpdate" xml:space="preserve">
<value>Reading registers before update</value>
<value>Reading registers before maintenance</value>
</data>
<data name="StrRegisterCompare" xml:space="preserve">
<value>Compare register</value>

View File

@ -359,28 +359,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
CompareMeterAppWithFileApp(meterApp);
}
if (!_genesisMeter.IsLoggedOn)
{
_genesisMeter.ReLogin();
//set display code to up to date if not needed to be installed or up to date
_genesisMeter.SetProcessState(_genesisMeter.MeterAppListVersion.All(
f => f.Status == MeterAppState.MeterAppUpToDate ||
f.Status == MeterAppState.MeterAppNotRequired )
? DisplayCodes.FwUpToDate
: DisplayCodes.FwUpdateFailed, false);
_genesisMeter.Logout();
}
else
{
//set display code to up to date if not needed to be installed or up to date
_genesisMeter.SetProcessState(_genesisMeter.MeterAppListVersion.All(
f => f.Status == MeterAppState.MeterAppUpToDate ||
f.Status == MeterAppState.MeterAppNotRequired )
? DisplayCodes.FwUpToDate
: DisplayCodes.FwUpdateFailed, false);
}
//remind the login status to logout if not logged in here
var wasLoggedOn = _genesisMeter.IsLoggedOn;
_genesisMeter.ReLogin();
//set display code to up to date if not needed to be installed or up to date
_genesisMeter.SetProcessState(_genesisMeter.MeterAppListVersion.All(
f => f.Status == MeterAppState.MeterAppUpToDate ||
f.Status == MeterAppState.MeterAppNotRequired)
? DisplayCodes.FwUpToDate
: DisplayCodes.FwUpdateFailed, false);
if (!wasLoggedOn) _genesisMeter.Logout();
}
/// <summary>

View File

@ -1 +1 @@
8fbe991b217e7692af4817ad205b768685aa5a72
bf6bb8fceb3db5a9977dadc407cf576684bf7127

View File

@ -4,4 +4,10 @@
&lt;Assembly Path="D:\Projekte\SENSUS_tfs_workspaces\WorkBenchV2\Main\ServiceFwUpdate\packages\NLog.4.7.8\lib\net45\NLog.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/SolBuilderDuo/UseMsbuildSolutionBuilder/@EntryValue">NewVersion</s:String>
<s:Boolean x:Key="/Default/Housekeeping/ProjectModelSynchronizer/ProjectPathsToLoadFromDisk/=_002E_002E_005CCommon_005CUtils_005CProcessExec_005CProcessExec_002Eshproj/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
<s:Boolean x:Key="/Default/Housekeeping/ProjectModelSynchronizer/ProjectPathsToLoadFromDisk/=_002E_002E_005CCommon_005CUtils_005CProcessExec_005CProcessExec_002Eshproj/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=ServiceFwUpdate_002FUi_002FServiceFwUpdateSw_002FProperties_002FResources/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/ShowOnlyErrors/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@ -529,6 +529,15 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to ERROR: Firmware update failed!.
/// </summary>
internal static string StrFwUpdateFailed {
get {
return ResourceManager.GetString("StrFwUpdateFailed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Firmware is up to date!.
/// </summary>

View File

@ -691,4 +691,7 @@
<data name="StrCordonelCommunicationFailed" xml:space="preserve">
<value>ERROR: Communication problems!</value>
</data>
<data name="StrFwUpdateFailed" xml:space="preserve">
<value>ERROR: Firmware update failed!</value>
</data>
</root>

View File

@ -1041,6 +1041,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// <remarks date="2021-Jun-30" author="Thomas Wiedebusch">
/// - MeterAppState.FileAppInvalid changed from _styleDownloadOngoing to _styleNotInstalled
/// </remarks>
/// <remarks date="2024-Apr-23" author="Thomas Wiedebusch">
/// - New style for communication error
/// </remarks>
private void UpdateInformationStyleSet()
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
@ -1056,6 +1059,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
switch (meterAppState)
{
case MeterAppState.MeterAppInstalledUnchecked:
dataGridRow.DefaultCellStyle = _styleInstalled;
break;
case MeterAppState.MeterAppUpToDate:
dataGridRow.DefaultCellStyle = _styleValidated;
break;
@ -1074,6 +1080,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
case MeterAppState.MeterAppNotInstalled:
dataGridRow.DefaultCellStyle = _styleNotInstalled;
break;
case MeterAppState.MeterAppNotRequired:
dataGridRow.DefaultCellStyle = _styleNotInstalled;
break;
case MeterAppState.InvalidCrc:
dataGridRow.DefaultCellStyle = _styleInvalidMeterCrc;
break;
@ -1122,14 +1131,14 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// - Removed information like region and size of fw update package from name of package,
/// - Added check for null of FwPackage info, binary content and description file.
/// </remarks>
/// <remarks date="2024-Apr-24" author="Thomas Wiedebusch">
/// - Update app installation status.
/// </remarks>
private void LoadUpdateFiles(ProcessState successExitState, ProcessState errorExitState = ProcessState.Error)
{
// remind the invoker being able to generate error messages based on the last state
_invokerProcessState = _processState;
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
if (_meterFwUpdate == null)
_meterFwUpdate = new MeterFwUpdate(_currentGenesis);
_binaryPackageLoaded = false;
@ -1179,6 +1188,11 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
if (_meterFwUpdate.LoadFileApps(fileApps))
{
// Check status of installed applications
_meterFwUpdate.AssignGenesis(_currentGenesis);
_meterFwUpdate.CompareAllMeterAndFileApps();
FillDataGridWithAllInfos();
_binaryPackageLoaded = true;
_processState = successExitState;
break;
@ -1323,15 +1337,19 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
// remind the invoker being able to generate error messages based on the last state
_invokerProcessState = _processState;
_meterFwUpdate?.AssignGenesis(_currentGenesis);
_meterFwUpdate?.CompareAllMeterAndFileApps();
FillDataGridWithAllInfos();
//// Check status of installed applications
//_meterFwUpdate?.AssignGenesis(_currentGenesis);
//_meterFwUpdate?.CompareAllMeterAndFileApps();
//FillDataGridWithAllInfos();
Invoke(new Action(() =>
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
// check if apps are marked as status unknown due to communication error
var allAppsDetected = AllAppsDetected();
if (_invokerProcessState == ProcessState.CheckUpdateRequest)
{
if (!CheckPackageFileAndFileApps())
@ -1342,17 +1360,16 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
return;
}
if (!AllAppsDetected())
if (!allAppsDetected)
{
_processState = errorExitState;
// overwrite the invoker state to create a message
_invokerProcessState = ProcessState.CheckCommunication;
_processState = errorExitState;
// overwrite the invoker state to create a message
_invokerProcessState = ProcessState.CheckCommunication;
return;
}
}
// check if apps are marked as status unknown due to communication error
var allAppsDetected = AllAppsDetected();
if (allAppsDetected)
{
if (!_currentGenesis.MeterAppListVersion.Any(f => f.Update) &&
@ -1429,9 +1446,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// </remarks>
private Boolean CoreRevisionValid()
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
// check the update capability
if (MeterFwUpdateCapability.CheckCoreRevision(_meterFwUpdate, _currentGenesis.CoreRevision))
{
@ -1468,9 +1482,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// </remarks>
private Boolean MetrologyUpdateCapability()
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
// check the update capability
if (MeterFwUpdateCapability.CheckMetrology(_meterFwUpdate, _currentGenesis))
{
@ -1492,9 +1503,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// </remarks>
private Boolean AllAppsDetected()
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
// check the update capability
if (_currentGenesis.MeterAppListVersion.All(f => f.Status != MeterAppState.Unknown))
return true;
@ -1529,9 +1537,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// </remarks>
private Boolean RegionRadioUpdateCapability()
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
var retVal = true;
// extract the package information
@ -1604,9 +1609,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// </remarks>
private Boolean MeterSizeUpdateCapability()
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
var retVal = true;
// extract the package information
@ -2808,6 +2810,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// <remarks date="2023-Nov-29" author="Thomas Wiedebusch">
/// - If LUT restore generates an error all processes have to be stopped as the meter is NOT functional.
/// </remarks>
/// <remarks date="2024-Apr-24" author="Thomas Wiedebusch">
/// - COmmunication error on app detection.
/// </remarks>
private void ErrorProcesses()
{
SetOverallProgressDisplayOff();
@ -2908,6 +2913,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
case ProcessState.CheckFwUpdateSuccess:
msg = Resources.StrFirmwareUpdateFailed;
ErrorProcessCommon(msg);
InfoProcessFailed(lblCordonelUpdateCapability, Resources.StrFwUpdateFailed);
_processState = ProcessState.ReleaseMeterToNormalOperation;
break;
case ProcessState.CheckCoreRevision:
@ -3268,7 +3274,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
// Check status of installed applications
_meterFwUpdate?.CompareAllMeterAndFileApps();
_processState = _currentGenesis.IsLoggedOn ? successExitState : errorExitState;
// change first the process state, otherwise the timer may switch the bar on again
@ -3682,6 +3687,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// <remarks date="2024-Feb-20" author="Thomas Wiedebusch">
/// - Changed program flow.
/// </remarks>
/// <remarks date="2024-Apr-24" author="Thomas Wiedebusch">
/// - Update app information on new connect.
/// </remarks>
private Boolean LoginAndSpecialSetupProcedure(String password)
{
Boolean retVal;
@ -3727,8 +3735,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
// Second login if initial was executed including reading out all installed applications
retVal = _currentGenesis.Login(password);
FillDataGridWithAllInfos();
// Set radio to customer mode (encryption active)
if (_initialConnect && retVal )
{
@ -3750,6 +3756,11 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
// display to normal operation and stores the setup permanently
retVal = ReleaseDisplayAndSwitchLedOff();
// Check status of installed applications
_meterFwUpdate?.AssignGenesis(_currentGenesis);
_meterFwUpdate?.CompareAllMeterAndFileApps();
FillDataGridWithAllInfos();
return retVal;
}
/// <summary>

View File

@ -689,6 +689,9 @@
<value>WARNUNG: Konfiguration unvollständig!</value>
</data>
<data name="StrCordonelCommunicationFailed" xml:space="preserve">
<value>FEHLER: Kommunikationsprobleme!</value>
<value>FEHLER: Kommunikationsproblem!</value>
</data>
<data name="StrFwUpdateFailed" xml:space="preserve">
<value>FEHLER: Firmware Update fehlgeschlagen!</value>
</data>
</root>

View File

@ -117,6 +117,11 @@
<DependentUpon>FrmServiceFwUpdateSw.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.de.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.de.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="FrmHistory.de.resx">
<DependentUpon>FrmHistory.cs</DependentUpon>
</EmbeddedResource>
@ -132,11 +137,6 @@
<DependentUpon>FrmServiceFwUpdateSw.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.de.resx">
<Generator>ResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
<LastGenOutput>Resources.de1.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
@ -145,6 +145,11 @@
<Content Include="NLog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<EmbeddedResource Include="Properties\Resources.de.resx">
<SubType>Designer</SubType>
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.de.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="NLog.xsd">
<SubType>Designer</SubType>
</None>