diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-06 15:48:47 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-06 15:48:47 +0200 |
| commit | e47f736bca350350a55fa287093dad560da8f678 (patch) | |
| tree | e74e726fd90cb6e791ecb5872010cb6eb61a13c8 /Software/Visual_Studio/PPC/Tango.PPC.Common | |
| parent | 1eb3962e5923cbb398c5ebad505e69f4617f963f (diff) | |
| download | Tango-e47f736bca350350a55fa287093dad560da8f678.tar.gz Tango-e47f736bca350350a55fa287093dad560da8f678.zip | |
Working on PPC firmware upgrade !!!
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common')
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 |
