diff options
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs | 146 |
1 files changed, 84 insertions, 62 deletions
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 09d4ed9f8..52d738220 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs @@ -18,6 +18,8 @@ using Tango.PPC.Common.Messages; using Tango.Emulations.Emulators; using Tango.Transport.Transporters; using Tango.Integration; +using Tango.Transport; +using System.Threading; namespace Tango.PPC.Common.Connection { @@ -29,6 +31,7 @@ namespace Tango.PPC.Common.Connection public class DefaultMachineProvider : ExtendedObject, IMachineProvider { private bool _isInitialized; + private Thread _connection_thread; /// <summary> /// Occurs when current <see cref="IMachineOperator" /> has changed. @@ -89,6 +92,82 @@ namespace Tango.PPC.Common.Connection MachineOperator = new MachineOperator(); MachineOperator.EnableEventsNotification = true; MachineOperator.EnableJobResume = true; + MachineOperator.UseKeepAlive = true; + } + + private async void ConnectionThreadMethod() + { + while (true) + { + if (MachineOperator.State != TransportComponentState.Connected) + { + try + { + LogManager.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.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.Log("Machine discovered on port: " + response.Adapter.Address); + LogManager.Log("Device Information:"); + LogManager.Log(response.Response.DeviceInformation.ToJsonString()); + + LogManager.Log("Disconnecting machine operator..."); + await MachineOperator.Disconnect(); + MachineOperator.Adapter = response.Adapter; + MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp; + LogManager.Log("Connecting machine operator..."); + MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator)); + await MachineOperator.Connect(); + } + else + { + LogManager.Log($"Connecting to machine on {settings.EmbeddedComPort}..."); + + UsbTransportAdapter adapter = new UsbTransportAdapter(settings.EmbeddedComPort, UsbSerialBaudRates.BR_115200); + MachineOperator.Adapter = adapter; + MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp; + MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator)); + await MachineOperator.Connect(); + } + } + else + { + LogManager.Log("Application in demo mode!"); + + LogManager.Log("Starting embedded emulator..."); + MachineEmulator emulator = new MachineEmulator(new BasicTransporter(new MemoryTransportAdapter("emulator"))); + await emulator.Start(); + + LogManager.Log("Emulator started. Connecting to emulator..."); + + MemoryTransportAdapter adapter = new MemoryTransportAdapter("emulator"); + MachineOperator.Adapter = adapter; + MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp; + LogManager.Log("Connecting machine operator..."); + MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator)); + await MachineOperator.Connect(); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error while trying to scan and connect to the machine."); + } + } + + Thread.Sleep(5000); + } } /// <summary> @@ -122,70 +201,13 @@ namespace Tango.PPC.Common.Connection /// 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"/>. /// </summary> - private async void ConnectToMachine() + private void ConnectToMachine() { - try - { - LogManager.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.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.Log("Machine discovered on port: " + response.Adapter.Address); - LogManager.Log("Device Information:"); - LogManager.Log(response.Response.DeviceInformation.ToJsonString()); - - LogManager.Log("Disconnecting machine operator..."); - await MachineOperator.Disconnect(); - MachineOperator.Adapter = response.Adapter; - MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp; - LogManager.Log("Connecting machine operator..."); - MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator)); - await MachineOperator.Connect(); - } - else - { - LogManager.Log($"Connecting to machine on {settings.EmbeddedComPort}..."); - - UsbTransportAdapter adapter = new UsbTransportAdapter(settings.EmbeddedComPort, UsbSerialBaudRates.BR_115200); - MachineOperator.Adapter = adapter; - MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp; - MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator)); - await MachineOperator.Connect(); - } - } - else - { - LogManager.Log("Application in demo mode!"); - - LogManager.Log("Starting embedded emulator..."); - MachineEmulator emulator = new MachineEmulator(new BasicTransporter(new MemoryTransportAdapter("emulator"))); - await emulator.Start(); - - LogManager.Log("Emulator started. Connecting to emulator..."); - - MemoryTransportAdapter adapter = new MemoryTransportAdapter("emulator"); - MachineOperator.Adapter = adapter; - MachineOperator.JobHandlingMode = JobHandlerModes.SettingUp; - LogManager.Log("Connecting machine operator..."); - MachineOperatorChanged?.Invoke(this, new MachineOperatorChangedEventArgs(MachineOperator, MachineOperator)); - await MachineOperator.Connect(); - } - } - catch (Exception ex) + if (_connection_thread == null) { - LogManager.Log(ex, "Error while trying to scan and connect to the machine."); + _connection_thread = new Thread(ConnectionThreadMethod); + _connection_thread.IsBackground = true; + _connection_thread.Start(); } } |
