From baf39d1df017751bdc9a3cb87c3d66d22e905a44 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Fri, 22 Jul 2022 09:40:10 +0200 Subject: [PATCH] FwUpdateBuilder: - special characters from FwUpdateSafe removed, - customer name limited to 45 characters for FwUpdateFile. FwUpdateSw: - Release display soon FW-update succeeded, - new IrDA, BaseSerialPort and TransmittProtocol from common 2.2.8. FwUpdateLoader: - Registration repaired if UserInformation.register does not exists. Common: - ReLogin skipped if already logged in, - NA2WALARMS removed from read back of store configuration to support NA versions below 1.2.x. --- .../Genesis/GenesisCore/GenesisMeter.cs | 18 ++++++++------ .../CordonelFwPackageInfo.cs | 4 ---- .../FrmFwUpdateBuilder.cs | 19 ++++++++++++--- .../Ui/ServiceFwUpdateLoader/FrmRegister.cs | 24 ++++++++++++++----- .../ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs | 9 +++++-- 5 files changed, 52 insertions(+), 22 deletions(-) diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index 16fccf6b..46c7beea 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -941,8 +941,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Initial /// + /// + /// - Immediately returns if already logged in. + /// public Boolean ReLogin() { + if (IsLoggedOn) return true; return string.IsNullOrEmpty(_password) ? Login() : Login(_password); } @@ -970,7 +974,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore } } - url = url + PcbId; + url += PcbId; try { //use @@ -2134,6 +2138,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// - Removed comparison of allConfigRegisters less than 8 because the NA version has less registers and new /// apps will have a new register. /// + /// + /// - Removed temporary NA2ALARMS readback as this has no handler in the FW. + /// public Boolean StoreAllConfigurations() { @@ -2141,11 +2148,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore a.Key.RegisterName.ToLower() == "storeconfiguration" || a.Key.RegisterName.ToLower() == "storecalibration"); - //if (allConfigRegisters < 8) - //{ - // return false; - //} - try { foreach (var a in _configRegister.MeterRegisterDic.Where(a => @@ -2174,7 +2176,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore // Wait for storing Thread.Sleep(400); - if (a.Key.AppName == "SENSUSRADIO") + //TODO enable this for R1.2.x + if (a.Key.AppName == "SENSUSRADIO" || a.Key.AppName == "NA2WALARMS") { done = true; allConfigRegisters -= 1; @@ -2201,6 +2204,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore catch (Exception) { + // ignored } return allConfigRegisters == 0; diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/CordonelFwPackageInfo.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/CordonelFwPackageInfo.cs index 9c2716b4..59188d3f 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/CordonelFwPackageInfo.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/CordonelFwPackageInfo.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder { diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs index cad2f612..fbc0726b 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs @@ -1091,7 +1091,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder btnLicenseFwUpdateBuilder.Enabled = false; tbxCustomerName.Text = ""; lblCustomerNumber.Text = ""; - tbxOrderNumber.Text = @"1234567890"; + tbxOrderNumber.Text = @"0001"; tbxOrderPosition.Text = @"10"; var tabControlImages = new ImageList { ColorDepth = ColorDepth.Depth24Bit }; @@ -1177,6 +1177,11 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Skip loading of FW update SW if already done in preceding run. /// + /// + /// - Removed special characters (e.g. characters from other language like "Umlaute") from file name, + /// as DB problems may ocure on FwUpdateSafe load, limit customer name length to 45 characters to + /// keep the file name small. + /// public Boolean BuildFwUpdateSafe() { if (string.IsNullOrEmpty(lblUpdateOperator.Text)) @@ -1312,7 +1317,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder // first replace the underlines as these are used for the file name and later to separate for customer and order number var fileName = tbxCustomerName.Text.Replace(FwUpdateConfig.FwUpdateFileFieldSeparator.ToString(), ""); // leave all word characters (including the umlaut in for multilingual support), numbers the "-" and the white space in - fileName = Regex.Replace(fileName, @"[^\w\d\-\s]", ""); + // fileName = Regex.Replace(fileName, @"[^\w\d\-\s]", ""); + // remove special multilingual characters as they cause problems in DB, leave numbers, the "-", the "&", the "." + // and the white space in. + fileName = Regex.Replace(fileName, @"[^a-zA-Z0-9\-\s\&\.]", ""); + // limit customer name length to 45 + if (fileName.Length > 45) + { + fileName = fileName.Substring(0, 45); + } // The safe shall look like "Thames Water_01234567890-10.safe" _fwUpdateSafeName = $@"{fileName}{FwUpdateConfig.FwUpdateFileFieldSeparator}" + @@ -4986,7 +4999,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// The software is a container of dll files, language packages and logging setups. /// The configuration files contain the latest MeterFwUpdateRuler.json (needed for the FwUpdateBuilder), /// the latest configuration.json and the latest MeterEraseRestore.json (needed for the FwUpdateSw). - /// Creates License, FileCrc, FileLength and SubDiractories. + /// Creates License, FileCrc, FileLength and SubDirectories. /// /// license information of valid software /// true if successful diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmRegister.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmRegister.cs index 73e4e5cb..f58bfa9c 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmRegister.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmRegister.cs @@ -75,6 +75,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader /// /// - DB object passed by to get result back to caller. /// + /// + /// - Preset domain and loginName on unknown user. + /// public FrmRegister(String userRegistrationPathFileFile, Boolean fwUpdateSafesAvailable, UserInformation regUser, FwUpdateDb fwUpdateDb) { @@ -95,6 +98,11 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader tbxDomain.Text = _regUser.Domain; tbxLogInName.Text = _regUser.LogInName; } + else + { + tbxDomain.Text = CryptInformation.GetSysDomain(); + tbxLogInName.Text = CryptInformation.GetSysUserLoginName(); + } // Only one full name can be used for a specific user,if this is already set in the // registration file, it has to remain as is (delete the registration file to set a new name)! @@ -116,12 +124,6 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader tbxFullName.Text = _regUser.FullName; } - //if (_regUser != null) - //{ - // tbxDomain.Text = _regUser.Domain; - // tbxLogInName.Text = _regUser.LogInName; - //} - // Read initial DB users, compare DB content with given sys user ReadDbUsers(); CheckUserRegistration(); @@ -356,11 +358,21 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader /// /// - Write registration to file after update of all information in DB. /// + /// + /// - Initial user information set. + /// private void btnRegisterToDb_Click(Object sender, EventArgs e) { if (_regUser == null || string.IsNullOrEmpty(_regUser.FullName) || _fwUpdateDb == null) return; btnRegisterToDb.Enabled = false; + + if (!File.Exists(_userRegistrationPathFile)) + { + // register anyway, as safes are not of interest if user isn't registered + if (!_fwUpdateDb.RefreshUserValidation(_regUser, false)) return; + } + if (!_fwUpdateDb.RefreshUserValidation(_regUser, _fwUpdateSafesAvailable)) return; // The FullName has to be set in advance before searching it in fully registered users! diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs index 5aca00ad..7881b062 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs @@ -229,6 +229,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw /// /// - Release display on idle entry. /// + /// + /// - Release display on success entry. + /// private void FwUpdateSwStateMachine() { while (!_processToken.IsCancellationRequested) @@ -367,6 +370,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw break; case ProcessState.FirmwareUpdateSuccess: + ReleaseDisplay(); FwUpdateSuccessMessage(); _processState = ProcessState.Idle; break; @@ -1405,8 +1409,8 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw /// /// - Initial. /// - /// - /// - Store all configurations after display release. + /// + /// - Store configuration genesisflow after display release. /// private void ReleaseDisplay() { @@ -1419,6 +1423,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw // deactivate LED, not needed to get measurements during the update or on repeated start after system // failure. This overwrites the settings in _meterFwUpdate. _currentGenesis.WriteRegister(Register.Genesisflow.LedMode, new[] { (Byte)LedMode.Off }); + _currentGenesis.WriteRegister(Register.Genesisflow.StoreConfiguration, 1); LogText(Resources.StrDisplayReleased); _currentGenesis.Logout(); }