aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-06 15:48:47 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-06 15:48:47 +0200
commite47f736bca350350a55fa287093dad560da8f678 (patch)
treee74e726fd90cb6e791ecb5872010cb6eb61a13c8 /Software/Visual_Studio/PPC/Tango.PPC.Common
parent1eb3962e5923cbb398c5ebad505e69f4617f963f (diff)
downloadTango-e47f736bca350350a55fa287093dad560da8f678.tar.gz
Tango-e47f736bca350350a55fa287093dad560da8f678.zip
Working on PPC firmware upgrade !!!
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs5
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/ApplicationStates.cs8
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs64
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/DefaultFirmwareUpgrader.cs31
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/IFirmwareUpgrader.cs23
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs1
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj4
7 files changed, 131 insertions, 5 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs
index 003229e65..a1f9f6d38 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Application/IPPCApplicationManager.cs
@@ -41,6 +41,11 @@ namespace Tango.PPC.Common.Application
event EventHandler SetupRequired;
/// <summary>
+ /// Occurs when firmware upgrade is required.
+ /// </summary>
+ event EventHandler FirmwareUpgradeRequired;
+
+ /// <summary>
/// Occurs when the application has encountered an error when initializing.
/// </summary>
event EventHandler<Exception> ApplicationInitializationError;
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/ApplicationStates.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/ApplicationStates.cs
index 7be896b0d..362b3941b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/ApplicationStates.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/ApplicationStates.cs
@@ -21,12 +21,12 @@ namespace Tango.PPC.Common
/// </summary>
SemiSetup = 1,
/// <summary>
- /// Application is ready to run as normal.
+ /// The application has been updated and should start in firmware upgrade mode.
/// </summary>
- Ready = 2,
+ FirmwareUpgrade = 2,
/// <summary>
- /// Updater utility should update the application assemblies and start the main application with startup arguments.
+ /// Application is ready to run as normal.
/// </summary>
- Updating = 3,
+ Ready = 3,
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
index 5b85aab52..8ca943b8c 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
@@ -118,6 +118,70 @@ namespace Tango.PPC.Common.Connection
}
}
+ public static async Task<IMachineOperator> CreateMinimalMachineOperator()
+ {
+ var machineOperator = new MachineOperator();
+ machineOperator.EnableDiagnostics = false;
+ machineOperator.EnableEmbeddedDebugging = false;
+ machineOperator.EnableEventsNotification = false;
+ machineOperator.EnableJobResume = false;
+
+ LogManager.Default.Log("Starting machine connection procedure...");
+
+ var settings = SettingsManager.Default.GetOrCreate<PPCSettings>();
+
+ var demo = settings.DemoMode;
+
+ if (!demo)
+ {
+ if (String.IsNullOrWhiteSpace(settings.EmbeddedComPort))
+ {
+ TimeSpan timeout = TimeSpan.FromSeconds(SettingsManager.Default.GetOrCreate<PPCSettings>().MachineScanningTimeoutSeconds);
+
+ LogManager.Default.Log("Scanning for machine on available serial ports...");
+ Transport.Discovery.UsbCommunicationScanner<ConnectRequest, ConnectResponse> scanner = new Transport.Discovery.UsbCommunicationScanner<ConnectRequest, ConnectResponse>(UsbSerialBaudRates.BR_115200);
+ var response = await scanner.Scan(new ConnectRequest() { Password = "1234" }, timeout);
+
+ LogManager.Default.Log("Machine discovered on port: " + response.Adapter.Address);
+ LogManager.Default.Log("Device Information:");
+ LogManager.Default.Log(response.Response.DeviceInformation.ToJsonString());
+
+ LogManager.Default.Log("Disconnecting machine operator...");
+ machineOperator.Adapter = response.Adapter;
+ machineOperator.JobHandlingMode = JobHandlerModes.SettingUp;
+ LogManager.Default.Log("Connecting machine operator...");
+ await machineOperator.Connect();
+ }
+ else
+ {
+ LogManager.Default.Log($"Connecting to machine on {settings.EmbeddedComPort}...");
+
+ UsbTransportAdapter adapter = new UsbTransportAdapter(settings.EmbeddedComPort, UsbSerialBaudRates.BR_115200);
+ machineOperator.Adapter = adapter;
+ machineOperator.JobHandlingMode = JobHandlerModes.SettingUp;
+ await machineOperator.Connect();
+ }
+ }
+ else
+ {
+ LogManager.Default.Log("Application in demo mode!");
+
+ LogManager.Default.Log("Starting embedded emulator...");
+ MachineEmulator emulator = new MachineEmulator(new BasicTransporter(new MemoryTransportAdapter("emulator")));
+ await emulator.Start();
+
+ LogManager.Default.Log("Emulator started. Connecting to emulator...");
+
+ MemoryTransportAdapter adapter = new MemoryTransportAdapter("emulator");
+ machineOperator.Adapter = adapter;
+ machineOperator.JobHandlingMode = JobHandlerModes.SettingUp;
+ LogManager.Default.Log("Connecting machine operator...");
+ await machineOperator.Connect();
+ }
+
+ return machineOperator;
+ }
+
/// <summary>
/// Tries to connect to the machine by scanning all available serial ports.
/// The timeout for a scan cycle is specified on <see cref="PPCSettings.MachineScanningTimeoutSeconds"/>.
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/DefaultFirmwareUpgrader.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/DefaultFirmwareUpgrader.cs
new file mode 100644
index 000000000..bc8d3d718
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/DefaultFirmwareUpgrader.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Integration.Upgrade;
+using Tango.PPC.Common.Connection;
+
+namespace Tango.PPC.Common.FirmwareUpgrade
+{
+ public class DefaultFirmwareUpgrader : IFirmwareUpgrader
+ {
+ public async Task<FirmwareUpgradeHandler> PerformUpgrade()
+ {
+ var tfpPath = Path.Combine(Core.Helpers.AssemblyHelper.GetCurrentAssemblyFolder(), "firmware_package.tfp");
+ var stream = new FileStream(tfpPath, FileMode.Open);
+ var handler = await PerformUpgrade(stream);
+ handler.Failed += (_, __) => stream.Dispose();
+ handler.Completed += (_, __) => stream.Dispose();
+ handler.Canceled += (_, __) => stream.Dispose();
+ return handler;
+ }
+
+ public async Task<FirmwareUpgradeHandler> PerformUpgrade(Stream tfpStream)
+ {
+ var op = await DefaultMachineProvider.CreateMinimalMachineOperator();
+ return await op.UpgradeFirmware(tfpStream);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/IFirmwareUpgrader.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/IFirmwareUpgrader.cs
new file mode 100644
index 000000000..64f697833
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FirmwareUpgrade/IFirmwareUpgrader.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Integration.Upgrade;
+
+namespace Tango.PPC.Common.FirmwareUpgrade
+{
+ public interface IFirmwareUpgrader
+ {
+ /// <summary>
+ /// Performs a firmware upgrade.
+ /// </summary>
+ Task<FirmwareUpgradeHandler> PerformUpgrade();
+
+ /// <summary>
+ /// Performs a firmware upgrade from the specified TFP stream .
+ /// </summary>
+ Task<FirmwareUpgradeHandler> PerformUpgrade(Stream tfpStream);
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs
index eefb298f7..3c3a6e19b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs
@@ -17,6 +17,7 @@ namespace Tango.PPC.Common.Navigation
LoginView,
MachineSetupView,
MachineUpdateView,
+ FirmwareUpgradeView,
ExternalBridgeView,
StorageView,
HomeModule,
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj
index 67e5a4548..8fe107074 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj
@@ -128,6 +128,8 @@
<Compile Include="ExtensionMethods\ObservableCollectionExtensions.cs" />
<Compile Include="ExternalBridge\IPPCExternalBridgeService.cs" />
<Compile Include="ExternalBridge\PPCExternalBridgeService.cs" />
+ <Compile Include="FirmwareUpgrade\DefaultFirmwareUpgrader.cs" />
+ <Compile Include="FirmwareUpgrade\IFirmwareUpgrader.cs" />
<Compile Include="IPPCView.cs" />
<Compile Include="MachineSetup\IMachineSetupManager.cs" />
<Compile Include="MachineSetup\MachineSetupManager.cs" />
@@ -325,7 +327,7 @@
</Target>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file