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

View File

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

View File

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

View File

@ -359,28 +359,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{ {
CompareMeterAppWithFileApp(meterApp); 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> /// <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;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> &lt;/AssemblyExplorer&gt;</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/SolBuilderDuo/UseMsbuildSolutionBuilder/@EntryValue">NewVersion</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> /// <summary>
/// Looks up a localized string similar to Firmware is up to date!. /// Looks up a localized string similar to Firmware is up to date!.
/// </summary> /// </summary>

View File

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

View File

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

View File

@ -689,6 +689,9 @@
<value>WARNUNG: Konfiguration unvollständig!</value> <value>WARNUNG: Konfiguration unvollständig!</value>
</data> </data>
<data name="StrCordonelCommunicationFailed" xml:space="preserve"> <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> </data>
</root> </root>

View File

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