diff --git a/Common/Ui/GenesisToolBox/FrmLowLevelTools.cs b/Common/Ui/GenesisToolBox/FrmLowLevelTools.cs index 9c793676..8d47e91c 100644 --- a/Common/Ui/GenesisToolBox/FrmLowLevelTools.cs +++ b/Common/Ui/GenesisToolBox/FrmLowLevelTools.cs @@ -180,6 +180,7 @@ namespace Xylem.Common.Ui.GenesisToolBox btnUploadPWFile.Enabled = false; btnReadStatus.Enabled = false; btnRepairPassword.Enabled = false; + ddlLocation.Enabled = false; } /// @@ -205,6 +206,7 @@ namespace Xylem.Common.Ui.GenesisToolBox tbxFileToEraseDrive.Enabled = true; btnUploadPWFile.Enabled = true; btnReadStatus.Enabled = true; + ddlLocation.Enabled = true; if (_repairPasswordEnabled) btnRepairPassword.Enabled = true; } @@ -262,6 +264,9 @@ namespace Xylem.Common.Ui.GenesisToolBox /// /// - Catch error message on unknown data type and kill meter. /// + /// + /// - Actions on pwdContainer error. + /// private void Connect() { try @@ -275,7 +280,7 @@ namespace Xylem.Common.Ui.GenesisToolBox } lblOverall.Text = @"Login to Cordonel..."; - ViewProgressPcb(true); + LowLevelActionControl(true); _currentGenesis?.DisposeMeter(); //dispose old meter @@ -297,10 +302,29 @@ namespace Xylem.Common.Ui.GenesisToolBox { _meterBatch.MetersLogin(); + if (!_currentGenesis.IsLoggedOn && String.IsNullOrEmpty(_currentGenesis.PcbId)) + { + LowLevelActionControl(false); + LogErrorText("ERROR: Cannot read out PcbId! Access to Cordonel denied!"); + return; + } + var retValPwdBuild = MeterPwdHandlerDb.RequestPwdFileFromDb(_currentGenesis.PcbId, out var pwdContainer); - // CASE 1: - The 'production password' is the 'Lvl8 password' as the login succeeded. + // Login failed and password cannot be acquired + if (!_currentGenesis.IsLoggedOn && + (pwdContainer?.ListOfPasswords == null || + pwdContainer.ListOfPasswords.Count < 8 || + string.IsNullOrEmpty(pwdContainer.Skeleton))) + { + LowLevelActionControl(false); + LogErrorText("ERROR: Login with 'production password' failed and password file cannot be acquired " + + "from database!"); + return; + } + // Password file exists + // CASE 1: - The 'production password' is the 'Lvl8 password' as the login succeeded. if (retValPwdBuild && _currentGenesis.IsLoggedOn && pwdContainer.Skeleton.Equals(pwdContainer.Password)) { // CASE 2: - Passwords are generated in database but password file is not installed or doesn't work. @@ -309,7 +333,8 @@ namespace Xylem.Common.Ui.GenesisToolBox // If password file is initially not installed and the database password returned the SkeletonKey // the login has been successfully executed with this SkeletonKey, so a repair of the password // file needs to be enabled! - ShowPasswordRepairMessage(@"Password exists on database but the SkeletonKey is valid - [Repair Password] enabled"); + ShowPasswordRepairMessage( + @"Password exists on database but the SkeletonKey is valid - [Repair Password] enabled"); } if (!_currentGenesis.IsLoggedOn) @@ -318,14 +343,14 @@ namespace Xylem.Common.Ui.GenesisToolBox Thread.Sleep(2000); // Try to log in with password level 8 which may not be published to the database var retVal = _currentGenesis.Login(Encoding.UTF8.GetString(pwdContainer.ListOfPasswords.Last())); - // CASE 3: - Passwords are generated in database and correctly installed. The login check will be done // with the generated password, but the 'production password' is still the 'SkeletonKey'. // - The database update of the production password went wrong! if (_currentGenesis.IsLoggedOn && retVal) { - ShowPasswordRepairMessage(@"Password file is installed as login Lvl8 works, password in database not updated" + - "- [Repair Password] enabled"); + ShowPasswordRepairMessage( + @"Password file is installed as login Lvl8 works, password in database not updated" + + "- [Repair Password] enabled"); } else { @@ -353,7 +378,8 @@ namespace Xylem.Common.Ui.GenesisToolBox else if (_currentGenesis.Region.Equals("NA")) { var url = ServiceUrls.GetExportDataServiceUrl(); - var retStr = LocalWebRequest.GetRequestWithError(url + _currentGenesis.PcbId, out var errorCode, 30000); + var retStr = LocalWebRequest.GetRequestWithError(url + _currentGenesis.PcbId, + out var errorCode, 30000); if (errorCode == HttpStatusCode.OK.GetHashCode()) { var retExport = JsonConvert.DeserializeObject>(retStr); @@ -394,8 +420,8 @@ namespace Xylem.Common.Ui.GenesisToolBox } MessageBox.Show(sb.ToString()); - }// use skeletonKey - // Retry login if not skeletonKey + } // use skeletonKey + // Retry login if not skeletonKey else { _meterBatch.MetersLogin(); @@ -450,19 +476,18 @@ namespace Xylem.Common.Ui.GenesisToolBox LogText(""); lblConnectPcb.ForeColor = Color.Green; - CheckUpdateEnabled(); LogPcAndCordonelTime(); LogInstalledMeterFw(); })); }).ContinueWith(delegate { - ViewProgressPcb(false); + LowLevelActionControl(false); }); } catch (Exception ex) { - ViewProgressPcb(false); + LowLevelActionControl(false); MessageBox.Show(ex.Message, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); LogErrorText(ex.Message); // Dispose meter @@ -541,6 +566,7 @@ namespace Xylem.Common.Ui.GenesisToolBox { ViewProcessControl(false); _progressBarOn = false; + CheckUpdateEnabled(); })); } } @@ -1311,7 +1337,7 @@ namespace Xylem.Common.Ui.GenesisToolBox LogText(""); _currentGenesis.Logout(); LowLevelActionControl(false); - + LowLevelActionControl(false); // reboot the meter to take the new settings btnRebootMeter_Click(this, null); } @@ -1338,15 +1364,20 @@ namespace Xylem.Common.Ui.GenesisToolBox LogText(msg); lblActualProcess.Text = msg; - LowLevelActionControl(true); - _currentGenesis.ReLogin(); + Task.Factory.StartNew(() => + { + LowLevelActionControl(true); + _currentGenesis.ReLogin(); - _currentGenesis.StoreAllConfigurations(); + _currentGenesis.StoreAllConfigurations(); - //add a blank line to separate next operation - LogText(""); - _currentGenesis.Logout(); - LowLevelActionControl(false); + //add a blank line to separate next operation + LogText(""); + _currentGenesis.Logout(); + }).ContinueWith(delegate + { + LowLevelActionControl(false); + }); } @@ -1673,7 +1704,7 @@ namespace Xylem.Common.Ui.GenesisToolBox _meterFile = new MeterFile(_currentGenesis); } - ViewProgressPcb(true); + LowLevelActionControl(true); //reset timer _startTime = DateTimeOffset.UtcNow; var sbMSG = new StringBuilder(); @@ -1736,8 +1767,8 @@ namespace Xylem.Common.Ui.GenesisToolBox { Invoke(new Action(() => { - ViewProgressPcb(false); - })); + LowLevelActionControl(false); + })); }); } @@ -2021,7 +2052,7 @@ namespace Xylem.Common.Ui.GenesisToolBox return; } - ViewProgressPcb(true); + LowLevelActionControl(true); var sbMSG = new StringBuilder(); var genesisStatus = new GenesisStatus(); Task.Factory.StartNew(() => @@ -2031,7 +2062,7 @@ namespace Xylem.Common.Ui.GenesisToolBox { Invoke(new Action(() => { - ViewProgressPcb(false); + LowLevelActionControl(false); if (sbMSG.ToString().Contains(GenesisStatusHandler.ERROR_MARKER)) { LogErrorText(sbMSG.ToString()); diff --git a/Common/Ui/GenesisToolBox/FrmQsTool.Designer.cs b/Common/Ui/GenesisToolBox/FrmQsTool.Designer.cs index 3d554c3a..daf876dd 100644 --- a/Common/Ui/GenesisToolBox/FrmQsTool.Designer.cs +++ b/Common/Ui/GenesisToolBox/FrmQsTool.Designer.cs @@ -29,7 +29,7 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - this.btnWrite = new System.Windows.Forms.Button(); + this.btnLedOff = new System.Windows.Forms.Button(); this.btnRead = new System.Windows.Forms.Button(); this.lblConfigVersion = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label(); @@ -67,13 +67,13 @@ // // btnWrite // - this.btnWrite.Location = new System.Drawing.Point(432, 132); - this.btnWrite.Name = "btnWrite"; - this.btnWrite.Size = new System.Drawing.Size(129, 53); - this.btnWrite.TabIndex = 1; - this.btnWrite.Text = "Led Off"; - this.btnWrite.UseVisualStyleBackColor = true; - this.btnWrite.Click += new System.EventHandler(this.btnWrite_Click); + this.btnLedOff.Location = new System.Drawing.Point(432, 132); + this.btnLedOff.Name = "btnLedOff"; + this.btnLedOff.Size = new System.Drawing.Size(129, 53); + this.btnLedOff.TabIndex = 1; + this.btnLedOff.Text = "Led Off"; + this.btnLedOff.UseVisualStyleBackColor = true; + this.btnLedOff.Click += new System.EventHandler(this.btnLedOff_Click); // // btnRead // @@ -404,7 +404,7 @@ this.Controls.Add(this.grpSetup); this.Controls.Add(this.barOverallProgressUpdate); this.Controls.Add(this.btnRead); - this.Controls.Add(this.btnWrite); + this.Controls.Add(this.btnLedOff); this.Name = "FrmQsTool"; this.Text = "Cordonel QS Tools"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmQsTool_FormClosing); @@ -418,7 +418,7 @@ } #endregion - private System.Windows.Forms.Button btnWrite; + private System.Windows.Forms.Button btnLedOff; private System.Windows.Forms.Button btnRead; private System.Windows.Forms.Label lblConfigVersion; private System.Windows.Forms.Label label9; diff --git a/Common/Ui/GenesisToolBox/FrmQsTool.cs b/Common/Ui/GenesisToolBox/FrmQsTool.cs index 894347f8..8abe21d7 100644 --- a/Common/Ui/GenesisToolBox/FrmQsTool.cs +++ b/Common/Ui/GenesisToolBox/FrmQsTool.cs @@ -159,7 +159,7 @@ namespace Xylem.Common.Ui.GenesisToolBox private void DisableToolButtons() { btnRead.Enabled = false; - btnWrite.Enabled = false; + btnLedOff.Enabled = false; } /// @@ -168,7 +168,7 @@ namespace Xylem.Common.Ui.GenesisToolBox private void EnableToolButtons() { btnRead.Enabled = true; - btnWrite.Enabled = true; + btnLedOff.Enabled = true; } /// @@ -236,7 +236,7 @@ namespace Xylem.Common.Ui.GenesisToolBox } lblOverall.Text = @"Login to Cordonel..."; - ViewProgressPcb(true); + LowLevelActionControl(true); _currentGenesis?.DisposeMeter(); //dispose old meter @@ -258,60 +258,62 @@ namespace Xylem.Common.Ui.GenesisToolBox { _meterBatch.MetersLogin(); - if (!_currentGenesis.IsLoggedOn) + if (!_currentGenesis.IsLoggedOn && String.IsNullOrEmpty(_currentGenesis.PcbId)) { + LowLevelActionControl(false); + LogErrorText("ERROR: Cannot read out PcbId! Access to Cordonel denied!"); return; } Invoke(new Action(() => { - lblConnectPcb.Text = StrPartPcbConnected; - tbxPcbId.Text = _currentGenesis.PcbId; - tbxPcbId.Visible = true; - tbxMeterFw.Text = _currentGenesis.FwVersion; - tbxMeterMeterSize.Text = _currentGenesis.MeterSize; - tbxMeterLutCrc.Text = _currentGenesis.LutCrc; - tbxRegion.Text = _currentGenesis.Region; - LogText("Meter FW Version:\t" + _currentGenesis.FwVersion); - LogText("Meter LUT CRC:\t" + _currentGenesis.LutCrc); - LogText("Meter Size:\t" + _currentGenesis.MeterSize); - LogText("Meter Region:\t" + _currentGenesis.Region); - if (_currentGenesis.RadioFrequencyMhz != null) - { - tbxRadio.Text = $@"{_currentGenesis.RadioFrequencyMhz}"; - LogText("Radio frequency:\t" + $"{_currentGenesis.RadioFrequencyMhz} MHz"); - } + lblConnectPcb.Text = StrPartPcbConnected; + tbxPcbId.Text = _currentGenesis.PcbId; + tbxPcbId.Visible = true; + tbxMeterFw.Text = _currentGenesis.FwVersion; + tbxMeterMeterSize.Text = _currentGenesis.MeterSize; + tbxMeterLutCrc.Text = _currentGenesis.LutCrc; + tbxRegion.Text = _currentGenesis.Region; + LogText("Meter FW Version:\t" + _currentGenesis.FwVersion); + LogText("Meter LUT CRC:\t" + _currentGenesis.LutCrc); + LogText("Meter Size:\t" + _currentGenesis.MeterSize); + LogText("Meter Region:\t" + _currentGenesis.Region); + if (_currentGenesis.RadioFrequencyMhz != null) + { + tbxRadio.Text = $@"{_currentGenesis.RadioFrequencyMhz}"; + LogText("Radio frequency:\t" + $"{_currentGenesis.RadioFrequencyMhz} MHz"); + } - LogText(""); - LogText("'Configuration.json' version: " + _currentGenesis.InterfaceInfo.InterfaceVersion); - lblConfigVersion.Text = @"Interface Version: " + _currentGenesis.InterfaceInfo.InterfaceVersion; - lblConfigVersion.ForeColor = _currentGenesis.InterfaceSupportsFwVersion ? Color.Green : Color.Red; - if (!_currentGenesis.InterfaceSupportsFwVersion) - { - var text = "INTERFACE VERSION OUTDATED!\n" + - "The loaded \'configuration.json\' " + - $"version: {_currentGenesis.InterfaceInfo.InterfaceVersion}\n" + - $"does NOT support the Cordonel FW version: {_currentGenesis.FwVersion}!"; - MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); - LogText(text); - } - else - { - LogText($"\'Configuration.json\' supports installed FW version: {_currentGenesis.FwVersion}"); - } + LogText(""); + LogText("'Configuration.json' version: " + _currentGenesis.InterfaceInfo.InterfaceVersion); + lblConfigVersion.Text = @"Interface Version: " + _currentGenesis.InterfaceInfo.InterfaceVersion; + lblConfigVersion.ForeColor = _currentGenesis.InterfaceSupportsFwVersion ? Color.Green : Color.Red; + if (!_currentGenesis.InterfaceSupportsFwVersion) + { + var text = "INTERFACE VERSION OUTDATED!\n" + + "The loaded \'configuration.json\' " + + $"version: {_currentGenesis.InterfaceInfo.InterfaceVersion}\n" + + $"does NOT support the Cordonel FW version: {_currentGenesis.FwVersion}!"; + MessageBox.Show(text, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); + LogText(text); + } + else + { + LogText($"\'Configuration.json\' supports installed FW version: {_currentGenesis.FwVersion}"); + } - LogText(""); - lblConnectPcb.ForeColor = Color.Green; - CheckUpdateEnabled(); + LogText(""); + lblConnectPcb.ForeColor = Color.Green; + CheckUpdateEnabled(); - LogPcAndCordonelTime(); - LogInstalledMeterFw(); + LogPcAndCordonelTime(); + LogInstalledMeterFw(); })); - }).ContinueWith(delegate { ViewProgressPcb(false); }); + }).ContinueWith(delegate { LowLevelActionControl(false); }); } catch (Exception ex) { - ViewProgressPcb(false); + LowLevelActionControl(false); MessageBox.Show(ex.Message, @"FAILED", MessageBoxButtons.OK, MessageBoxIcon.Error); LogErrorText(ex.Message); // Dispose meter @@ -327,7 +329,7 @@ namespace Xylem.Common.Ui.GenesisToolBox private void CheckUpdateEnabled() { - if (_currentGenesis != null && _currentGenesis.IsLoggedOn) + if (_currentGenesis != null ) { SetCordonelAccessEnabled(); return; @@ -353,6 +355,7 @@ namespace Xylem.Common.Ui.GenesisToolBox { ViewProcessControl(false); _progressBarOn = false; + CheckUpdateEnabled(); })); } } @@ -660,12 +663,11 @@ namespace Xylem.Common.Ui.GenesisToolBox private void btnReadLifetime_Click(Object sender, EventArgs e) { - ViewProgressPcb(true); + LowLevelActionControl(true); var sbMSG = new StringBuilder(); var genesisStatus = new GenesisStatus(); Task.Factory.StartNew(() => { - try { @@ -802,18 +804,21 @@ namespace Xylem.Common.Ui.GenesisToolBox // buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Information); } } - }).ContinueWith(delegate { Invoke(new Action(() => { ViewProgressPcb(false); })); }); + }).ContinueWith(delegate { Invoke(new Action(() => { LowLevelActionControl(false); })); }); } - private void btnWrite_Click(Object sender, EventArgs e) + private void btnLedOff_Click(Object sender, EventArgs e) { if (!_currentGenesis.IsLoggedOn) { _currentGenesis.ReLogin(); } + SetActualProcessAndLog("Set sample rate to 2 Hz"); _currentGenesis.WriteRegister(Register.Genesisflow.SampleRate, 2); + SetActualProcessAndLog("Switch LED OFF"); _currentGenesis.WriteRegister(Register.Genesisflow.LedMode, 0); + SetActualProcessAndLog("Set trigger active"); _currentGenesis.WriteRegister(Register.Genesisflow.TriggerActive, 1); }