diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-03-22 17:38:12 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-03-22 17:38:12 +0200 |
| commit | 86197cd0ec87a6cc186e90f75d848adc6dfa2285 (patch) | |
| tree | 0e62585bae9e84a554bee2b6922fb059d72b9810 /Software/Visual_Studio/MachineStudio | |
| parent | 3de0d44f88b713e7b018f470c7bd318a775345b7 (diff) | |
| download | Tango-86197cd0ec87a6cc186e90f75d848adc6dfa2285.tar.gz Tango-86197cd0ec87a6cc186e90f75d848adc6dfa2285.zip | |
Simulate Hardware Events using DiagnosticsFrameProvider.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
4 files changed, 106 insertions, 19 deletions
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. /// </summary> /// <seealso cref="Tango.MachineStudio.Common.Diagnostics.IDiagnosticsFrameProvider" /> - public class DefaultDiagnosticsFrameProvider : IDiagnosticsFrameProvider + public class DefaultDiagnosticsFrameProvider : ExtendedObject, IDiagnosticsFrameProvider { + private IStudioApplicationManager _application; + + /// <summary> + /// Occurs when the machine events state provider has changed. + /// </summary> + public event EventHandler<IMachineEventsStateProvider> MachineEventsStateProviderChanged; + + private bool _disable; /// <summary> /// Disables the frame delivery from the current connected machine and enables the manual push frame method. /// </summary> - 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(); + } + } + } + } /// <summary> /// Occurs when a new data frame is available. /// </summary> - public event EventHandler<PushDiagnosticsResponse> FrameReceived; + public event EventHandler<PushDiagnosticsResponse> FrameReceived; + + private IMachineEventsStateProvider _machineEventsStateProvider; + /// <summary> + /// Gets or sets the machine events state provider used to get notifications about current machine events and errors. + /// </summary> + public IMachineEventsStateProvider MachineEventsStateProvider + { + get { return _machineEventsStateProvider; } + set + { + _machineEventsStateProvider = value; + RaisePropertyChangedAuto(); + MachineEventsStateProviderChanged?.Invoke(this, _machineEventsStateProvider); + } + } /// <summary> /// Initializes a new instance of the <see cref="DefaultDiagnosticsFrameProvider"/> class. @@ -32,6 +82,8 @@ namespace Tango.MachineStudio.Common.Diagnostics /// <param name="applicationManager">The application manager.</param> 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 @@ -18,6 +19,16 @@ namespace Tango.MachineStudio.Common.Diagnostics event EventHandler<PushDiagnosticsResponse> FrameReceived; /// <summary> + /// Occurs when the machine events state provider has changed. + /// </summary> + event EventHandler<IMachineEventsStateProvider> MachineEventsStateProviderChanged; + + /// <summary> + /// Gets or sets the machine events state provider used to get notifications about current machine events and errors. + /// </summary> + IMachineEventsStateProvider MachineEventsStateProvider { get; } + + /// <summary> /// Disables the frame delivery from the current connected machine and enables the manual push frame method. /// </summary> bool Disable { get; set; } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index b3c6236f8..f54a9dae1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -17,6 +17,7 @@ using Tango.Integration.Services; using Tango.Logging; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Authentication; +using Tango.MachineStudio.Common.Diagnostics; using Tango.MachineStudio.Common.EventLogging; using Tango.MachineStudio.Common.Modules; using Tango.MachineStudio.Common.Navigation; @@ -197,6 +198,16 @@ namespace Tango.MachineStudio.UI.ViewModels set { _disableCheckForUpdates = value; RaisePropertyChangedAuto(); } } + private IDiagnosticsFrameProvider _diagnosticsFrameProvider; + /// <summary> + /// Gets or sets the diagnostics frame provider. + /// </summary> + public IDiagnosticsFrameProvider DiagnosticsFrameProvider + { + get { return _diagnosticsFrameProvider; } + set { _diagnosticsFrameProvider = value; RaisePropertyChangedAuto(); } + } + /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. @@ -214,7 +225,8 @@ namespace Tango.MachineStudio.UI.ViewModels INotificationProvider notificationProvider, IStudioApplicationManager applicationManager, INavigationManager navigationManager, - IEventLogger eventLogger) : base(view) + IEventLogger eventLogger, + IDiagnosticsFrameProvider frameProvider) : base(view) { _eventLogger = eventLogger; _navigation = navigationManager; @@ -222,6 +234,9 @@ namespace Tango.MachineStudio.UI.ViewModels StudioModuleLoader = studioModuleLoader; NotificationProvider = notificationProvider; ApplicationManager = applicationManager; + DiagnosticsFrameProvider = frameProvider; + + DiagnosticsFrameProvider.MachineEventsStateProviderChanged += FrameProvider_MachineEventsStateProviderChanged; StartModuleCommand = new RelayCommand<IStudioModule>(StartModule); @@ -236,23 +251,26 @@ namespace Tango.MachineStudio.UI.ViewModels _updateCheckThread = new Thread(UpdateCheckThreadMethod); _updateCheckThread.IsBackground = true; _updateCheckThread.Start(); + } - ApplicationManager.ConnectedMachineChanged += (sender, machine) => + private void FrameProvider_MachineEventsStateProviderChanged(object sender, Integration.Operation.IMachineEventsStateProvider provider) + { + + if (DiagnosticsFrameProvider.MachineEventsStateProvider.Events.Count == 0) { - if (machine != null) - { - machine.MachineEventsStateProvider.NewEvents -= MachineEventsStateProvider_NewEvents; - machine.MachineEventsStateProvider.NewEvents += MachineEventsStateProvider_NewEvents; + IsMachineErrorsOpened = false; + } - machine.MachineEventsStateProvider.EventsResolved -= MachineEventsStateProvider_EventsResolved; - machine.MachineEventsStateProvider.EventsResolved += MachineEventsStateProvider_EventsResolved; - } - }; + provider.NewEvents -= MachineEventsStateProvider_NewEvents; + provider.NewEvents += MachineEventsStateProvider_NewEvents; + + provider.EventsResolved -= MachineEventsStateProvider_EventsResolved; + provider.EventsResolved += MachineEventsStateProvider_EventsResolved; } private void MachineEventsStateProvider_EventsResolved(object sender, IEnumerable<MachinesEvent> e) { - if (ApplicationManager.ConnectedMachine.MachineEventsStateProvider.Events.Count == 0) + if (DiagnosticsFrameProvider.MachineEventsStateProvider.Events.Count == 0) { IsMachineErrorsOpened = false; } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml index b7a4cc93f..a85e0a850 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml @@ -227,11 +227,11 @@ </StackPanel> </Button> - <ToggleButton Visibility="{Binding ApplicationManager.ConnectedMachine.MachineEventsStateProvider.HasEvents,Converter={StaticResource BooleanToVisibilityConverter},FallbackValue=Collapsed,TargetNullValue=Collapsed,Mode=OneWay}" IsChecked="{Binding IsMachineErrorsOpened}" Style="{StaticResource emptyToggleButton}" Margin="0 0 10 0" Cursor="Hand"> + <ToggleButton Visibility="{Binding DiagnosticsFrameProvider.MachineEventsStateProvider.HasEvents,Converter={StaticResource BooleanToVisibilityConverter},FallbackValue=Collapsed,TargetNullValue=Collapsed,Mode=OneWay}" IsChecked="{Binding IsMachineErrorsOpened}" Style="{StaticResource emptyToggleButton}" Margin="0 0 10 0" Cursor="Hand"> <ToggleButton.ToolTip> <TextBlock> <Run>Press to view</Run> - <Run Text="{Binding ApplicationManager.ConnectedMachine.MachineEventsStateProvider.Events.Count,Mode=OneWay}"></Run> + <Run Text="{Binding DiagnosticsFrameProvider.MachineEventsStateProvider.Events.Count,Mode=OneWay}"></Run> <Run>hardware messages</Run> </TextBlock> </ToggleButton.ToolTip> @@ -240,7 +240,7 @@ <Style TargetType="Grid"> <Setter Property="Opacity" Value="1"></Setter> <Style.Triggers> - <DataTrigger Binding="{Binding ApplicationManager.ConnectedMachine.MachineEventsStateProvider.HasEvents}" Value="True"> + <DataTrigger Binding="{Binding DiagnosticsFrameProvider.MachineEventsStateProvider.HasEvents}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> @@ -433,7 +433,7 @@ <DropShadowEffect ShadowDepth="0" BlurRadius="10" /> </Border.Effect> - <ItemsControl ItemsSource="{Binding ApplicationManager.ConnectedMachine.MachineEventsStateProvider.Events}"> + <ItemsControl ItemsSource="{Binding DiagnosticsFrameProvider.MachineEventsStateProvider.Events}"> <ItemsControl.ItemTemplate> <DataTemplate DataType="{x:Type entities:MachinesEvent}"> <Border BorderThickness="0 0 0 1" BorderBrush="#E1E1E1" Padding="5"> |
