From a3aedf6ba1e0f9cc65877c88f66af6f330484086 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 15 Aug 2018 16:06:38 +0300 Subject: Working on PPC WiFi connectivity! --- .../ViewModels/MainViewVM.cs | 128 ++++++++++++++++++++- 1 file changed, 127 insertions(+), 1 deletion(-) (limited to 'Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs') diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs index 236c8b272..a0996f110 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs @@ -1,8 +1,12 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Data; using Tango.BL; using Tango.BL.Entities; using Tango.BL.Enumerations; @@ -12,7 +16,9 @@ using Tango.PPC.Common; using Tango.PPC.Common.Connection; using Tango.PPC.Common.ExternalBridge; using Tango.PPC.Common.Messages; +using Tango.PPC.MachineSettings.Models; using Tango.SharedUI.Components; +using Tango.WiFi; namespace Tango.PPC.MachineSettings.ViewModels { @@ -31,13 +37,42 @@ namespace Tango.PPC.MachineSettings.ViewModels set { _machine = value; RaisePropertyChangedAuto(); } } - private SelectedObjectCollection _selectedJobTypes; + private SelectedObjectCollection _selectedJobTypes; public SelectedObjectCollection SelectedJobTypes { get { return _selectedJobTypes; } set { _selectedJobTypes = value; RaisePropertyChangedAuto(); } } + private WiFiManager _wiFiManager; + public WiFiManager WiFiManager + { + get { return _wiFiManager; } + set { _wiFiManager = value; RaisePropertyChangedAuto(); } + } + + private bool _enableWifi; + public bool EnableWiFi + { + get { return _enableWifi; } + set { _enableWifi = value; RaisePropertyChangedAuto(); } + } + + private ObservableCollection _networks; + public ObservableCollection Networks + { + get { return _networks; } + set { _networks = value; RaisePropertyChangedAuto(); } + } + + private ICollectionView _networksView; + public ICollectionView NetworksView + { + get { return _networksView; } + set { _networksView = value; RaisePropertyChangedAuto(); } + } + + #endregion #region Commands @@ -52,12 +87,96 @@ namespace Tango.PPC.MachineSettings.ViewModels /// public RelayCommand DiscardCommand { get; set; } + public RelayCommand ConnectToWiFiCommand { get; set; } + + public RelayCommand DisconnectFromWiFiCommand { get; set; } + #endregion public MainViewVM() { + Networks = new ObservableCollection(); + NetworksView = CollectionViewSource.GetDefaultView(Networks); + NetworksView.SortDescriptions.Add(new SortDescription(nameof(AvailableNetworkVM.SignalStrength), ListSortDirection.Descending)); + SaveCommand = new RelayCommand(Save); DiscardCommand = new RelayCommand(Discard); + WiFiManager = new WiFiManager(); + + WiFiManager.AvailableWifiNetworks.CollectionChanged += AvailableWifiNetworks_CollectionChanged; + + EnableWiFi = true; + + ConnectToWiFiCommand = new RelayCommand(ConnectToWiFi); + DisconnectFromWiFiCommand = new RelayCommand(DisconnectFromWiFi); + } + + private void DisconnectFromWiFi(AvailableNetworkVM network) + { + network.Network.Disconnect(); + } + + private async void ConnectToWiFi(AvailableNetworkVM network) + { + var request = network.Network.CreateAuthenticationRequest(); + + if (!network.IsInCredentialsStage) + { + if (request.IsPasswordRequired || request.IsUserNameRequired) + { + network.IsInCredentialsStage = true; + network.IsUserNameRequired = request.IsUserNameRequired; + network.IsPasswordRequired = request.IsPasswordRequired; + return; + } + else + { + network.Connecting = true; + await network.Network.Connect(request); + } + } + else + { + network.IsInCredentialsStage = false; + + if (request.IsUserNameRequired) + { + request.UserName = network.UserName; + } + if (request.IsPasswordRequired) + { + request.Password = network.Password; + } + + network.Connecting = true; + var connected = await network.Network.Connect(request); + network.Connecting = false; + + if (connected) + { + network.Network.IsConnected = true; + } + } + } + + private void AvailableWifiNetworks_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + InvokeUI(() => + { + Networks.Where(x => !WiFiManager.AvailableWifiNetworks.ToList().Exists(y => y.Name == x.Network.Name)).ToList().ForEach(x => Networks.Remove(x)); + + foreach (var n in WiFiManager.AvailableWifiNetworks.ToList()) + { + var network = Networks.FirstOrDefault(x => x.Network.Name == n.Name); + + if (network == null) + { + network = new AvailableNetworkVM(); + network.Network = n; + Networks.Add(network); + } + } + }); } private void Discard() @@ -92,6 +211,13 @@ namespace Tango.PPC.MachineSettings.ViewModels RaisePropertyChanged(nameof(Machine)); SelectedJobTypes = new SelectedObjectCollection(Enum.GetValues(typeof(JobTypes)).Cast().ToObservableCollection(), Machine.SupportedJobTypes.ToObservableCollection()); + + + //Wifi + if (EnableWiFi) + { + WiFiManager.Enabled = true; + } } } } -- cgit v1.3.1