diff options
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/IMachineUpdateManager.cs | 13 | ||||
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs | 126 |
2 files changed, 61 insertions, 78 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/IMachineUpdateManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/IMachineUpdateManager.cs index 3e3fbcc27..77646da40 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/IMachineUpdateManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/IMachineUpdateManager.cs @@ -38,9 +38,8 @@ namespace Tango.PPC.Common.MachineUpdate event EventHandler<MachineUpdateProgress> Progress; /// <summary> - /// Performs a machine update using the specified serial number and machine service address. + /// Performs a machine update. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <param name="setupFirmware">if set to <c>true</c> updates the embedded device firmware.</param> /// <param name="setupFPGA">if set to <c>true</c> updates the embedded device FPGA version and other parameters.</param> /// <returns></returns> @@ -61,24 +60,22 @@ namespace Tango.PPC.Common.MachineUpdate Task UpdateFromTFP(String fileName); /// <summary> - /// Checks if any update are available for the specified machine serial number. + /// Checks if any update are available. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <returns></returns> - Task<CheckForUpdateResponse> CheckForUpdate(String serialNumber); + Task<CheckForUpdateResponse> CheckForUpdate(); /// <summary> /// Checks whether it is necessary to updates all the "overwrite-able" database tables. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <returns></returns> - Task<DbCompareResult> UpdateDBCheck(String serialNumber); + Task<DbCompareResult> UpdateDBCheck(); /// <summary> /// Updates all the "overwrite-able" database tables. /// </summary> /// <returns></returns> - Task UpdateDB(DbCompareResult dbCompareResult, String serialNumber); + Task UpdateDB(DbCompareResult dbCompareResult); /// <summary> /// Gets the update package file information. diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs index 2dfea3ff3..85fe6b0ad 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs @@ -106,6 +106,7 @@ namespace Tango.PPC.Common.MachineUpdate _client = ppcWebClient; _machineProvider = machineProvider; _app_manager = applicationManager; + _app_manager.ApplicationReady += _app_manager_ApplicationReady; _packageRunner = packageRunner; _packageRunner.PackageProgress += _packageRunner_PackageProgress; @@ -116,7 +117,7 @@ namespace Tango.PPC.Common.MachineUpdate _checkForUpdateTimer = new System.Timers.Timer(_settings.AutoUpdateCheckInterval.TotalMilliseconds); _checkForUpdateTimer.Elapsed += _checkForUpdateTimer_Elapsed; - _checkForUpdateTimer.Start(); + _checkForUpdateTimer.Stop(); externalBridge.RegisterRequestHandler(this); } @@ -125,6 +126,11 @@ namespace Tango.PPC.Common.MachineUpdate #region Event Handlers + private void _app_manager_ApplicationReady(object sender, EventArgs e) + { + _checkForUpdateTimer.Start(); + } + private void _packageRunner_PackageProgress(object sender, PackageProgressEventArgs e) { UpdateProgress(e.PackageName, e.Message, e.IsIntermediate, e.Progress, e.Total); @@ -142,12 +148,12 @@ namespace Tango.PPC.Common.MachineUpdate #region Private Methods - private Task Login(String serialNumber) + private Task Login(String machineGuid) { return _client.Login(new LoginRequest() { Mode = LoginMode.Machine, - SerialNumber = serialNumber, + MachineGuid = machineGuid, }); } @@ -603,9 +609,8 @@ namespace Tango.PPC.Common.MachineUpdate #region Public Methods /// <summary> - /// Performs a machine update using the specified serial number and machine service address. + /// Performs a machine update. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <param name="setupFirmware">if set to <c>true</c> updates the embedded device firmware.</param> /// <param name="setupFPGA">if set to <c>true</c> updates the embedded device FPGA version and other parameters.</param> /// <returns></returns> @@ -632,7 +637,7 @@ namespace Tango.PPC.Common.MachineUpdate var _newPackageTempFolder = TemporaryManager.CreateFolder(); _newPackageTempFolder.Persist = true; - String serialNumber = _machineProvider.Machine.SerialNumber; + String machineGuid = _machineProvider.Machine.Guid; try { @@ -640,7 +645,7 @@ namespace Tango.PPC.Common.MachineUpdate var machineServiceAddress = _settings.GetMachineServiceAddress(); - LogManager.Log($"Starting machine update for serial number {serialNumber}..."); + LogManager.Log($"Starting machine update..."); //Connecting to machine... LogManager.Log("Verifying machine connection and state..."); @@ -659,10 +664,11 @@ namespace Tango.PPC.Common.MachineUpdate { throw LogManager.Log(new InvalidOperationException("Could not perform an update while the machine is not connected.")); } - if (!op.CanPrint) - { - throw LogManager.Log(new InvalidOperationException($"Could not perform an update while the machine is in {op.Status} status.")); - } + } + + if (!op.CanPrint) + { + throw LogManager.Log(new InvalidOperationException($"Could not perform an update while the machine is in {op.Status} status.")); } //Connect to machine service and get matching packages for this machine. @@ -670,10 +676,9 @@ namespace Tango.PPC.Common.MachineUpdate LogManager.Log($"Connecting to machine service on {machineServiceAddress}..."); - await Login(serialNumber); + await Login(machineGuid); DownloadUpdateRequest request = new DownloadUpdateRequest(); - request.SerialNumber = serialNumber; update_response = await _client.MachineUpdate(request); @@ -797,7 +802,7 @@ namespace Tango.PPC.Common.MachineUpdate Path.Combine(_newPackageTempFolder, "Update Scripts"), update_response.DataSource, localDataSource, - serialNumber); + machineGuid); runner.Log += (x, msg) => { @@ -836,23 +841,16 @@ namespace Tango.PPC.Common.MachineUpdate var tfpPath = Path.Combine(_newPackageTempFolder, "firmware_package.tfp"); var stream = new FileStream(tfpPath, FileMode.Open); - if (!_machineProvider.Machine.IsDemo) + if (setupFPGA) { - if (setupFPGA) - { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU | FirmwareUpgradeModes.TFP_PACKAGE; - } - else - { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU; - } + op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU | FirmwareUpgradeModes.TFP_PACKAGE; } else { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.TFP_PACKAGE; + op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU; } - var handler = await op.UpgradeFirmware(stream); + var handler = await op.UpgradeFirmware(stream, _machineProvider.Machine.IsDemo); handler.Failed += (_, ex) => { stream.Dispose(); @@ -874,7 +872,7 @@ namespace Tango.PPC.Common.MachineUpdate }; handler.Progress += (_, e) => { - UpdateProgress("Updating Firmware", e.Message, false, e.Current, e.Total); + UpdateProgress("Updating Firmware", e.Message, e.IsIndeterminate, e.Current, e.Total); }; } else @@ -894,12 +892,11 @@ namespace Tango.PPC.Common.MachineUpdate } /// <summary> - /// Checks if any update are available for the specified machine serial number. + /// Checks if any update are available for the specified machine. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <param name="machineServiceAddress">The machine service address.</param> /// <returns></returns> - public Task<CheckForUpdateResponse> CheckForUpdate(string serialNumber) + public Task<CheckForUpdateResponse> CheckForUpdate() { return Task.Factory.StartNew<CheckForUpdateResponse>(() => { @@ -909,12 +906,13 @@ namespace Tango.PPC.Common.MachineUpdate LogManager.Log($"Connecting to machine service on {machineServiceAddress}..."); - Login(serialNumber).GetAwaiter().GetResult(); + String machineGuid = _machineProvider.Machine.Guid; + + Login(machineGuid).GetAwaiter().GetResult(); LogManager.Log($"Checking if updates available..."); CheckForUpdateRequest request = new CheckForUpdateRequest(); - request.SerialNumber = serialNumber; request.Version = _app_manager.Version.ToString(); request.FirmwareVersion = _app_manager.FirmwareVersion?.ToString(); @@ -950,10 +948,9 @@ namespace Tango.PPC.Common.MachineUpdate /// <summary> /// Updates all the "overwrite-able" database tables. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <param name="machineServiceAddress">The machine service address.</param> /// <returns></returns> - public Task UpdateDB(DbCompareResult dbCompareResult, String serialNumber) + public Task UpdateDB(DbCompareResult dbCompareResult) { _updateStartDate = DateTime.UtcNow; _logs.Clear(); @@ -970,6 +967,11 @@ namespace Tango.PPC.Common.MachineUpdate { LogManager.Log("Starting database update..."); + if (_machineProvider.MachineOperator.IsPrinting) + { + throw LogManager.Log(new InvalidOperationException($"Could not perform a database update while the machine is dyeing.")); + } + UpdateProgress("Updating Database", "Initializing..."); LogManager.Log("Looking for update scripts configuration on application path..."); @@ -1029,7 +1031,7 @@ namespace Tango.PPC.Common.MachineUpdate if (item.RequiresSerialNumber) { - builder.SetMachineSerialNumber(serialNumber); + builder.SetMachineSerialNumber(_machineProvider.Machine.Guid); } builder.Synchronize(); @@ -1076,16 +1078,15 @@ namespace Tango.PPC.Common.MachineUpdate /// <summary> /// Checks whether it is necessary to updates all the "overwrite-able" database tables. /// </summary> - /// <param name="serialNumber">The serial number.</param> /// <param name="machineServiceAddress">The machine service address.</param> /// <returns></returns> - public Task<DbCompareResult> UpdateDBCheck(string serialNumber) + public Task<DbCompareResult> UpdateDBCheck() { return Task.Factory.StartNew<DbCompareResult>(() => { var machineServiceAddress = _settings.GetMachineServiceAddress(); - LogManager.Log($"Checking if database update is required for serial number {serialNumber}..."); + LogManager.Log($"Checking if database update is required..."); LogManager.Log("Looking for update scripts configuration on application path..."); @@ -1098,10 +1099,9 @@ namespace Tango.PPC.Common.MachineUpdate LogManager.Log($"Connecting to machine service on {machineServiceAddress}..."); - Login(serialNumber).Wait(); + Login(_machineProvider.Machine.Guid).Wait(); UpdateDBRequest request = new UpdateDBRequest(); - request.SerialNumber = serialNumber; request.ApplicationVersion = _app_manager.Version.ToString(); request.FirmwareVersion = _app_manager.FirmwareVersion.ToString(); @@ -1132,7 +1132,7 @@ namespace Tango.PPC.Common.MachineUpdate if (item.RequiresSerialNumber) { - builder.SetMachineSerialNumber(serialNumber); + builder.SetMachineSerialNumber(_machineProvider.Machine.Guid); } var config = builder.Build(); @@ -1222,7 +1222,7 @@ namespace Tango.PPC.Common.MachineUpdate { _isUpdating = true; - LogManager.Log($"Starting machine update for serial number {serialNumber}..."); + LogManager.Log($"Starting machine update (TUP) for serial number {serialNumber}..."); //Connecting to machine... LogManager.Log("Verifying machine connection and state..."); @@ -1241,10 +1241,11 @@ namespace Tango.PPC.Common.MachineUpdate { throw LogManager.Log(new InvalidOperationException("Could not perform an update while the machine is not connected.")); } - if (!op.CanPrint) - { - throw LogManager.Log(new InvalidOperationException($"Could not perform an update while the machine is in {op.Status} status.")); - } + } + + if (!op.CanPrint) + { + throw LogManager.Log(new InvalidOperationException($"Could not perform an update while the machine is in {op.Status} status.")); } UpdateProgress("Exploring package", "Extracting..."); @@ -1362,7 +1363,7 @@ namespace Tango.PPC.Common.MachineUpdate Path.Combine(_newPackageTempFolder, "Update Scripts"), tempDbDataSource, localDataSource, - serialNumber); + _machineProvider.Machine.Guid); runner.Log += (x, msg) => { @@ -1419,23 +1420,16 @@ namespace Tango.PPC.Common.MachineUpdate var tfpPath = Path.Combine(_newPackageTempFolder, "firmware_package.tfp"); var stream = new FileStream(tfpPath, FileMode.Open); - if (!_machineProvider.Machine.IsDemo) + if (setupFPGA) { - if (setupFPGA) - { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU | FirmwareUpgradeModes.TFP_PACKAGE; - } - else - { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU; - } + op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU | FirmwareUpgradeModes.TFP_PACKAGE; } else { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.TFP_PACKAGE; + op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU; } - var handler = await op.UpgradeFirmware(stream); + var handler = await op.UpgradeFirmware(stream, _machineProvider.Machine.IsDemo); handler.Failed += (_, ex) => { stream.Dispose(); @@ -1458,7 +1452,7 @@ namespace Tango.PPC.Common.MachineUpdate }; handler.Progress += (_, e) => { - UpdateProgress("Updating Firmware", e.Message, false, e.Current, e.Total); + UpdateProgress("Updating Firmware", e.Message, e.IsIndeterminate, e.Current, e.Total); }; } else @@ -1530,16 +1524,9 @@ namespace Tango.PPC.Common.MachineUpdate LogManager.Log("-------------------------------------------------------------------------"); LogManager.Log("Updating Firmware..."); - if (!_machineProvider.Machine.IsDemo) - { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU | FirmwareUpgradeModes.TFP_PACKAGE; - } - else - { - op.FirmwareUpgradeMode = FirmwareUpgradeModes.TFP_PACKAGE; - } + op.FirmwareUpgradeMode = FirmwareUpgradeModes.DFU | FirmwareUpgradeModes.TFP_PACKAGE; - var handler = await op.UpgradeFirmware(stream); + var handler = await op.UpgradeFirmware(stream, _machineProvider.Machine.IsDemo); handler.Failed += (_, ex) => { stream.Dispose(); @@ -1558,7 +1545,7 @@ namespace Tango.PPC.Common.MachineUpdate }; handler.Progress += (_, e) => { - UpdateProgress("Updating Firmware", e.Message, false, e.Current, e.Total); + UpdateProgress("Updating Firmware", e.Message, e.IsIndeterminate, e.Current, e.Total); }; } catch (Exception ex) @@ -1669,10 +1656,9 @@ namespace Tango.PPC.Common.MachineUpdate try { - var response = await CheckForUpdate(_machineProvider.Machine.SerialNumber); + var response = await CheckForUpdate(); if (response.IsUpdateAvailable || response.IsDatabaseUpdateAvailable) { - _checkForUpdateTimer.Interval = TimeSpan.FromMinutes(60).TotalMilliseconds; LogManager.Log($"New {(response.IsDatabaseUpdateAvailable ? "database updates" : "application version")} detected ({response.Version}). Raising event..."); UpdateAvailable?.Invoke(this, response); } |
