diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-02 16:37:25 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-02 16:37:25 +0200 |
| commit | a2d959a7777bf2387d0f50dbc1ecf69f53e2253d (patch) | |
| tree | 8c6367189294d96ae074f386cdb4139dfeacb84a /Software/Visual_Studio/MachineStudio | |
| parent | ae614a63f593122cd28c644625db179f298dd640 (diff) | |
| download | Tango-a2d959a7777bf2387d0f50dbc1ecf69f53e2253d.tar.gz Tango-a2d959a7777bf2387d0f50dbc1ecf69f53e2253d.zip | |
Implemented machine studio storage module. firmware upgrade version/validate/activate.
Implemented firmware package generator utility.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
7 files changed, 122 insertions, 30 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/ViewModels/MainViewVM.cs index a9cfed937..4db48c636 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/ViewModels/MainViewVM.cs @@ -75,6 +75,10 @@ namespace Tango.MachineStudio.Storage.ViewModels public RelayCommand UploadVersionCommand { get; set; } + public RelayCommand ValidateVersionCommand { get; set; } + + public RelayCommand ActivateVersionCommand { get; set; } + public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IFirmwareUpgrader firmwareUpgrader) { _applicationManager = applicationManager; @@ -96,6 +100,8 @@ namespace Tango.MachineStudio.Storage.ViewModels DeleteFolderCommand = new RelayCommand(DeleteFolder, () => StorageManager != null && SelectedStorageItem != null && SelectedStorageItem is StorageFolder); UploadFileCommand = new RelayCommand(UploadFile, () => StorageManager != null && StorageManager.CurrentFolder != null); UploadVersionCommand = new RelayCommand(UploadVersion, () => StorageManager != null && StorageManager.CurrentFolder != null); + ValidateVersionCommand = new RelayCommand(ValidateVersion, () => StorageManager != null && StorageManager.CurrentFolder != null); + ActivateVersionCommand = new RelayCommand(ActivateVersion, () => StorageManager != null && StorageManager.CurrentFolder != null); } private void UploadFile() @@ -362,5 +368,37 @@ namespace Tango.MachineStudio.Storage.ViewModels { _firmwareUpgrader.InvokeUpgradeUI(); } + + private async void ValidateVersion() + { + using (_notification.PushTaskItem("Validating firmware version...")) + { + try + { + await _applicationManager.ConnectedMachine.ValidateFirmwareVersion(StorageManager.CurrentPath); + _notification.ShowInfo($"Version validated successfully!"); + } + catch (Exception ex) + { + _notification.ShowError($"Error validating firmware version.\n{ex.FlattenMessage()}"); + } + } + } + + private async void ActivateVersion() + { + using (_notification.PushTaskItem("Activating firmware version...")) + { + try + { + await _applicationManager.ConnectedMachine.ActivateFirmwareVersion(StorageManager.CurrentPath); + _notification.ShowInfo($"Version activated successfully!"); + } + catch (Exception ex) + { + _notification.ShowError($"Error activating firmware version.\n{ex.FlattenMessage()}"); + } + } + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Views/MainView.xaml index 1f435b696..e59837d49 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Views/MainView.xaml @@ -68,13 +68,13 @@ <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="18">UPGRADE VERSION</TextBlock> </DockPanel> </Button> - <Button Margin="0 5 0 0" Style="{StaticResource MaterialDesignFlatButton}" Padding="20 10" Height="Auto" Foreground="#363636" HorizontalContentAlignment="Left"> + <Button Command="{Binding ValidateVersionCommand}" Margin="0 5 0 0" Style="{StaticResource MaterialDesignFlatButton}" Padding="20 10" Height="Auto" Foreground="#363636" HorizontalContentAlignment="Left"> <DockPanel> <materialDesign:PackIcon Kind="CheckAll" Foreground="#682EBE" Width="32" Height="32" /> <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="18">VALIDATE VERSION</TextBlock> </DockPanel> </Button> - <Button Margin="0 5 0 0" Style="{StaticResource MaterialDesignFlatButton}" Padding="20 10" Height="Auto" Foreground="#363636" HorizontalContentAlignment="Left"> + <Button Command="{Binding ActivateVersionCommand}" Margin="0 5 0 0" Style="{StaticResource MaterialDesignFlatButton}" Padding="20 10" Height="Auto" Foreground="#363636" HorizontalContentAlignment="Left"> <DockPanel> <materialDesign:PackIcon Kind="Flash" Foreground="#532990" Width="32" Height="32" /> <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="18">ACTIVATE VERSION</TextBlock> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/FirmwareUpgrade/IFirmwareUpgrader.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/FirmwareUpgrade/IFirmwareUpgrader.cs index 4826a0e74..12821e2dc 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/FirmwareUpgrade/IFirmwareUpgrader.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/FirmwareUpgrade/IFirmwareUpgrader.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Integration.Operation; +using Tango.Integration.Upgrade; namespace Tango.MachineStudio.Common.FirmwareUpgrade { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs index 5568c82ac..4cceec50c 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Integration.Operation; +using Tango.Integration.Upgrade; using Tango.MachineStudio.Common.FirmwareUpgrade; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Common.StudioApplication; @@ -45,9 +46,9 @@ namespace Tango.MachineStudio.UI.FirmwareUpgrade /// </summary> public void InvokeUpgradeUI() { - FirmwareUpgradeViewVM vm = new FirmwareUpgradeViewVM(_applicationManager.ConnectedMachine); + FirmwareUpgradeViewVM vm = new FirmwareUpgradeViewVM(_applicationManager.ConnectedMachine, _notification); - _notification.ShowModalDialog<FirmwareUpgradeViewVM, FirmwareUpgradeView>(vm, (x) => + _notification.ShowModalDialog<FirmwareUpgradeViewVM, FirmwareUpgradeView>(vm, (x) => { }, () => { }); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index a9a0e1bb9..b3926190f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -609,7 +609,7 @@ copy /Y "$(SolutionDir)Referenced Assemblies\Microsoft.WITDataStore32.dll" "$(Ta </Target> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_BuildVersioningStyle="None.None.Increment.DeltaBaseYearDayOfYear" BuildVersion_UpdateFileVersion="True" BuildVersion_DetectChanges="True" BuildVersion_UseGlobalSettings="False" /> + <UserProperties BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.DeltaBaseYearDayOfYear" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs index ce8b09aa4..09b63cfc9 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs @@ -7,6 +7,8 @@ using System.Text; using System.Threading.Tasks; using Tango.Core.Commands; using Tango.Integration.Operation; +using Tango.Integration.Upgrade; +using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; namespace Tango.MachineStudio.UI.ViewModels @@ -14,6 +16,7 @@ namespace Tango.MachineStudio.UI.ViewModels public class FirmwareUpgradeViewVM : DialogViewVM { private IMachineOperator _operator; + private INotificationProvider _notification; private FileStream _stream; private FirmwareUpgradeHandler _handler; @@ -37,27 +40,50 @@ namespace Tango.MachineStudio.UI.ViewModels set { _currentPage = value; RaisePropertyChangedAuto(); } } + private String upgradeError; + public String UpgradeError + { + get { return upgradeError; } + set { upgradeError = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand SelectCommand { get; set; } public RelayCommand UpgradeCommand { get; set; } public RelayCommand AbortCommand { get; set; } - public FirmwareUpgradeViewVM(IMachineOperator machineOperator) : base() + public FirmwareUpgradeViewVM(IMachineOperator machineOperator, INotificationProvider notificationProvider) : base() { + _notification = notificationProvider; _operator = machineOperator; SelectCommand = new RelayCommand(BrowseForFile); UpgradeCommand = new RelayCommand(StartUpgrade, () => SelectedFile != null); AbortCommand = new RelayCommand(AbortUpgrade, () => Handler != null && Handler.Status != FirmwareUpgradeStatus.Validating && Handler.Status != FirmwareUpgradeStatus.Activating); } - private void BrowseForFile() + private async void BrowseForFile() { OpenFileDialog dlg = new OpenFileDialog(); dlg.Title = "Select tango firmware package file"; dlg.Filter = "Tango Firmware Package|*.tfp"; if (dlg.ShowDialog().Value) { + try + { + using (FileStream fs = new FileStream(dlg.FileName, FileMode.Open)) + { + var info = await _operator.GetFirmwarePackageInfo(fs); + } + } + catch (Exception ex) + { + LogManager.Log(ex); + _notification.ShowError("The selected package seems to be invalid."); + return; + } + SelectedFile = dlg.FileName; InvalidateRelayCommands(); } @@ -65,36 +91,53 @@ namespace Tango.MachineStudio.UI.ViewModels private async void StartUpgrade() { + CanClose = false; CurrentPage = 1; - _stream = new FileStream(SelectedFile, FileMode.Open); - Handler = await _operator.UpgradeFirmware(_stream); - Handler.Progress += (_, e) => + try { - InvokeUI(() => + _stream = new FileStream(SelectedFile, FileMode.Open); + Handler = await _operator.UpgradeFirmware(_stream); + Handler.Progress += (_, e) => { - AbortCommand.RaiseCanExecuteChanged(); - }); - }; - Handler.Completed += (_, __) => - { - _stream.Dispose(); - CurrentPage = 2; - }; - Handler.Canceled += (_, __) => - { - _stream.Dispose(); - }; - Handler.Failed += (_, __) => + InvokeUI(() => + { + AbortCommand.RaiseCanExecuteChanged(); + }); + }; + Handler.Completed += (_, __) => + { + CanClose = true; + _stream.Dispose(); + CurrentPage = 2; + }; + Handler.Canceled += (_, __) => + { + CanClose = true; + _stream.Dispose(); + CurrentPage = 0; + }; + Handler.Failed += (_, ex) => + { + UpgradeError = ex.FlattenMessage(); + CanClose = true; + _stream.Dispose(); + CurrentPage = 3; + }; + } + catch (Exception ex) { - _stream.Dispose(); - }; - + CanClose = true; + UpgradeError = ex.FlattenMessage(); + CurrentPage = 3; + } } private async void AbortUpgrade() { + CanClose = true; await Handler.Cancel(); + CurrentPage = 0; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml index b69ad6a5b..84f4b2d92 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml @@ -43,9 +43,9 @@ </Grid.RowDefinitions> <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <TextBlock TextAlignment="Center"> - <Run>The upgrade wizard will help you upgrade the connected machine firmware version.</Run> + <Run>This upgrade wizard will help you upgrade the connected machine firmware version.</Run> <LineBreak/> - <Run>Press 'SELECT' to browse for a .tfp file (Tango Firmware Package).</Run> + <Run>Press 'SELECT' to browse for an .tfp file (Tango Firmware Package).</Run> </TextBlock> <DockPanel Margin="0 30 0 0" Width="600" HorizontalAlignment="Left"> <Button DockPanel.Dock="Right" Margin="10 0 0 0" Command="{Binding SelectCommand}">SELECT</Button> @@ -67,7 +67,7 @@ <Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock HorizontalAlignment="Center" FontSize="18" FontWeight="SemiBold">Upgrading Machine Firmware</TextBlock> - <TextBlock Margin="0 40 0 0" HorizontalAlignment="Center" Foreground="Gray" Text="{Binding Handler.Status,Converter={StaticResource EnumToDescriptionConverter},Mode=OneWay}"></TextBlock> + <TextBlock Margin="0 40 0 0" HorizontalAlignment="Center" Foreground="Gray" Text="{Binding Handler.Message,Converter={StaticResource EnumToDescriptionConverter},Mode=OneWay}"></TextBlock> <ProgressBar Height="15" Width="600" Margin="0 5 0 0" Maximum="{Binding Handler.Total,Mode=OneWay}" Value="{Binding Handler.Current,Mode=OneWay}" ></ProgressBar> <Button Width="150" Background="#FF5151" BorderBrush="#FF5151" Margin="0 40 0 0" Height="35" Command="{Binding AbortCommand}">ABORT</Button> </StackPanel> @@ -80,6 +80,15 @@ <Button Width="150" Margin="0 10 0 0" Height="35" Command="{Binding CloseCommand}">CLOSE</Button> </StackPanel> </Grid> + + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock HorizontalAlignment="Center" FontSize="18" FontWeight="SemiBold">Firmware Upgrade Failed</TextBlock> + <materialDesign:PackIcon HorizontalAlignment="Center" Width="100" Margin="0 10 0 0" Height="100" Kind="AlertOutline" Foreground="#FF5151" /> + <TextBlock HorizontalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap" Text="{Binding UpgradeError}" Foreground="#FF5151" FontWeight="SemiBold"></TextBlock> + <Button Width="150" Margin="0 15 0 0" Height="35" Command="{Binding CloseCommand}">CLOSE</Button> + </StackPanel> + </Grid> </controls:NavigationControl> </Grid> |
