aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-03-22 17:38:12 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-03-22 17:38:12 +0200
commit86197cd0ec87a6cc186e90f75d848adc6dfa2285 (patch)
tree0e62585bae9e84a554bee2b6922fb059d72b9810 /Software/Visual_Studio/MachineStudio
parent3de0d44f88b713e7b018f470c7bd318a775345b7 (diff)
downloadTango-86197cd0ec87a6cc186e90f75d848adc6dfa2285.tar.gz
Tango-86197cd0ec87a6cc186e90f75d848adc6dfa2285.zip
Simulate Hardware Events using DiagnosticsFrameProvider.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/DefaultDiagnosticsFrameProvider.cs66
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Diagnostics/IDiagnosticsFrameProvider.cs11
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs40
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml8
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">