diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-10 18:29:04 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-10 18:29:04 +0200 |
| commit | a899cdbb2c5f36d9fb5d89744b69387289765cf8 (patch) | |
| tree | 7063118161488afab380205772a634bed3ea26ef /Software/Visual_Studio/PPC/Tango.PPC.Common | |
| parent | 6240aad18f5dc54d4e29bf2d39f49ef1ba39742f (diff) | |
| download | Tango-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')
3 files changed, 93 insertions, 64 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(); } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItem.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItem.cs index 0f8354157..a9de336a1 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItem.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItem.cs @@ -21,6 +21,7 @@ namespace Tango.PPC.Common.Notifications.NotificationItems Success, Warning, Error, + Critical, } private String _message; diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml index dbd9a0eca..efb6a5447 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml @@ -25,6 +25,9 @@ <DataTrigger Binding="{Binding MessageType}" Value="Error"> <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter> </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Critical"> + <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter> + </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> @@ -41,10 +44,13 @@ <Setter Property="Icon" Value="Check"></Setter> </DataTrigger> <DataTrigger Binding="{Binding MessageType}" Value="Warning"> - <Setter Property="Icon" Value="Alert"></Setter> + <Setter Property="Icon" Value="AlertCircleOutline"></Setter> </DataTrigger> <DataTrigger Binding="{Binding MessageType}" Value="Error"> - <Setter Property="Icon" Value="AlertOctagon"></Setter> + <Setter Property="Icon" Value="AlertCircleOutline"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Critical"> + <Setter Property="Icon" Value="Alert"></Setter> </DataTrigger> </Style.Triggers> </Style> |
