aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-08-16 15:59:12 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-08-16 15:59:12 +0300
commit04fd2234090e23ff2e648d997a1cc753c9354941 (patch)
tree5624cfac25a0439ad6dfaae64132fbe5b62a50a0 /Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
parent9dbb8f8eb3d07ee07cf7ce1beab72df056e157c6 (diff)
downloadTango-04fd2234090e23ff2e648d997a1cc753c9354941.tar.gz
Tango-04fd2234090e23ff2e648d997a1cc753c9354941.zip
Implemented full machine setup with connectivity and communication testing!
Fixed an issue with auto reset event on transport and logging :/
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs231
1 files changed, 207 insertions, 24 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
index a81db331c..57c2200c6 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs
@@ -8,6 +8,9 @@ using System.Threading.Tasks;
using Tango.Core;
using Tango.Core.Commands;
using Tango.Core.Helpers;
+using Tango.Integration.Operation;
+using Tango.Logging;
+using Tango.PMR.Connection;
using Tango.PPC.Common;
using Tango.PPC.Common.Application;
using Tango.PPC.Common.MachineSetup;
@@ -16,6 +19,7 @@ using Tango.PPC.UI.ViewsContracts;
using Tango.Settings;
using Tango.SharedUI.Helpers;
using Tango.SQLExaminer;
+using Tango.Transport.Adapters;
namespace Tango.PPC.UI.ViewModels
{
@@ -36,6 +40,19 @@ namespace Tango.PPC.UI.ViewModels
Failed,
}
+ public enum MachineSetupView
+ {
+ WelcomeView,
+ WiFiSelectionView,
+ WiFiTestView,
+ EmbeddedWelcomeView,
+ EmbeddedTestView,
+ SetupWelcomeView,
+ SetupProgressView,
+ SetupCompletedView,
+ SetupFailedView,
+ }
+
private MachineSetupResult _setup_result;
#region Properties
@@ -85,19 +102,46 @@ namespace Tango.PPC.UI.ViewModels
set { _state = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
}
+ private String _machineConnectionStatus;
+ public String MachineConnectionStatus
+ {
+ get { return _machineConnectionStatus; }
+ set { _machineConnectionStatus = value; RaisePropertyChangedAuto(); }
+ }
+
#endregion
#region Commands
/// <summary>
- /// Gets or sets the start command.
+ /// Gets or sets the complete command.
+ /// </summary>
+ public RelayCommand CompleteCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the navigate to WiFi command.
/// </summary>
- public RelayCommand StartCommand { get; set; }
+ public RelayCommand NavigateToWiFiCommand { get; set; }
/// <summary>
- /// Gets or sets the complete command.
+ /// Gets or sets the skip embedded test command.
/// </summary>
- public RelayCommand CompleteCommand { get; set; }
+ public RelayCommand SkipEmbeddedTestCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the perform embedded test command.
+ /// </summary>
+ public RelayCommand PerformEmbeddedTestCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the install command.
+ /// </summary>
+ public RelayCommand InstallCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the restart command.
+ /// </summary>
+ public RelayCommand RestartCommand { get; set; }
#endregion
@@ -111,16 +155,31 @@ namespace Tango.PPC.UI.ViewModels
public MachineSetupViewVM(IPPCApplicationManager applicationManager, IMachineSetupManager machineSetupManager)
{
MachineSetupManager = machineSetupManager;
- MachineSetupManager.ProgressLog += (x, msg) => AppendLog(msg);
+ //MachineSetupManager.ProgressLog += (x, msg) => AppendLog(msg);
MachineSetupManager.ProgressStep += (x, step) => AppendLog(Environment.NewLine + "-----------" + step.ToDescription().ToUpper() + "-----------" + Environment.NewLine);
HostAddress = "localhost\\SQLEXPRESS";
SerialNumber = "1111";
- StartCommand = new RelayCommand(StartSetup, () => !String.IsNullOrWhiteSpace(HostAddress) && !String.IsNullOrWhiteSpace(SerialNumber) && State == MachineSetupStates.None);
CompleteCommand = new RelayCommand(CompleteSetup, () => State == MachineSetupStates.Completed);
applicationManager.SetupRequired += ApplicationManager_SetupRequired;
+
+ NavigateToWiFiCommand = new RelayCommand(EnsureWiFi);
+
+ PerformEmbeddedTestCommand = new RelayCommand(PerformEmbeddedTest);
+ SkipEmbeddedTestCommand = new RelayCommand(SkipEmbeddedTest);
+ InstallCommand = new RelayCommand(Install);
+ RestartCommand = new RelayCommand(() => { NavigateTo(MachineSetupView.WelcomeView); });
+
+ if (!LogManager.Categories.Contains(LogCategory.Debug))
+ {
+ LogManager.Categories.Add(LogCategory.Debug);
+ }
+
+ var logger = new SimpleStringLogger();
+ LogManager.RegisterLogger(logger);
+ logger.LogReceived += Logger_LogReceived;
}
#endregion
@@ -138,6 +197,12 @@ namespace Tango.PPC.UI.ViewModels
NavigationManager.NavigateTo(NavigationView.MachineSetupView);
}
+
+ private void Logger_LogReceived(object sender, LogItemBase e)
+ {
+ AppendLog(e.Message);
+ }
+
#endregion
#region Private Methods
@@ -158,10 +223,142 @@ namespace Tango.PPC.UI.ViewModels
}
/// <summary>
- /// Starts the setup.
+ /// Completes the setup.
+ /// </summary>
+ private void CompleteSetup()
+ {
+ String updater_exe = AssemblyHelper.GetCurrentAssemblyFolder() + "\\Tango.PPC.Updater.exe";
+
+ LogManager.Log("Completing machine setup...");
+ LogManager.Log($"Executing '{updater_exe}' with arguments '{_setup_result.UpdatePackagePath}'...");
+ Process.Start(updater_exe, _setup_result.UpdatePackagePath);
+ LogManager.Log("Terminating application process!");
+ Environment.Exit(0);
+ }
+
+ /// <summary>
+ /// Navigates to the specified view.
/// </summary>
- private async void StartSetup()
+ /// <param name="view">The view.</param>
+ private Task NavigateTo(MachineSetupView view)
{
+ return View.NavigateTo(view);
+ }
+
+ #endregion
+
+ #region WiFi
+
+ private async void EnsureWiFi()
+ {
+ await NavigateTo(MachineSetupView.WiFiTestView);
+
+ await Task.Delay(2000);
+
+ bool connected = await ConnectivityProvider.CheckInternetConnection();
+
+ if (connected)
+ {
+ await NavigateTo(MachineSetupView.EmbeddedWelcomeView);
+ }
+ else
+ {
+ await NavigateTo(MachineSetupView.WiFiSelectionView);
+ await ConnectivityProvider.RefreshAvailableWiFiNetworks();
+
+ ConnectivityProvider.ConnectionStateChanged += ConnectivityProvider_ConnectionStateChanged;
+ }
+ }
+
+ private void ConnectivityProvider_ConnectionStateChanged(object sender, Common.Connectivity.ConnectionStateEventArgs e)
+ {
+ if (e.IsConnected)
+ {
+ ConnectivityProvider.ConnectionStateChanged -= ConnectivityProvider_ConnectionStateChanged;
+ EnsureWiFi();
+ }
+ }
+
+ #endregion
+
+ #region Embedded
+
+ private async void PerformEmbeddedTest()
+ {
+ await NavigateTo(MachineSetupView.EmbeddedTestView);
+
+ try
+ {
+ MachineConnectionStatus = "Scanning for the machine...";
+
+ LogManager.Log("Starting machine connection procedure...");
+
+ TimeSpan timeout = TimeSpan.FromSeconds(SettingsManager.Default.GetOrCreate<PPCSettings>().MachineScanningTimeoutSeconds);
+
+ LogManager.Log("Scanning for machine on available serial ports...");
+ Transport.Discovery.UsbCommunicationScanner<ConnectRequest, ConnectResponse> scanner = new Transport.Discovery.UsbCommunicationScanner<ConnectRequest, ConnectResponse>(UsbSerialBaudRates.BR_9600);
+
+ scanner.ScanningPort += (port) =>
+ {
+ MachineConnectionStatus = $"Scanning for the machine on {port}...";
+ };
+
+ var response = await scanner.Scan(new ConnectRequest() { Password = "1234" }, timeout);
+
+ MachineConnectionStatus = "Machine discovered on port: " + response.Adapter.Address + ", trying to connect...";
+
+ LogManager.Log("Machine discovered on port: " + response.Adapter.Address);
+ LogManager.Log("Device Information:");
+ LogManager.Log(response.Response.DeviceInformation.ToJsonString());
+
+ LogManager.Log("Disconnecting machine operator...");
+
+ IMachineOperator op = new MachineOperator(response.Adapter);
+
+ op.EnableDiagnostics = false;
+ op.EnableEmbeddedDebugging = false;
+ op.EnableEventsNotification = false;
+
+ LogManager.Log("Connecting machine operator...");
+ await op.Connect();
+
+ MachineConnectionStatus = "Test completed successfully!";
+
+ await Task.Delay(1000);
+
+ try
+ {
+ await op.Disconnect();
+ }
+ catch { }
+
+ await NavigateTo(MachineSetupView.SetupWelcomeView);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error while trying to scan and connect to the machine.");
+ MachineConnectionStatus = "Test Failed!";
+ await Task.Delay(2000);
+ await NavigateTo(MachineSetupView.EmbeddedWelcomeView);
+ }
+ }
+
+ private async void SkipEmbeddedTest()
+ {
+ if (await NotificationProvider.ShowQuestion("Are you sure you want to skip the machine communication test?"))
+ {
+
+ }
+ }
+
+ #endregion
+
+ #region Setup
+
+ private async void Install()
+ {
+ await NavigateTo(MachineSetupView.SetupProgressView);
+
LogManager.Log("Starting machine setup...");
State = MachineSetupStates.Working;
@@ -172,31 +369,17 @@ namespace Tango.PPC.UI.ViewModels
Settings.ApplicationState = ApplicationStates.SemiSetup;
Settings.Save();
State = MachineSetupStates.Completed;
-
LogManager.Log("Machine setup completed.");
+ await NavigateTo(MachineSetupView.SetupCompletedView);
}
catch (Exception ex)
{
LogManager.Log(ex, "Machine setup failed.");
State = MachineSetupStates.Failed;
- await NotificationProvider.ShowInfo(ex.Message);
+ await NavigateTo(MachineSetupView.SetupFailedView);
}
}
- /// <summary>
- /// Completes the setup.
- /// </summary>
- private void CompleteSetup()
- {
- String updater_exe = AssemblyHelper.GetCurrentAssemblyFolder() + "\\Tango.PPC.Updater.exe";
-
- LogManager.Log("Completing machine setup...");
- LogManager.Log($"Executing '{updater_exe}' with arguments '{_setup_result.UpdatePackagePath}'...");
- Process.Start(updater_exe, _setup_result.UpdatePackagePath);
- LogManager.Log("Terminating application process!");
- Environment.Exit(0);
- }
-
#endregion
}
}