From 998cc8d4d91a7f85389cd0918f127257576c2c13 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Mon, 13 Aug 2018 16:12:45 +0300 Subject: Logs and comments for PPC.UI ! --- .../Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs | 81 +++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs') 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 2877d52b3..a81db331c 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs @@ -19,8 +19,15 @@ using Tango.SQLExaminer; namespace Tango.PPC.UI.ViewModels { + /// + /// Represents the machine setup view ViewModel. + /// + /// public class MachineSetupViewVM : PPCViewModel { + /// + /// Represents the various machine setup view states. + /// public enum MachineSetupStates { None, @@ -31,9 +38,17 @@ namespace Tango.PPC.UI.ViewModels private MachineSetupResult _setup_result; + #region Properties + + /// + /// Gets or sets the machine setup manager. + /// public IMachineSetupManager MachineSetupManager { get; set; } private String _serialNumber; + /// + /// Gets or sets the serial number. + /// public String SerialNumber { get { return _serialNumber; } @@ -41,6 +56,9 @@ namespace Tango.PPC.UI.ViewModels } private String _hostAddress; + /// + /// Gets or sets the host address. + /// public String HostAddress { get { return _hostAddress; } @@ -48,6 +66,9 @@ namespace Tango.PPC.UI.ViewModels } private String _log; + /// + /// Gets or sets the log. + /// public String Log { get { return _log; } @@ -55,16 +76,38 @@ namespace Tango.PPC.UI.ViewModels } private MachineSetupStates _state; + /// + /// Gets or sets the state. + /// public MachineSetupStates State { get { return _state; } set { _state = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } + #endregion + + #region Commands + + /// + /// Gets or sets the start command. + /// public RelayCommand StartCommand { get; set; } + /// + /// Gets or sets the complete command. + /// public RelayCommand CompleteCommand { get; set; } + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// The application manager. + /// The machine setup manager. public MachineSetupViewVM(IPPCApplicationManager applicationManager, IMachineSetupManager machineSetupManager) { MachineSetupManager = machineSetupManager; @@ -80,11 +123,29 @@ namespace Tango.PPC.UI.ViewModels applicationManager.SetupRequired += ApplicationManager_SetupRequired; } + #endregion + + #region Event Handlers + + /// + /// Handles the SetupRequired event of the ApplicationManager. + /// + /// The source of the event. + /// The instance containing the event data. private void ApplicationManager_SetupRequired(object sender, EventArgs e) { + LogManager.Log("SetupRequired event received. Navigating to MachineSetupView..."); NavigationManager.NavigateTo(NavigationView.MachineSetupView); } + #endregion + + #region Private Methods + + /// + /// Appends the log. + /// + /// The MSG. private void AppendLog(String msg) { if (msg != null && !msg.Contains("SQL Examiner")) @@ -96,8 +157,13 @@ namespace Tango.PPC.UI.ViewModels } } + /// + /// Starts the setup. + /// private async void StartSetup() { + LogManager.Log("Starting machine setup..."); + State = MachineSetupStates.Working; try @@ -106,18 +172,31 @@ namespace Tango.PPC.UI.ViewModels Settings.ApplicationState = ApplicationStates.SemiSetup; Settings.Save(); State = MachineSetupStates.Completed; + + LogManager.Log("Machine setup completed."); } catch (Exception ex) { + LogManager.Log(ex, "Machine setup failed."); State = MachineSetupStates.Failed; await NotificationProvider.ShowInfo(ex.Message); } } + /// + /// Completes the setup. + /// private void CompleteSetup() { - Process.Start(AssemblyHelper.GetCurrentAssemblyFolder() + "\\Tango.PPC.Updater.exe", _setup_result.UpdatePackagePath); + 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 } } -- cgit v1.3.1 From 04fd2234090e23ff2e648d997a1cc753c9354941 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 16 Aug 2018 15:59:12 +0300 Subject: Implemented full machine setup with connectivity and communication testing! Fixed an issue with auto reset event on transport and logging :/ --- Software/DB/Tango.mdf | Bin 75497472 -> 75497472 bytes Software/DB/Tango_log.ldf | Bin 15400960 -> 15400960 bytes .../MachineSetup/MachineSetupManager.cs | 2 +- .../Connectivity/DefaultConnectivityProvider.cs | 1 - .../Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs | 231 ++++++++++++++++++--- .../PPC/Tango.PPC.UI/Views/MachineSetupView.xaml | 163 +++++++++++---- .../Tango.PPC.UI/Views/MachineSetupView.xaml.cs | 13 ++ .../ViewsContracts/IMachineSetupView.cs | 7 + .../Visual_Studio/Tango.BL/Entities/Machine.cs | 22 -- .../Visual_Studio/Tango.DAL.Remote/DB/MACHINE.cs | 1 - .../Tango.DAL.Remote/DB/RemoteADO.edmx | 3 - .../Tango.DAL.Remote/DB/RemoteADO.edmx.diagram | 130 ++++++------ Software/Visual_Studio/Tango.Logging/LogManager.cs | 2 +- .../Tango.Logging/SimpleStringLogger.cs | 3 +- .../Tango.SharedUI/Controls/NavigationControl.cs | 27 +++ .../Discovery/UsbCommunicationScanner.cs | 4 + .../Tango.Transport/TransporterBase.cs | 4 +- 17 files changed, 446 insertions(+), 167 deletions(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineSetupViewVM.cs') diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf index 4e4ae505a..d9efa6228 100644 Binary files a/Software/DB/Tango.mdf and b/Software/DB/Tango.mdf differ diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf index de69c2ab7..9c5c485ea 100644 Binary files a/Software/DB/Tango_log.ldf and b/Software/DB/Tango_log.ldf differ diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs index 281c68a77..5ecd170af 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs @@ -216,7 +216,7 @@ namespace Tango.PPC.Common.MachineSetup runner.Log += (x, msg) => { LogManager.Log(msg); - ProgressLog.Invoke(this, msg); + ProgressLog?.Invoke(this, msg); }; runner.ScriptExecuting += (x, item) => diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs index ec51b9a98..d338b3ff1 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Connectivity/DefaultConnectivityProvider.cs @@ -219,7 +219,6 @@ namespace Tango.PPC.UI.Connectivity { result = await network.Connect(auth); await RefreshAvailableWiFiNetworks(); - return result; } if (result) 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 /// - /// Gets or sets the start command. + /// Gets or sets the complete command. + /// + public RelayCommand CompleteCommand { get; set; } + + /// + /// Gets or sets the navigate to WiFi command. /// - public RelayCommand StartCommand { get; set; } + public RelayCommand NavigateToWiFiCommand { get; set; } /// - /// Gets or sets the complete command. + /// Gets or sets the skip embedded test command. /// - public RelayCommand CompleteCommand { get; set; } + public RelayCommand SkipEmbeddedTestCommand { get; set; } + + /// + /// Gets or sets the perform embedded test command. + /// + public RelayCommand PerformEmbeddedTestCommand { get; set; } + + /// + /// Gets or sets the install command. + /// + public RelayCommand InstallCommand { get; set; } + + /// + /// Gets or sets the restart command. + /// + 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 } /// - /// Starts the setup. + /// Completes the setup. + /// + 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); + } + + /// + /// Navigates to the specified view. /// - private async void StartSetup() + /// The view. + 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().MachineScanningTimeoutSeconds); + + LogManager.Log("Scanning for machine on available serial ports..."); + Transport.Discovery.UsbCommunicationScanner scanner = new Transport.Discovery.UsbCommunicationScanner(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); } } - /// - /// Completes the setup. - /// - 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 } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml index e67905eba..a097eeb45 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml @@ -4,17 +4,24 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:Tango.PPC.UI.ViewModels" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:global="clr-namespace:Tango.PPC.UI" xmlns:setup="clr-namespace:Tango.PPC.Common.MachineSetup;assembly=Tango.PPC.Common" + xmlns:connectivity="clr-namespace:Tango.PPC.Common.Connectivity;assembly=Tango.PPC.Common" xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch" xmlns:local="clr-namespace:Tango.PPC.UI.Views" mc:Ignorable="d" - d:DesignHeight="2000" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MachineSetupViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MachineSetupViewVM}"> + d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MachineSetupViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MachineSetupViewVM}"> - + - + + + MACHINE SETUP WIZARD + + + @@ -22,63 +29,129 @@ - - - MACHINE SETUP + + + + + + Welcome to the machine setup wizard! + In the next steps the software will gather required information, perform tests and apply an initial configuration to this machine. + + + Press 'START' to initiate the setup process. + + + START + + + + + + + We need an active internet connection in order to fetch the latest software package and machine configuration. + + + Please connect to one of the available WiFi networks. + + + + + + + + + + Checking internet connection, please wait... + + + + + + + + + It is recommended to perform a quick communication test with the machine before proceeding. Please turn on and connect the machine, then tap 'PERFORM TEST'. + - - - This machine has not been configured yet and require several steps in order to be ready. - - Enter this machine serial number, synchronization server address and tap 'INSTALL'. - + + SKIP + PERFORM TEST + + + + + + + + + + - - SERIAL NUMBER - + + + + The next step is to download the latest software package and synchronize the machine data. Enter the machine serial number, service address and press 'INSTALL'. + - MACHINE SERVICE ADDRESS - + + SERIAL NUMBER + - INSTALL + MACHINE SERVICE ADDRESS + + + INSTALL + - + - - + + + Please wait while we setting up this machine. Do not turn off this PC. - - - - - - - - - - - - + + + + + + + + + + + + + - + - + Setup completed successfully. Machine is ready! + + RESTART + - RESTART - - + + + + Setup failed, tap 'RESTART' to restart the process. + + RESTART + + + + diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs index a2c20ecc2..aee809e9c 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineSetupView.xaml.cs @@ -12,6 +12,7 @@ using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; +using Tango.PPC.UI.ViewModels; using Tango.PPC.UI.ViewsContracts; namespace Tango.PPC.UI.Views @@ -35,5 +36,17 @@ namespace Tango.PPC.UI.Views txtLog.SelectionStart = txtLog.Text.Length; txtLog.ScrollToEnd(); } + + public Task NavigateTo(MachineSetupViewVM.MachineSetupView view) + { + TaskCompletionSource source = new TaskCompletionSource(); + + navigationControl.NavigateTo(view.ToString(),() => + { + source.SetResult(new object()); + }); + + return source.Task; + } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs index c9ff93280..65b194f7b 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.PPC.Common; +using static Tango.PPC.UI.ViewModels.MachineSetupViewVM; namespace Tango.PPC.UI.ViewsContracts { @@ -18,5 +19,11 @@ namespace Tango.PPC.UI.ViewsContracts /// /// The log. void AppendLog(String log); + + /// + /// Navigates to the specified machine setup view. + /// + /// The view. + Task NavigateTo(MachineSetupView view); } } diff --git a/Software/Visual_Studio/Tango.BL/Entities/Machine.cs b/Software/Visual_Studio/Tango.BL/Entities/Machine.cs index c5d033dc4..3c9271fff 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/Machine.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/Machine.cs @@ -159,28 +159,6 @@ namespace Tango.BL.Entities } - protected Boolean _enablewifi; - - /// - /// Gets or sets the machine enable wifi. - /// - - [Column("ENABLE_WIFI")] - - public Boolean EnableWifi - { - get - { - return _enablewifi; - } - - set - { - _enablewifi = value; RaisePropertyChanged(nameof(EnableWifi)); - } - - } - protected Boolean _enableexternalbridge; /// diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE.cs index d1917e428..615012c19 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE.cs +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/MACHINE.cs @@ -32,7 +32,6 @@ namespace Tango.DAL.Remote.DB public string ORGANIZATION_GUID { get; set; } public string MACHINE_VERSION_GUID { get; set; } public string CONFIGURATION_GUID { get; set; } - public bool ENABLE_WIFI { get; set; } public bool ENABLE_EXTERNAL_BRIDGE { get; set; } public string EXTERNAL_BRIDGE_PASSWORD { get; set; } public string DEFAULT_RML_GUID { get; set; } diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx index ea08f9446..8809518b5 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx @@ -684,7 +684,6 @@ - @@ -3736,7 +3735,6 @@ - @@ -5970,7 +5968,6 @@ - diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram index 406d3e7fb..cc0d83531 100644 --- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram +++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram @@ -5,80 +5,80 @@ - - - - - + + + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/Software/Visual_Studio/Tango.Logging/LogManager.cs b/Software/Visual_Studio/Tango.Logging/LogManager.cs index 91f6423d0..2d99c4fac 100644 --- a/Software/Visual_Studio/Tango.Logging/LogManager.cs +++ b/Software/Visual_Studio/Tango.Logging/LogManager.cs @@ -259,7 +259,7 @@ namespace Tango.Logging { while (_isStarted) { - if (_logs.Count > 0) + while (_logs.Count > 0) { LogItemBase log; diff --git a/Software/Visual_Studio/Tango.Logging/SimpleStringLogger.cs b/Software/Visual_Studio/Tango.Logging/SimpleStringLogger.cs index 1b0780e58..4f22dcf6c 100644 --- a/Software/Visual_Studio/Tango.Logging/SimpleStringLogger.cs +++ b/Software/Visual_Studio/Tango.Logging/SimpleStringLogger.cs @@ -28,10 +28,9 @@ namespace Tango.Logging Enabled = true; } - public SimpleStringLogger(params LogCategory[] categories) + public SimpleStringLogger(params LogCategory[] categories) : this() { Categories = categories.ToList(); - Enabled = true; } public void OnLog(LogItemBase log) diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs index 2b59bb663..c8b6d3afb 100644 --- a/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs +++ b/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs @@ -17,6 +17,8 @@ namespace Tango.SharedUI.Controls [ContentProperty(nameof(Elements))] public class NavigationControl : UserControl { + private Action _onCompleted; + #region Transition Types public enum TransitionTypes @@ -218,6 +220,22 @@ namespace Tango.SharedUI.Controls DependencyProperty.Register("KeepElementsAttached", typeof(bool), typeof(NavigationControl), new PropertyMetadata(false)); + + public int SelectedIndex + { + get { return (int)GetValue(SelectedIndexProperty); } + set { SetValue(SelectedIndexProperty, value); } + } + + // Using a DependencyProperty as the backing store for SelectedIndex. This enables animation, styling, binding, etc... + public static readonly DependencyProperty SelectedIndexProperty = + DependencyProperty.Register("SelectedIndex", typeof(int), typeof(NavigationControl), new PropertyMetadata(0, (d, e) => (d as NavigationControl).OnSelectedIndexChanged())); + + private void OnSelectedIndexChanged() + { + SelectedElement = Elements[SelectedIndex > Elements.Count - 1 ? 0 : SelectedIndex]; + } + #endregion #region Attached Properties @@ -373,6 +391,8 @@ namespace Tango.SharedUI.Controls if (fromVM != null && fromVM != toVM) fromVM.OnNavigatedFrom(); if (toVM != null) toVM.OnNavigatedTo(); + + _onCompleted?.Invoke(); }; switch (TransitionType) @@ -478,6 +498,13 @@ namespace Tango.SharedUI.Controls public FrameworkElement NavigateTo(String navigationName) { + return NavigateTo(navigationName, null); + } + + public FrameworkElement NavigateTo(String navigationName, Action onCompleted = null) + { + _onCompleted = onCompleted; + var element = Elements.SingleOrDefault(x => GetNavigationName(x) == navigationName || x.GetType().Name == navigationName); if (element != null) diff --git a/Software/Visual_Studio/Tango.Transport/Discovery/UsbCommunicationScanner.cs b/Software/Visual_Studio/Tango.Transport/Discovery/UsbCommunicationScanner.cs index 1284490da..aec553191 100644 --- a/Software/Visual_Studio/Tango.Transport/Discovery/UsbCommunicationScanner.cs +++ b/Software/Visual_Studio/Tango.Transport/Discovery/UsbCommunicationScanner.cs @@ -31,6 +31,8 @@ namespace Tango.Transport.Discovery /// public class UsbCommunicationScanner : ICommunicationScanner where TRequest : IMessage where TResponse : IMessage { + public event Action ScanningPort; + /// /// Gets the baud rate. /// @@ -80,6 +82,8 @@ namespace Tango.Transport.Discovery logManager.Log("Scanning " + port.ToString() + "..."); + ScanningPort?.Invoke(port.Port); + SafeFileHandle hFile = UsbComPortWin32.CreateFile(@"\\.\" + port.Port, -1073741824, 0, IntPtr.Zero, 3, UsbComPortWin32.dwFlagsAndAttributes, IntPtr.Zero); if (hFile.IsInvalid) { diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs index c67489007..6376a43ce 100644 --- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs +++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs @@ -822,7 +822,7 @@ namespace Tango.Transport { while (State == TransportComponentState.Connected) { - if (Adapter != null && _sendingQueue.Count > 0) + while (Adapter != null && _sendingQueue.Count > 0) { TransportMessageBase message; if (_sendingQueue.TryDequeue(out message)) @@ -901,7 +901,7 @@ namespace Tango.Transport { byte[] data; - if (Adapter != null && _arrivedResponses.Count > 0) + while (Adapter != null && _arrivedResponses.Count > 0) { if (_arrivedResponses.TryDequeue(out data)) { -- cgit v1.3.1