diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-11-29 18:59:41 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-11-29 18:59:41 +0200 |
| commit | dd724f118f584eea84a11af90292a88c62ecd022 (patch) | |
| tree | 714e7c0dfb12887ed20d85b0aa5c2b6c24743b44 /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI | |
| parent | 1e2ae1c1973fd5661815f18c93ee1171a5c08da5 (diff) | |
| download | Tango-dd724f118f584eea84a11af90292a88c62ecd022.tar.gz Tango-dd724f118f584eea84a11af90292a88c62ecd022.zip | |
Working on Firmware upgrade !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI')
7 files changed, 287 insertions, 1 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs new file mode 100644 index 000000000..5568c82ac --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/FirmwareUpgrade/DefaultFirmwareUpgrader.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Integration.Operation; +using Tango.MachineStudio.Common.FirmwareUpgrade; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.Common.StudioApplication; +using Tango.MachineStudio.UI.ViewModels; +using Tango.MachineStudio.UI.Views; + +namespace Tango.MachineStudio.UI.FirmwareUpgrade +{ + /// <summary> + /// Default firmware upgrade manager. + /// </summary> + /// <seealso cref="Tango.MachineStudio.Common.FirmwareUpgrade.IFirmwareUpgrader" /> + public class DefaultFirmwareUpgrader : IFirmwareUpgrader + { + private IStudioApplicationManager _applicationManager; + private INotificationProvider _notification; + + /// <summary> + /// Initializes a new instance of the <see cref="DefaultFirmwareUpgrader"/> class. + /// </summary> + public DefaultFirmwareUpgrader(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider) + { + _applicationManager = applicationManager; + _notification = notificationProvider; + } + + /// <summary> + /// Performs a firmware upgrade. + /// </summary> + /// <param name="tfpStream">The TFP stream.</param> + public Task<FirmwareUpgradeHandler> PerformUpgrade(Stream tfpStream) + { + return _applicationManager.ConnectedMachine.UpgradeFirmware(tfpStream); + } + + /// <summary> + /// Invokes the upgrade dialog. + /// </summary> + public void InvokeUpgradeUI() + { + FirmwareUpgradeViewVM vm = new FirmwareUpgradeViewVM(_applicationManager.ConnectedMachine); + + _notification.ShowModalDialog<FirmwareUpgradeViewVM, FirmwareUpgradeView>(vm, (x) => + { + + }, () => { }); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/firmware_upgrade.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/firmware_upgrade.png Binary files differnew file mode 100644 index 000000000..fc0799143 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/firmware_upgrade.png 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 6e37a97a2..a9a0e1bb9 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 @@ -142,6 +142,7 @@ <DependentUpon>ConsoleWindow.xaml</DependentUpon> </Compile> <Compile Include="Console\ConsoleWindowVM.cs" /> + <Compile Include="FirmwareUpgrade\DefaultFirmwareUpgrader.cs" /> <Compile Include="Html\DefaultHtmlPresenter.cs" /> <Compile Include="Html\HtmlWindow.xaml.cs"> <DependentUpon>HtmlWindow.xaml</DependentUpon> @@ -172,6 +173,7 @@ <Compile Include="ViewModels\AboutViewVM.cs" /> <Compile Include="ViewModels\ConnectedMachineViewVM.cs" /> <Compile Include="ViewModels\ConnectionLostViewVM.cs" /> + <Compile Include="ViewModels\FirmwareUpgradeViewVM.cs" /> <Compile Include="ViewModels\LoadingViewVM.cs" /> <Compile Include="ViewModels\LoginViewVM.cs" /> <Compile Include="ViewModels\MachineConnectionViewVM.cs" /> @@ -193,6 +195,9 @@ <Compile Include="Views\ConnectionLostView.xaml.cs"> <DependentUpon>ConnectionLostView.xaml</DependentUpon> </Compile> + <Compile Include="Views\FirmwareUpgradeView.xaml.cs"> + <DependentUpon>FirmwareUpgradeView.xaml</DependentUpon> + </Compile> <Compile Include="Views\LoadingView.xaml.cs"> <DependentUpon>LoadingView.xaml</DependentUpon> </Compile> @@ -277,6 +282,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Views\FirmwareUpgradeView.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\LoadingView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -505,6 +514,7 @@ <Resource Include="Images\settings.png" /> </ItemGroup> <ItemGroup> + <Resource Include="Images\firmware_upgrade.png" /> <Resource Include="Images\external-bridge-emulator.png" /> <EmbeddedResource Include="..\..\Versioning\ChangeLog.txt"> <Link>ChangeLog.txt</Link> @@ -599,7 +609,7 @@ copy /Y "$(SolutionDir)Referenced Assemblies\Microsoft.WITDataStore32.dll" "$(Ta </Target> <ProjectExtensions> <VisualStudio> - <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" /> + <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" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index 8bb33d007..cac4ee0c0 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -6,6 +6,7 @@ using Tango.Logging; using Tango.MachineStudio.Common.Authentication; using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.EventLogging; +using Tango.MachineStudio.Common.FirmwareUpgrade; using Tango.MachineStudio.Common.Html; using Tango.MachineStudio.Common.JobRunsLogging; using Tango.MachineStudio.Common.Modules; @@ -17,6 +18,7 @@ using Tango.MachineStudio.Common.Threading; using Tango.MachineStudio.Common.Video; using Tango.MachineStudio.UI.Authentication; using Tango.MachineStudio.UI.Console; +using Tango.MachineStudio.UI.FirmwareUpgrade; using Tango.MachineStudio.UI.Html; using Tango.MachineStudio.UI.Modules; using Tango.MachineStudio.UI.Navigation; @@ -70,6 +72,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Unregister<ITeamFoundationServiceClient>(); TangoIOC.Default.Unregister<IDispatcherProvider>(); TangoIOC.Default.Unregister<IJobRunsLogger>(); + TangoIOC.Default.Unregister<IFirmwareUpgrader>(); TangoIOC.Default.Register<IDispatcherProvider, DefaultDispatcherProvider>(new DefaultDispatcherProvider(Application.Current.Dispatcher)); @@ -85,6 +88,7 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register<IEventLogger, DefaultEventLogger>(); TangoIOC.Default.Register<ISpeechProvider, DefaultSpeechProvider>(); TangoIOC.Default.Register<IHtmlPresenter, DefaultHtmlPresenter>(); + TangoIOC.Default.Register<IFirmwareUpgrader, DefaultFirmwareUpgrader>(); TangoIOC.Default.Register<TeamFoundationServiceExtendedClient>(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs new file mode 100644 index 000000000..ce8b09aa4 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs @@ -0,0 +1,100 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.Commands; +using Tango.Integration.Operation; +using Tango.SharedUI; + +namespace Tango.MachineStudio.UI.ViewModels +{ + public class FirmwareUpgradeViewVM : DialogViewVM + { + private IMachineOperator _operator; + private FileStream _stream; + + private FirmwareUpgradeHandler _handler; + public FirmwareUpgradeHandler Handler + { + get { return _handler; } + set { _handler = value; RaisePropertyChangedAuto(); } + } + + private String _selectedFile; + public String SelectedFile + { + get { return _selectedFile; } + set { _selectedFile = value; RaisePropertyChangedAuto(); } + } + + private int _currentPage; + public int CurrentPage + { + get { return _currentPage; } + set { _currentPage = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand SelectCommand { get; set; } + + public RelayCommand UpgradeCommand { get; set; } + + public RelayCommand AbortCommand { get; set; } + + public FirmwareUpgradeViewVM(IMachineOperator machineOperator) : base() + { + _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() + { + OpenFileDialog dlg = new OpenFileDialog(); + dlg.Title = "Select tango firmware package file"; + dlg.Filter = "Tango Firmware Package|*.tfp"; + if (dlg.ShowDialog().Value) + { + SelectedFile = dlg.FileName; + InvalidateRelayCommands(); + } + } + + private async void StartUpgrade() + { + CurrentPage = 1; + + _stream = new FileStream(SelectedFile, FileMode.Open); + Handler = await _operator.UpgradeFirmware(_stream); + Handler.Progress += (_, e) => + { + InvokeUI(() => + { + AbortCommand.RaiseCanExecuteChanged(); + }); + }; + Handler.Completed += (_, __) => + { + _stream.Dispose(); + CurrentPage = 2; + }; + Handler.Canceled += (_, __) => + { + _stream.Dispose(); + }; + Handler.Failed += (_, __) => + { + _stream.Dispose(); + }; + + } + + private async void AbortUpgrade() + { + await Handler.Cancel(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml new file mode 100644 index 000000000..b69ad6a5b --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml @@ -0,0 +1,88 @@ +<UserControl x:Class="Tango.MachineStudio.UI.Views.FirmwareUpgradeView" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" + xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:vm="clr-namespace:Tango.MachineStudio.UI.ViewModels" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" + mc:Ignorable="d" + d:DesignHeight="300" d:DesignWidth="300" Width="800" Height="400" Background="White" d:DataContext="{d:DesignInstance Type=vm:FirmwareUpgradeViewVM, IsDesignTimeCreatable=False}"> + + <UserControl.Resources> + <converters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> + </UserControl.Resources> + + <Grid> + <Grid Margin="10"> + <Grid.RowDefinitions> + <RowDefinition Height="121"/> + <RowDefinition Height="1*"/> + </Grid.RowDefinitions> + + <Grid> + <StackPanel> + <StackPanel Orientation="Horizontal"> + <Image Source="/Images/firmware_upgrade.png" Height="100" /> + <TextBlock VerticalAlignment="Center" FontSize="30" FontWeight="SemiBold" Margin="20 0 0 0">FIRMWARE UPGRADE</TextBlock> + </StackPanel> + <Rectangle Stroke="Gainsboro" StrokeDashArray="5 5 5 5" Margin="20 10" /> + </StackPanel> + </Grid> + + <Grid Grid.Row="1"> + <controls:NavigationControl TransitionType="Zoom" SelectedIndex="{Binding CurrentPage}" TransitionDuration="00:00:0.3"> + + <Grid> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="174*"/> + <RowDefinition Height="85*"/> + </Grid.RowDefinitions> + <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> + <TextBlock TextAlignment="Center"> + <Run>The 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> + </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> + <TextBox Style="{x:Null}" VerticalContentAlignment="Center" BorderBrush="{StaticResource AccentColorBrush}" Padding="5 0" Foreground="DimGray" IsReadOnly="True" Text="{Binding SelectedFile,Mode=OneWay}"></TextBox> + </DockPanel> + </StackPanel> + + <Grid Height="60" Grid.Row="1"> + <Button Height="50" Width="200" VerticalAlignment="Top" Command="{Binding UpgradeCommand}"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Kind="Flash" Width="32" Height="32" /> + <TextBlock VerticalAlignment="Center" Margin="5 0 0 0">UPGRADE</TextBlock> + </StackPanel> + </Button> + </Grid> + </Grid> + </Grid> + + <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> + <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> + </Grid> + + <Grid> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock HorizontalAlignment="Center" FontSize="18" FontWeight="SemiBold">Firmware Upgrade Completed</TextBlock> + <materialDesign:PackIcon HorizontalAlignment="Center" Width="100" Margin="0 10 0 0" Height="100" Kind="Check" Foreground="#2DCB2D" /> + <Button Width="150" Margin="0 10 0 0" Height="35" Command="{Binding CloseCommand}">CLOSE</Button> + </StackPanel> + </Grid> + </controls:NavigationControl> + </Grid> + + </Grid> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml.cs new file mode 100644 index 000000000..17220e615 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.MachineStudio.UI.Views +{ + /// <summary> + /// Interaction logic for FirmwareUpgradeView.xaml + /// </summary> + public partial class FirmwareUpgradeView : UserControl + { + public FirmwareUpgradeView() + { + InitializeComponent(); + } + } +} |
