From ef0d333d66e26f1948b7fe13f04aae865837b78d Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Tue, 6 Dec 2022 13:15:53 +0100 Subject: [PATCH] MeterSize moved from "Logic.PrdctionToProductMapper" to "ProductionOrderCore", RegionRadio split to Region (string) and RadioFrequencyMhz (Int32?), CoreRevision changed from string to Int32?, Service\MeterProcessState\Controllers\GetCorondelFw changed to GetCordonelFw and corrected --- Common/.vs/config/applicationhost.config | 2 +- .../CommonCore.Configuration/ServiceUrls.cs | 102 +- .../CordonelPreadjustmentUi.csproj | 4 + .../Parameters/FlushParams.cs | 5 +- .../PreAdjustmentControl.cs | 5 +- .../PreAdjustmentSettingsContainer.cs | 1 + .../Processes/ProcessProgress.cs | 5 +- .../Genesis/Applications/MeterApplications.cs | 2 +- .../Genesis/GenesisCore/GenesisMeter.cs | 71 +- .../Genesis/GenesisFile/GenesisFile.csproj | 4 + .../Genesis/GenesisFile/MeterFwUpdate.cs | 32 +- .../GenesisFile/MeterFwUpdateCapability.cs | 11 +- .../Genesis/GenesisFile/MeterLutFile.cs | 2 +- .../Genesis/GenesisFile/MeterLutUpdate.cs | 2 +- ...erRegisters.csproj.CoreCompileInputs.cache | 2 +- .../Cordonel/CordonelMetrologyLut.cs | 1 + .../Logic.ProductionToProductMapper.csproj | 2 - .../ProductionOrderCore/FW/CordonelFw.cs | 40 - .../FW/CordonelFwPackageInfo.cs | 107 + .../OrderData}/MeterSize.cs | 2 +- .../OrderData}/MeterSizeConverter.cs | 5 +- .../ProductionOrderCore/OrderData/Region.cs | 7 +- .../OrderData/RegionConverter.cs | 33 + .../ProductionOrderCore.csproj | 5 +- .../Actions/ProductionProcessLogOff.cs | 9 +- .../Controllers/FileUpToDateController.cs | 105 +- .../Controllers/FwUpdateController.cs | 44 +- Common/Ui/GenesisToolBox/FrmFileCURD.cs | 4 +- Common/Ui/GenesisToolBox/FrmFwUpdate.cs | 9 +- Common/Ui/GenesisToolBox/FrmLutManagement.cs | 2 +- .../GenesisToolBox/FrmLutUpdate.Designer.cs | 57 +- Common/Ui/GenesisToolBox/FrmLutUpdate.cs | 13 +- Common/Ui/GenesisToolBox/FrmProductionData.cs | 1 + Common/Ui/GenesisToolBox/frmRegisterStore.cs | 9 +- .../DataPackage/TestSetupContainer.cs | 6 +- .../LegacyGenesisControl/LegacyGenCtl.csproj | 4 + Common/Ui/LegacyGenesisControl/PreAdjWr.cs | 2 +- Common/Ui/LegacyGenesisControl/TstContHlp.cs | 4 +- .../ctlBenchRdy.Designer.cs | 20 +- Common/Ui/LegacyGenesisControl/ctlBenchRdy.cs | 1 + Common/Ui/LegacyGenesisControl/ctlCRdy.cs | 4 +- .../Ui/LegacyGenesisControl/ctlMeterReady.cs | 1 + .../FwUpdateDb/CordonelProductionInfosDb.cs | 4 +- .../Common/FwUpdateDb/FwUpdateDb.cs | 107 +- .../Common/FwUpdateDb/FwUpdateDb.csproj | 4 + .../Common/FwUpdateSafe/CordonelDeviceInfo.cs | 4 +- .../Common/FwUpdateSafe/CordonelFirmware.cs | 5 +- .../Common/FwUpdateSafe/CordonelSettings.cs | 12 - .../Common/FwUpdateSafe/FwUpdateSafe.csproj | 5 +- .../MeterRecovery/RecoveryRegisterItem.cs | 16 +- .../MeterRecovery/RecoverySettings.cs | 31 +- .../Common/FwUpdateSafe/UpdateContainer.cs | 7 +- .../Cordonel Service FW-Update Drawingse.vsd | Bin 4246528 -> 4277248 bytes ServiceFwUpdate/ServiceFwUpdate.sln | 45 + .../CordonelFwPackageInfo.cs | 69 - .../FrmFwUpdateBuilder.cs | 395 ++- .../FwUpdateBuilder.csproj | 8 +- .../MeterFwUpdateRuler.json | 276 -- .../FrmFwUpdateLoader.cs | 10 +- .../FrmServiceFwUpdateSw.Designer.cs | 22 +- .../ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs | 67 +- .../FrmServiceFwUpdateSw.de.resx | 13 +- .../FrmServiceFwUpdateSw.resx | 2775 +++++++++-------- .../Properties/Resources.Designer.cs | 15 +- .../Properties/Resources.de.resx | 9 +- .../Properties/Resources.resx | 7 +- .../ServiceFwUpdateSw.csproj | 4 + 67 files changed, 2314 insertions(+), 2343 deletions(-) delete mode 100644 Common/Logic/ProductionOrderCore/FW/CordonelFw.cs create mode 100644 Common/Logic/ProductionOrderCore/FW/CordonelFwPackageInfo.cs rename Common/{Logic.PrdoctionToProductMapper/Cordonel => Logic/ProductionOrderCore/OrderData}/MeterSize.cs (95%) rename Common/{Logic.PrdoctionToProductMapper/Cordonel => Logic/ProductionOrderCore/OrderData}/MeterSizeConverter.cs (98%) create mode 100644 Common/Logic/ProductionOrderCore/OrderData/RegionConverter.cs delete mode 100644 ServiceFwUpdate/Common/FwUpdateSafe/CordonelSettings.cs delete mode 100644 ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/CordonelFwPackageInfo.cs delete mode 100644 ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/MeterFwUpdateRuler.json diff --git a/Common/.vs/config/applicationhost.config b/Common/.vs/config/applicationhost.config index 40cde372..1b9332b4 100644 --- a/Common/.vs/config/applicationhost.config +++ b/Common/.vs/config/applicationhost.config @@ -155,7 +155,7 @@ - + diff --git a/Common/CommonCore.Configuration/ServiceUrls.cs b/Common/CommonCore.Configuration/ServiceUrls.cs index 82ec85ea..ccf51f22 100644 --- a/Common/CommonCore.Configuration/ServiceUrls.cs +++ b/Common/CommonCore.Configuration/ServiceUrls.cs @@ -10,139 +10,144 @@ namespace Xylem.Common.CommonCore.Configuration public static class ServiceUrls { private const String DefaultGetPcbIdsFromSafeServiceUrl = - "http://10.49.40.25/MeterProcessState/GetPcbIdsFromSafe?ContainerDbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetPcbIdsFromSafe?ContainerDbId="; private const String DefaultAddPcbIdsToSafeServiceUrl = - "http://10.49.40.25/MeterProcessState/AddPcbIdsToSafe?ContainerDbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/AddPcbIdsToSafe?ContainerDbId="; private const String DefaultDownloadFilesPartsServiceUrl = - "http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFileParts?ParentFileId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFileParts?ParentFileId="; private const String DefaultListAllFwPackagesServiceUrl = - "http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1"; private const String DefaultListAllSwPackagesServiceUrl = - "http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5"; private const String DefaultListAllConfigFilePackagesServiceUrl = - "http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6"; private const String DefaultListAllFwUpdateSafesServiceUrl = - "http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4"; private const String DefaultSetCordonelAppVersionServiceUrl = - "http://10.49.40.25/MeterProcessState/api/ProccesState/SetCordonelProgress?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/SetCordonelProgress?PcbId="; private const String DefaultGetCordonelAppVersionServiceUrl = - "http://10.49.40.25/MeterProcessState/api/ProccesState/GetCordonelAppVersion?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/GetCordonelAppVersion?PcbId="; private const String DefaultListAllCordonelCustomersWithFilterServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Order/GetCordonelCustomers?FilterName="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelCustomers?FilterName="; private const String DefaultListAllCordonelCustomerOrdersServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Order/GetCustomersCordonelOrders?CustomerNumber="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCustomersCordonelOrders?CustomerNumber="; private const String DefaultListAllOrderCordonelsServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Order/GetCordonelOrderList?CustomerOrderNumber="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelOrderList?CustomerOrderNumber="; private const String DefaultDownloadFwUpdateSafeServiceUrl = - "http://10.49.40.25/MeterProcessState/GetFWUpdateSafeContainerContent?SafeContainerId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateSafeContainerContent?SafeContainerId="; private const String DefaultListAllFwUpdateSafesForUserServiceUrl = - "http://10.49.40.25/MeterProcessState/GetFWUpdateSafeContainers?UserId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateSafeContainers?UserId="; private const String DefaultFileContentDownloadServiceUrl = - "http://10.49.40.25/MeterProcessState/GetFileContent?FileId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetFileContent?FileId="; private const String DefaultFwUpdateReportUploadServiceUrl = - "http://10.49.40.25/MeterProcessState/PostFWUpdateReportFile"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/PostFWUpdateReportFile"; private const String DefaultFwUpdateReportDownloadServiceUrl = - "http://10.49.40.25/MeterProcessState/GetFWUpdateReportFile?"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateReportFile?"; private const String DefaultFwUpdateSafeContainerUploadServiceUrl = - "http://10.49.40.25/MeterProcessState/PostFWUpdateSafeOdd"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/PostFWUpdateSafeOdd"; private const String DefaultEditFwUpdateUserValidityServiceUrl = - "http://10.49.40.25/MeterProcessState/EditUserValidity?Id="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/EditUserValidity?Id="; private const String DefaultRefreshFwUpdateUsersHardwareIdServiceUrl = - "http://10.49.40.25/MeterProcessState/RefreshUsersHardwareId?Id="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/RefreshUsersHardwareId?Id="; private const String DefaultRefreshFwUpdateUsersPasswordHashServiceUrl = - "http://10.49.40.25/MeterProcessState/RefreshUsersPasswordHash?Id="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/RefreshUsersPasswordHash?Id="; private const String DefaultCreateNewFwUpdateUserServiceUrl = - "http://10.49.40.25/MeterProcessState/AddNewUser?"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/AddNewUser?"; private const String DefaultListAllFwUpdateUsersServiceUrl = - "http://10.49.40.25/MeterProcessState/GetUserList"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList"; private const String DefaultListAllFwUpdateBuilderOperatorsServiceUrl = - "http://10.49.40.25/MeterProcessState/GetAllBuilderOperator"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetAllBuilderOperator"; private const String DefaultGetFwUpdateUserByIdServiceUrl = - "http://10.49.40.25/MeterProcessState/GetUserList?Id="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList?Id="; private const String DefaultGetFwUpdateUserByLoginNameServiceUrl = - "http://10.49.40.25/MeterProcessState/GetUserList?LogInName="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList?LogInName="; private const String DefaultRegisterWatchServiceUrl = - "http://10.49.40.25/MeterProcessState/api/RegisterWatch/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/RegisterWatch/"; private const String DefaultGenesisGetOrderNumberServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Password/ordernumber?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/ordernumber?PcbId="; private const String DefaultGenesisGetRadioAddressServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Password/radioadress?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/radioadress?PcbId="; private const String DefaultGenesisGetKeySetIdServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Password/getkeysetid?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/getkeysetid?PcbId="; private const String DefaultGenesisGetPasswordServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Password/GetPassword?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/GetPassword?PcbId="; private const String DefaultGenesisSetPasswordServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Password/setpassword?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/setpassword?PcbId="; private const String DefaultGenesisPasswordContainerServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId="; private const String DefaultMarriageServiceUrl = - "http://10.49.40.25/MeterProcessState/api/Marriage/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/Marriage/"; private const String DefaultMeterProcessStateUrl = - "http://10.49.40.25/MeterProcessState/api/ProccesState/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/"; private const String DefaultGenesisFinalCheckServiceUrl = - "http://10.49.40.25/MeterProcessState/api/FinalCheck/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FinalCheck/"; private const String DefaultGenesisRadioCheckServiceUrl = - "http://10.49.40.25/MeterProcessState/api/RadioCheck/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/RadioCheck/"; private const String DefaultGetSoftwareStartUpAccessUrl = - "http://10.49.40.25/MeterProcessState/api/SoftwareAccess/GetVersionIsValid"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/GetVersionIsValid"; private const String DefaultSetSoftwareLicenseUrl = - "http://10.49.40.25/MeterProcessState/api/SoftwareAccess/SetVersionIsValid?Program="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/SetVersionIsValid?Program="; private const String DefaultGetSoftwareLicenseUrl = - "http://10.49.40.25/MeterProcessState/api/SoftwareAccess/GetCurrentVersion?Program="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/GetCurrentVersion?Program="; private const String DefaultGenesisCalibrationResult = - "http://10.49.40.25/MeterProcessState/api/GenesisMeter/PostCalibrationResult"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/GenesisMeter/PostCalibrationResult"; private const String DefaultGenesisMeter = - "http://10.49.40.25/MeterProcessState/api/GenesisMeter/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/GenesisMeter/"; private const String DefaultFileContentController = - "http://10.49.40.25/MeterProcessState/api/FileUpToDate/"; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/"; private const String DefaultKeyServerCustom = "https://nodes.sms-esaap.com/keygenproxy/api/v3/custom/"; private const String DefaultMeterInfoForTestBench = - "http://10.49.40.25/MeterProcessState/api/TestBench/GetMeterInfoForTestBench?PcbID="; + "http://sla12iis01.emea.sensus.net/MeterProcessState/api/TestBench/GetMeterInfoForTestBench?PcbID="; + + //private const String DefaultCordonelFwInfoUrl = + // "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetCordonelFw"; + private const String DefaultCordonelFwInfoUrl = + "http://localhost:56011/api/FileUpToDate/GetCordonelFw"; @@ -186,6 +191,15 @@ namespace Xylem.Common.CommonCore.Configuration + /// + /// List all Cordonel FW packages. + /// + /// + public static String ListAllCordonelFwPackagesUrl() + { + return ConfigurationManager.AppSettings["CordonelFwInfoUrl"] ?? + DefaultCordonelFwInfoUrl; + } /// /// List all PCB IDs from a safe. As the safe may be deleted, this information is still accessible. /// diff --git a/Common/CordonelPreadjustmentUi/CordonelPreadjustmentUi.csproj b/Common/CordonelPreadjustmentUi/CordonelPreadjustmentUi.csproj index abb88c2d..804b5946 100644 --- a/Common/CordonelPreadjustmentUi/CordonelPreadjustmentUi.csproj +++ b/Common/CordonelPreadjustmentUi/CordonelPreadjustmentUi.csproj @@ -257,6 +257,10 @@ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D} Logic.ProductionToProductMapper + + {6D2777BB-7A88-466D-A49B-3266F9BF0160} + ProductionOrderCore + {6CCDB656-C676-4360-BABA-C4596AAD175D} Measurements diff --git a/Common/CordonelPreadjustmentUi/Parameters/FlushParams.cs b/Common/CordonelPreadjustmentUi/Parameters/FlushParams.cs index 7a48ff95..3cf093fd 100644 --- a/Common/CordonelPreadjustmentUi/Parameters/FlushParams.cs +++ b/Common/CordonelPreadjustmentUi/Parameters/FlushParams.cs @@ -1,8 +1,7 @@ using System; -using Logic.ProductionToProductMapper.Cordonel; -using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; -namespace CordonelPreadjustmentUi.Parameters +namespace Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters { public class FlushParams { diff --git a/Common/CordonelPreadjustmentUi/PreAdjustmentControl.cs b/Common/CordonelPreadjustmentUi/PreAdjustmentControl.cs index 8154782e..c190ab64 100644 --- a/Common/CordonelPreadjustmentUi/PreAdjustmentControl.cs +++ b/Common/CordonelPreadjustmentUi/PreAdjustmentControl.cs @@ -1,5 +1,4 @@ -using CordonelPreadjustmentUi.Parameters; -using CordonelPreadjustmentUi.Processes; +using CordonelPreadjustmentUi.Processes; using CordonelPreadjustmentUi.Processes.Actions; using CordonelPreadjustmentUi.Processes.Itinerary; using Logic.ProductionToProductMapper.Cordonel; @@ -13,6 +12,8 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; +using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters; namespace CordonelPreadjustmentUi { diff --git a/Common/CordonelPreadjustmentUi/PreAdjustmentSettingsContainer.cs b/Common/CordonelPreadjustmentUi/PreAdjustmentSettingsContainer.cs index 25d2e9ab..0d0a8525 100644 --- a/Common/CordonelPreadjustmentUi/PreAdjustmentSettingsContainer.cs +++ b/Common/CordonelPreadjustmentUi/PreAdjustmentSettingsContainer.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; namespace CordonelPreadjustmentUi { diff --git a/Common/CordonelPreadjustmentUi/Processes/ProcessProgress.cs b/Common/CordonelPreadjustmentUi/Processes/ProcessProgress.cs index dde2d6e9..76de841a 100644 --- a/Common/CordonelPreadjustmentUi/Processes/ProcessProgress.cs +++ b/Common/CordonelPreadjustmentUi/Processes/ProcessProgress.cs @@ -1,5 +1,4 @@ -using CordonelPreadjustmentUi.Parameters; -using System; +using System; using System.Drawing; using System.Globalization; using System.Threading; @@ -8,6 +7,8 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts; using Xylem.Common.Ui.CordonelPreadjustmentUi; using System.Collections.Generic; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; +using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters; namespace CordonelPreadjustmentUi.Processes.Itinerary { diff --git a/Common/Hardware/WaterMeter/Genesis/Applications/MeterApplications.cs b/Common/Hardware/WaterMeter/Genesis/Applications/MeterApplications.cs index 38007b90..977465f5 100644 --- a/Common/Hardware/WaterMeter/Genesis/Applications/MeterApplications.cs +++ b/Common/Hardware/WaterMeter/Genesis/Applications/MeterApplications.cs @@ -27,7 +27,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Applications /// /// Version string of application because of FLEXNETVERSION /// does return a different layout, instead of decimals it - /// used hexadecimals. Therefore the version has to be safed as + /// used hexadecimals. Therefore the version has to be saved as /// string at time of receiving for the FW-Update comparison /// public String StrVersion; diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index 006958ba..2b8d00ac 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -36,6 +36,7 @@ using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts; using Xylem.Common.Hardware.WaterMeter.WaterMeterRegisters; using Xylem.Common.Logic.ProductionOrderCore.File; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.RelatePcb; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Metrology.Measurements; @@ -1138,6 +1139,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore return msbPartString + $"{msb & 0x0F:X0}" + "." + $"{(lsb & 0xF0) >> 4:X1}" + $"{lsb & 0x0F:X1}"; } + /// + /// Building a version string with 2 decimals e.g. " 12.34" + /// + /// + /// - Initial. + /// + /// the version + /// converted version to string + public static String BuildFwVersionString(Int32? version) + { + return version == null ? "0.00" : $@"{version / 100}.{version % 100 :D2}"; + } + /// /// List of all present meter applications /// @@ -1146,7 +1160,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// Core revision of boot code. /// - public String CoreRevision; + //public String CoreRevision; + public Int32? CoreRevision; /// /// This is the FLEXNET version which describes the entire packet. @@ -1164,9 +1179,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore public String MeterSize; /// - /// Region (EMEA or NA) and Radio frequency (433 or 868 or null). + /// Region (EMEA or NA). /// - public String RegionRadio; + public String Region; + + /// + /// Radio frequency in MHz (433 or 868 or null). + /// + public Int32? RadioFrequencyMhz; /// /// Metrology upgrade permission. @@ -1192,6 +1212,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Read lockup table CRC bugfix with try, catch for legacy versions, where this register does not exists. /// + /// + /// - CoreRevision from String to Int32?, + /// - MeterSize from String to MeterSize, + /// - Region separated from RadioRegion as String, + /// - RadioFrequencyMhz introduced as Int32? (null if "NA" region or not installed), + /// - LutCrc from String to Int32?. + /// private void ReadMeterFirmwareAndAssignRegisters() { //avoid overwriting of list if this already exits @@ -1284,18 +1311,32 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore //read core revision var coreRegisterRead = RegisterConverter.ConvertTo(ReadRegister(Register.System.CoreRevision, 16)); - var coreRevision = coreRegisterRead?.Split('\0'); - CoreRevision = coreRevision == null ? "0.00" : $"{coreRevision[0].ToLower().Replace("cordonel ", "")}"; + CoreRevision = null; + if (!string.IsNullOrEmpty(coreRegisterRead)) + { + var coreRevisionStrings = coreRegisterRead.Split('\0'); + //remove Cordonel sub-string and the blanks + var coreRevisionSubString = $"{coreRevisionStrings[0].ToLower().Replace("cordonel ", "")}"; + var coreRevisionSubStrings = coreRevisionSubString.Split('.'); + if (Int32.TryParse(coreRevisionSubStrings[0], out var coreRevisionMsb)) + { + if (Int32.TryParse(coreRevisionSubStrings[1], out var coreRevisionLsb)) + { + CoreRevision = coreRevisionMsb * 100 + coreRevisionLsb; + } + } + } //read radio frequency - RegionRadio = "NA"; + Region = "NA"; + RadioFrequencyMhz = null; try { var radioFrequencyRaw = ReadRegister(Register.Sensusradio.FrequencyIndicator); if (radioFrequencyRaw != null) { - var radioFrequency = RegisterConverter.ConvertTo(radioFrequencyRaw); - RegionRadio = $"EMEA_{radioFrequency}"; + Region = "EMEA"; + RadioFrequencyMhz = RegisterConverter.ConvertTo(radioFrequencyRaw); } } catch (Exception) @@ -1309,10 +1350,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore _logger.Info($"Date time (UTC): {DateTimeOffset.UtcNow}"); if (CoreRevision != null) { - _logger.Info("System Core Revision: " + CoreRevision); + _logger.Info("System Core Revision: " + BuildFwVersionString(CoreRevision)); } - _logger.Info("Region and radio frequency[Mhz]: " + RegionRadio); + _logger.Info("Region: " + Region); + + if (RadioFrequencyMhz != null) + { + _logger.Info($"Radio frequency [MHz]: {RadioFrequencyMhz}"); + } foreach (var fm in MeterAppListVersion.OrderBy(o => o.AppId)) { @@ -2144,9 +2190,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15)); } - apps.Add(new CordonelAppVersion(-1, CoreRevision, false)); + apps.Add(new CordonelAppVersion(-1, BuildFwVersionString(CoreRevision), false)); - var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={PcbId}&ProgressName={progressName}&version={version}"; + var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={PcbId}" + + $"&ProgressName={progressName}&version={version}"; LocalWebRequest.PostRequestAsync(url, json: apps); } diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj b/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj index 10277b12..110a3b8d 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/GenesisFile.csproj @@ -136,6 +136,10 @@ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D} Logic.ProductionToProductMapper + + {6D2777BB-7A88-466D-A49B-3266F9BF0160} + ProductionOrderCore + {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F} Crc16Ccitt diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs index abf9ef50..c570e41f 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdate.cs @@ -99,19 +99,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile public Int32 MaxPartialFileDataSize = 2 * 1024; /// - /// Core revision minimum as double for comparison + /// Core revision minimum as int32? with major * 100 + minor for comparison /// - public Double? CoreRevisionMinimum - { - get; set; - } + public Int32? CoreRevisionMinimum { get; private set; } /// - /// Core revision maximum as double for comparison + /// Core revision maximum as int32? with major * 100 + minor for comparison /// - public Double? CoreRevisionMaximum - { - get; private set; - } + public Int32? CoreRevisionMaximum { get; private set; } //reminder for the core minimum requirement as string private String _strCoreRevisionMinimum; @@ -1950,9 +1944,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// /// /// - public static String ConvertVersionToString(UInt32 version) + public static String ConvertVersionToString(Int32? version) { - return $"{version / 100}.{version % 100:D2}"; + return version == null ? "0.00" : $"{version / 100}.{version % 100:D2}"; } /// @@ -2062,7 +2056,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// Checks if the core version is in range of required minimum to maximum version. /// The package file has to be read in advance as this contains the min/max. /// - /// string containing the core version + /// containing the core version /// true if version is in range /// /// - Initial. @@ -2070,16 +2064,18 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// /// - Removed "Cordonel " string check. /// - public Boolean CheckCoreRevision(String coreVersionString) + /// + /// - Core revision data type changed from string ti int32?. + /// + public Boolean CheckCoreRevision(Int32? coreRevision) { - if (null == CoreRevisionMaximum || null == CoreRevisionMinimum || null == coreVersionString || + if (null == CoreRevisionMaximum || null == CoreRevisionMinimum || null == coreRevision || null == _packageDescriptionFile) { return false; } - var meterCoreRevision = ExtractVersionFromString(coreVersionString); - return meterCoreRevision >= CoreRevisionMinimum && meterCoreRevision <= CoreRevisionMaximum; + return coreRevision >= CoreRevisionMinimum && coreRevision <= CoreRevisionMaximum; } /// @@ -2097,7 +2093,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// /// - Changed to Int32 with major * 100 + minor. /// - public static Int32 ExtractVersionFromString(String versionString) + private static Int32 ExtractVersionFromString(String versionString) { var majorVersion = 0; diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdateCapability.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdateCapability.cs index 233cacff..0f01ca93 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdateCapability.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterFwUpdateCapability.cs @@ -57,15 +57,18 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile /// The package file has to be read in advance as this contains the min/max. /// /// - /// string containing the core version + /// containing the core version /// true if version is in range /// /// - Initial. /// - public static Boolean CheckCoreRevision(MeterFwUpdate meterFwUpdate, String coreVersionString) + /// + /// - Core revision data type changed from string ti int32?. + /// + public static Boolean CheckCoreRevision(MeterFwUpdate meterFwUpdate, Int32? coreRevision) { - if (meterFwUpdate == null || coreVersionString == null) return false; - return meterFwUpdate.CheckCoreRevision(coreVersionString); + if (meterFwUpdate == null || coreRevision == null) return false; + return meterFwUpdate.CheckCoreRevision(coreRevision); } } } diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutFile.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutFile.cs index ffd74f26..c0832e27 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutFile.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutFile.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Logic.ProductionToProductMapper.Cordonel; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile { diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs index abfb5df3..4a9c4c23 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisFile/MeterLutUpdate.cs @@ -4,12 +4,12 @@ using System.IO; using System.Linq; using System.Text; using System.Threading; -using Logic.ProductionToProductMapper.Cordonel; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Utils.Crc16Ccitt; using Xylem.Common.Utils.ProcessExec; using Xylem.Common.Utils.ProcessExec.EventArguments; diff --git a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache index f22623aa..d8b5c8f6 100644 --- a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache +++ b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -5ed75d99ee45ff67821090f1b3dbb001dd9e4fe3 +1a3d4919c9c702245832d925951f2b7cb72fc333 diff --git a/Common/Logic.PrdoctionToProductMapper/Cordonel/CordonelMetrologyLut.cs b/Common/Logic.PrdoctionToProductMapper/Cordonel/CordonelMetrologyLut.cs index 3562e730..43a8c021 100644 --- a/Common/Logic.PrdoctionToProductMapper/Cordonel/CordonelMetrologyLut.cs +++ b/Common/Logic.PrdoctionToProductMapper/Cordonel/CordonelMetrologyLut.cs @@ -1,4 +1,5 @@ using System; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; namespace Logic.ProductionToProductMapper.Cordonel { diff --git a/Common/Logic.PrdoctionToProductMapper/Logic.ProductionToProductMapper.csproj b/Common/Logic.PrdoctionToProductMapper/Logic.ProductionToProductMapper.csproj index a53ecaa7..a5b601e9 100644 --- a/Common/Logic.PrdoctionToProductMapper/Logic.ProductionToProductMapper.csproj +++ b/Common/Logic.PrdoctionToProductMapper/Logic.ProductionToProductMapper.csproj @@ -73,9 +73,7 @@ - - diff --git a/Common/Logic/ProductionOrderCore/FW/CordonelFw.cs b/Common/Logic/ProductionOrderCore/FW/CordonelFw.cs deleted file mode 100644 index 44666117..00000000 --- a/Common/Logic/ProductionOrderCore/FW/CordonelFw.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Xylem.Common.Logic.ProductionOrderCore.OrderData; - -namespace Xylem.Common.Logic.ProductionOrderCore.FW -{ - public class CordonelFw - { - public int Id { get; set; } - - public int RadioFrequencyMhz { get; set; } - - public int FlexnetAppId { get; set; } - - public int Version { get; set; } - public string Name { get; set; } - - public string FileName { get; set; } - public DateTime? DeletedDate { get; set; } - - public bool ForPressure { get; set; } - public int Metersize { get; set; } - public Region Region { get; set; } - public bool CurrentForProd { get; set; } - public int? FileClusterStoreId { get; set; } - public Int32? CoreRevisionMin { get; set; } - public Int32? CoreRevisionMax { get; set; } - public Int32? MetrologyVersion { get; set; } - public Boolean IsReleased { get; set; } - public DateTime? ReleaseDate { get; set; } - public String Remark { get; set; } - - public bool IsDeleted() { return DeletedDate.HasValue; } - - - - } -} diff --git a/Common/Logic/ProductionOrderCore/FW/CordonelFwPackageInfo.cs b/Common/Logic/ProductionOrderCore/FW/CordonelFwPackageInfo.cs new file mode 100644 index 00000000..822b3626 --- /dev/null +++ b/Common/Logic/ProductionOrderCore/FW/CordonelFwPackageInfo.cs @@ -0,0 +1,107 @@ +using System; + +namespace Xylem.Common.Logic.ProductionOrderCore.FW +{ + /// + /// This class collects all information needed to specify the FW-Update package. + /// + [Serializable] + public class CordonelFwPackageInfo + { + /// + /// Used to keep the selection information on e.g. data tables stuck at the Cordonel. + /// + public Boolean IsSelected; + + /// + /// DB table entry + /// + public Int32 Id; + + /// + /// Frequency in MHz, null if not used or not assigned + /// + public Int32? RadioFrequencyMhz; + + /// + /// Application Id of FLEXNETVERSION + /// + public Int32 FlexnetAppId; + + /// + /// Version of FLEXNETVERSION as number + /// + public Int32? Version; + + /// + /// Version of FLEXNETVERSION as string + /// + public String Name; + + /// + /// Meter size + /// + public String MeterSize; + + /// + /// Meter size + /// + public String Region; + + /// + /// Current version for production + /// + public Boolean CurrentForProd; + + /// + /// Clustered file to connect to physical content + /// + public Int32 FileClusterStoreId; + + /// + /// Required minimum core version + /// + public Int32? CoreRevisionMin; + + /// + /// Required maximum core version + /// + public Int32? CoreRevisionMax; + + /// + /// Required metrology version + /// + public Int32? MetrologyVersion; + + /// + /// Marker if it is released. + /// + public Boolean IsReleased; + + /// + /// Date of release approval + /// + public DateTime? ReleaseDate; + + /// + /// Comment + /// + public String Remark; + + /// + /// Complete name of the FW release package + /// + public String FileName; + + /// + /// Date of deletion + /// + public DateTime? DeletedDate; + + /// + /// Returns is deleted if deletion date is set + /// + public Boolean IsDeleted() { return DeletedDate.HasValue; } + + } +} diff --git a/Common/Logic.PrdoctionToProductMapper/Cordonel/MeterSize.cs b/Common/Logic/ProductionOrderCore/OrderData/MeterSize.cs similarity index 95% rename from Common/Logic.PrdoctionToProductMapper/Cordonel/MeterSize.cs rename to Common/Logic/ProductionOrderCore/OrderData/MeterSize.cs index f5808ed7..aed537b7 100644 --- a/Common/Logic.PrdoctionToProductMapper/Cordonel/MeterSize.cs +++ b/Common/Logic/ProductionOrderCore/OrderData/MeterSize.cs @@ -1,4 +1,4 @@ -namespace Logic.ProductionToProductMapper.Cordonel +namespace Xylem.Common.Logic.ProductionOrderCore.OrderData { /// /// Enumeration of meter sizes named as flow tube inner diameter, diff --git a/Common/Logic.PrdoctionToProductMapper/Cordonel/MeterSizeConverter.cs b/Common/Logic/ProductionOrderCore/OrderData/MeterSizeConverter.cs similarity index 98% rename from Common/Logic.PrdoctionToProductMapper/Cordonel/MeterSizeConverter.cs rename to Common/Logic/ProductionOrderCore/OrderData/MeterSizeConverter.cs index 3170ab55..43ca556d 100644 --- a/Common/Logic.PrdoctionToProductMapper/Cordonel/MeterSizeConverter.cs +++ b/Common/Logic/ProductionOrderCore/OrderData/MeterSizeConverter.cs @@ -1,6 +1,6 @@ using System; -namespace Logic.ProductionToProductMapper.Cordonel +namespace Xylem.Common.Logic.ProductionOrderCore.OrderData { /// /// Converter from meter size of production order to name or MeterSize enum or vice versa. @@ -10,8 +10,9 @@ namespace Logic.ProductionToProductMapper.Cordonel /// /// Convert Meter size enumeration to name . /// - public static String ConvertMeterSizeEnumToSizeName(MeterSize meterSizeId) + public static String ConvertMeterSizeEnumToSizeName(MeterSize? meterSizeId) { + if (meterSizeId == null) return "*"; switch (meterSizeId) { case MeterSize.DN40: diff --git a/Common/Logic/ProductionOrderCore/OrderData/Region.cs b/Common/Logic/ProductionOrderCore/OrderData/Region.cs index 8300a559..fd0a9c2b 100644 --- a/Common/Logic/ProductionOrderCore/OrderData/Region.cs +++ b/Common/Logic/ProductionOrderCore/OrderData/Region.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Xylem.Common.Logic.ProductionOrderCore.OrderData +namespace Xylem.Common.Logic.ProductionOrderCore.OrderData { public enum Region { diff --git a/Common/Logic/ProductionOrderCore/OrderData/RegionConverter.cs b/Common/Logic/ProductionOrderCore/OrderData/RegionConverter.cs new file mode 100644 index 00000000..e4122ad5 --- /dev/null +++ b/Common/Logic/ProductionOrderCore/OrderData/RegionConverter.cs @@ -0,0 +1,33 @@ +using System; + +namespace Xylem.Common.Logic.ProductionOrderCore.OrderData +{ + /// + /// Converter for region. + /// + public static class RegionConverter + { + /// + /// Convert region enumeration to name . + /// + public static String ConvertRegionEnumToRegionName(Region? regionId) + { + if (regionId == null) return "*"; + + switch (regionId) + { + case Region.EMEA: + return "EMEA"; + + case Region.NA: + return "NA"; + + case Region.China: + return "China"; + + default: + return "*"; + } + } + } +} diff --git a/Common/Logic/ProductionOrderCore/ProductionOrderCore.csproj b/Common/Logic/ProductionOrderCore/ProductionOrderCore.csproj index 30ef9d65..4906db14 100644 --- a/Common/Logic/ProductionOrderCore/ProductionOrderCore.csproj +++ b/Common/Logic/ProductionOrderCore/ProductionOrderCore.csproj @@ -88,11 +88,14 @@ - + + + + diff --git a/Common/ProductionUiCordonel/ProductionProcesses/Actions/ProductionProcessLogOff.cs b/Common/ProductionUiCordonel/ProductionProcesses/Actions/ProductionProcessLogOff.cs index e5c9ad57..6453a492 100644 --- a/Common/ProductionUiCordonel/ProductionProcesses/Actions/ProductionProcessLogOff.cs +++ b/Common/ProductionUiCordonel/ProductionProcesses/Actions/ProductionProcessLogOff.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Reflection; using System.Windows.Controls; using Xylem.Common.CommonCore.Configuration; +using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Logic.SoftwareAccessHelper; namespace ProductionUiCordonel.ProductionProcesses.Actions @@ -46,13 +47,13 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions var apps = new List(); foreach (var item in Meter.MeterAppListVersion) { - apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, (item.AppId != 15 ? true : false))); + apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15)); } - apps.Add(new CordonelAppVersion(-1, Meter.CoreRevision, false)); + apps.Add(new CordonelAppVersion(-1, GenesisMeter.BuildFwVersionString(Meter.CoreRevision), false)); - var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={Meter.PcbId}&ProgressName=Shipping&version={Assembly.GetExecutingAssembly().GetName().Version.ToString()}"; - var a = LocalWebRequest.PostRequestAsync(url, json: apps); + var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={Meter.PcbId}&ProgressName=Shipping&version={Assembly.GetExecutingAssembly().GetName().Version}"; + LocalWebRequest.PostRequestAsync(url, json: apps); Meter.PushProgress("Shipping", Assembly.GetExecutingAssembly().GetName().Version.ToString()); Meter.Logout(); diff --git a/Common/Service/MeterProcessState/Controllers/FileUpToDateController.cs b/Common/Service/MeterProcessState/Controllers/FileUpToDateController.cs index 54cfa114..37f628af 100644 --- a/Common/Service/MeterProcessState/Controllers/FileUpToDateController.cs +++ b/Common/Service/MeterProcessState/Controllers/FileUpToDateController.cs @@ -12,6 +12,7 @@ using System.Web; using System.Web.Http; using Xylem.Common.Logic.ProductionOrderCore.File; using Xylem.Common.Logic.ProductionOrderCore.FW; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.ServiceCore; namespace Xylem.Common.Service.MeterProcessState.Controllers @@ -460,26 +461,24 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers /// - /// Retruns filted FW files for Cordonel without content + /// Returns filtered FW files for Cordonel without content /// /// - [Route("GetCorondelFw"), HttpGet] - public async Task GetCorondelFw(Int32? Metersize = null, int? Frequency = null, String Region = null, Boolean? ForProd = null, Boolean? Deleted = false) + [Route("GetCordonelFw"), HttpGet] + public async Task GetCordonelFw(Int32? meterSize = null, Int32? radioFrequencyMhz = null, + String region = null, Boolean? forProd = null, Boolean? deleted = false) { try { return await Task.Run(() => { - var ret = new List(); + var ret = new List(); - - - using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) + using (var dataAccess = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); - sb.AppendLine($" SELECT [Id] "); sb.AppendLine($" ,[RadioFrequencyMhz] "); sb.AppendLine($" ,[FlexnetAppId] "); @@ -500,104 +499,88 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers sb.AppendLine($" FROM[Auftrag].[dbo].[Cordonel_CurrentFw] "); sb.AppendLine($" left outer join [Auftrag].[dbo].[FileClusterStore] on [FileId] = [FileClusterStoreId]"); sb.AppendLine($" where 1= 1 "); - if (Metersize.HasValue) + if (meterSize != null) { - sb.AppendLine($" and Metersize= {Metersize.Value} "); + sb.AppendLine($" and Metersize={meterSize} "); } - if (!string.IsNullOrEmpty(Region)) + if (radioFrequencyMhz != null) { - sb.AppendLine($" and Region ='{Region}' "); + sb.AppendLine($" and radioFrequencyMhz={radioFrequencyMhz} "); } - if (ForProd.HasValue) + if (region != null) { - sb.AppendLine($" and currentForProd ={(ForProd.Value ? "1" : "0") } "); + sb.AppendLine($" and Region ='{region}' "); } - if (Deleted.HasValue) + if (forProd.HasValue) { - sb.AppendLine($" and Deleted is {(Deleted.Value ? "not" : "")} null"); + sb.AppendLine($" and currentForProd ={(forProd.Value ? "1" : "0") } "); + } + if (deleted.HasValue) + { + sb.AppendLine($" and Deleted is {(deleted.Value ? "not" : "")} null"); } - var retDT = dataacces.ExecuteQuery(sb.ToString()); + var retDT = dataAccess.ExecuteQuery(sb.ToString()); foreach (DataRow item in retDT.Rows) { - var add = new CordonelFw() { Id = (int)item["Id"] }; - add.RadioFrequencyMhz = (int)item["RadioFrequencyMhz"]; - add.Name = (string)item["Name"]; - - add.FileName = ""; + var add = new CordonelFwPackageInfo + { + Id = (Int32)item["Id"], + RadioFrequencyMhz = (Int32?)item["RadioFrequencyMhz"], + Name = (String)item["Name"], + FlexnetAppId = (Int32)item["FlexnetAppId"], + Version = (Int32)item["Version"], + FileClusterStoreId = (Int32)item["FileClusterStoreId"], + FileName = "" + }; if (item["FileName"].GetType() != typeof(DBNull)) { - add.FileName = (string)item["FileName"]; + add.FileName = (String)item["FileName"]; } - if (item["Deleted"].GetType() != typeof(DBNull)) { add.DeletedDate = (DateTime)item["Deleted"]; } - add.FlexnetAppId = (int)item["FlexnetAppId"]; - add.Version = (int)item["Version"]; - - add.Metersize = (Int16)item["Metersize"]; - - - - add.FileClusterStoreId = null; - if (item["FileClusterStoreId"].GetType() != typeof(DBNull)) + + if (item["Metersize"].GetType() != typeof(DBNull)) { - add.FileClusterStoreId = (int)item["FileClusterStoreId"]; + add.MeterSize = MeterSizeConverter.ConvertMeterSizeEnumToSizeName((MeterSize)(Int16)item["Metersize"]); } + add.CurrentForProd = false; if (item["CurrentForProd"].GetType() != typeof(DBNull)) { - - add.CurrentForProd = (bool)item["CurrentForProd"]; + add.CurrentForProd = (Boolean)item["CurrentForProd"]; } - - switch ((string)item["Region"].ToString()) + if (item["Region"].GetType() != typeof(DBNull)) { - case "emea": - add.Region = Logic.ProductionOrderCore.OrderData.Region.EMEA; - break; - case "na": - add.Region = Logic.ProductionOrderCore.OrderData.Region.NA; - break; - case "china": - add.Region = Logic.ProductionOrderCore.OrderData.Region.China; - break; - default: - add.Region = Logic.ProductionOrderCore.OrderData.Region.EMEA; - break; - } + var reg = (String)item["Region"]; + add.Region = reg.Replace(" ",""); + } - - - - - - add.CoreRevisionMin = null; if (item["CoreRevisionMin"].GetType() != typeof(DBNull)) { - add.CoreRevisionMin = (int)item["CoreRevisionMin"]; + add.CoreRevisionMin = (Int32)item["CoreRevisionMin"]; } add.CoreRevisionMax = null; if (item["CoreRevisionMax"].GetType() != typeof(DBNull)) { - add.CoreRevisionMin = (int)item["CoreRevisionMax"]; + add.CoreRevisionMax = (Int32)item["CoreRevisionMax"]; } add.MetrologyVersion = null; if (item["MetrologyVersion"].GetType() != typeof(DBNull)) { - add.CoreRevisionMin = (int)item["MetrologyVersion"]; + add.MetrologyVersion = (Int32)item["MetrologyVersion"]; } @@ -605,7 +588,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers if (item["IsReleased"].GetType() != typeof(DBNull)) { - add.IsReleased = (bool)item["IsReleased"]; + add.IsReleased = (Boolean)item["IsReleased"]; } add.ReleaseDate = null; if (item["ReleaseDate"].GetType() != typeof(DBNull)) diff --git a/Common/Service/MeterProcessState/Controllers/FwUpdateController.cs b/Common/Service/MeterProcessState/Controllers/FwUpdateController.cs index 0d19f477..438de16c 100644 --- a/Common/Service/MeterProcessState/Controllers/FwUpdateController.cs +++ b/Common/Service/MeterProcessState/Controllers/FwUpdateController.cs @@ -723,16 +723,19 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers } [Route("GetRecoveryFile"), HttpGet] - public async Task GetRecoveryFile(Int32 PcbID, Int32? RadioFrq, String Region, String FlexnetVersion) + public async Task GetRecoveryFile(Int32 pcbId, Int32? radioFrq, String region, String flexnetVersion) { - var file = new RecoverySettings() { PcbId = PcbID, RadioFrequencyMhz = RadioFrq, Region = Region, Release = FlexnetVersion }; - file.RecoveryRegisters = new List(); - file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 }, IsCiritcal = true, ReadbackValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } }); + var file = new RecoverySettings { PcbId = pcbId, RadioFrequencyMhz = radioFrq, Region = region, Release = flexnetVersion, + RecoveryRegisters = new List + { + new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 }, + IsCritical = true, ReadBackValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } } + } + }; - - var csdRet = OrderProgrammingParameters.GetProgrammingParameters(PcbID.ToString(), GlobalConfig.connectionString.Value); + var csdRet = OrderProgrammingParameters.GetProgrammingParameters(pcbId.ToString(), GlobalConfig.connectionString.Value); foreach (var item in csdRet.Where(w => w.Source == Logic.ProductionOrderCore.ProgrammingSource.Vako)) @@ -741,8 +744,8 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers { RegisterIdent = item.RegisterName, WriteValue = item.RegisterValue, - ReadbackValue = null, - IsCiritcal = false, + ReadBackValue = null, + IsCritical = false, Access = RegisterRecoveryAccess.SetAlways, }); } @@ -753,26 +756,26 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers { RegisterIdent = item.RegisterName, WriteValue = item.RegisterValue, - ReadbackValue = null, - IsCiritcal = false, + ReadBackValue = null, + IsCritical = false, Access = RegisterRecoveryAccess.SetAlways, }); } - file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCiritcal = true }); + file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCritical = true }); - file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCiritcal = true, ReadbackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } }); + file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCritical = true, ReadBackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } }); file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_MainAlarmMask", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } }); file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_ExtendedAlarmMask", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } }); - file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0xFF }, IsCiritcal = true, ReadbackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } }); + file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0xFF }, IsCritical = true, ReadBackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } }); - var blacklist = new List() + var blackList = new List() { "CUSTOMER_RebootCount", "GENESISFLOW_ForwardArrow", @@ -785,7 +788,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers }; - var Crit = new List() + var Critical = new List() { "GENESISFLOW_SealDisplay", "GENESISFLOW_MeterSize", @@ -811,14 +814,9 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers }; + file.RecoveryRegisters.Where(d => Critical.Contains(d.RegisterIdent)).ToList().ForEach(f => { f.IsCritical = true; f.ReadBackValue = f.WriteValue; }); - - - file.RecoveryRegisters.Where(d => Crit.Contains(d.RegisterIdent)).ToList().ForEach(f => { f.IsCiritcal = true; f.ReadbackValue = f.WriteValue; }); - - - - var onlyIfDefaultl = new List() + var onlyIfDefault = new List() { "METROLOGYASST_PulseWeight", "METROLOGYASST_PressureUnits", @@ -841,7 +839,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers }; - file.RecoveryRegisters.Where(d => onlyIfDefaultl.Contains(d.RegisterIdent)).ToList().ForEach(f => f.Access = RegisterRecoveryAccess.SetIfDefault); + file.RecoveryRegisters.Where(d => onlyIfDefault.Contains(d.RegisterIdent)).ToList().ForEach(f => f.Access = RegisterRecoveryAccess.SetIfDefault); return Request.CreateResponse(HttpStatusCode.OK, file); } diff --git a/Common/Ui/GenesisToolBox/FrmFileCURD.cs b/Common/Ui/GenesisToolBox/FrmFileCURD.cs index 26f713ca..40f2ad03 100644 --- a/Common/Ui/GenesisToolBox/FrmFileCURD.cs +++ b/Common/Ui/GenesisToolBox/FrmFileCURD.cs @@ -1,5 +1,4 @@ -using Logic.ProductionToProductMapper.Cordonel; -using Logic.ProductionToProductMapper.Files.Fw; +using Logic.ProductionToProductMapper.Files.Fw; using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -10,6 +9,7 @@ using System.Text; using System.Windows.Forms; using Xylem.Common.CommonCore.Configuration; using Xylem.Common.Logic.ProductionOrderCore.FW; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; diff --git a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs index 1861f65f..5cc5395a 100644 --- a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs +++ b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs @@ -20,6 +20,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; using Xylem.Common.Logic.ProductionOrderCore.FW; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Ui.GenesisToolBox.Properties; @@ -730,7 +731,8 @@ namespace Xylem.Common.Ui.GenesisToolBox Invoke(new Action(() => { lblConnectPcb.Text = StrPartPcbConnected + _currentGenesis.PcbId; - lblCoreRevision.Text = StrCoreRevision + _currentGenesis.CoreRevision; + lblCoreRevision.Text = StrCoreRevision + + GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision); lblConnectPcb.ForeColor = Color.Green; _meterFwUpdate?.CompareAllMeterAndFileApps(); FillDataGridWithAllInfos(); @@ -1857,10 +1859,9 @@ namespace Xylem.Common.Ui.GenesisToolBox else if (item.FileName.ToLower().EndsWith(".txt")) { //encode content - String controlFileContent; - System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); - controlFileContent = enc.GetString(item.FileContent.ToArray()); + var enc = new System.Text.ASCIIEncoding(); + var controlFileContent = enc.GetString(item.FileContent.ToArray()); diff --git a/Common/Ui/GenesisToolBox/FrmLutManagement.cs b/Common/Ui/GenesisToolBox/FrmLutManagement.cs index 12003b47..27583ff6 100644 --- a/Common/Ui/GenesisToolBox/FrmLutManagement.cs +++ b/Common/Ui/GenesisToolBox/FrmLutManagement.cs @@ -10,7 +10,7 @@ using System.Text; using System.Threading; using System.Windows.Forms; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; -using Xylem.Common.Logic.ProductionOrderCore.File; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Utils.Crc16Ccitt; diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs b/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs index 05edd61b..f1092754 100644 --- a/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs +++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.Designer.cs @@ -30,7 +30,7 @@ { this.components = new System.ComponentModel.Container(); this.grpSetup = new System.Windows.Forms.GroupBox(); - this.tbxRegionRadio = new System.Windows.Forms.TextBox(); + this.tbxRegion = new System.Windows.Forms.TextBox(); this.label8 = new System.Windows.Forms.Label(); this.tbxPcbId = new System.Windows.Forms.TextBox(); this.tbxMeterFw = new System.Windows.Forms.TextBox(); @@ -74,6 +74,8 @@ this.label9 = new System.Windows.Forms.Label(); this.lblUpdateTime = new System.Windows.Forms.Label(); this.label7 = new System.Windows.Forms.Label(); + this.tbxRadio = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); this.grpSetup.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.groupBox1.SuspendLayout(); @@ -81,7 +83,9 @@ // // grpSetup // - this.grpSetup.Controls.Add(this.tbxRegionRadio); + this.grpSetup.Controls.Add(this.label10); + this.grpSetup.Controls.Add(this.tbxRadio); + this.grpSetup.Controls.Add(this.tbxRegion); this.grpSetup.Controls.Add(this.label8); this.grpSetup.Controls.Add(this.tbxPcbId); this.grpSetup.Controls.Add(this.tbxMeterFw); @@ -96,31 +100,31 @@ this.grpSetup.Controls.Add(this.cbComSlot); this.grpSetup.Location = new System.Drawing.Point(12, 69); this.grpSetup.Name = "grpSetup"; - this.grpSetup.Size = new System.Drawing.Size(248, 250); + this.grpSetup.Size = new System.Drawing.Size(257, 250); this.grpSetup.TabIndex = 24; this.grpSetup.TabStop = false; this.grpSetup.Text = "Cordonel"; // - // tbxRegionRadio + // tbxRegion // - this.tbxRegionRadio.Location = new System.Drawing.Point(124, 178); - this.tbxRegionRadio.Name = "tbxRegionRadio"; - this.tbxRegionRadio.ReadOnly = true; - this.tbxRegionRadio.Size = new System.Drawing.Size(68, 20); - this.tbxRegionRadio.TabIndex = 34; + this.tbxRegion.Location = new System.Drawing.Point(128, 178); + this.tbxRegion.Name = "tbxRegion"; + this.tbxRegion.ReadOnly = true; + this.tbxRegion.Size = new System.Drawing.Size(68, 20); + this.tbxRegion.TabIndex = 34; // // label8 // this.label8.AutoSize = true; this.label8.Location = new System.Drawing.Point(10, 182); this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(105, 13); + this.label8.Size = new System.Drawing.Size(44, 13); this.label8.TabIndex = 33; - this.label8.Text = "Region/Radio[MHz]:"; + this.label8.Text = "Region:"; // // tbxPcbId // - this.tbxPcbId.Location = new System.Drawing.Point(124, 59); + this.tbxPcbId.Location = new System.Drawing.Point(128, 59); this.tbxPcbId.Name = "tbxPcbId"; this.tbxPcbId.ReadOnly = true; this.tbxPcbId.Size = new System.Drawing.Size(68, 20); @@ -128,7 +132,7 @@ // // tbxMeterFw // - this.tbxMeterFw.Location = new System.Drawing.Point(124, 88); + this.tbxMeterFw.Location = new System.Drawing.Point(128, 88); this.tbxMeterFw.Name = "tbxMeterFw"; this.tbxMeterFw.ReadOnly = true; this.tbxMeterFw.Size = new System.Drawing.Size(68, 20); @@ -136,7 +140,7 @@ // // tbxMeterMeterSize // - this.tbxMeterMeterSize.Location = new System.Drawing.Point(124, 148); + this.tbxMeterMeterSize.Location = new System.Drawing.Point(128, 148); this.tbxMeterMeterSize.Name = "tbxMeterMeterSize"; this.tbxMeterMeterSize.ReadOnly = true; this.tbxMeterMeterSize.Size = new System.Drawing.Size(68, 20); @@ -144,7 +148,7 @@ // // tbxMeterLutCrc // - this.tbxMeterLutCrc.Location = new System.Drawing.Point(124, 118); + this.tbxMeterLutCrc.Location = new System.Drawing.Point(128, 118); this.tbxMeterLutCrc.Name = "tbxMeterLutCrc"; this.tbxMeterLutCrc.ReadOnly = true; this.tbxMeterLutCrc.Size = new System.Drawing.Size(68, 20); @@ -179,7 +183,7 @@ // // btnConnect // - this.btnConnect.Location = new System.Drawing.Point(123, 24); + this.btnConnect.Location = new System.Drawing.Point(128, 24); this.btnConnect.Name = "btnConnect"; this.btnConnect.Size = new System.Drawing.Size(116, 25); this.btnConnect.TabIndex = 24; @@ -534,6 +538,23 @@ this.label7.TabIndex = 32; this.label7.Text = "Cordonel LUT Update"; // + // tbxRadio + // + this.tbxRadio.Location = new System.Drawing.Point(128, 208); + this.tbxRadio.Name = "tbxRadio"; + this.tbxRadio.ReadOnly = true; + this.tbxRadio.Size = new System.Drawing.Size(68, 20); + this.tbxRadio.TabIndex = 35; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(10, 212); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(116, 13); + this.label10.TabIndex = 36; + this.label10.Text = "Radio frequency[MHz]:"; + // // FrmLutUpdate // this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound; @@ -608,7 +629,7 @@ private System.Windows.Forms.TextBox tbxMeterFw; private System.Windows.Forms.TextBox tbxPcbId; private System.Windows.Forms.Label label7; - private System.Windows.Forms.TextBox tbxRegionRadio; + private System.Windows.Forms.TextBox tbxRegion; private System.Windows.Forms.Label label8; private System.Windows.Forms.Label lblSelectDb; private System.Windows.Forms.RadioButton rbtDb; @@ -617,5 +638,7 @@ private System.Windows.Forms.RadioButton rbtProd; private System.Windows.Forms.ComboBox cbxDbLuts; private System.Windows.Forms.Button btnLoadfromDb; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox tbxRadio; } } \ No newline at end of file diff --git a/Common/Ui/GenesisToolBox/FrmLutUpdate.cs b/Common/Ui/GenesisToolBox/FrmLutUpdate.cs index 342c08cc..5cc77f3f 100644 --- a/Common/Ui/GenesisToolBox/FrmLutUpdate.cs +++ b/Common/Ui/GenesisToolBox/FrmLutUpdate.cs @@ -13,6 +13,7 @@ using Newtonsoft.Json; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Utils.ProcessExec.EventArguments; @@ -235,11 +236,17 @@ namespace Xylem.Common.Ui.GenesisToolBox tbxMeterFw.Text = _currentGenesis.FwVersion; tbxMeterMeterSize.Text = _currentGenesis.MeterSize; tbxMeterLutCrc.Text = _currentGenesis.LutCrc; - tbxRegionRadio.Text = _currentGenesis.RegionRadio; + tbxRegion.Text = _currentGenesis.Region; LogText("Meter FW Version: " + _currentGenesis.FwVersion); LogText("Meter LUT CRC: " + _currentGenesis.LutCrc); LogText("Meter Size: " + _currentGenesis.MeterSize); - LogText("Meter Region/Radio[MHz]: " + _currentGenesis.RegionRadio); + LogText("Meter Region: " + _currentGenesis.Region); + if (_currentGenesis.RadioFrequencyMhz != null) + { + tbxRadio.Text = $@"{_currentGenesis.RadioFrequencyMhz}"; + LogText($"Meter radio frequency [MHz]: {_currentGenesis.RadioFrequencyMhz}"); + } + lblConnectPcb.ForeColor = Color.Green; CheckUpdateEnabled(); _currentGenesis.Logout(); @@ -379,7 +386,7 @@ namespace Xylem.Common.Ui.GenesisToolBox return; LogText(StrSeparator); LogText($"PCB ID: {_currentGenesis.PcbId}"); - LogText($"Core Version: {_currentGenesis.CoreRevision}"); + LogText($"Core Version: {GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)}"); LogText(""); LogText("Installed Applications:"); diff --git a/Common/Ui/GenesisToolBox/FrmProductionData.cs b/Common/Ui/GenesisToolBox/FrmProductionData.cs index be88a4c5..f84b951d 100644 --- a/Common/Ui/GenesisToolBox/FrmProductionData.cs +++ b/Common/Ui/GenesisToolBox/FrmProductionData.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; using Xylem.Common.CommonCore.Configuration; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; namespace Xylem.Common.Ui.GenesisToolBox diff --git a/Common/Ui/GenesisToolBox/frmRegisterStore.cs b/Common/Ui/GenesisToolBox/frmRegisterStore.cs index d8071926..55eb7a29 100644 --- a/Common/Ui/GenesisToolBox/frmRegisterStore.cs +++ b/Common/Ui/GenesisToolBox/frmRegisterStore.cs @@ -1092,7 +1092,7 @@ namespace Xylem.Common.Ui.GenesisToolBox var sb = new StringBuilder(); sb.AppendLine($"PCBID: {_currentGenesis.PcbId}"); sb.AppendLine($"Date: {DateTimeOffset.UtcNow}"); - sb.AppendLine($"System Core Revision: {_currentGenesis.CoreRevision}"); + sb.AppendLine($"System Core Revision: {GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)}"); foreach (var fm in _currentGenesis.MeterAppListVersion.OrderBy(o => o.AppId)) { var versionString = fm.IsInstalled @@ -1879,15 +1879,18 @@ namespace Xylem.Common.Ui.GenesisToolBox /// /// - Changed version from Uint32 to String /// + /// + /// - Changed core revision from string to Int32?. + /// private void button3_Click(Object sender, EventArgs e) { var apps = new List(); foreach (var item in _currentGenesis.MeterAppListVersion) { - apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, (item.AppId != 15 ? true : false))); + apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15)); } - apps.Add(new CordonelAppVersion(-1, _currentGenesis.CoreRevision, false)); + apps.Add(new CordonelAppVersion(-1, BuildFwVersionString(_currentGenesis.CoreRevision), false)); var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={_currentGenesis.PcbId}&ProgressName=toolbox&version={Assembly.GetExecutingAssembly().GetName().Version}"; var a = LocalWebRequest.PostRequestAsync(url, json: apps); diff --git a/Common/Ui/LegacyGenesisControl/DataPackage/TestSetupContainer.cs b/Common/Ui/LegacyGenesisControl/DataPackage/TestSetupContainer.cs index ba91c81f..9129c5ef 100644 --- a/Common/Ui/LegacyGenesisControl/DataPackage/TestSetupContainer.cs +++ b/Common/Ui/LegacyGenesisControl/DataPackage/TestSetupContainer.cs @@ -1,8 +1,4 @@ -using Logic.ProductionToProductMapper.Cordonel; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using XylemCommonUiLegacyGenCtl.Enums; namespace XylemCommonUiLegacyGenCtl.DataPackage diff --git a/Common/Ui/LegacyGenesisControl/LegacyGenCtl.csproj b/Common/Ui/LegacyGenesisControl/LegacyGenCtl.csproj index 9a4c5a23..47e04eee 100644 --- a/Common/Ui/LegacyGenesisControl/LegacyGenCtl.csproj +++ b/Common/Ui/LegacyGenesisControl/LegacyGenCtl.csproj @@ -226,6 +226,10 @@ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D} Logic.ProductionToProductMapper + + {6D2777BB-7A88-466D-A49B-3266F9BF0160} + ProductionOrderCore + {6CCDB656-C676-4360-BABA-C4596AAD175D} Measurements diff --git a/Common/Ui/LegacyGenesisControl/PreAdjWr.cs b/Common/Ui/LegacyGenesisControl/PreAdjWr.cs index dc42cc75..2b236f2d 100644 --- a/Common/Ui/LegacyGenesisControl/PreAdjWr.cs +++ b/Common/Ui/LegacyGenesisControl/PreAdjWr.cs @@ -1,5 +1,4 @@ using CordonelPreadjustmentUi; -using CordonelPreadjustmentUi.Parameters; using CordonelPreadjustmentUi.Processes.Itinerary; using Newtonsoft.Json; using NLog; @@ -12,6 +11,7 @@ using System.Text; using System.Windows.Forms; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig; +using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters; using Xylem.Common.Utils.Logging; using XylemCommonUiLegacyGenCtl.DataPackage; diff --git a/Common/Ui/LegacyGenesisControl/TstContHlp.cs b/Common/Ui/LegacyGenesisControl/TstContHlp.cs index 72cc9e8c..58d62ccc 100644 --- a/Common/Ui/LegacyGenesisControl/TstContHlp.cs +++ b/Common/Ui/LegacyGenesisControl/TstContHlp.cs @@ -1,7 +1,7 @@ -using Logic.ProductionToProductMapper.Cordonel; -using System; +using System; using System.Linq; using System.Runtime.InteropServices; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using XylemCommonUiLegacyGenCtl.DataPackage; namespace XylemCommonUiLegacyGenCtl diff --git a/Common/Ui/LegacyGenesisControl/ctlBenchRdy.Designer.cs b/Common/Ui/LegacyGenesisControl/ctlBenchRdy.Designer.cs index 6b13167d..1c04b6d7 100644 --- a/Common/Ui/LegacyGenesisControl/ctlBenchRdy.Designer.cs +++ b/Common/Ui/LegacyGenesisControl/ctlBenchRdy.Designer.cs @@ -772,7 +772,7 @@ this.ctlMeterReady10.CustomerSerialNr = null; this.ctlMeterReady10.LastTestBechState = 0; this.ctlMeterReady10.Location = new System.Drawing.Point(3, 635); - this.ctlMeterReady10.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady10.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady10.Name = "ctlMeterReady10"; this.ctlMeterReady10.OrderNumber = null; this.ctlMeterReady10.RadioAdress = null; @@ -786,7 +786,7 @@ this.ctlMeterReady9.CustomerSerialNr = null; this.ctlMeterReady9.LastTestBechState = 0; this.ctlMeterReady9.Location = new System.Drawing.Point(3, 579); - this.ctlMeterReady9.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady9.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady9.Name = "ctlMeterReady9"; this.ctlMeterReady9.OrderNumber = null; this.ctlMeterReady9.RadioAdress = null; @@ -800,7 +800,7 @@ this.ctlMeterReady8.CustomerSerialNr = null; this.ctlMeterReady8.LastTestBechState = 0; this.ctlMeterReady8.Location = new System.Drawing.Point(3, 522); - this.ctlMeterReady8.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady8.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady8.Name = "ctlMeterReady8"; this.ctlMeterReady8.OrderNumber = null; this.ctlMeterReady8.RadioAdress = null; @@ -814,7 +814,7 @@ this.ctlMeterReady7.CustomerSerialNr = null; this.ctlMeterReady7.LastTestBechState = 0; this.ctlMeterReady7.Location = new System.Drawing.Point(3, 466); - this.ctlMeterReady7.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady7.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady7.Name = "ctlMeterReady7"; this.ctlMeterReady7.OrderNumber = null; this.ctlMeterReady7.RadioAdress = null; @@ -828,7 +828,7 @@ this.ctlMeterReady6.CustomerSerialNr = null; this.ctlMeterReady6.LastTestBechState = 0; this.ctlMeterReady6.Location = new System.Drawing.Point(3, 410); - this.ctlMeterReady6.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady6.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady6.Name = "ctlMeterReady6"; this.ctlMeterReady6.OrderNumber = null; this.ctlMeterReady6.RadioAdress = null; @@ -842,7 +842,7 @@ this.ctlMeterReady5.CustomerSerialNr = null; this.ctlMeterReady5.LastTestBechState = 0; this.ctlMeterReady5.Location = new System.Drawing.Point(3, 354); - this.ctlMeterReady5.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady5.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady5.Name = "ctlMeterReady5"; this.ctlMeterReady5.OrderNumber = null; this.ctlMeterReady5.RadioAdress = null; @@ -856,7 +856,7 @@ this.ctlMeterReady4.CustomerSerialNr = null; this.ctlMeterReady4.LastTestBechState = 0; this.ctlMeterReady4.Location = new System.Drawing.Point(3, 298); - this.ctlMeterReady4.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady4.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady4.Name = "ctlMeterReady4"; this.ctlMeterReady4.OrderNumber = null; this.ctlMeterReady4.RadioAdress = null; @@ -870,7 +870,7 @@ this.ctlMeterReady3.CustomerSerialNr = null; this.ctlMeterReady3.LastTestBechState = 0; this.ctlMeterReady3.Location = new System.Drawing.Point(3, 242); - this.ctlMeterReady3.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady3.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady3.Name = "ctlMeterReady3"; this.ctlMeterReady3.OrderNumber = null; this.ctlMeterReady3.RadioAdress = null; @@ -884,7 +884,7 @@ this.ctlMeterReady2.CustomerSerialNr = null; this.ctlMeterReady2.LastTestBechState = 0; this.ctlMeterReady2.Location = new System.Drawing.Point(3, 186); - this.ctlMeterReady2.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady2.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady2.Name = "ctlMeterReady2"; this.ctlMeterReady2.OrderNumber = null; this.ctlMeterReady2.RadioAdress = null; @@ -900,7 +900,7 @@ this.ctlMeterReady1.CustomerSerialNr = null; this.ctlMeterReady1.LastTestBechState = 0; this.ctlMeterReady1.Location = new System.Drawing.Point(3, 130); - this.ctlMeterReady1.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40; + this.ctlMeterReady1.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40; this.ctlMeterReady1.Name = "ctlMeterReady1"; this.ctlMeterReady1.OrderNumber = null; this.ctlMeterReady1.RadioAdress = null; diff --git a/Common/Ui/LegacyGenesisControl/ctlBenchRdy.cs b/Common/Ui/LegacyGenesisControl/ctlBenchRdy.cs index 97215ed8..65f90f1f 100644 --- a/Common/Ui/LegacyGenesisControl/ctlBenchRdy.cs +++ b/Common/Ui/LegacyGenesisControl/ctlBenchRdy.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; using XylemCommonUiLegacyGenCtl.DataPackage; using XylemCommonUiLegacyGenCtl.Enums; diff --git a/Common/Ui/LegacyGenesisControl/ctlCRdy.cs b/Common/Ui/LegacyGenesisControl/ctlCRdy.cs index 7aef4d86..ea081d08 100644 --- a/Common/Ui/LegacyGenesisControl/ctlCRdy.cs +++ b/Common/Ui/LegacyGenesisControl/ctlCRdy.cs @@ -1,5 +1,4 @@ -using Logic.ProductionToProductMapper.Cordonel; -using Newtonsoft.Json; +using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -15,6 +14,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; using XylemCommonUiLegacyGenCtl.DataPackage; using XylemCommonUiLegacyGenCtl.Enums; diff --git a/Common/Ui/LegacyGenesisControl/ctlMeterReady.cs b/Common/Ui/LegacyGenesisControl/ctlMeterReady.cs index e9d32536..5d866ffe 100644 --- a/Common/Ui/LegacyGenesisControl/ctlMeterReady.cs +++ b/Common/Ui/LegacyGenesisControl/ctlMeterReady.cs @@ -15,6 +15,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.SoftwareAccessHelper; using XylemCommonUiLegacyGenCtl.DataPackage; using XylemCommonUiLegacyGenCtl.Enums; diff --git a/ServiceFwUpdate/Common/FwUpdateDb/CordonelProductionInfosDb.cs b/ServiceFwUpdate/Common/FwUpdateDb/CordonelProductionInfosDb.cs index 6eb12c6e..6c69d7bd 100644 --- a/ServiceFwUpdate/Common/FwUpdateDb/CordonelProductionInfosDb.cs +++ b/ServiceFwUpdate/Common/FwUpdateDb/CordonelProductionInfosDb.cs @@ -23,9 +23,9 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb public Boolean IsRemoved; /// - /// Reason for update denied + /// Reason for update denial as text for user in "Pre-Build-Summary-Tab" /// - public String ReasonForUpdateDenied; + public String ReasonForUpdateDenial; /// /// PCB ID diff --git a/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.cs b/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.cs index 17bd4226..4f0a2440 100644 --- a/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.cs +++ b/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.cs @@ -9,6 +9,7 @@ using Newtonsoft.Json; using Xylem.Common.CommonCore.Configuration; using Xylem.Common.Cryptology.Security; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd; +using Xylem.Common.Logic.ProductionOrderCore.FW; using Xylem.Common.Logic.SoftwareAccessHelper; using Xylem.Common.Utils.DateTimeServer; using Xylem.ServiceFwUpdate.Common.FwUpdateSafe; @@ -51,6 +52,16 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb /// public List DbCordonelFwPackages { get; private set; } + /// + /// Cordonel FW packages information. + /// + public List DbCordonelFwPackagesInfo { get; private set; } + + /// + /// Single Cordonel FW package. + /// + public ClusteredFile DbCordonelFwPackage { get; private set; } + /// /// Cordonel safes. /// @@ -351,38 +362,38 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb } } - /// - /// Get all Cordonel FW packages info files from DB. - /// - /// true if successful - /// - /// - Initial. - /// - public Boolean GetAllCordonelFwInfoFilesFromDb() - { - if (DbCordonelFwPackages == null) DbCordonelFwPackages = new List(); - DbCordonelFwPackages.Clear(); + ///// + ///// Get all Cordonel FW packages info files from DB. + ///// + ///// true if successful + ///// + ///// - Initial. + ///// + //public Boolean GetAllCordonelFwInfoFilesFromDb() + //{ + // if (DbCordonelFwPackages == null) DbCordonelFwPackages = new List(); + // DbCordonelFwPackages.Clear(); - try - { - var url = ServiceUrls.ListAllFwPackages(); - var requestResponse = LocalWebRequest.GetRequest(url, 10000); - if (string.IsNullOrEmpty(requestResponse)) - { - DbIsConnected = false; - return false; - } + // try + // { + // var url = ServiceUrls.ListAllFwPackages(); + // var requestResponse = LocalWebRequest.GetRequest(url, 10000); + // if (string.IsNullOrEmpty(requestResponse)) + // { + // DbIsConnected = false; + // return false; + // } - DbIsConnected = true; - DbCordonelFwPackages = JsonConvert.DeserializeObject>(requestResponse); - return DbCordonelFwPackages != null && DbCordonelFwPackages.Count != 0; - } - catch (Exception) - { - DbIsConnected = false; - return false; - } - } + // DbIsConnected = true; + // DbCordonelFwPackages = JsonConvert.DeserializeObject>(requestResponse); + // return DbCordonelFwPackages != null && DbCordonelFwPackages.Count != 0; + // } + // catch (Exception) + // { + // DbIsConnected = false; + // return false; + // } + //} /// /// Load the latest FW update SW package from DB. @@ -619,7 +630,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb /// /// Get a single Cordonel FW package from DB. /// - /// the file id previously read with + /// the file id previously read with /// the FW as package /// reading content if true, else only the file information /// true if successful @@ -770,6 +781,40 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb } } /// + /// Get all Cordonel FW packages information from DB. + /// + /// true if successful + /// + /// - Initial. + /// + public Boolean GetAllCordonelFwPackagesInfoFromDb() + { + if (DbCordonelFwPackagesInfo == null) + DbCordonelFwPackagesInfo = new List(); + DbCordonelFwPackagesInfo.Clear(); + + try + { + var url = ServiceUrls.ListAllCordonelFwPackagesUrl(); + var requestResponse = LocalWebRequest.GetRequest(url, 1200); + if (string.IsNullOrEmpty(requestResponse)) + { + DbIsConnected = false; + return false; + } + + DbIsConnected = true; + DbCordonelFwPackagesInfo = + JsonConvert.DeserializeObject>(requestResponse); + return DbCordonelFwPackagesInfo != null && DbCordonelFwPackagesInfo.Count != 0; + } + catch (Exception e) + { + DbIsConnected = false; + return false; + } + } + /// /// Simple command to access the DB and check therefore if it is available. /// /// true if successful diff --git a/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.csproj b/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.csproj index 7791ceaf..d8e1623b 100644 --- a/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.csproj +++ b/ServiceFwUpdate/Common/FwUpdateDb/FwUpdateDb.csproj @@ -99,6 +99,10 @@ {d0c859d9-d55e-4e85-ac50-0ff31b1ce50d} Logic.ProductionToProductMapper + + {6d2777bb-7a88-466d-a49b-3266f9bf0160} + ProductionOrderCore + {a33e3c6d-eaae-4a20-a0ee-f9e6922fd029} SoftwareAccessHelper diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/CordonelDeviceInfo.cs b/ServiceFwUpdate/Common/FwUpdateSafe/CordonelDeviceInfo.cs index 2316a4be..b674ed6b 100644 --- a/ServiceFwUpdate/Common/FwUpdateSafe/CordonelDeviceInfo.cs +++ b/ServiceFwUpdate/Common/FwUpdateSafe/CordonelDeviceInfo.cs @@ -29,9 +29,9 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe public String RequiredRelease; /// - /// Setting reference file + /// Recovery reference file /// - public String CordonelSettingsFileName; + public String CordonelRecoveryFileName; } } diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/CordonelFirmware.cs b/ServiceFwUpdate/Common/FwUpdateSafe/CordonelFirmware.cs index f75138e8..0879ec6d 100644 --- a/ServiceFwUpdate/Common/FwUpdateSafe/CordonelFirmware.cs +++ b/ServiceFwUpdate/Common/FwUpdateSafe/CordonelFirmware.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Logic.ProductionToProductMapper.Files.Fw; +using Xylem.Common.Logic.ProductionOrderCore.FW; namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe { @@ -13,9 +14,9 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe /// /// Release version of this package /// - public String ReleaseNameVersion; + public CordonelFwPackageInfo FwPackageInfo; - /// + /// /// Binary application files /// public List BinaryApplicationFiles; diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/CordonelSettings.cs b/ServiceFwUpdate/Common/FwUpdateSafe/CordonelSettings.cs deleted file mode 100644 index 60457239..00000000 --- a/ServiceFwUpdate/Common/FwUpdateSafe/CordonelSettings.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe -{ - /// - /// Settings to adjust the Cordonel after FW update. - /// - [Serializable] - public struct CordonelSettings - { - } -} diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/FwUpdateSafe.csproj b/ServiceFwUpdate/Common/FwUpdateSafe/FwUpdateSafe.csproj index 787e5f10..8ce8bcd6 100644 --- a/ServiceFwUpdate/Common/FwUpdateSafe/FwUpdateSafe.csproj +++ b/ServiceFwUpdate/Common/FwUpdateSafe/FwUpdateSafe.csproj @@ -72,7 +72,6 @@ - @@ -94,6 +93,10 @@ {d0c859d9-d55e-4e85-ac50-0ff31b1ce50d} Logic.ProductionToProductMapper + + {6d2777bb-7a88-466d-a49b-3266f9bf0160} + ProductionOrderCore + diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoveryRegisterItem.cs b/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoveryRegisterItem.cs index c8cf9998..c591c95c 100644 --- a/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoveryRegisterItem.cs +++ b/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoveryRegisterItem.cs @@ -8,37 +8,31 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe.MeterRecovery public class RecoveryRegisterItem { /// - /// Register name, use the latest configuration.json to make sure that the adress will be correct + /// Register name, use the latest configuration.json to make sure that the address will be correct /// public String RegisterIdent { get; set; } - /// /// Content to write /// public Byte[] WriteValue { get; set; } - /// - /// check if the wirtten value is sett like this + /// check if the written value is sett like this /// Null or not set if a read back is not needed /// - public Byte[] ReadbackValue { get; set; } + public Byte[] ReadBackValue { get; set; } /// /// Mark Update as failed if write was not successful /// - public Boolean IsCiritcal { get; set; } - + public Boolean IsCritical { get; set; } /// /// Condition when the register will be overridden /// public RegisterRecoveryAccess Access { get; set; } - - - - + } } diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoverySettings.cs b/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoverySettings.cs index 79a0846a..c4e5ea53 100644 --- a/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoverySettings.cs +++ b/ServiceFwUpdate/Common/FwUpdateSafe/MeterRecovery/RecoverySettings.cs @@ -6,41 +6,45 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe.MeterRecovery /// /// /// + [Serializable] public class RecoverySettings { /// - /// Null if check in not necessary if is an number check it agianst the pcbid from meter + /// Null if check in not necessary if is an number check it against the pcbid from meter /// - public Int32? PcbId { get; set; } + public Int32? PcbId; + /// - /// Null if check in not necessary if is an number check it agianst the radio FRQ + /// Radio frequency in MHz referenced a SENSUSRADIO AppId 0x10, Register FrequencyIndicator Id 0x05 + /// values: default 433, minimum 433, maximum 868 or null if region is "NA" or if for all frequencies /// - public Int32? RadioFrequencyMhz { get; set; } + public Int32? RadioFrequencyMhz; + /// /// Null till meter handles regions /// - public String Region { get; set; } = null; + public String Region; + /// - /// Null till meter handles regions + /// Release string which is the FLEXNETVERSION /// - public String Release { get; set; } + public String Release; /// /// User name /// - public String ApproverName { get; set; } - + public String ApproverName; /// - ///null means not approved + /// Null means not approved /// - public DateTimeOffset? ApprovalDate { get; set; } + public DateTimeOffset? ApprovalDate; /// /// List of registers to recover /// - public List RecoveryRegisters { get; set; } + public List RecoveryRegisters; /// /// File name for this recovery register set @@ -48,8 +52,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe.MeterRecovery /// public String GenerateFileName() { - return $"{PcbId}_{RadioFrequencyMhz}_{Region}_{Release}.config"; - + return $"{PcbId}_{Region}_{Release}.recovery"; } } } diff --git a/ServiceFwUpdate/Common/FwUpdateSafe/UpdateContainer.cs b/ServiceFwUpdate/Common/FwUpdateSafe/UpdateContainer.cs index 04a2d30d..a9e84ecc 100644 --- a/ServiceFwUpdate/Common/FwUpdateSafe/UpdateContainer.cs +++ b/ServiceFwUpdate/Common/FwUpdateSafe/UpdateContainer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Xylem.ServiceFwUpdate.Common.FwUpdateSafe.MeterRecovery; namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe { @@ -16,11 +17,11 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateSafe /// /// Cordonel device information /// - public List CordonelFwPackages; + public CordonelFirmware CordonelFwPackage; /// - /// Cordonel device information + /// Cordonel register recovery settings /// - public List CordonelSettingFiles; + public List CordonelRegisterRecoveries; /// /// Cordonel device information /// diff --git a/ServiceFwUpdate/Documents/Cordonel Service FW-Update Drawingse.vsd b/ServiceFwUpdate/Documents/Cordonel Service FW-Update Drawingse.vsd index 2be61dc0f0873842b3e3f4c67818bfb8f149fa6b..45b24d7edd411074cf925905c0d01bceb8675838 100644 GIT binary patch delta 206045 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
MB_vzB6|_?5c!LuM9)P>MVCZ(M9UfR&7y8m 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
%I{p`$Y}U|5`@ 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 - /// This class collects all information needed to specify the FW-Update package. - ///

9jA1?V{-QBe>xuW?%1e2=8a%-JQ%NR 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

- [Serializable] - public class CordonelFwPackageInfo - { - /// - /// Used to keep the selection information on e.g. data tables stuck at the FW. - /// - public Boolean IsSelected; - /// - /// Marker for the latest release. - /// - public Boolean FileIsLatest; - /// - /// Marker if it is released. - /// - public Boolean FwIsReleased; - /// - /// Name of the release e.g. PROD_EMEA_868_DN50_R1066 - /// - public String ReleaseNameVersion; - /// - /// Release version e.g. 10.67 referenced as FLEXNETVERSION AppId 0x18 - /// - public String ReleaseVersion; - /// - /// Region "EMEA" or "NA" - /// - public String Region; - /// - /// Core version minimum - /// - public Int32 CoreVersionMin; - /// - /// Core version maximum - /// - public Int32 CoreVersionMax; - /// - /// Version of metrology, as this may not permitted to update, referenced as GENESISFLOW AppId 0x0F. - /// - public String MetrologyVersion; - /// - /// Radio frequency in MHz referenced a SENSUSRADIO AppId 0x10, Register FrequencyIndicator Id 0x05 - /// values: default 433, minimum 433, maximum 868 or null if region is "NA" - /// - public String RadioFrequencyMhz; - /// - /// Meter size e.g. DN40, DN50, or null if for all sizes or null for all - /// - public String MeterSize; - /// - /// Name of person which approves the release - /// - public String ApproverName; - /// - /// Date of approval - /// - public DateTime ApprovalDate; - /// - /// Date of release - /// - public DateTime ReleaseDate; - } -} diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs index fbc0726b..7cac38d2 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FrmFwUpdateBuilder.cs @@ -15,11 +15,12 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; -using Logic.ProductionToProductMapper.Cordonel; using Xylem.Common.CommonCore.Consts; using Xylem.Common.CommonCore.ThreadWatcher; using Xylem.Common.Cryptology.Security; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile; +using Xylem.Common.Logic.ProductionOrderCore.FW; +using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Utils.DateTimeServer; using Xylem.Common.Utils.Logging; using Xylem.Common.Utils.UiInvoker; @@ -156,13 +157,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// The FW-Update package is a collection of all needed applications and settings to install into the Cordonel! /// This information will be passed to the FW-Update SW if any Cordonel requires this package. ///
- private readonly List _fwUpdatePackages = new List(); + private CordonelFirmware _fwUpdatePackage = new CordonelFirmware(); /// /// All Cordonel FW package information needed to select the right package for installation! This is going to be /// filled with information from the read packages from DB. /// This information will only be used by the FW Update Builder! /// - private readonly List _cordonelFwPackageInfoSearch = new List(); + //private readonly List _cordonelFwPackageInfoSearch = new List(); private readonly List _metrologySearchItems = new List(); private readonly List _coreSearchItems = new List(); @@ -185,7 +186,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder private String _fwUpdateSafeName; private FwUpdateSafeDb _fwUpdateSafeDb; private Int32 _updateOperatorId; - private readonly List _meterFwUpdateRuler = new List(); + //private readonly List _meterFwUpdateRuler = new List(); /// /// Reminder to avoid repeated reading of DB contents and reset of selection if item has already been assigned @@ -672,10 +673,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Initial. /// + /// + /// - Single FW-Update package. + /// private void btnFwPackageSearch_Click(Object sender, EventArgs e) { - // Load fw packages only if not selected indicated in count - if (_fwUpdatePackages.Count > 0) + // Load fw packages only if not selected + if (_fwUpdatePackage?.FwPackageInfo != null) return; DisableAllControlsInvoked(); @@ -716,6 +720,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Set status progress bar active for pre-build summary as this takes a lot of time. /// + /// + /// - Single FW-Update package. + /// private void tabControlSelection_Selected(Object sender, TabControlEventArgs e) { _processState = ProcessState.Idle; @@ -771,8 +778,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder if (e.TabPage == tabPageFwPackageSelection) { // Load fw packages only if not selected indicated in count - if (_fwUpdatePackages.Count > 0 || - _cordonelFwPackageInfoSearch != null && _cordonelFwPackageInfoSearch.Count > 0) + if (_fwUpdatePackage?.FwPackageInfo != null || + (_fwUpdateDbAccess?.DbCordonelFwPackagesInfo != null && + _fwUpdateDbAccess.DbCordonelFwPackagesInfo.Count > 0)) return; DisableAllControlsInvoked(); @@ -885,16 +893,16 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Clear content of FW package to force reload and output of loaded package on rebuild of safe. /// + /// + /// - Single FW-Update package. + /// private void btnBuildFwUpdateSafe_Click(Object sender, EventArgs e) { SetStatusProgressBar(); _dbAccessDelayCtrMs = 0; - // clear FW packages content to force reload from data base and therefore report generation, + // clear FW package content to force reload from data base and therefore report generation, // this is essential for rebuilding of a safe - foreach (var package in _fwUpdatePackages) - { - package?.BinaryApplicationFiles?.Clear(); - } + _fwUpdatePackage?.BinaryApplicationFiles?.Clear(); rtbReport.Clear(); rtbReport.ForeColor = ColorDefault; lblStatusDbConnect.Text = Resources.StrFwUpdateSafeBuilding; @@ -982,11 +990,14 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// - Library added to NLogConfig source path, as this is the release source, copy files only if not /// identical. /// + /// + /// - Removed FUpdateRuler, all data are going to be taken from DB. + /// public FrmFwUpdateBuilder() { _cultureInfo = Thread.CurrentThread.CurrentCulture; var fwUpdateBuilderExePath = AppDomain.CurrentDomain.BaseDirectory; - var fwUpdateBuilderLibraryPath = Path.Combine(fwUpdateBuilderExePath, FwUpdateConfig.LibrarySubFolderName); + //var fwUpdateBuilderLibraryPath = Path.Combine(fwUpdateBuilderExePath, FwUpdateConfig.LibrarySubFolderName); var fwUpdateBuilderConfigPath = Path.Combine(fwUpdateBuilderExePath, FwUpdateConfig.ConfigSubFolderName); var nLogConfigSourcePathName = Path.Combine(fwUpdateBuilderConfigPath, ProgramConfig.NlogConfig); @@ -1008,16 +1019,16 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder if (File.Exists(nLogConfigSourcePathName) && !File.Exists(NLogConfigurationDestPathFile)) SystemControl.CopyFile(nLogConfigSourcePathName, NLogConfigurationDestPathFile); - var rulerPathName = Path.Combine(fwUpdateBuilderLibraryPath, - FwUpdateConfig.MeterFwUpdateRulerConfigFileName); - if (!File.Exists(rulerPathName)) - rulerPathName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, - FwUpdateConfig.MeterFwUpdateRulerConfigFileName); - if (File.Exists(rulerPathName)) - { - var rulerFile = File.ReadAllText(rulerPathName, Encoding.UTF8); - _meterFwUpdateRuler = JsonConvert.DeserializeObject>(rulerFile); - } + //var rulerPathName = Path.Combine(fwUpdateBuilderLibraryPath, + // FwUpdateConfig.MeterFwUpdateRulerConfigFileName); + //if (!File.Exists(rulerPathName)) + // rulerPathName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, + // FwUpdateConfig.MeterFwUpdateRulerConfigFileName); + //if (File.Exists(rulerPathName)) + //{ + // var rulerFile = File.ReadAllText(rulerPathName, Encoding.UTF8); + // _meterFwUpdateRuler = JsonConvert.DeserializeObject>(rulerFile); + //} } catch (Exception) { @@ -1177,11 +1188,17 @@ 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 + /// as DB problems may occur on FwUpdateSafe load, limit customer name length to 45 characters to /// keep the file name small. /// + /// + /// - New FW-Update safe: + /// - Simply one FW-update package per safe, + /// - Register recovery implemented, + /// - FW information taken from fields instead of the name. + /// public Boolean BuildFwUpdateSafe() { if (string.IsNullOrEmpty(lblUpdateOperator.Text)) @@ -1292,10 +1309,10 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder fwUpdateSafe.Updates = new UpdateContainer { - CordonelFwPackages = new List(), + CordonelFwPackage = new CordonelFirmware(), CordonelDeviceInfos = new List() }; - fwUpdateSafe.Updates.CordonelFwPackages = _fwUpdatePackages; + fwUpdateSafe.Updates.CordonelFwPackage = _fwUpdatePackage; fwUpdateSafe.Updates.CordonelDeviceInfos = _cordonelUpdateList; var serializedData = JsonConvert.SerializeObject(fwUpdateSafe); @@ -1453,6 +1470,10 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Initial. /// + /// + /// - Single FW-Update package, + /// - Used fw update package id instead of name. + /// private String PreSelectFwPackages(CordonelProductionInfosDb cordonel) { @@ -1464,46 +1485,41 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder cordonel.IsApproved = false; cordonel.RequiredReleaseNameVersion = null; - if (_fwUpdatePackages == null || _fwUpdatePackages.Count == 0) + if (_fwUpdatePackage?.FwPackageInfo == null || _fwUpdateDbAccess?.DbCordonelFwPackagesInfo == null) { return "?"; } - foreach (var fwPack in _fwUpdatePackages) + foreach (var fw in _fwUpdateDbAccess.DbCordonelFwPackagesInfo) { - foreach (var fw in _cordonelFwPackageInfoSearch) + // check if this is compatible to the Cordonel + if (_fwUpdatePackage.FwPackageInfo.Id != fw.Id) + continue; + + // assign the unique version for all devices, even if these are having a lack of information + cordonel.RequiredReleaseNameVersion = fw.Name; + + if (cordonel.CoreRevision != null && !cordonel.CoreRevision.Contains("?")) { - // as for the _cordonelFwPackageInfoSearch all fields are extracted, these can be used to - // check if this is compatible to the Cordonel, the _fwUpdatePackages do not contain this info! - if (fwPack.ReleaseNameVersion != fw.ReleaseNameVersion) - continue; - // assign the unique version for all devices, even if these are having a lack of information - cordonel.RequiredReleaseNameVersion = fw.ReleaseNameVersion; + // extract the Cordonel core version + var coreVersion = cordonel.CoreRevision; + coreVersion = coreVersion.Replace(".", ""); + Int32.TryParse(coreVersion, out var requiredCoreVersion); - if (cordonel.CoreRevision != null && !cordonel.CoreRevision.Contains("?")) + if (cordonel.Region.Contains(fw.Region) && + (cordonel.RadioFrequency == fw.RadioFrequencyMhz.ToString() || + string.IsNullOrEmpty(fw.RadioFrequencyMhz.ToString())) && + requiredCoreVersion <= fw.CoreRevisionMax && + requiredCoreVersion >= fw.CoreRevisionMin && + cordonel.Diameter == fw.MeterSize) { - - // extract the Cordonel core version - var coreVersion = cordonel.CoreRevision; - coreVersion = coreVersion.Replace(".", ""); - Int32.TryParse(coreVersion, out var requiredCoreVersion); - - if (cordonel.Region.Contains(fw.Region) && - (cordonel.RadioFrequency.Contains(fw.RadioFrequencyMhz) || - string.IsNullOrEmpty(fw.RadioFrequencyMhz) || - fw.RadioFrequencyMhz.Contains("*") || - fw.RadioFrequencyMhz.Contains("?")) && - requiredCoreVersion <= fw.CoreVersionMax && - requiredCoreVersion >= fw.CoreVersionMin) - { - cordonel.IsRemoved = false; - cordonel.IsApproved = true; - } + cordonel.IsRemoved = false; + cordonel.IsApproved = true; } - - return cordonel.RequiredReleaseNameVersion; } + + return cordonel.RequiredReleaseNameVersion; } return "?"; @@ -1679,6 +1695,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Use selected Cordonels to fill the FW package search infos. /// + /// + /// - Single FW-Update package. + /// private void CheckDataCollectionStatus() { // Customer Orders ---------------------------------------------------------------------------------------- @@ -1774,23 +1793,22 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder // Selected FW-Packages ----------------------------------------------------------------------------------- // Add fw packages to fw package selection combo box for Cordonel FW to install selection - if (_fwUpdateDbAccess?.DbCordonelFwPackages != null && _fwUpdatePackages != null && + if (_fwUpdateDbAccess?.DbCordonelFwPackages != null && _fwUpdatePackage?.FwPackageInfo != null && _cbxFwReleaseSelection != null) { - if (_cbxFwReleaseSelection.Items.Count != _fwUpdatePackages.Count) + if (_cbxFwReleaseSelection.Items.Count < 1) { _cbxFwReleaseSelection.Items.Clear(); - foreach (var fw in _fwUpdatePackages) - { - _cbxFwReleaseSelection.Items.Add(fw.ReleaseNameVersion); - } + _cbxFwReleaseSelection.Items.Add(_fwUpdatePackage.FwPackageInfo.Name); } } // Check if FW packages are selected - if (_fwUpdatePackages != null && lblSelectedFwPackages.Text != _fwUpdatePackages.Count.ToString()) - lblSelectedFwPackages.Text = _fwUpdatePackages.Count.ToString(); - backGroundColor = _fwUpdatePackages != null && _fwUpdatePackages.Count == 0 ? ColorBkMissing : ColorBkValid; + if (_fwUpdatePackage?.FwPackageInfo != null && lblSelectedFwPackages.Text != @"1") + lblSelectedFwPackages.Text = @"1"; + else if (_fwUpdatePackage?.FwPackageInfo == null) + lblSelectedFwPackages.Text = @"0"; + backGroundColor = _fwUpdatePackage?.FwPackageInfo == null ? ColorBkMissing : ColorBkValid; if (backGroundColor != lblSelectedFwPackages.BackColor) { @@ -1944,7 +1962,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder lblFwUpdateDutyDate.BackColor != ColorBkValid || tbxCustomerName.BackColor != ColorBkValid || tbxOrderNumber.BackColor != ColorBkValid || - _fwUpdatePackages.Count == 0 || + _fwUpdatePackage == null || _cordonelUpdateList.Count == 0 || updateLocked) { @@ -2036,10 +2054,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Locked if FW-Packages are not loaded. /// + /// + /// - Take FW package info. + /// private void CheckFwPackageChange() { - if (!_fwPackagePropertyChanged || _fwUpdateDbAccess?.DbCordonelFwPackages == null || - _fwUpdateDbAccess.DbCordonelFwPackages.Count == 0) + if (!_fwPackagePropertyChanged || _fwUpdateDbAccess?.DbCordonelFwPackagesInfo == null || + _fwUpdateDbAccess.DbCordonelFwPackagesInfo.Count == 0) return; _fwPackagePropertyChanged = false; @@ -2373,7 +2394,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// private void SetStatusProgressBar(Int32 value = 0, Boolean visible = true) { - if (ProgressBarStatus == null || ProgressBarStatus.Visible == false && visible == false) + if (ProgressBarStatus == null || (ProgressBarStatus.Visible == false && visible == false)) return; ProgressBarStatus.Value = value; ProgressBarStatus.Visible = visible; @@ -2668,6 +2689,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// to the FW package load, as the Builder uses the information of the MeterFwUpdateRuler to /// create the package information! /// + /// + /// - Load only the information about the FW packages and not the FW package content. + /// private void LoadDbCordonelFwPackagesTask() { _invokerProcessState = _processState; @@ -2680,7 +2704,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder // check DB connection in advance to overcome the timing issues for DB service startup _fwUpdateDbAccess.CheckDbConnection(); // has to be done first to extract the MeterFwUpdateRuler - GetFwUpdateConfigFilesFromDb(); + //GetFwUpdateConfigFilesFromDb(); // load the packages and use the MeterFwUpdateRuler to assign the DN, EMEA, NA, 868, 433.. GetCordonelFwPackagesFromDb(); } @@ -2913,30 +2937,38 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// - Simply one unique FW-package allowed to select, /// - Reset status of pre-selected Cordonels. /// + /// + /// - FW package information from DB used. + /// private void gridViewFwPackagesSelection_CellClick(Object sender, DataGridViewCellEventArgs e) { try { - if (e.ColumnIndex < 0 || e.RowIndex < 0 || _fwUpdatePackages == null) + if (e.ColumnIndex < 0 || e.RowIndex < 0 ) { return; } // the e.RowIndex is referenced to the (sorted) data grid view - var fwPackage = new CordonelFirmware(); + var fwPackage = new CordonelFirmware + { + FwPackageInfo = new CordonelFwPackageInfo() + }; + + // use the fw update package id for selection for (var columnIndex = 0; columnIndex < gridViewFwPackageSelection.ColumnCount; columnIndex++) { - if (gridViewFwPackageSelection.Columns[columnIndex].Name == Resources.StrTableCordonelFwToInstall) - fwPackage.ReleaseNameVersion = - gridViewFwPackageSelection.Rows[e.RowIndex].Cells[columnIndex].Value.ToString(); + if (gridViewFwPackageSelection.Columns[columnIndex].Name == Resources.StrTableFileId) + fwPackage.FwPackageInfo.Id = + (Int32)gridViewFwPackageSelection.Rows[e.RowIndex].Cells[columnIndex].Value; } // select FW package if (gridViewFwPackageSelection.Columns[e.ColumnIndex].Name == Resources.StrTableSelect) { - // clear list of FW-packages - _fwUpdatePackages.Clear(); + // clear FW-packages + _fwUpdatePackage = null; // reset status of Cordonels being able to auto-assign new FW-package foreach (var cordonel in _cordonelProductionPreSelectInfos) @@ -2951,10 +2983,12 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder { cordonel.RequiredRelease = null; } - // Search the FW package name in data table, select if found - foreach (var fw in _cordonelFwPackageInfoSearch) + // Search the FW package Id in data table, select if found + //foreach (var fw in _cordonelFwPackageInfoSearch) + if (_fwUpdateDbAccess?.DbCordonelFwPackagesInfo == null) return; + foreach (var fw in _fwUpdateDbAccess.DbCordonelFwPackagesInfo) { - if (fw.ReleaseNameVersion == fwPackage.ReleaseNameVersion) + if (fw.Id == fwPackage.FwPackageInfo.Id) { // toggle selection and set information on main screen if (fw.IsSelected) @@ -2964,13 +2998,12 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder } else { - // add selected package to list if not already in list - if (_fwUpdatePackages.All(x => x.ReleaseNameVersion != fw.ReleaseNameVersion)) - _fwUpdatePackages.Add(fwPackage); + // assign FW package + _fwUpdatePackage = fwPackage; // add new FW-package to all Cordonels in update list foreach (var cordonel in _cordonelUpdateList) { - cordonel.RequiredRelease = fw.ReleaseNameVersion; + cordonel.RequiredRelease = fw.Name; } fw.IsSelected = true; } @@ -2984,7 +3017,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder for (var idx = 0; idx < _dataTableFwPackages.Rows.Count; idx++) { var dataRow = _dataTableFwPackages.Rows[idx]; - if (fw.ReleaseNameVersion == (String)dataRow[Resources.StrTableCordonelFwToInstall]) + if (fw.Id == (Int32)dataRow[Resources.StrTableFileId]) { dataRow[Resources.StrTableSelect] = fw.IsSelected; } @@ -3013,6 +3046,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Search extended to metrology. /// + /// + /// - FW package information from DB used. + /// private void FillDataGridWithFwPackageInfos() { grpLanguageSelection.Enabled = false; @@ -3024,9 +3060,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder _dataTableFwPackages.Columns.Add(Resources.StrTableSelect, typeof(Boolean)); _dataTableFwPackages.Columns.Add(Resources.StrTableCordonelFwToInstall, typeof(String)); - _dataTableFwPackages.Columns.Add(Resources.StrTableCordonelFwIsLatest, typeof(Boolean)); _dataTableFwPackages.Columns.Add(Resources.StrTableCordonelFwIsReleased, typeof(Boolean)); - _dataTableFwPackages.Columns.Add(Resources.StrTableCordonelFwVersion, typeof(String)); _dataTableFwPackages.Columns.Add(Resources.StrTableRegion, typeof(String)); _dataTableFwPackages.Columns.Add(Resources.StrTableRadioFrequency, typeof(String)); @@ -3037,9 +3071,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder _dataTableFwPackages.Columns.Add(Resources.StrTableCordonelDiameter, typeof(String)); _dataTableFwPackages.Columns.Add(Resources.StrTableReleaseDate, typeof(DateTime)); + //add the fw update package id to simplify selection + _dataTableFwPackages.Columns.Add(Resources.StrTableFileId, typeof(Int32)); + try { - foreach (var fw in _cordonelFwPackageInfoSearch) + if (_fwUpdateDbAccess?.DbCordonelFwPackagesInfo == null) return; + foreach (var fw in _fwUpdateDbAccess.DbCordonelFwPackagesInfo) { // pre-selection of displayed FW packages var requiredCoreVersion = 0; @@ -3050,31 +3088,34 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder Int32.TryParse(version, out requiredCoreVersion); } - if (fw.Region != cbxFwPackageRegionMask.Text && cbxFwPackageRegionMask.Text != @"*" || - fw.RadioFrequencyMhz != cbxFwPackageRadioMask.Text && cbxFwPackageRadioMask.Text != @"*" || - fw.MeterSize != cbxFwPackageSizeMask.Text && cbxFwPackageSizeMask.Text != @"*" || - (fw.CoreVersionMin > requiredCoreVersion || requiredCoreVersion > fw.CoreVersionMax) && - cbxFwPackageSearchCore.Text != @"*" || - fw.MetrologyVersion != cbxFwPackageSearchMetrology.Text && - cbxFwPackageSearchMetrology.Text != @"*") + if ((fw.Region != cbxFwPackageRegionMask.Text && cbxFwPackageRegionMask.Text != @"*") || + (fw.RadioFrequencyMhz.ToString() != cbxFwPackageRadioMask.Text && cbxFwPackageRadioMask.Text != @"*") || + (fw.MeterSize != cbxFwPackageSizeMask.Text && cbxFwPackageSizeMask.Text != @"*") || + (((fw.CoreRevisionMin != null && fw.CoreRevisionMin > requiredCoreVersion) || + (fw.CoreRevisionMax != null && requiredCoreVersion > fw.CoreRevisionMax)) && + cbxFwPackageSearchCore.Text != @"*") || + (fw.MetrologyVersion.ToString() != cbxFwPackageSearchMetrology.Text && + cbxFwPackageSearchMetrology.Text != @"*")) continue; var row = _dataTableFwPackages.NewRow(); row[Resources.StrTableSelect] = fw.IsSelected; - row[Resources.StrTableCordonelFwToInstall] = fw.ReleaseNameVersion; - row[Resources.StrTableCordonelFwIsLatest] = fw.FileIsLatest; - row[Resources.StrTableCordonelFwIsReleased] = fw.FwIsReleased; - row[Resources.StrTableCordonelFwVersion] = fw.ReleaseVersion; + row[Resources.StrTableCordonelFwToInstall] = fw.Name; + row[Resources.StrTableCordonelFwIsReleased] = fw.IsReleased; - row[Resources.StrTableRegion] = fw.Region; - row[Resources.StrTableRadioFrequency] = fw.RadioFrequencyMhz; - row[Resources.StrTableCordonelMetrology] = fw.MetrologyVersion; - row[Resources.StrTableFwPackageCoreMin] = $"{fw.CoreVersionMin / 100}.{fw.CoreVersionMin % 100}"; - row[Resources.StrTableFwPackageCoreMax] = $"{fw.CoreVersionMax / 100}.{fw.CoreVersionMax % 100}"; + row[Resources.StrTableRegion] = fw.Region ?? "*"; + row[Resources.StrTableRadioFrequency] = fw.RadioFrequencyMhz == null ? "*" : $@"{fw.RadioFrequencyMhz}"; + row[Resources.StrTableCordonelMetrology] = MeterFwUpdate.ConvertVersionToString(fw.MetrologyVersion); + row[Resources.StrTableFwPackageCoreMin] = MeterFwUpdate.ConvertVersionToString(fw.CoreRevisionMin); + row[Resources.StrTableFwPackageCoreMax] = MeterFwUpdate.ConvertVersionToString(fw.CoreRevisionMax); - row[Resources.StrTableCordonelDiameter] = fw.MeterSize; - row[Resources.StrTableReleaseDate] = fw.ReleaseDate.Date; + row[Resources.StrTableCordonelDiameter] = fw.MeterSize ?? "*"; + if (fw.ReleaseDate != null) + { + row[Resources.StrTableReleaseDate] = fw.ReleaseDate; + } + row[Resources.StrTableFileId] = fw.Id; _dataTableFwPackages.Rows.Add(row); } @@ -3124,7 +3165,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder Thread.CurrentThread.CurrentCulture = _cultureInfo; _dataTableUpdateSafes = new DataTable(); - // _dataTableUpdateSafes.Columns.Add(Resources.StrTableUserValidDate, typeof(DateTime)); + // _dataTableUpdateSafes.Columns.Add(Resources.StrTableUserValidDate, typeof(DateTime)); _dataTableUpdateSafes.Columns.Add(Resources.StrTableUserValidDate, typeof(String)); _dataTableUpdateSafes.Columns.Add(Resources.StrTableCordonelPcbId, typeof(String)); @@ -3147,8 +3188,8 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder var row = _dataTableUpdateSafes.NewRow(); //row[Resources.StrTableUserValidDate] = safeInfo.ValidDate.DateTime; - row[Resources.StrTableUserValidDate] = - DateTimeServer.GetSortableDateStringFromDateTime(safeInfo.ValidDate.DateTime, + row[Resources.StrTableUserValidDate] = + DateTimeServer.GetSortableDateStringFromDateTime(safeInfo.ValidDate.DateTime, _cultureInfo); row[Resources.StrTableCordonelPcbId] = pcbId; @@ -3317,7 +3358,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder var row = _dataTableReportFiles.NewRow(); //row[Resources.StrTableDate] = report.Date.Date; - row[Resources.StrTableDate] = + row[Resources.StrTableDate] = DateTimeServer.GetSortableDateStringFromDateTime(report.Date.Date, _cultureInfo); row[Resources.StrTableCordonelPcbId] = report.PcbId; @@ -3401,28 +3442,6 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder gridViewPreBuildSummary.Rows[e.RowIndex].Cells[columnIndex].Value.ToString(); } - // select FW package with combo box - //if (gridViewPreBuildSummary.Columns[e.ColumnIndex].Name == Resources.StrTableCordonelFwToInstall) - //{ - // // take the actual cell value as default - // _cbxFwReleaseSelection.Text = cordonelDeviceInfo.RequiredRelease; - // // Adding combo box control into DataGridView - // gridViewPreBuildSummary.Controls.Add(_cbxFwReleaseSelection); - - // // Rectangular area that represents the display area for a cell - // var location = gridViewPreBuildSummary.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); - - // // Setting Location and size to fit within the cell - // _cbxFwReleaseSelection.Height = location.Height; - // _cbxFwReleaseSelection.Width = 200; - // _cbxFwReleaseSelection.Location = new Point(location.X, location.Y); - - // // The final selection of the fw package - // _fwPackageCordonelPcbId = cordonelDeviceInfo.PcbId; - // _cbxFwReleaseSelection.DropDownClosed += CbxFwReleaseSelection_DropDownClosed; - // _cbxFwReleaseSelection.Visible = true; - //} - // select Cordonel if (gridViewPreBuildSummary.Columns[e.ColumnIndex].Name == Resources.StrTableApprove) { @@ -3624,7 +3643,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder row[Resources.StrTableCordonelDiameter] = cordonel.Diameter ?? "?"; - row[Resources.StrTableReason] = cordonel.ReasonForUpdateDenied ?? ""; + row[Resources.StrTableReason] = cordonel.ReasonForUpdateDenial ?? ""; _dataTableSummary.Rows.Add(row); @@ -4567,7 +4586,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder } /// - /// Get Cordonel FW packages from DB end extract all needed information to select a package to the + /// Get Cordonel FW packages information from DB end extract all needed information to select a package to the /// CordonelFwPackageInfo search list. /// /// @@ -4583,83 +4602,14 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// - Starting with FW 1.2.* all frequencies will be supported, removed frequency check, /// - Supported China as new region. /// + /// + /// - Removed FUpdateRuler, all data are going to be taken from DB, + /// - file name no longer used to identify capability of release, all information from DB. + /// private void GetCordonelFwPackagesFromDb() { - if (_fwUpdateDbAccess == null || !_fwUpdateDbAccess.GetAllCordonelFwInfoFilesFromDb() || - _fwUpdateDbAccess.DbCordonelFwPackages.Count == 0 || _cordonelFwPackageInfoSearch == null) - return; - - _cordonelFwPackageInfoSearch.Clear(); - // 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). - // GetConfigurationFilesFromDb(); - - // Start with the last package, as this will be the latest - for (var idx = _fwUpdateDbAccess.DbCordonelFwPackages.Count - 1; - idx > _fwUpdateDbAccess.DbCordonelFwPackages.Count - 40; idx--) - { - // read the package without the content, skip all if fwPackageFilesInfo returns null - var dbCordonelFwFile = _fwUpdateDbAccess.DbCordonelFwPackages[idx]; - var fileId = dbCordonelFwFile.FileId; - // Split to PROD_EMEA_433_DN50_R101D - var nameSplit = dbCordonelFwFile.FileName.Split('_'); - if (_fwUpdateDbAccess.GetCordonelFwPackageFromDb(fileId, out var fwPackageFilesInfo, false) && - fwPackageFilesInfo != null && fwPackageFilesInfo.Count > 0) - { - // parse file information - if (dbCordonelFwFile.CordonelFwFile_Dn != null) - { - var fwPackInfo = new CordonelFwPackageInfo - { - ReleaseNameVersion = dbCordonelFwFile.FileName, - Region = - dbCordonelFwFile.FileName.Contains("_NA_") ? "NA" : - dbCordonelFwFile.FileName.Contains("_EMEA_") ? "EMEA" : - dbCordonelFwFile.FileName.Contains("_China_") ? "China" : "*", - RadioFrequencyMhz = dbCordonelFwFile.FileName.Contains("433") ? "433" : - dbCordonelFwFile.FileName.Contains("868") ? "868" : "*", - FileIsLatest = dbCordonelFwFile.FileIsLatest, - MeterSize = MeterSizeConverter.ConvertOrderSizeNumberToSizeName( - MeterSizeConverter.ConvertToOrder((MeterSize)dbCordonelFwFile.CordonelFwFile_Dn)), - ReleaseDate = dbCordonelFwFile.FileDate, - ReleaseVersion = $"{nameSplit[nameSplit.Length - 1].Substring(0, 3)}." + - $"{nameSplit[nameSplit.Length - 1].Substring(3, 2)}" - }; - // the release version is always the last element of the name split - foreach (var binfile in fwPackageFilesInfo) - { - // extract metrology version - if (binfile.FileName.Contains("binfile0F_")) - { - var msb = binfile.FileName.Substring(10, 2); - // remove leading 0 - var msbMsb = msb.Substring(0, 1); - if (msbMsb == "0") - msb = msb.Remove(0, 1); - var lsb = binfile.FileName.Substring(12, 2); - fwPackInfo.MetrologyVersion = $"{msb}.{lsb}"; - break; - } - } - // take the meter fw update ruler to extract core min /max and released - foreach (var rule in _meterFwUpdateRuler) - { - var releaseVersion = $"{rule.Release.Substring(0, 3)}." + - $"{rule.Release.Substring(3, 2)}"; - if (releaseVersion == fwPackInfo.ReleaseVersion) - { - int.TryParse(rule.CoreVersionMin, out var x); - fwPackInfo.CoreVersionMin = x; - int.TryParse(rule.CoreVersionMax, out x); - fwPackInfo.CoreVersionMax = x; - fwPackInfo.FwIsReleased = !string.IsNullOrEmpty(rule.ApproverName); - } - } - - _cordonelFwPackageInfoSearch.Add(fwPackInfo); - } - } - } + if (_fwUpdateDbAccess == null) return; + _fwUpdateDbAccess.GetAllCordonelFwPackagesInfoFromDb(); } /// @@ -5289,19 +5239,22 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder /// /// - Removed configuration.json from FW package as this is part of the SW package. /// + /// + /// - Single FW-Update package. + /// private Boolean GetFwPackageFromDb(String releaseName) { // if this packages has already been loaded, exit immediately - if (_fwUpdatePackages.Any(package => package.ReleaseNameVersion == releaseName && - package.BinaryApplicationFiles != null && - package.BinaryApplicationFiles.Count > 0)) + if (_fwUpdatePackage.FwPackageInfo.Name == releaseName && + _fwUpdatePackage.BinaryApplicationFiles != null && + _fwUpdatePackage.BinaryApplicationFiles.Count > 0) { return true; } String msg; // search file id in ClusteredFiles but as the name in unambiguous and files are stored several times - // with this file name, the last and therefor latest item has to be taken + // with this file name, the last and therefore latest item has to be taken if (_fwUpdateDbAccess?.DbCordonelFwPackages != null) { var fileId = (from cu in _fwUpdateDbAccess.DbCordonelFwPackages @@ -5313,19 +5266,19 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder try { // search the cordonel firmware - foreach (var fw in _fwUpdatePackages.Where(fw => fw.ReleaseNameVersion == releaseName)) + if (_fwUpdatePackage.FwPackageInfo.Name == releaseName) { - fw.PackageDescriptionFile = new FilePart(); - fw.BinaryApplicationFiles = new List(); + _fwUpdatePackage.PackageDescriptionFile = new FilePart(); + _fwUpdatePackage.BinaryApplicationFiles = new List(); foreach (var f in fwPackage) { // load the ADF if (f.FileName.Contains("product") && f.FileName.EndsWith(".txt")) { - fw.PackageDescriptionFile.FileName = f.FileName; - fw.PackageDescriptionFile.FileContent = new Byte[f.FileContent.Length]; - fw.PackageDescriptionFile.FileContent = f.FileContent.ToArray(); + _fwUpdatePackage.PackageDescriptionFile.FileName = f.FileName; + _fwUpdatePackage.PackageDescriptionFile.FileContent = new Byte[f.FileContent.Length]; + _fwUpdatePackage.PackageDescriptionFile.FileContent = f.FileContent.ToArray(); } // load the binaries @@ -5337,7 +5290,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder FileContent = new Byte[f.FileContent.Length] }; filePart.FileContent = f.FileContent.ToArray(); - fw.BinaryApplicationFiles.Add(filePart); + _fwUpdatePackage.BinaryApplicationFiles.Add(filePart); } } diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj index dc5f1a08..0a9b3304 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/FwUpdateBuilder.csproj @@ -113,7 +113,6 @@ FrmRegister.cs - @@ -163,9 +162,6 @@ - - PreserveNewest - @@ -206,6 +202,10 @@ {d0c859d9-d55e-4e85-ac50-0ff31b1ce50d} Logic.ProductionToProductMapper + + {6D2777BB-7A88-466D-A49B-3266F9BF0160} + ProductionOrderCore + {a33e3c6d-eaae-4a20-a0ee-f9e6922fd029} SoftwareAccessHelper diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/MeterFwUpdateRuler.json b/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/MeterFwUpdateRuler.json deleted file mode 100644 index 7e96c11d..00000000 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateBuilder/MeterFwUpdateRuler.json +++ /dev/null @@ -1,276 +0,0 @@ -[ - { - "Release": "R1108", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1107", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1106", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1105", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1104", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1103", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1102", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "169", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1101", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "167", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1100", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "167", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1073", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "167", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1072", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "167", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1071", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "167", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "B1070", - "Region": "NA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "508", - "RadioFrequencyMhz": "", - "MeterSizes": [ - "US2" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R106F", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R106E", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R106D", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "295", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R106B", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "295", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1067", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1066", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1065", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "868", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - }, - { - "Release": "R1064", - "Region": "EMEA", - "CoreVersionMin": "162", - "CoreVersionMax": "166", - "MetrologyVersion": "287", - "RadioFrequencyMhz": "433", - "MeterSizes": [ - "DN50" - ], - "ApproverName": null, - "ApprovalDate": "2000-01-01" - } - -] \ No newline at end of file diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmFwUpdateLoader.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmFwUpdateLoader.cs index f248702d..a47759a1 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmFwUpdateLoader.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateLoader/FrmFwUpdateLoader.cs @@ -983,8 +983,8 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader } //#if (!DEBUG) - if (_fwUpdateReportFiles != null && _fwUpdateReportFiles.Count > 0 || - _fwUpdateAppVersions != null && _fwUpdateAppVersions.Count > 0) + if ((_fwUpdateReportFiles != null && _fwUpdateReportFiles.Count > 0) || + (_fwUpdateAppVersions != null && _fwUpdateAppVersions.Count > 0)) { UiInvoker.ToolStripLabelInvoker(lblStatusDbConnect, ColorSuccess, Resources.StrUploadingReports); SetStatusProgressBar(); @@ -1600,9 +1600,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader SendDataToFwUpdateSw(basePaths); // send CordonelFirmware to FW-Update SW - foreach (var fw in _fwUpdateSafe.Updates.CordonelFwPackages) + if (_fwUpdateSafe.Updates.CordonelFwPackage != null) { - SendDataToFwUpdateSw(fw); + SendDataToFwUpdateSw(_fwUpdateSafe.Updates.CordonelFwPackage); } // send Cordonel device information @@ -1653,7 +1653,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader /// private void SetStatusProgressBar(Int32 value = 0, Boolean visible = true) { - if (ProgressBarStatus == null || !ProgressBarStatus.Visible && !visible) return; + if (ProgressBarStatus == null || (!ProgressBarStatus.Visible && !visible)) return; if (ProgressBarStatus.Visible && visible && ProgressBarStatus.Value == value) return; ProgressBarStatus.Value = value; ProgressBarStatus.Visible = visible; diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.Designer.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.Designer.cs index e0a7f5f6..456bddf2 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.Designer.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.Designer.cs @@ -69,6 +69,7 @@ this.tableLayoutPanel8 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel9 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); + this.btnReleaseDisplay = new System.Windows.Forms.Button(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel(); @@ -137,20 +138,20 @@ // // grpApplications // - this.grpApplications.Controls.Add(this.gridViewApplic); resources.ApplyResources(this.grpApplications, "grpApplications"); + this.grpApplications.Controls.Add(this.gridViewApplic); this.grpApplications.Name = "grpApplications"; this.grpApplications.TabStop = false; // // gridViewApplic // + resources.ApplyResources(this.gridViewApplic, "gridViewApplic"); this.gridViewApplic.AllowUserToAddRows = false; this.gridViewApplic.AllowUserToDeleteRows = false; this.gridViewApplic.AllowUserToResizeColumns = false; this.gridViewApplic.AllowUserToResizeRows = false; this.gridViewApplic.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; this.gridViewApplic.BackgroundColor = System.Drawing.SystemColors.ControlLight; - resources.ApplyResources(this.gridViewApplic, "gridViewApplic"); this.gridViewApplic.Name = "gridViewApplic"; this.gridViewApplic.ReadOnly = true; this.gridViewApplic.RowHeadersVisible = false; @@ -255,9 +256,9 @@ // // grpLanguageSelection // + resources.ApplyResources(this.grpLanguageSelection, "grpLanguageSelection"); this.grpLanguageSelection.Controls.Add(this.radioBtnGermanLanguage); this.grpLanguageSelection.Controls.Add(this.radioBtnEnglishLanguage); - resources.ApplyResources(this.grpLanguageSelection, "grpLanguageSelection"); this.grpLanguageSelection.Name = "grpLanguageSelection"; this.grpLanguageSelection.TabStop = false; // @@ -279,8 +280,8 @@ // // pictureBox1 // - this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.TabStop = false; // @@ -303,8 +304,8 @@ // // picBoxLogo // - this.picBoxLogo.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; resources.ApplyResources(this.picBoxLogo, "picBoxLogo"); + this.picBoxLogo.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.picBoxLogo.Name = "picBoxLogo"; this.picBoxLogo.TabStop = false; // @@ -350,9 +351,17 @@ // tableLayoutPanel6 // resources.ApplyResources(this.tableLayoutPanel6, "tableLayoutPanel6"); + this.tableLayoutPanel6.Controls.Add(this.btnReleaseDisplay, 0, 3); this.tableLayoutPanel6.Controls.Add(this.btnHistory, 0, 1); this.tableLayoutPanel6.Name = "tableLayoutPanel6"; // + // btnReleaseDisplay + // + resources.ApplyResources(this.btnReleaseDisplay, "btnReleaseDisplay"); + this.btnReleaseDisplay.Name = "btnReleaseDisplay"; + this.btnReleaseDisplay.UseVisualStyleBackColor = true; + this.btnReleaseDisplay.Click += new System.EventHandler(this.BtnReleaseDisplay_Click); + // // tableLayoutPanel2 // resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); @@ -388,8 +397,8 @@ // // FrmServiceFwUpdateSw // - this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound; resources.ApplyResources(this, "$this"); + this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.tableLayoutPanel10); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; @@ -468,5 +477,6 @@ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel10; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnReleaseDisplay; } } \ No newline at end of file diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs index f267faf7..5771443f 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.cs @@ -128,7 +128,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw private Int32 _licenseCheckTimerMs = 2000; private readonly List _cordonelDeviceInfos = new List(); - private readonly List _cordonelFirmwarePackages = new List(); + private CordonelFirmware _cordonelFirmwarePackage = new CordonelFirmware(); // external update remarks form private FrmHistory _frmHistory = new FrmHistory(); @@ -533,6 +533,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw /// /// - Software license object at incoming license information. /// + /// + /// - Single FW-package. + /// // ReSharper disable once UnusedMember.Global this cannot be seen here because its // called from externally public Boolean SetDataContainerJson(Int32 dataContainerId, String serialJsonStream) @@ -555,7 +558,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw return true; case DataContainerName.UpdatePackage: - _cordonelFirmwarePackages.Add(JsonConvert.DeserializeObject(serialJsonStream)); + _cordonelFirmwarePackage = JsonConvert.DeserializeObject(serialJsonStream); return true; default: @@ -973,7 +976,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw try { - if (_cordonelDeviceInfos == null || _cordonelFirmwarePackages == null) + if (_cordonelDeviceInfos == null || _cordonelFirmwarePackage == null) { InfoProcessFailed(lblUpdateInformationStatus, Resources.StrPackageFileInvalid); _processState = errorExitState; @@ -984,12 +987,12 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw { _updatePackage = device.RequiredRelease; - foreach (var fwPack in _cordonelFirmwarePackages.Where(x => - x.ReleaseNameVersion == device.RequiredRelease)) + if (_cordonelFirmwarePackage.FwPackageInfo.Name == device.RequiredRelease) { // here the firmware package is valid, encode content var encoding = new ASCIIEncoding(); - var packageFile = encoding.GetString(fwPack.PackageDescriptionFile.FileContent.ToArray()); + var packageFile = + encoding.GetString(_cordonelFirmwarePackage.PackageDescriptionFile.FileContent.ToArray()); // setup package description file in FwUpdate class if (!_meterFwUpdate.LoadPackageFileFromText(packageFile)) @@ -1001,7 +1004,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw var fileApps = new List(); - foreach (var app in fwPack.BinaryApplicationFiles.Where(f => f.FileName.EndsWith(".bin"))) + foreach (var app in _cordonelFirmwarePackage.BinaryApplicationFiles.Where(f => f.FileName.EndsWith(".bin"))) { var fileApplication = new FileApplications(app.FileName) { @@ -1177,6 +1180,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw /// /// - Success message implemented. /// + /// + /// - Core revision data type changed from string ti int32?. + /// private Boolean CoreRevisionValid() { Thread.CurrentThread.CurrentUICulture = _cultureInfo; @@ -1193,7 +1199,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw LogErrorText(Resources.StrCoreRevision); LogErrorText(@"Minimum :" + _meterFwUpdate.CoreRevisionMinimum); LogErrorText(@"Maximum :" + _meterFwUpdate.CoreRevisionMaximum); - LogErrorText(@"Cordonel :" + MeterFwUpdate.ExtractVersionFromString(_currentGenesis.CoreRevision)); + LogErrorText(@"Cordonel :" + GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)); InfoProcessFailed(lblCordonelUpdateCapability, Resources.StrCordonelUpdateCapabilityCoreFailed); _processState = ProcessState.Error; return false; @@ -1243,14 +1249,14 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw Thread.CurrentThread.CurrentCulture = _cultureInfo; // check the update capability - var regionRadio = "?"; + var region = "?"; if (!string.IsNullOrEmpty(_updatePackage)) { - regionRadio = + region = _updatePackage.Contains("_NA_") ? "NA" : _updatePackage.Contains("_EMEA_") ? "EMEA" : _updatePackage.Contains("_China_") ? "China" : "*"; - if (_currentGenesis.RegionRadio.Contains(regionRadio)) + if (_currentGenesis.Region.Contains(region)) { InfoProcessSuccess(null, Resources.StrCordonelUpdateCapabilityRegionRadioSucceeded); return true; @@ -1259,8 +1265,8 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw // set information of required and detected regions radio, check failed! LogText(StrSeparator); LogErrorText(Resources.StrRegionRadio); - LogErrorText(Resources.StrFwPackageRegionRadio + " " + regionRadio); - LogErrorText(@"Cordonel: " + _currentGenesis.RegionRadio); + LogErrorText(Resources.StrFwPackageRegionRadio + " " + region); + LogErrorText(@"Cordonel: " + _currentGenesis.Region); InfoProcessFailed(lblCordonelUpdateCapability, Resources.StrCordonelUpdateCapabilityRegionRadioFailed); _processState = ProcessState.Error; return false; @@ -1399,6 +1405,16 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw } } + /// + /// Release Cordonel display from"Idle" to normal operation + /// + /// + /// - Initial + /// + private void BtnReleaseDisplay_Click(Object sender, EventArgs e) + { + ReleaseDisplay(); + } #endregion --------------------------------------- User Interaction ------------------------------------------- @@ -1451,19 +1467,23 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw /// /// - Added region and radio. /// + /// + /// - Core revision data type changed from string ti int32?. + /// private void LogInstalledMeterFw() { if (_currentGenesis == null) return; LogText(StrSeparator); LogText($"PCB ID: {_currentGenesis.PcbId}"); - LogText($"{Resources.StrMessageSystemCoreRevision} {_currentGenesis.CoreRevision}"); - LogText($"{Resources.StrMessageSystemRegionRadio} {_currentGenesis.RegionRadio}"); + LogText($"{Resources.StrMessageSystemCoreRevision} {GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)}"); + LogText($"{Resources.StrMessageSystemRegion} {_currentGenesis.Region}"); + LogText($"{Resources.StrMessageSystemRadio} {_currentGenesis.RadioFrequencyMhz}"); LogText(Resources.StrMessageInstalledApp); var appList = new List(); // the core has the -1 as identifier and is not updateable - var coreVersion = new CordonelAppVersion(-1, _currentGenesis.CoreRevision, false); + var coreVersion = new CordonelAppVersion(-1, GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision), false); appList.Add(coreVersion); foreach (var app in _currentGenesis.MeterAppListVersion) @@ -1694,6 +1714,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw { UiInvoker.ControlEnableInvoker(grpLanguageSelection, true); UiInvoker.ControlEnableInvoker(btnStop, false); + UiInvoker.ControlEnableInvoker(btnReleaseDisplay, true); UiInvoker.ControlEnableInvoker(btnPortScan, true); UiInvoker.ControlEnableInvoker(btnConnect, true); // set focus @@ -1710,6 +1731,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw { UiInvoker.ControlEnableInvoker(grpLanguageSelection, true); UiInvoker.ControlEnableInvoker(btnStop, false); + UiInvoker.ControlEnableInvoker(btnReleaseDisplay, false); UiInvoker.ControlEnableInvoker(btnPortScan, true); UiInvoker.ControlEnableInvoker(btnUpdateFw, false); // set focus @@ -1729,6 +1751,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw UiInvoker.ControlEnableInvoker(btnUpdateFw, false); UiInvoker.ControlEnableInvoker(btnPortScan, false); UiInvoker.ControlEnableInvoker(btnStop, false); + UiInvoker.ControlEnableInvoker(btnReleaseDisplay, false); } /// @@ -1744,6 +1767,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw UiInvoker.ControlEnableInvoker(btnConnect, false); UiInvoker.ControlEnableInvoker(btnUpdateFw, false); UiInvoker.ControlEnableInvoker(btnPortScan, false); + UiInvoker.ControlEnableInvoker(btnReleaseDisplay, false); // set focus UiInvoker.ControlEnableInvoker(btnStop, true); } @@ -2609,14 +2633,16 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw // if authentication succeeded, the cordonel port detection must have succeeded in advance, // this information might get lost on Connect() without previous port scan. InfoProcessSuccess(lblCordonelDetection, Resources.StrCordonelDetectSucceeded); - InfoProcessSuccess(lblCordonelAuthentication, - _finalLoginAfterUpdate ? Resources.StrPasswordFileValid : Resources.StrCordonelAuthenticationSucceeded); + InfoProcessSuccess(lblCordonelAuthentication, _finalLoginAfterUpdate + ? Resources.StrPasswordFileValid + : Resources.StrCordonelAuthenticationSucceeded); // use here direct text assignment to avoid x or v before label UiInvoker.ControlInvoker(lblConnectPcb, ColorSuccess, Resources.StrPartPcbConnected + @" " + _currentGenesis.PcbId); UiInvoker.ControlInvoker(lblCoreRevision, ColorDefault, - Resources.StrCoreRevision + @" " + _currentGenesis.CoreRevision); + Resources.StrCoreRevision + @" " + + $"{GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)}"); // avoid report again on final login after update if (!_finalLoginAfterUpdate && BuildReportFiles()) LogInstalledMeterFw(); @@ -3514,6 +3540,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw } #endregion --------------------------------------- Language --------------------------------------------------- - } + + } } diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.de.resx b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.de.resx index 4094461e..76b38b14 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.de.resx +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.de.resx @@ -152,10 +152,10 @@ Anwendungen - 429, 0 + 425, 0 - 353, 0 + 349, 0 Zeitmessung [min:s]: @@ -251,6 +251,9 @@ Verlauf + + Sprachauswahl + 65, 17 @@ -263,9 +266,6 @@ Englisch - - Sprachauswahl - /9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH @@ -462,6 +462,9 @@ 46 + + Anzeige Normal + AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.resx b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.resx index 9427a1a7..037fc3bf 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.resx +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/FrmServiceFwUpdateSw.resx @@ -117,671 +117,74 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Left - - - True - - - - 3, 26 - - - 104, 13 - - - 25 - - - System core revision - - - lblCoreRevision - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel8 - - - 1 - - - Left - - - True - - - 3, 4 - - - 100, 13 - - - 23 - - - NOT CONNECTED - - - lblConnectPcb - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel8 - - - 0 - - - Bottom, Left - - - 3, 121 - - - 100, 25 - - - 24 - - - Connect - - - btnConnect - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel8 - - - 2 - - - Bottom, Left - - - 3, 88 - - - 100, 25 - - - 27 - - - Port scanner - - - False - - - btnPortScan - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel8 - - - 3 - - - None - - - 887, 19 - - - 0, 0, 0, 0 - - - 100, 25 - - - 32 - - - STOP - - - btnStop - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 1 - - - Left - - - True - - - 3, 6 - - - 62, 13 - - - 26 - - - FW Update - - - False - - - lblProductToInstall - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 0 - - - None - - - 887, 64 - - - 0, 0, 0, 0 - - - 100, 25 - - - 0 - - - FW update - - - btnUpdateFw - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 3 - - - Fill - - - 3, 16 - - - 864, 408 - - - 2 - - - gridViewApplic - - - System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpApplications - - - 0 - - - Fill - - - 3, 170 - - - 870, 427 - - - 26 - - - Applications - - - grpApplications - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 2 - - - Bottom, Left - - - True - - - 428, 0 - - - 28, 12 - - - 20 - - - 0:00 - - - lblUpdateTime - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 0 - - - Bottom, Right - - - True - - - 352, 0 - - - 70, 12 - - - 19 - - - Elapsed time [min:s]: - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 1 - - - Bottom, Right - - - True - - - 688, 0 - - - No - - - 182, 12 - 18 - - WAITING FOR METER RESPONSE - - - BottomRight - - - lblWaitingForMeterResponse - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 3 - - - Left - - - True - - - 3, 48 - - - 71, 13 - - - 7 - - - Overall status - - - False - - - lblOverallProcess - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 4 - - - Fill - - - 5, 24 - - - 5, 6, 7, 6 - - - 867, 16 - - - 6 - - - False - - - barActualProgressUpdate - - - System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 2 - - - Bottom, Left - - - True - - - 3, 0 - - - 68, 12 - - - 4 - - - Actual status - - - False - - - lblActualProcess - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel3 - - - 2 - - - 5, 69 - + 5, 6, 7, 6 - - 867, 16 + + Manual + + + 6, 3, 3, 3 + + + 37 + + + True + + + + 3, 170 3 - - False + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel7" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel9" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,39,48256,Percent,60,51744" /><Rows Styles="Percent,100,Absolute,161" /></TableLayoutSettings> - - barOverallProgressUpdate + + lblProductToInstall - - System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Fill - - tableLayoutPanel2 - - - 5 - - - None - - + True - - Microsoft Sans Serif, 8.25pt + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 21, 51 + + Fill - - 72, 13 + + 0 - - 27 - - - Version: 0.0.0 - - - lblFwUpdateInfo - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel4 - - - 1 - - - Left - - - True - - - 263, 106 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 102, 13 - - 22 + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Check password file - - - lblPasswordFileCheck - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - + 1 - - Left - - - True - - - 263, 81 - - - 58, 13 - - - 21 - - - File restore - - - lblFileRestore - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 2 - - - Left - - - True - - - 263, 6 - - - 52, 13 - - - 20 - - - File erase - - - lblFileErase - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - + 5 - - Left + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - 263, 56 - - - 81, 13 - - - 19 - - - Register restore - - - lblRegisterRestore - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 3 - - - Left - - - True - - - 263, 31 - - - 85, 13 - - - 17 - - - Firmware update - - - lblFirmwareUpdate - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 4 + + 3, 609 Left @@ -789,261 +192,1332 @@ True - - 3, 133 - - - 85, 13 - - - 15 - - - Register readout - - - lblRegisterReadout - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 6 - - - Left - - - True - - - 3, 106 - - - 132, 13 - - - 14 - - - Cordonel update capability - - - lblCordonelUpdateCapability - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 7 - - - Left - - - True - - - 3, 56 - - - 119, 13 - - - 13 - - - Cordonel authentication - - - lblCordonelAuthentication - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 9 - - - Left - - - True - - - 3, 81 - - - 127, 13 - - - 12 - - - Update information status - - - lblUpdateInformationStatus - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 8 - - - Left - - - True - - - 3, 31 - - - 96, 13 - - - 11 - - - Cordonel detection - - - lblCordonelDetection - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel9 - - - 10 - - - 6, 17 - - - 6, 3, 3, 3 - - - 100, 25 - - - 35 - - - Show History - - - btnHistory - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel6 - - - 0 - - - True - - - 7, 40 - - - 62, 17 - - - 1 - - - German - - - radioBtnGermanLanguage - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpLanguageSelection - - - 0 - - - True - - - 7, 20 - - - 59, 17 - - - 0 + + 17 English - - radioBtnEnglishLanguage + + 10 - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Register restore - - grpLanguageSelection + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + True + + + tableLayoutPanel9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 + + 7 + + + 100, 25 + Bottom - - 3, 92 + + NOT CONNECTED - - 108, 66 + + 5, 69 + + + False + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnStop" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="barActualProgressUpdate" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnUpdateFw" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblOverallProcess" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="barOverallProgressUpdate" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,117" /><Rows Styles="Percent,100,Absolute,28,Absolute,17,Absolute,28,Absolute,4" /></TableLayoutSettings> + + + 36 + + + 2 + + + 20 + + + tableLayoutPanel9 + + + WAITING FOR METER RESPONSE + + + 3, 708 37 - - Language + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 3 + + + tableLayoutPanel8 + + + 81, 13 + + + 263, 31 + + + grpApplications + + + radioBtnEnglishLanguage + + + None + + + tableLayoutPanel10 + + + 7, 40 + + + German + + + True + + + 62, 13 + + + True + + + lblUpdateTime + + + 0 + + + Check password file + + + 0 + + + Left + + + Cordonel Service FW Update SW + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 32 + + + tableLayoutPanel5 + + + False + + + 52, 13 + + + tableLayoutPanel7 + + + tableLayoutPanel2 + + + picBoxLogo + + + 100, 25 + + + 3, 31 + + + 3, 106 + + + 2 + + + Bottom, Right + + + tableLayoutPanel7 + + + None + + + Cordonel update capability + + + 1 + + + 36 + + + 1 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Version: 0.0.0 + + + True + + + 21 + + + 521, 155 + + + 2 + + + tableLayoutPanel4 + + + 71, 13 + + + lblUpdateInformationStatus + + + 263, 6 + + + True + + + 3, 16 + + + 0, 0, 0, 0 + + + 21, 51 + + + 6, 13 + + + True + + + tableLayoutPanel9 + + + 19 + + + 190, 149 + + + tableLayoutPanel9 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblUpdateTime" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="label9" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblActualProcess" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblWaitingForMeterResponse" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /></Controls><Columns Styles="Percent,74,67249,Percent,25,32751,Absolute,48,Absolute,402" /><Rows Styles="Percent,100,Absolute,12" /></TableLayoutSettings> + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 6 + + + 4 + + + btnPortScan + + + Fill + + + System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 119, 13 + + + pictureBox1 + + + 20 + + + 3, 3 grpLanguageSelection + + Cordonel detection + + + tableLayoutPanel4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Release Display + + + 3 + + + Left + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel4" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="tableLayoutPanel5" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="grpApplications" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel6" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,88,05221,Percent,11,94779" /><Rows Styles="Percent,27,91461,Percent,72,08539" /></TableLayoutSettings> + + + Left + + + 6 + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + 5 + + + radioBtnGermanLanguage + + + 0 + + + tableLayoutPanel9 + + + tableLayoutPanel5 + + + Fill + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 25 + + + 100, 25 + + + tableLayoutPanel4 + + + Register readout + + + 867, 16 + + + 350, 0 + + + No + + + tableLayoutPanel3 + + + 3, 4 + + + 6, 17 + + + lblCordonelDetection + + + tableLayoutPanel2 + + + Bottom, Left + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tableLayoutPanel4 + + tableLayoutPanel1 + + + 1 + + + 4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + barActualProgressUpdate + + + 870, 427 + + + 14 + + + 85, 13 + + + 8 + + + 58, 13 + + + Fill + + + tableLayoutPanel10 + + + 1 + + + 4 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="btnReleaseDisplay" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnHistory" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,14,Percent,100,Absolute,31,Absolute,31" /></TableLayoutSettings> + + + 3, 3 + + + 3, 48 + + + True + + + lblActualProcess + + + 353, 13 + + + 3, 3, 3, 3 + + + btnConnect + + + True + + + tableLayoutPanel1 + + + 35 + + + Bottom, Left + + + + + + 96, 13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 + + GrowAndShrink + + + btnUpdateFw + + + label9 + + + True + + + 9 + + + 3 + + + 887, 64 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblProductToInstall" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblPasswordFileCheck" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblFileRestore" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblRegisterRestore" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblFirmwareUpdate" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblFileErase" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblRegisterReadout" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCordonelUpdateCapability" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblUpdateInformationStatus" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCordonelAuthentication" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCordonelDetection" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,16,66667,Percent,16,66667,Percent,16,66667,Percent,16,66667,Percent,16,66667,Percent,16,66667" /></TableLayoutSettings> + + + 879, 3 + + + Left + + + 7 + + + tableLayoutPanel10 + + + tableLayoutPanel9 + + + 27 + + + grpApplications + + + tableLayoutPanel2 + + + 26 + + + 27 + + + © Copyright 2021..2022 Xylem. All Rights Reserved. For internal use only! + + + Bottom + + + Bottom, Left + + + 3 + + + lblCoreRevision + + + True + + + barOverallProgressUpdate + + + tableLayoutPanel8 + + + True + + + NoControl + + + 1 + + + 688, 0 + + + 0 + + + Overall status + + + 0:00 + + + False + + + tableLayoutPanel9 + + + 3, 133 + + + True + + + tableLayoutPanel9 + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblConnectPcb" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCoreRevision" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnConnect" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnPortScan" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,48,Percent,52,Absolute,40,Absolute,32,Absolute,32" /></TableLayoutSettings> + + + True + + + 2 + + + BottomRight + + + 1 + + + 28, 12 + + + 3, 3 + + + tableLayoutPanel3 + + + 1 + + + 22 + + + 3 + + + 1 + + + 182, 12 + + + Fill + + + 3, 3 + + + 29 + + + 1 + + + 346, 3 + + + Left + + + 0, 0, 0, 0 + + + + AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA + AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA + B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw + AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3 + ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI + /wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA + AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA + AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH + AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y + Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA + AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w== + + + + $this + + + lblConnectPcb + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Language + + + 3, 121 + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 12 + + + tableLayoutPanel2 + + + tableLayoutPanel8 + + + STOP + + + tableLayoutPanel9 + + + lblFileErase + + + 3 + + + None + + + Left + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="picBoxLogo" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblFwUpdateInfo" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="grpLanguageSelection" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,45,Absolute,25,Percent,100,Absolute,20" /></TableLayoutSettings> + + + 24 + + + Bottom, Left + + + Cordonel authentication + + + grpLanguageSelection + + + 887, 19 + + + label1 + + + tableLayoutPanel1 + + + 13 + + + 85, 13 + + + 337, 155 + + + tableLayoutPanel6 + + + tableLayoutPanel6 + + + File erase + + + FW update + + + tableLayoutPanel1 + + + 3, 56 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + Left + + + 0 + + + 0 + + + 0 + + + 28 + + + 0 + + + lblCordonelUpdateCapability + + + False + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 6 + + + 132, 13 + + + lblPasswordFileCheck + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 114, 427 + + + 2 + + + Left + + + FrmServiceFwUpdateSw + + + tableLayoutPanel1 + + + tableLayoutPanel3 + + + 23 + + + 0 + + + 28 + + + lblWaitingForMeterResponse + + + 6 + + + Firmware update + + + btnReleaseDisplay + + + Microsoft Sans Serif, 8.25pt + + + tableLayoutPanel10 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 3, 88 + + + 30 + + + 1 + + + File restore + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 6, 3, 3, 3 + + + 3, 26 + + + FW Update + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 144, 3 + + + tableLayoutPanel9 + + + 873, 12 + + + Left + + + 1002, 723 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel7 + + + grpLanguageSelection + + + 59, 17 + + + 864, 408 + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel6 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 263, 81 + + + tableLayoutPanel5 + + + 50 + + + 3 + + + 2 + + + 103, 39 + + + lblFileRestore + + + 996, 95 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 13 + + + Left + + + 5, 6, 7, 6 + + + Bottom, Left + + + tableLayoutPanel8 + + + Show History + + + 7, 20 + + + 867, 16 + + + System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 100, 25 + + + tableLayoutPanel9 + + + lblOverallProcess + + + 100, 13 + + + 2 + + + Left + + + 263, 56 + + + 51 + + + NoControl + + + 870, 161 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + lblRegisterReadout + + + 100, 25 + + + 0 + + + 0 + + + 11 + + + 2 + + + True + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 8 + + + tableLayoutPanel3 + + + 70, 12 + + + 3 + + + 2 + + + 100, 25 + + + True + + + 114, 161 + + + 15 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actual status + + + 0 + + + 6, 399 + + + 26 + + + 62, 17 + + + 27 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel9 + + + lblFwUpdateInfo + + + lblRegisterRestore + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 879, 170 + + + Fill + + + 4 + + + False + + + 0 + + + btnStop + + + Bottom, Right + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Left + + + Left + + + tableLayoutPanel8 + + + Fill + + + Elapsed time [min:s]: + + + System core revision + + + 1008, 729 + + + 135, 146 + + + True + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 108, 66 + + + 34 + + + 72, 13 + + + 5, 24 + + + lblFirmwareUpdate + + + Fill + + + Update information status + + + + + + 263, 106 + + + lblCordonelAuthentication + + + Applications + + + 1 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 104, 13 + + + btnHistory + + + 2 + + + Left + + + Fill + + + 3, 92 + + + 1 + + + + /9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH + AAAAPodpAAQAAAABAAAARpydAAEAAAAOAAAApgAAAABUaG9tYXMAAAAEkAMAAgAAABQAAAB8kAQAAgAA + ABQAAACQkpEAAgAAAAM1MwAAkpIAAgAAAAM1MwAAAAAAADIwMjE6MDQ6MDEgMTQ6NTk6MjkAMjAyMTow + NDowMSAxNDo1OToyOQAAAFQAaABvAG0AYQBzAAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQD + BQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwM + DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAIwBkAwEi + AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB + fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE + RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 + tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEA + AAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRC + kaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz + dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ + 2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fi5vYbML50scW7gb2C5p28Yrzr9qv8AZm0H + 9rX4Map4O8QK0cV0vm2d5GP32nXKg+XOnuMkEfxKWXoa/M7wp8XfjF8ZtT0j9j288SafptxpGsz6Xqvi + SC/3TXWm24LfZlOQX2qrYUHewCIwUK+foMpyOOPpSnCqouDvNNbQt8S11ts1o9j4viTi6eT4mFGrQc1V + Vqbi/iqXSVNpr3b3upXatfS61/XDTdYtNYjZ7O6t7pEbazQyCQKfQkGpZ7iO2TdI6xr6scCvzR8e/BeD + /gkF+2N8M/EnhPVNbPwx8cOND1+G+ufOVJMhWkcgKvAdZV4yDHIB8pxXoP8AwWD12++NPxH+EPwF0W4e + O78aaumo6kY/vQ26Exo5/wBkAzuf+uINbx4djUxFKNGrelUTlztWso35rq+6t36o4ZccVKOCxM8Vh+XE + UJRg6alfmc7ez5Zcq0lf+W6s9NDU8P8AjTVpv+C4mtaP/a+pPoi+EFnSx+1ubQN5EB3iPOzPJOcdz619 + rX+pW+lW7TXU8NtCvWSVwij8TxXwZ8PPD9p4V/4Ll32lWEIt7HTfAkNpbRDpFEltbKq/gABXzx8Uv2g/ + AP7UH7afju5+PHiTxZb+B/B9/Jpnh7w9pEE8kMvlyvGXkMYO0nZuY8MxkADBUxXq18jePqUuRtRhRpt2 + jeTvokordv1surPncLxcsnoYj2iUqlXFVoxUp8sFazblNp2iulk220kj9fLS9h1C3Wa3ljmhkGVeNgys + PYjg1FqWs2ejRq15dW9qrnarTSCMMfQZNfll+w9+0B4Z+B/7f+ieEfhL4h8Va18JfH0fkXGm6xbyxnSr + 0rIVMe8DOGRPnAGVkKtkoGrpPA37Pen/APBTL/goB8cIviVrGvT6P8PLs6To+n2V15MdsnnSwqRkEDAh + LEAfM8hJz0PFW4WVCrJ4io40owU78vvWb5UuW+jvvrbqevhfESWLoU44Ogp151JUuX2i5LxjzuSqKLvH + l1Xu3vpbQ/Si/wBbs9Kije6u7a2SU4RpZVQOfbJ5q0GzX5I/sI/sD6L+138T/ip4Z8feKPFuraX8Kbk+ + HtDRL8r5Cme5XzAG3BQPJyEUBcuc54r6W/4Id/ErXPFPwA8WeG9Z1G51aLwT4gk07T57hy8iQFFYR5JJ + 2qwYgZ4DY6AVlmnDlLC0qk6VbnlT5eZctlaesWnd36XVjp4d44xGY4ihTxGF9lCuqnI+dSd6TtNSXKrK + 97O7vbbU+2KKKK+VP0QKKKKAPF/23o/jJqHwyt9O+C8eix65qk7Wt9e6hMIm063ZGHnQknHmBsc7Wx1A + zXzH4p/4IxN4U/ZZ0RvCGqhfjj4bvf7dXX0nMX9oXZIZoPMblUXapjZv4lJOPMav0ExmivawOfYrCU40 + 8PaKTu9NZeUu6s2rbanyubcH5fmdedfHc03KPKk3pDZuUF9mTaT5tXp20PmD45fs1+Mv24f2Dm8J/EDT + NN8N/EiFUuInjuUntBfQZCzK0edscyllK4ynmNwcDPzp/wAEkPD3ij9o39q7xP8AFDx1dW+qXnw70mDw + jYXUDb4ZZlUxGRHyQxESOWYcMbndxnFfY/7Z/wAGPiL8c/h5a6H8PPHUXgKa4mePVLprbznubV4ypjQg + blbJzlSp9xWj+x1+ynof7G3wQsPBmiTS33kyNdX19KgSS/uXxvlKjIUYVVC5OFVRknJPpUc4jSyurSUo + 81Rvlik/cTfv6vZSSSSTfc+fxPC88TxDhsQ4S9nQinOcpL97KK/d6LeUHKTcmlrojwP9oj9k74weG/8A + goHpvxo+Fo8N6pb6lYQaVqtnqcvltbRDakpUEqGBjVWUhtwYEEEdcz4i/safGL9mb9p7xN8SPgK/hnXN + L8dyfaNb8M623lIJyxdnRiVBXczspDqy+Yy4YV9C+If2k1+HVz8UtQ16EyaL4EurG3tks4d1zcG4trdw + hy20s00wUH5QARnoTXJ3X7Y3iPxnfX2neG/A2qWdxZ6LNq0s+oqskkZt7wQ3EUdujb7gmMMYmQ7ZHZFy + o3EVh8wzFxguSDioqDutJRspJS11cbppqzRONyfI1UqN1akakqkqi5W+aE7yhJw912U2mmpXi7bKxnfs + peGP2kNa+L114o+LGoeDdB8Mmza2g8K6TbrORJnKzCUMSjDufMfcONq8EZn7DP7K3jP4G/tXfHjxX4is + bS20Xx5q/wBs0eWK7SZ5o/tFw+WVTlDtkQ4PrXceJP2i/EnxE/Z+0vxV4B0me3urrUzaajbyW8OqX+lw + R+YJitrHcIJZ1ZEBh8wSKGY7Cy7Dy3jz9vqDTvgzq2o6LDdajJDpr2tn4pWzSLS59Y/sr+0Ui+yvKbhE + MWGyylVJ2Fsgms+bHVVVpwpwj7S0GkrcvLJPp1uurbaubKGUYaVCtWrVJujepGU3dzc4OL3V7JPooxi2 + rtN2Mz/gnZ+yn40/Z4+NHxw1rxRY2lpp/jjXxqGkvDdpO00Xn3T5YLyh2yocHnn2rF/YA/ZM+K/7G/x+ + 8b6LdR+HNS+FviW8n1WHU45v9OE2QIVKEgrlCQ4KsMrw3PPpOp/8FBfD2kTW+nroPiC+15pzp89jEsKt + bXgluUEEjGTarPHZ3M65ODEin+NQaXxu/a18S+G7fw7J4X0u1874keH1bwnaazayW9wusG4gXyLld2VU + Q3PmlRggWsxyRitKlbMq1SpCrCK9sknfb3Fo1rdWSvfbdmVHC5DhaNCpQqzf1WUpJxd3+8d5RlpZptqN + lqm0tGz6Oor5d8A/8FFLfX9XgurjSZrzRdaurOx04ae0RuLSV0top2nV5A+wX10LbKptVoJMkkYrT+H/ + APwUSsfEuieHZNT8G+IrO+1TS7bU9RSz8q8h0pLkzeQWZW3MriB2LBcRggvjnHjzyTGR1cPxX9abPz06 + o+npcXZVUaSq73to+jSve1rO913V3snb6PornfhP49k+KPw70nxC+kX+hrrEC3UNpevE06RON0bP5Tuo + LKQ2AxIzg4IIory6kHCThLdH0FGrGpBVIbNXXTR+T1OioooqTQKKKKAON8Rfs8eBfF3iy617VPCeg6hr + F9Aba4u7izSSW4iMZj2OSPmGwlee1OsP2fvA+l2tnDb+E9Bjj0+0ubCBRZp+7t7k5uIunKSHlwchjyc0 + UVt9Yq25eZ29Wcv1HDczn7ON3u7K71v27pP1RDcfs3eAbv4fW/hSTwf4fbw5a3BuodPNmnkxzEsTIBjh + zubLdTuOTyaW6/Zv+H97qzX0vgvwy921h/ZZk/s6LP2XyvJ8np93yv3eP7ny/d4oop/Wq387+99d/vJ/ + s/CO16UdLfZXTbp06dizr/wJ8F+KbTVINQ8L6Hdx63cRXl+JLNM3c0SLHHK5xkuqKqhuoUY6VqP8PtCk + TRFbR9NK+GnEmkg26401hE0IMPH7vEbsny4+ViKKKj21Rqzk/v8AK35aehosLQTclBXfku9/z19dTDuf + 2c/AV3f6bdSeD/DrXGjzSXFlJ9gj3W0kk/2h2U44Jn/eZ/v/ADdeajt/2afh9aX9ndReC/Dcdxp5mNs6 + WEamHzWd5Mcd2kkb2LsRjJooq/rVbbnf3sz/ALPwt7+yj/4CulrdPJfcux2Omabb6Np1vZ2kMdva2saw + wxRrtSJFACqo7AAAAUUUVhvqzsSSVkf/2Q== + + + + 996, 600 + /9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH @@ -1169,532 +1643,91 @@ 6cFxRRQAUUUUAFFFFABRRRQAUUUUAFBXJoooAaY1P8K/lS7AD0oooAWiiigD/9k= - - NoControl + + 68, 12 - - - - - 3, 3 - - - 135, 146 - - - 50 - - - pictureBox1 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel7 - - - 0 - - - 2 - - - 1 - - - - - - - /9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH - AAAAPodpAAQAAAABAAAARpydAAEAAAAOAAAApgAAAABUaG9tYXMAAAAEkAMAAgAAABQAAAB8kAQAAgAA - ABQAAACQkpEAAgAAAAM1MwAAkpIAAgAAAAM1MwAAAAAAADIwMjE6MDQ6MDEgMTQ6NTk6MjkAMjAyMTow - NDowMSAxNDo1OToyOQAAAFQAaABvAG0AYQBzAAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQD - BQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwM - DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAIwBkAwEi - AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB - fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE - RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 - tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEA - AAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRC - kaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz - dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ - 2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fi5vYbML50scW7gb2C5p28Yrzr9qv8AZm0H - 9rX4Map4O8QK0cV0vm2d5GP32nXKg+XOnuMkEfxKWXoa/M7wp8XfjF8ZtT0j9j288SafptxpGsz6Xqvi - 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 - wxRrtSJFACqo7AAAAUUUVhvqzsSSVkf/2Q== - - - - NoControl - - - - - - 3, 3 - - - 103, 39 - - - 34 - - - picBoxLogo - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel4 - - - 0 - - - Fill - - - 879, 3 - - - 3 - - - 114, 161 - - - 28 - - - tableLayoutPanel4 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="picBoxLogo" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblFwUpdateInfo" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="grpLanguageSelection" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,45,Absolute,25,Percent,100,Absolute,20" /></TableLayoutSettings> - - - 2 - - - 2 - - - 1 - - - Fill - - - 144, 3 - - - 5 - - - 190, 149 - - - 51 - - - tableLayoutPanel8 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel7 - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblConnectPcb" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCoreRevision" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnConnect" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnPortScan" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,48,Percent,52,Absolute,40,Absolute,32,Absolute,32" /></TableLayoutSettings> - - - Fill - - - 3, 3 - - - 1 - - - 337, 155 - - - 27 - - - tableLayoutPanel7 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel5 - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel8" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,42,04546,Percent,57,95454" /><Rows Styles="Percent,100,Absolute,155" /></TableLayoutSettings> - - - 2 - - - Fill - - - 346, 3 - - - 6 - - - 521, 155 - - - 28 - - - tableLayoutPanel9 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel5 - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblProductToInstall" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblPasswordFileCheck" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblFileRestore" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblRegisterRestore" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblFirmwareUpdate" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblFileErase" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblRegisterReadout" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCordonelUpdateCapability" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblUpdateInformationStatus" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCordonelAuthentication" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblCordonelDetection" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,16,66667,Percent,16,66667,Percent,16,66667,Percent,16,66667,Percent,16,66667,Percent,16,66667" /></TableLayoutSettings> - - - 3, 3 - - - 1 - - - 870, 161 - - - 29 - - - tableLayoutPanel5 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel7" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel9" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,39,48256,Percent,60,51744" /><Rows Styles="Percent,100,Absolute,161" /></TableLayoutSettings> - - - 1 - - - Fill - - - 879, 170 - - - 4 - - - 114, 427 - - - 30 - - - tableLayoutPanel6 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 3 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="btnHistory" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,14,Percent,100,Absolute,31,Absolute,31" /></TableLayoutSettings> - - - Fill - - - 3, 3 - - - 2 - - - 996, 600 - - - 36 - - - tableLayoutPanel1 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel10 - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel4" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="tableLayoutPanel5" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="grpApplications" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel6" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,88,05221,Percent,11,94779" /><Rows Styles="Percent,27,91461,Percent,72,08539" /></TableLayoutSettings> - - - 2 - - - 4 - - - Fill - - - 3, 3 - - - 1 - - - 873, 12 - - - 0 - - - tableLayoutPanel3 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + tableLayoutPanel2 - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblUpdateTime" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="label9" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblActualProcess" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblWaitingForMeterResponse" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /></Controls><Columns Styles="Percent,74,67249,Percent,25,32751,Absolute,48,Absolute,399" /><Rows Styles="Percent,100,Absolute,12" /></TableLayoutSettings> - - - Bottom - - - 3, 609 - - - 5 - - - 996, 95 - - - 0 - - - tableLayoutPanel2 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel10 - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnStop" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="barActualProgressUpdate" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="btnUpdateFw" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblOverallProcess" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="barOverallProgressUpdate" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,117" /><Rows Styles="Percent,100,Absolute,28,Absolute,17,Absolute,28,Absolute,4" /></TableLayoutSettings> - - - 1 - - - Left - - - True - - - 3, 708 - - - 353, 13 - - - 8 - - - © Copyright 2021..2022 Xylem. All Rights Reserved. For internal use only! - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel10 - - - 2 - - - Fill - - - 3, 3 - - - 3 - - - 1002, 723 - - - 37 - - - tableLayoutPanel10 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tableLayoutPanel2" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,50" /><Rows Styles="Percent,85,61549,Percent,14,38451,Absolute,15" /></TableLayoutSettings> - + + True + + + 2 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Port scanner + + + tableLayoutPanel3 + + + 426, 0 + + + gridViewApplic + + + 1 + + + Fill + + + 4 + + + 3, 0 + + + 3, 3 + + + 2 + + + 19 + + + 1 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="pictureBox1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel8" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,42,04546,Percent,57,95454" /><Rows Styles="Percent,100,Absolute,155" /></TableLayoutSettings> + + + Connect + + + 3, 81 + + + 3, 3 + + + + + + False + + True - + True 29 - - 6, 13 - - - GrowAndShrink - - - 1008, 729 - - - - AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// - AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA - AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA - B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw - AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3 - ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI - /wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA - AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA - AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH - AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y - Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA - AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w== - - - - 3, 3, 3, 3 - - - Manual - - - Cordonel Service FW Update SW - - - FrmServiceFwUpdateSw - - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - \ No newline at end of file diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.Designer.cs b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.Designer.cs index db81aa60..8d4775ab 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.Designer.cs +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.Designer.cs @@ -548,11 +548,20 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties { } /// - /// Looks up a localized string similar to Region and radio frequency[MHz]:. + /// Looks up a localized string similar to Radio frequency[MHz]:. /// - internal static string StrMessageSystemRegionRadio { + internal static string StrMessageSystemRadio { get { - return ResourceManager.GetString("StrMessageSystemRegionRadio", resourceCulture); + return ResourceManager.GetString("StrMessageSystemRadio", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Region:. + /// + internal static string StrMessageSystemRegion { + get { + return ResourceManager.GetString("StrMessageSystemRegion", resourceCulture); } } diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.de.resx b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.de.resx index d0662410..3db22c7d 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.de.resx +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.de.resx @@ -259,8 +259,11 @@ Systemkern-Version: - - Region und Funkfrequenz[MHz]: + + Region: + + + Funkfrequenz[MHz]: FEHLER @@ -508,4 +511,4 @@ Display freigegeben für Standardoperation - \ No newline at end of file + \ No newline at end of file diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.resx b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.resx index 9e4dfa41..04f7a445 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.resx +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/Properties/Resources.resx @@ -259,8 +259,11 @@ System Core Revision: - - Region and radio frequency[MHz]: + + Region: + + + Radio frequency[MHz]: FAILED diff --git a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/ServiceFwUpdateSw.csproj b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/ServiceFwUpdateSw.csproj index 67a8eda5..41057ac8 100644 --- a/ServiceFwUpdate/Ui/ServiceFwUpdateSw/ServiceFwUpdateSw.csproj +++ b/ServiceFwUpdate/Ui/ServiceFwUpdateSw/ServiceFwUpdateSw.csproj @@ -268,6 +268,10 @@ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D} Logic.ProductionToProductMapper + + {6D2777BB-7A88-466D-A49B-3266F9BF0160} + ProductionOrderCore + {a33e3c6d-eaae-4a20-a0ee-f9e6922fd029} SoftwareAccessHelper