From 86197cd0ec87a6cc186e90f75d848adc6dfa2285 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 22 Mar 2018 17:38:12 +0200 Subject: Simulate Hardware Events using DiagnosticsFrameProvider. --- .../Diagnostics/DefaultDiagnosticsFrameProvider.cs | 66 ++++++++++++++++++++-- .../Diagnostics/IDiagnosticsFrameProvider.cs | 11 ++++ 2 files changed, 73 insertions(+), 4 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common') diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/DefaultDiagnosticsFrameProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/DefaultDiagnosticsFrameProvider.cs index 07700bdd0..8f1076bb8 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/DefaultDiagnosticsFrameProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/DefaultDiagnosticsFrameProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.Core; using Tango.Integration.Operation; using Tango.Integration.Services; using Tango.MachineStudio.Common.StudioApplication; @@ -14,17 +15,66 @@ namespace Tango.MachineStudio.Common.Diagnostics /// Represents the default diagnostics frame provider. /// /// - public class DefaultDiagnosticsFrameProvider : IDiagnosticsFrameProvider + public class DefaultDiagnosticsFrameProvider : ExtendedObject, IDiagnosticsFrameProvider { + private IStudioApplicationManager _application; + + /// + /// Occurs when the machine events state provider has changed. + /// + public event EventHandler MachineEventsStateProviderChanged; + + private bool _disable; /// /// Disables the frame delivery from the current connected machine and enables the manual push frame method. /// - public bool Disable { get; set; } + public bool Disable + { + get { return _disable; } + set + { + _disable = value; + + if (!_disable) + { + if (_application.ConnectedMachine != null) + { + MachineEventsStateProvider = _application.ConnectedMachine.MachineEventsStateProvider; + } + else + { + MachineEventsStateProvider = new DefaultMachineEventsStateProvider(); + } + } + else + { + if (_application.ConnectedMachine != null) + { + MachineEventsStateProvider = new DefaultMachineEventsStateProvider(); + } + } + } + } /// /// Occurs when a new data frame is available. /// - public event EventHandler FrameReceived; + public event EventHandler FrameReceived; + + private IMachineEventsStateProvider _machineEventsStateProvider; + /// + /// Gets or sets the machine events state provider used to get notifications about current machine events and errors. + /// + public IMachineEventsStateProvider MachineEventsStateProvider + { + get { return _machineEventsStateProvider; } + set + { + _machineEventsStateProvider = value; + RaisePropertyChangedAuto(); + MachineEventsStateProviderChanged?.Invoke(this, _machineEventsStateProvider); + } + } /// /// Initializes a new instance of the class. @@ -32,6 +82,8 @@ namespace Tango.MachineStudio.Common.Diagnostics /// The application manager. public DefaultDiagnosticsFrameProvider(IStudioApplicationManager applicationManager) { + _application = applicationManager; + MachineEventsStateProvider = new DefaultMachineEventsStateProvider(); applicationManager.ConnectedMachineChanged += ApplicationManager_ConnectedMachineChanged; } @@ -44,7 +96,12 @@ namespace Tango.MachineStudio.Common.Diagnostics { if (machine != null) { - (machine as MachineOperator).DiagnosticsDataAvailable += DefaultDiagnosticsFrameProvider_DiagnosticsDataAvailable; + machine.DiagnosticsDataAvailable += DefaultDiagnosticsFrameProvider_DiagnosticsDataAvailable; + + if (!Disable) + { + MachineEventsStateProvider = machine.MachineEventsStateProvider; + } } } @@ -70,6 +127,7 @@ namespace Tango.MachineStudio.Common.Diagnostics if (Disable) { OnFrameReceived(frame); + MachineEventsStateProvider.ApplyEvents(frame.Events); } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/IDiagnosticsFrameProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/IDiagnosticsFrameProvider.cs index 0d63b59b6..ab4780a1f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/IDiagnosticsFrameProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/IDiagnosticsFrameProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.Integration.Operation; using Tango.PMR.Diagnostics; namespace Tango.MachineStudio.Common.Diagnostics @@ -17,6 +18,16 @@ namespace Tango.MachineStudio.Common.Diagnostics /// event EventHandler FrameReceived; + /// + /// Occurs when the machine events state provider has changed. + /// + event EventHandler MachineEventsStateProviderChanged; + + /// + /// Gets or sets the machine events state provider used to get notifications about current machine events and errors. + /// + IMachineEventsStateProvider MachineEventsStateProvider { get; } + /// /// Disables the frame delivery from the current connected machine and enables the manual push frame method. /// -- cgit v1.3.1