From 6230a690fcfae2c51aadf4ce57d555e502fcce93 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 24 Dec 2019 11:37:59 +0200 Subject: Implemented offline firmware upgrade support on PPC. --- .../Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs | 67 +++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs index 0af977614..3942a1b84 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs @@ -8,8 +8,10 @@ using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.Core.Commands; +using Tango.Core.ExtensionMethods; using Tango.Core.Helpers; using Tango.Explorer; +using Tango.PMR.FirmwareUpgrade; using Tango.PPC.Common; using Tango.PPC.Common.MachineUpdate; using Tango.PPC.Common.Publish; @@ -313,6 +315,7 @@ namespace Tango.PPC.UI.ViewModels base.OnApplicationReady(); StorageProvider.RegisterFileHandler(ExplorerFileDefinition.Update.Extension, HandleSoftwareUpdatePackageLoaded); + StorageProvider.RegisterFileHandler(ExplorerFileDefinition.Firmware.Extension, HandleFirmwareUpgradeLoaded); if (ApplicationManager.IsAfterUpdate) { @@ -401,6 +404,8 @@ namespace Tango.PPC.UI.ViewModels { PublishInfo packageFile = null; + LogManager.Log("TUP file loaded from storage..."); + try { packageFile = await MachineUpdateManager.GetUpdatePackageFileInfo(fileItem.Path); @@ -413,7 +418,11 @@ namespace Tango.PPC.UI.ViewModels } UpdateFromFileViewVM vm = new UpdateFromFileViewVM(); - vm.Version = packageFile.ApplicationVersion; + vm.PublishInfo = packageFile; + + LogManager.Log($"TUP publish info:\n{packageFile.ToJson()}"); + + LogManager.Log("Displaying TUP update dialog..."); await NotificationProvider.ShowDialog(vm); @@ -439,6 +448,62 @@ namespace Tango.PPC.UI.ViewModels } } + private async void HandleFirmwareUpgradeLoaded(ExplorerFileItem fileItem) + { + LogManager.Log("TFP file loaded from storage..."); + + VersionPackageDescriptor packageInfo; + FirmwareUpgradeFromFileViewVM vm = new FirmwareUpgradeFromFileViewVM(); + + try + { + using (FileStream st = File.OpenRead(fileItem.Path)) + { + packageInfo = await MachineProvider.MachineOperator.GetFirmwarePackageInfo(st); + } + + vm.Version = packageInfo.FileDescriptors.SingleOrDefault(x => x.Destination == VersionFileDestination.Mcu).Version; + } + catch (Exception ex) + { + LogManager.Log(ex, $"Error loading package info from {fileItem.Path}."); + await NotificationProvider.ShowError("An error occurred while trying to load the selected firmware upgrade package. Please make sure the package is valid."); + return; + } + + + LogManager.Log($"TFP publish info:\n{packageInfo.ToJsonString()}"); + + LogManager.Log("Displaying TFP update dialog..."); + + await NotificationProvider.ShowDialog(vm); + + if (vm.DialogResult) + { + await NavigationManager.NavigateTo(Common.Navigation.NavigationView.MachineUpdateView); + await NavigateTo(MachineUpdateView.UpdateProgressView); + + LogManager.Log("Starting firmware upgrade from package..."); + + try + { + await MachineUpdateManager.UpdateFromTFP(fileItem.Path); + LogManager.Log("Firmware upgrade from package completed."); + _update_result = new MachineUpdateResult() + { + RequiresBinariesUpdate = false, + }; + await NavigateTo(MachineUpdateView.UpdateCompletedView); + } + catch (Exception ex) + { + LogManager.Log(ex, "Firmware upgrade from package failed."); + FailedError = ex.FlattenMessage(); + await NavigateTo(MachineUpdateView.UpdateFailedFromPackageView); + } + } + } + #endregion #region Auto Check For Update -- cgit v1.3.1