aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-10 18:29:04 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-10 18:29:04 +0200
commita899cdbb2c5f36d9fb5d89744b69387289765cf8 (patch)
tree7063118161488afab380205772a634bed3ea26ef /Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
parent6240aad18f5dc54d4e29bf2d39f49ef1ba39742f (diff)
downloadTango-a899cdbb2c5f36d9fb5d89744b69387289765cf8.tar.gz
Tango-a899cdbb2c5f36d9fb5d89744b69387289765cf8.zip
Improved Transporter keep alive and disconnection/connection procedures.
Added Disconnected machine state.
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.cs146
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();
}
}