aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-02 16:37:25 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-02 16:37:25 +0200
commita2d959a7777bf2387d0f50dbc1ecf69f53e2253d (patch)
tree8c6367189294d96ae074f386cdb4139dfeacb84a /Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs
parentae614a63f593122cd28c644625db179f298dd640 (diff)
downloadTango-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/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs')
-rw-r--r--Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs103
1 files changed, 103 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs b/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs
new file mode 100644
index 000000000..718aa3aac
--- /dev/null
+++ b/Software/Visual_Studio/Utilities/Tango.FirmwarePackageGenerator/MainWindowVM.cs
@@ -0,0 +1,103 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Commands;
+using Tango.PMR.IO;
+using Tango.SharedUI;
+using Google.Protobuf;
+using Ionic.Zip;
+using System.Windows;
+
+namespace Tango.FirmwarePackageGenerator
+{
+ public class MainWindowVM : ViewModel
+ {
+ private ObservableCollection<VersionFileModel> _versionFiles;
+ public ObservableCollection<VersionFileModel> VersionFiles
+ {
+ get { return _versionFiles; }
+ set { _versionFiles = value; RaisePropertyChangedAuto(); }
+ }
+
+ public RelayCommand GenerateCommand { get; set; }
+
+ public MainWindowVM()
+ {
+ VersionFiles = new ObservableCollection<VersionFileModel>();
+ GenerateCommand = new RelayCommand(Generate);
+ }
+
+ private void Generate()
+ {
+ SaveFileDialog dlg = new SaveFileDialog();
+ dlg.Title = "Save Firmware Package File";
+ dlg.Filter = "Tango Firmware Package|*.tfp";
+ dlg.DefaultExt = ".tfp";
+ dlg.FileName = "firmware_package.tfp";
+ if (dlg.ShowDialog().Value)
+ {
+ try
+ {
+ VersionPackageDescriptor descriptor = new VersionPackageDescriptor();
+ foreach (var item in VersionFiles)
+ {
+ descriptor.FileDescriptors.Add(new VersionFileDescriptor()
+ {
+ Destination = item.Destination,
+ FileName = item.FileName,
+ Version = item.Version,
+ });
+ }
+
+ using (MemoryStream ms = new MemoryStream())
+ {
+ descriptor.WriteTo(ms);
+
+ using (var zip = new ZipFile())
+ {
+ zip.AddEntry("package.cfg", ms.ToArray());
+ foreach (var item in VersionFiles)
+ {
+ zip.AddFile(item.Path, "/");
+ }
+
+ zip.Save(dlg.FileName);
+ }
+ }
+
+ //Validate
+ using (ZipFile zip = ZipFile.Read(dlg.FileName))
+ {
+ var reader = zip.Entries.SingleOrDefault(x => x.FileName == "package.cfg").OpenReader();
+ var descriptor2 = VersionPackageDescriptor.Parser.ParseFrom(reader);
+ if (descriptor.ToString() != descriptor2.ToString())
+ {
+ throw new IOException("The generated package does not match the source package.");
+ }
+ }
+
+ ShowInfo("Package generated successfully.");
+ }
+ catch (Exception ex)
+ {
+ ShowError($"Error while trying to generate the package.\n{ex.Message}");
+ }
+ }
+ }
+
+ private void ShowError(String error)
+ {
+ MessageBox.Show(error, "PPC Publisher", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+
+ private void ShowInfo(String message)
+ {
+ MessageBox.Show(message, "PPC Publisher", MessageBoxButton.OK, MessageBoxImage.Information);
+ }
+ }
+}