aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2025-08-21 16:49:02 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2025-08-21 16:49:02 +0300
commit3d8c362cd5409246c7026ea956ce10d51ed9ebc3 (patch)
treed5ab6ab53d4b461df12c8b9d1edeb654e0cb48de /Software/Visual_Studio
parentcc556a1c4a0813a548bf95d693c4e2748f895e13 (diff)
downloadTango-3d8c362cd5409246c7026ea956ce10d51ed9ebc3.tar.gz
Tango-3d8c362cd5409246c7026ea956ce10d51ed9ebc3.zip
Telemetry Wires.
Implemented Firmware User Notifications. Added Missing UI Settings Units Display. Add Machine Name to General Information Dialog.
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml8
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml55
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml.cs28
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationViewVM.cs22
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/GeneralInformationView.xaml15
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj10
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs60
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest2
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs10
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs52
-rw-r--r--Software/Visual_Studio/Tango.PMR/Common/MessageType.cs59
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs73
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/TelemetryWire.cs187
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/NotificationType.cs50
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationRequest.cs131
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationResponse.cs246
-rw-r--r--Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj4
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs3
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs13
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Telemetry.Tester.IOT.CLI/Program.cs43
21 files changed, 978 insertions, 95 deletions
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml
index f92b92b5e..707219398 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml
@@ -165,14 +165,14 @@
<TextBlock VerticalAlignment="Bottom">Spool Type</TextBlock>
<touch:TouchComboBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" ItemsSource="{Binding SpoolTypes}" SelectedItem="{Binding SelectedSpoolType}" DisplayMemberPath="Name"></touch:TouchComboBox>
- <TextBlock VerticalAlignment="Bottom">Default Segment Length</TextBlock>
+ <TextBlock VerticalAlignment="Bottom">Default Segment Length (m)</TextBlock>
<touch:TouchNumericTextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" Minimum="1" Maximum="1000" Value="{Binding Settings.DefaultSegmentLength}" HasDecimalPoint="True" KeyboardContainer="{Binding ElementName=Container}"></touch:TouchNumericTextBox>
<TextBlock VerticalAlignment="Bottom">Default Color Space</TextBlock>
<touch:TouchComboBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" ItemsSource="{Binding TabsColorSpaces}" SelectedItem="{Binding DefaultTabColorSpace}" DisplayMemberPath="FinalName"></touch:TouchComboBox>
- <TextBlock VerticalAlignment="Bottom">Vector Fine Tuning Job Length</TextBlock>
+ <TextBlock VerticalAlignment="Bottom">Vector Fine Tuning Job Length (m)</TextBlock>
<touch:TouchNumericTextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" Minimum="100" Maximum="500" Value="{Binding FineTuningLength}" HasDecimalPoint="False" KeyboardContainer="{Binding ElementName=Container}"></touch:TouchNumericTextBox>
<TextBlock VerticalAlignment="Bottom">Use Light Inks When Possible</TextBlock>
@@ -187,13 +187,13 @@
<TextBlock VerticalAlignment="Bottom">Enable Machine Buzzer</TextBlock>
<touch:TouchToggleSlider Style="{StaticResource TangoToggleButtonGrayAccent}" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="90" IsChecked="{Binding Settings.EnableBuzzer}" KeyboardNavigation.TabNavigation ="None" IsTabStop="False"></touch:TouchToggleSlider>
- <TextBlock VerticalAlignment="Bottom">Machine Buzzer Duration</TextBlock>
+ <TextBlock VerticalAlignment="Bottom">Machine Buzzer Duration (s)</TextBlock>
<touch:TouchNumericTextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" Minimum="10" Maximum="180" Value="{Binding Settings.BuzzerDuration}" HasDecimalPoint="False" KeyboardContainer="{Binding ElementName=Container}"></touch:TouchNumericTextBox>
<TextBlock VerticalAlignment="Bottom">Enable White Thread Trimming Feature</TextBlock>
<touch:TouchToggleSlider Style="{StaticResource TangoToggleButtonGrayAccent}" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="90" IsChecked="{Binding Settings.EnableWhiteThreadSkip}" KeyboardNavigation.TabNavigation ="None" IsTabStop="False"></touch:TouchToggleSlider>
- <TextBlock VerticalAlignment="Bottom">Production Data Graph Start Time</TextBlock>
+ <TextBlock VerticalAlignment="Bottom">Production Data Graph Start Time (h)</TextBlock>
<touch:TouchNumericTextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" Minimum="0" Maximum="12" Value="{Binding Settings.ProductionDataStartTimeHours}" HasDecimalPoint="False" KeyboardContainer="{Binding ElementName=Container}"></touch:TouchNumericTextBox>
</controls:TableGrid>
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 a246e3bfc..695d71b4b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs
@@ -106,6 +106,8 @@ namespace Tango.PPC.Common.Connection
MachineOperator.EnableMachineStatusUpdates = true;
MachineOperator.EnableDiagnostics = true;
MachineOperator.EnablePowerUpSequence = true;
+ MachineOperator.EnableNotifications = true;
+ MachineOperator.EnableTelemetryWire = true;
MachineOperator.EnableEmbeddedDebugging = settings.EnableEmbeddedDebugLogs;
MachineOperator.EnableAutomaticThreadLoading = settings.EnableAutomaticThreadLoading;
MachineOperator.JobRunsLogger.JobSource = BL.Enumerations.JobSource.Local;
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml
new file mode 100644
index 000000000..6951ce0ad
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml
@@ -0,0 +1,55 @@
+<UserControl x:Class="Tango.PPC.UI.Dialogs.FirmwareNotificationView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch"
+ xmlns:local="clr-namespace:Tango.PPC.UI.Dialogs"
+ mc:Ignorable="d"
+ Background="{StaticResource TangoPrimaryBackgroundBrush}" d:DesignHeight="555" d:DesignWidth="560" Width="570" Height="600" d:DataContext="{d:DesignInstance Type=local:FirmwareNotificationViewVM, IsDesignTimeCreatable=False}">
+ <Grid Margin="20">
+ <DockPanel>
+ <Grid DockPanel.Dock="Bottom">
+ <touch:TouchButton HorizontalAlignment="Right" CornerRadius="25" Command="{Binding CloseCommand}" Style="{StaticResource TangoHollowButton}" Width="150" Height="50" VerticalAlignment="Bottom">CLOSE</touch:TouchButton>
+ </Grid>
+ <StackPanel DockPanel.Dock="Top">
+ <touch:TouchIcon DockPanel.Dock="Left" MaxHeight="100">
+ <touch:TouchIcon.Style>
+ <Style TargetType="touch:TouchIcon">
+ <Setter Property="Icon" Value="Information"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Type}" Value="NotifyInfo">
+ <Setter Property="Icon" Value="Information"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource TangoDarkForegroundBrush}"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Type}" Value="NotifySuccess">
+ <Setter Property="Icon" Value="Check"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource TangoSuccessBrush}"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Type}" Value="NotifyWarning">
+ <Setter Property="Icon" Value="AlertCircleOutline"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource TangoWarningBrush}"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Type}" Value="NotifyError">
+ <Setter Property="Icon" Value="AlertCircleOutline"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Type}" Value="NotifyCritical">
+ <Setter Property="Icon" Value="Alert"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </touch:TouchIcon.Style>
+ </touch:TouchIcon>
+ <TextBlock HorizontalAlignment="Center" Margin="0 20 0 0" FontSize="{StaticResource TangoHeaderFontSize}" Text="{Binding Title}"></TextBlock>
+ <TextBlock Margin="20 10" HorizontalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center" Text="{Binding Message}">
+
+ </TextBlock>
+ </StackPanel>
+ <Grid>
+
+ </Grid>
+ </DockPanel>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml.cs
new file mode 100644
index 000000000..ba264c8a4
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.PPC.UI.Dialogs
+{
+ /// <summary>
+ /// Interaction logic for SpoolReplaceView.xaml
+ /// </summary>
+ public partial class FirmwareNotificationView : UserControl
+ {
+ public FirmwareNotificationView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationViewVM.cs
new file mode 100644
index 000000000..dd3989566
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationViewVM.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PMR.MachineStatus;
+using Tango.SharedUI;
+
+namespace Tango.PPC.UI.Dialogs
+{
+ public class FirmwareNotificationViewVM : DialogViewVM
+ {
+ public NotificationType Type { get; set; }
+ public String Title { get; set; }
+ public String Message { get; set; }
+
+ public FirmwareNotificationViewVM()
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/GeneralInformationView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/GeneralInformationView.xaml
index 85d905841..c7b7e2952 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/GeneralInformationView.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/GeneralInformationView.xaml
@@ -55,6 +55,21 @@
</Paragraph>
</TableCell>
</TableRow>
+
+ <TableRow>
+ <TableCell>
+ <Paragraph>
+ <TextBlock>Machine Name:</TextBlock>
+ </Paragraph>
+ </TableCell>
+
+ <TableCell>
+ <Paragraph>
+ <TextBlock Text="{Binding MachineProvider.Machine.Name,Mode=OneWay,IsAsync=True,FallbackValue='N/A'}"/>
+ </Paragraph>
+ </TableCell>
+ </TableRow>
+
<TableRow>
<TableCell>
<Paragraph>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj
index f0a513cb5..31c46b296 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj
@@ -225,6 +225,10 @@
<DependentUpon>JerricanReplaceView.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\JerricanReplaceViewVM.cs" />
+ <Compile Include="Dialogs\FirmwareNotificationView.xaml.cs">
+ <DependentUpon>FirmwareNotificationView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Dialogs\FirmwareNotificationViewVM.cs" />
<Compile Include="Dialogs\WasteReplacementViewVM.cs" />
<Compile Include="Dialogs\WasteReplacementView.xaml.cs">
<DependentUpon>WasteReplacementView.xaml</DependentUpon>
@@ -405,6 +409,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
+ <Page Include="Dialogs\FirmwareNotificationView.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
<Page Include="Dialogs\WasteReplacementView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -1035,7 +1043,7 @@ if $(ConfigurationName) == X1 copy /Y "$(ProjectDir)Intro.wmv" "$(TargetDir)"
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
<Import Project="..\..\packages\WPFMediaKit.2.2.0\build\WPFMediaKit.targets" Condition="Exists('..\..\packages\WPFMediaKit.2.2.0\build\WPFMediaKit.targets')" />
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs
index 67b007371..33e5239b0 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs
@@ -25,6 +25,7 @@ using Tango.PPC.UI.AppBarItems;
using Tango.PPC.Common.Notifications.NotificationItems;
using Tango.Core.Commands;
using System.Timers;
+using Tango.PMR.MachineStatus;
namespace Tango.PPC.UI.ViewModels
{
@@ -104,16 +105,18 @@ namespace Tango.PPC.UI.ViewModels
_screenSaverTimer.Elapsed += _screenSaverTimer_Elapsed;
_screenSaverTimer.Start();
+
+ MachineProvider.MachineOperator.NotificationAvailable += MachineOperator_NotificationAvailable;
}
#region Waste Replacement
private void MachineOperator_WasteReplacementRequired(object sender, EventArgs e)
{
- InvokeUI(async () =>
+ InvokeUI(async () =>
{
var vm = await NotificationProvider.ShowDialog<WasteReplacementViewVM>();
-
+
if (MachineProvider.IsConnected)
{
try
@@ -298,7 +301,7 @@ namespace Tango.PPC.UI.ViewModels
private void MachineOperator_ThreadLoadingConfirmationRequired(object sender, ThreadLoadingConfirmationRequiredEventArgs e)
{
-// DisplayThreadLoading(e);
+ // DisplayThreadLoading(e);
}
#endregion
@@ -340,7 +343,56 @@ namespace Tango.PPC.UI.ViewModels
IsScreenSaverOn = true;
}
}
-
+
+ #endregion
+
+ #region Firmware Notifications
+
+ private void MachineOperator_NotificationAvailable(object sender, PMR.MachineStatus.StartNotificationResponse e)
+ {
+ InvokeUI(async () =>
+ {
+ if (!e.IsBlocking)
+ {
+ NotificationProvider.PushNotification(new MessageNotificationItem()
+ {
+ CanClose = true,
+ MessageType = ConvertNotificationToMessageType(e.Type),
+ Message = e.Title,
+ ExpandedMessage = e.Message
+ });
+ }
+ else
+ {
+ await NotificationProvider.ShowDialog<FirmwareNotificationViewVM>(new FirmwareNotificationViewVM()
+ {
+ Type = e.Type,
+ Title = e.Title,
+ Message = e.Message
+ });
+ }
+ });
+ }
+
+ private MessageNotificationItem.MessageNotificationItemTypes ConvertNotificationToMessageType(NotificationType type)
+ {
+ switch (type)
+ {
+ case NotificationType.NotifyInfo:
+ return MessageNotificationItem.MessageNotificationItemTypes.Info;
+ case NotificationType.NotifyWarning:
+ return MessageNotificationItem.MessageNotificationItemTypes.Warning;
+ case NotificationType.NotifyError:
+ return MessageNotificationItem.MessageNotificationItemTypes.Error;
+ case NotificationType.NotifyCritical:
+ return MessageNotificationItem.MessageNotificationItemTypes.Critical;
+ case NotificationType.NotifySuccess:
+ return MessageNotificationItem.MessageNotificationItemTypes.Success;
+ default:
+ return MessageNotificationItem.MessageNotificationItemTypes.Info;
+ }
+ }
+
#endregion
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
index d72e75011..efc5f8179 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
- <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
+ <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
</requestedPrivileges>
</security>
</trustInfo>
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
index 0f9f3b008..0a46e0eb4 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
@@ -273,6 +273,11 @@ namespace Tango.Integration.Operation
event EventHandler<StartTelemetryWireResponse> TelemetryWireAvailable;
/// <summary>
+ /// Occurs when a new user notification is available.
+ /// </summary>
+ event EventHandler<StartNotificationResponse> NotificationAvailable;
+
+ /// <summary>
/// Occurs when waste replacement is required.
/// </summary>
event EventHandler WasteReplacementRequired;
@@ -323,6 +328,11 @@ namespace Tango.Integration.Operation
bool EnableTelemetryWire { get; set; }
/// <summary>
+ /// Gets or set a value indicating whether to enable user notifications from the firmware.
+ /// </summary>
+ bool EnableNotifications { get; set; }
+
+ /// <summary>
/// Gets the last process parameters table sent to the embedded device.
/// </summary>
ProcessParametersTable CurrentProcessParameters { get; }
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
index eb994afc6..1da752d23 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
@@ -76,6 +76,7 @@ namespace Tango.Integration.Operation
private bool _machineStatusSent;
private bool _inkFillingStatusSent;
private bool _telemetryWireSent;
+ private bool _notificationsSent;
private bool _threadLoadingSent;
private bool _isPowerDownRequestInProgress;
private bool _isHeadCleaningInProgress;
@@ -357,6 +358,7 @@ namespace Tango.Integration.Operation
public event EventHandler WasteReplacementRequired;
public event EventHandler<StartTelemetryWireResponse> TelemetryWireAvailable;
+ public event EventHandler<StartNotificationResponse> NotificationAvailable;
#endregion
@@ -673,6 +675,20 @@ namespace Tango.Integration.Operation
}
}
+ private bool _enableNotifications;
+ public bool EnableNotifications
+ {
+ get { return _enableNotifications; }
+ set
+ {
+ if (_enableNotifications != value)
+ {
+ _enableNotifications = value;
+ RaisePropertyChangedAuto();
+ OnEnableNotificationsChanged(value);
+ }
+ }
+ }
/// <summary>
/// Gets or sets the machine events state provider used to get notifications about current machine events and errors.
@@ -734,6 +750,7 @@ namespace Tango.Integration.Operation
/// </summary>
public MachineTypes MachineType { get; set; }
+
#endregion
#region Virtual Methods
@@ -824,6 +841,33 @@ namespace Tango.Integration.Operation
}
}
+ private void OnEnableNotificationsChanged(bool value)
+ {
+ if (value && State == TransportComponentState.Connected && !_notificationsSent)
+ {
+ var request = new StartNotificationRequest();
+
+ _notificationsSent = true;
+
+ LogManager.Log($"Sending '{nameof(StartNotificationRequest)}'...");
+
+ SendContinuousRequest<StartNotificationRequest, StartNotificationResponse>(request, new TransportContinuousRequestConfig() { ShouldLog = false }).ObserveOn(new NewThreadScheduler()).Subscribe(
+ (response) =>
+ {
+ OnNotificationAvailable(response);
+ },
+ (ex) =>
+ {
+ _notificationsSent = false;
+ },
+ () =>
+ {
+ _notificationsSent = false;
+ LogManager.Log("Notifications response completed!?", LogCategory.Warning);
+ });
+ }
+ }
+
/// <summary>
/// Called when the enable events property has been changed.
/// </summary>
@@ -1079,6 +1123,11 @@ namespace Tango.Integration.Operation
TelemetryWireAvailable?.Invoke(this, response);
}
+ private void OnNotificationAvailable(StartNotificationResponse response)
+ {
+ NotificationAvailable?.Invoke(this, response);
+ }
+
/// <summary>
/// Called when events notification message has been received.
/// </summary>
@@ -1543,6 +1592,7 @@ namespace Tango.Integration.Operation
_eventsSent = false;
_machineStatusSent = false;
_telemetryWireSent = false;
+ _notificationsSent = false;
//MachineStatus = null;
@@ -1646,6 +1696,7 @@ namespace Tango.Integration.Operation
_debugSent = false;
_machineStatusSent = false;
_telemetryWireSent = false;
+ _notificationsSent = false;
_bitResults = null;
@@ -1656,6 +1707,7 @@ namespace Tango.Integration.Operation
OnEnableAutomaticThreadLoadingChanged(EnableAutomaticThreadLoading);
OnEnableInkFillingStatus(EnableInkFillingStatus);
OnEnableTelemetryWireChanged(EnableTelemetryWire);
+ OnEnableNotificationsChanged(EnableNotifications);
if (EnablePowerUpSequence)
{
diff --git a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
index 981ffe4f4..b056b402d 100644
--- a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
@@ -22,7 +22,7 @@ namespace Tango.PMR.Common {
static MessageTypeReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbirjRQoLTWVz",
+ "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbiqiRgoLTWVz",
"c2FnZVR5cGUSCAoETm9uZRAAEhEKDUVycm9yUmVzcG9uc2UQARIUChBDYWxj",
"dWxhdGVSZXF1ZXN0EAMSFQoRQ2FsY3VsYXRlUmVzcG9uc2UQBBITCg9Qcm9n",
"cmVzc1JlcXVlc3QQBRIUChBQcm9ncmVzc1Jlc3BvbnNlEAYSHAoYU3R1YkNh",
@@ -196,33 +196,34 @@ namespace Tango.PMR.Common {
"b3duVGltZVJlcXVlc3QQsEYSHQoYU2V0UG93ZXJEb3duVGltZVJlc3BvbnNl",
"ELFGEh0KGFNldEJ1enplclNldHRpbmdzUmVxdWVzdBCyRhIeChlTZXRCdXp6",
"ZXJTZXR0aW5nc1Jlc3BvbnNlELNGEh4KGVNldFdoaXRlVGhyZWFkU2tpcFJl",
- "cXVlc3QQtEYSHwoaU2V0V2hpdGVUaHJlYWRTa2lwUmVzcG9uc2UQtUYSGgoV",
- "U3RhcnRQb3dlckRvd25SZXF1ZXN0EJBOEhsKFlN0YXJ0UG93ZXJEb3duUmVz",
- "cG9uc2UQkU4SGgoVQWJvcnRQb3dlckRvd25SZXF1ZXN0EJJOEhsKFkFib3J0",
- "UG93ZXJEb3duUmVzcG9uc2UQk04SGAoTU3RhcnRQb3dlclVwUmVxdWVzdBCU",
- "ThIZChRTdGFydFBvd2VyVXBSZXNwb25zZRCVThIYChNBYm9ydFBvd2VyVXBS",
- "ZXF1ZXN0EJZOEhkKFEFib3J0UG93ZXJVcFJlc3BvbnNlEJdOEhMKDlN0YW5k",
- "QnlSZXF1ZXN0EJhOEhQKD1N0YW5kQnlSZXNwb25zZRCZThIeChlTdGFydFRo",
- "cmVhZExvYWRpbmdSZXF1ZXN0EPhVEh8KGlN0YXJ0VGhyZWFkTG9hZGluZ1Jl",
- "c3BvbnNlEPlVEiEKHENvbnRpbnVlVGhyZWFkTG9hZGluZ1JlcXVlc3QQ+lUS",
- "IgodQ29udGludWVUaHJlYWRMb2FkaW5nUmVzcG9uc2UQ+1USHQoYU3RvcFRo",
- "cmVhZExvYWRpbmdSZXF1ZXN0EPxVEh4KGVN0b3BUaHJlYWRMb2FkaW5nUmVz",
- "cG9uc2UQ/VUSHAoXVHJ5VGhyZWFkTG9hZGluZ1JlcXVlc3QQ/lUSHQoYVHJ5",
- "VGhyZWFkTG9hZGluZ1Jlc3BvbnNlEP9VEiAKG0F0dGVtcHRUaHJlYWRKb2dn",
- "aW5nUmVxdWVzdBCAVhIhChxBdHRlbXB0VGhyZWFkSm9nZ2luZ1Jlc3BvbnNl",
- "EIFWEh4KGUFib3J0VGhyZWFkTG9hZGluZ1JlcXVlc3QQglYSHwoaQWJvcnRU",
- "aHJlYWRMb2FkaW5nUmVzcG9uc2UQg1YSIQocU3RhcnRJbmtGaWxsaW5nU3Rh",
- "dHVzUmVxdWVzdBDgXRIiCh1TdGFydElua0ZpbGxpbmdTdGF0dXNSZXNwb25z",
- "ZRDhXRIeChlJbml0aWF0ZUlua0ZpbGxpbmdSZXF1ZXN0EOJdEh8KGkluaXRp",
- "YXRlSW5rRmlsbGluZ1Jlc3BvbnNlEONdEhgKE1dhc3RlUmVwbGFjZVJlcXVl",
- "c3QQ5F0SGQoUV2FzdGVSZXBsYWNlUmVzcG9uc2UQ5V0SHAoXU2V0SmVycmlj",
- "YW5MZXZlbFJlcXVlc3QQ5l0SHQoYU2V0SmVycmljYW5MZXZlbFJlc3BvbnNl",
- "EOddEhwKF1B1dERhdGFTdG9yZUl0ZW1SZXF1ZXN0EMhlEh0KGFB1dERhdGFT",
- "dG9yZUl0ZW1SZXNwb25zZRDJZRIcChdHZXREYXRhU3RvcmVJdGVtUmVxdWVz",
- "dBDKZRIdChhHZXREYXRhU3RvcmVJdGVtUmVzcG9uc2UQy2USIQocRGF0YVN0",
- "b3JlSXRlbU1vZGlmaWVkUmVxdWVzdBDMZRIiCh1EYXRhU3RvcmVJdGVtTW9k",
- "aWZpZWRSZXNwb25zZRDNZUIcChpjb20udHdpbmUudGFuZ28ucG1yLmNvbW1v",
- "bmIGcHJvdG8z"));
+ "cXVlc3QQtEYSHwoaU2V0V2hpdGVUaHJlYWRTa2lwUmVzcG9uc2UQtUYSHQoY",
+ "U3RhcnROb3RpZmljYXRpb25SZXF1ZXN0ELZGEh4KGVN0YXJ0Tm90aWZpY2F0",
+ "aW9uUmVzcG9uc2UQt0YSGgoVU3RhcnRQb3dlckRvd25SZXF1ZXN0EJBOEhsK",
+ "FlN0YXJ0UG93ZXJEb3duUmVzcG9uc2UQkU4SGgoVQWJvcnRQb3dlckRvd25S",
+ "ZXF1ZXN0EJJOEhsKFkFib3J0UG93ZXJEb3duUmVzcG9uc2UQk04SGAoTU3Rh",
+ "cnRQb3dlclVwUmVxdWVzdBCUThIZChRTdGFydFBvd2VyVXBSZXNwb25zZRCV",
+ "ThIYChNBYm9ydFBvd2VyVXBSZXF1ZXN0EJZOEhkKFEFib3J0UG93ZXJVcFJl",
+ "c3BvbnNlEJdOEhMKDlN0YW5kQnlSZXF1ZXN0EJhOEhQKD1N0YW5kQnlSZXNw",
+ "b25zZRCZThIeChlTdGFydFRocmVhZExvYWRpbmdSZXF1ZXN0EPhVEh8KGlN0",
+ "YXJ0VGhyZWFkTG9hZGluZ1Jlc3BvbnNlEPlVEiEKHENvbnRpbnVlVGhyZWFk",
+ "TG9hZGluZ1JlcXVlc3QQ+lUSIgodQ29udGludWVUaHJlYWRMb2FkaW5nUmVz",
+ "cG9uc2UQ+1USHQoYU3RvcFRocmVhZExvYWRpbmdSZXF1ZXN0EPxVEh4KGVN0",
+ "b3BUaHJlYWRMb2FkaW5nUmVzcG9uc2UQ/VUSHAoXVHJ5VGhyZWFkTG9hZGlu",
+ "Z1JlcXVlc3QQ/lUSHQoYVHJ5VGhyZWFkTG9hZGluZ1Jlc3BvbnNlEP9VEiAK",
+ "G0F0dGVtcHRUaHJlYWRKb2dnaW5nUmVxdWVzdBCAVhIhChxBdHRlbXB0VGhy",
+ "ZWFkSm9nZ2luZ1Jlc3BvbnNlEIFWEh4KGUFib3J0VGhyZWFkTG9hZGluZ1Jl",
+ "cXVlc3QQglYSHwoaQWJvcnRUaHJlYWRMb2FkaW5nUmVzcG9uc2UQg1YSIQoc",
+ "U3RhcnRJbmtGaWxsaW5nU3RhdHVzUmVxdWVzdBDgXRIiCh1TdGFydElua0Zp",
+ "bGxpbmdTdGF0dXNSZXNwb25zZRDhXRIeChlJbml0aWF0ZUlua0ZpbGxpbmdS",
+ "ZXF1ZXN0EOJdEh8KGkluaXRpYXRlSW5rRmlsbGluZ1Jlc3BvbnNlEONdEhgK",
+ "E1dhc3RlUmVwbGFjZVJlcXVlc3QQ5F0SGQoUV2FzdGVSZXBsYWNlUmVzcG9u",
+ "c2UQ5V0SHAoXU2V0SmVycmljYW5MZXZlbFJlcXVlc3QQ5l0SHQoYU2V0SmVy",
+ "cmljYW5MZXZlbFJlc3BvbnNlEOddEhwKF1B1dERhdGFTdG9yZUl0ZW1SZXF1",
+ "ZXN0EMhlEh0KGFB1dERhdGFTdG9yZUl0ZW1SZXNwb25zZRDJZRIcChdHZXRE",
+ "YXRhU3RvcmVJdGVtUmVxdWVzdBDKZRIdChhHZXREYXRhU3RvcmVJdGVtUmVz",
+ "cG9uc2UQy2USIQocRGF0YVN0b3JlSXRlbU1vZGlmaWVkUmVxdWVzdBDMZRIi",
+ "Ch1EYXRhU3RvcmVJdGVtTW9kaWZpZWRSZXNwb25zZRDNZUIcChpjb20udHdp",
+ "bmUudGFuZ28ucG1yLmNvbW1vbmIGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Common.MessageType), }, null));
@@ -538,6 +539,8 @@ namespace Tango.PMR.Common {
[pbr::OriginalName("SetBuzzerSettingsResponse")] SetBuzzerSettingsResponse = 9011,
[pbr::OriginalName("SetWhiteThreadSkipRequest")] SetWhiteThreadSkipRequest = 9012,
[pbr::OriginalName("SetWhiteThreadSkipResponse")] SetWhiteThreadSkipResponse = 9013,
+ [pbr::OriginalName("StartNotificationRequest")] StartNotificationRequest = 9014,
+ [pbr::OriginalName("StartNotificationResponse")] StartNotificationResponse = 9015,
/// <summary>
///Power
/// </summary>
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs
index b9155dcb4..97bcf2931 100644
--- a/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs
@@ -23,13 +23,14 @@ namespace Tango.PMR.Diagnostics {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"CiBTdGFydFRlbGVtZXRyeVdpcmVSZXNwb25zZS5wcm90bxIVVGFuZ28uUE1S",
- "LkRpYWdub3N0aWNzIjkKGlN0YXJ0VGVsZW1ldHJ5V2lyZVJlc3BvbnNlEgwK",
- "BE5hbWUYASABKAkSDQoFVmFsdWUYAiABKAJCIQofY29tLnR3aW5lLnRhbmdv",
+ "LkRpYWdub3N0aWNzGhNUZWxlbWV0cnlXaXJlLnByb3RvIlEKGlN0YXJ0VGVs",
+ "ZW1ldHJ5V2lyZVJlc3BvbnNlEjMKBVdpcmVzGAEgAygLMiQuVGFuZ28uUE1S",
+ "LkRpYWdub3N0aWNzLlRlbGVtZXRyeVdpcmVCIQofY29tLnR3aW5lLnRhbmdv",
"LnBtci5kaWFnbm9zdGljc2IGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
- new pbr::FileDescriptor[] { },
+ new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.TelemetryWireReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
- new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.StartTelemetryWireResponse), global::Tango.PMR.Diagnostics.StartTelemetryWireResponse.Parser, new[]{ "Name", "Value" }, null, null, null)
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.StartTelemetryWireResponse), global::Tango.PMR.Diagnostics.StartTelemetryWireResponse.Parser, new[]{ "Wires" }, null, null, null)
}));
}
#endregion
@@ -60,8 +61,7 @@ namespace Tango.PMR.Diagnostics {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public StartTelemetryWireResponse(StartTelemetryWireResponse other) : this() {
- name_ = other.name_;
- value_ = other.value_;
+ wires_ = other.wires_.Clone();
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -69,26 +69,14 @@ namespace Tango.PMR.Diagnostics {
return new StartTelemetryWireResponse(this);
}
- /// <summary>Field number for the "Name" field.</summary>
- public const int NameFieldNumber = 1;
- private string name_ = "";
+ /// <summary>Field number for the "Wires" field.</summary>
+ public const int WiresFieldNumber = 1;
+ private static readonly pb::FieldCodec<global::Tango.PMR.Diagnostics.TelemetryWire> _repeated_wires_codec
+ = pb::FieldCodec.ForMessage(10, global::Tango.PMR.Diagnostics.TelemetryWire.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.Diagnostics.TelemetryWire> wires_ = new pbc::RepeatedField<global::Tango.PMR.Diagnostics.TelemetryWire>();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public string Name {
- get { return name_; }
- set {
- name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
- }
- }
-
- /// <summary>Field number for the "Value" field.</summary>
- public const int ValueFieldNumber = 2;
- private float value_;
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- public float Value {
- get { return value_; }
- set {
- value_ = value;
- }
+ public pbc::RepeatedField<global::Tango.PMR.Diagnostics.TelemetryWire> Wires {
+ get { return wires_; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -104,16 +92,14 @@ namespace Tango.PMR.Diagnostics {
if (ReferenceEquals(other, this)) {
return true;
}
- if (Name != other.Name) return false;
- if (Value != other.Value) return false;
+ if(!wires_.Equals(other.wires_)) return false;
return true;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override int GetHashCode() {
int hash = 1;
- if (Name.Length != 0) hash ^= Name.GetHashCode();
- if (Value != 0F) hash ^= Value.GetHashCode();
+ hash ^= wires_.GetHashCode();
return hash;
}
@@ -124,25 +110,13 @@ namespace Tango.PMR.Diagnostics {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public void WriteTo(pb::CodedOutputStream output) {
- if (Name.Length != 0) {
- output.WriteRawTag(10);
- output.WriteString(Name);
- }
- if (Value != 0F) {
- output.WriteRawTag(21);
- output.WriteFloat(Value);
- }
+ wires_.WriteTo(output, _repeated_wires_codec);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CalculateSize() {
int size = 0;
- if (Name.Length != 0) {
- size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
- }
- if (Value != 0F) {
- size += 1 + 4;
- }
+ size += wires_.CalculateSize(_repeated_wires_codec);
return size;
}
@@ -151,12 +125,7 @@ namespace Tango.PMR.Diagnostics {
if (other == null) {
return;
}
- if (other.Name.Length != 0) {
- Name = other.Name;
- }
- if (other.Value != 0F) {
- Value = other.Value;
- }
+ wires_.Add(other.wires_);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -168,11 +137,7 @@ namespace Tango.PMR.Diagnostics {
input.SkipLastField();
break;
case 10: {
- Name = input.ReadString();
- break;
- }
- case 21: {
- Value = input.ReadFloat();
+ wires_.AddEntriesFrom(input, _repeated_wires_codec);
break;
}
}
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/TelemetryWire.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/TelemetryWire.cs
new file mode 100644
index 000000000..b30dc3caa
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/TelemetryWire.cs
@@ -0,0 +1,187 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: TelemetryWire.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.Diagnostics {
+
+ /// <summary>Holder for reflection information generated from TelemetryWire.proto</summary>
+ public static partial class TelemetryWireReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for TelemetryWire.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static TelemetryWireReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChNUZWxlbWV0cnlXaXJlLnByb3RvEhVUYW5nby5QTVIuRGlhZ25vc3RpY3Mi",
+ "LAoNVGVsZW1ldHJ5V2lyZRIMCgROYW1lGAEgASgJEg0KBVZhbHVlGAIgASgC",
+ "QiEKH2NvbS50d2luZS50YW5nby5wbXIuZGlhZ25vc3RpY3NiBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.TelemetryWire), global::Tango.PMR.Diagnostics.TelemetryWire.Parser, new[]{ "Name", "Value" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class TelemetryWire : pb::IMessage<TelemetryWire> {
+ private static readonly pb::MessageParser<TelemetryWire> _parser = new pb::MessageParser<TelemetryWire>(() => new TelemetryWire());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<TelemetryWire> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.TelemetryWireReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public TelemetryWire() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public TelemetryWire(TelemetryWire other) : this() {
+ name_ = other.name_;
+ value_ = other.value_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public TelemetryWire Clone() {
+ return new TelemetryWire(this);
+ }
+
+ /// <summary>Field number for the "Name" field.</summary>
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// <summary>Field number for the "Value" field.</summary>
+ public const int ValueFieldNumber = 2;
+ private float value_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public float Value {
+ get { return value_; }
+ set {
+ value_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as TelemetryWire);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(TelemetryWire other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (Value != other.Value) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ if (Value != 0F) hash ^= Value.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ if (Value != 0F) {
+ output.WriteRawTag(21);
+ output.WriteFloat(Value);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ if (Value != 0F) {
+ size += 1 + 4;
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(TelemetryWire other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ if (other.Value != 0F) {
+ Value = other.Value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 21: {
+ Value = input.ReadFloat();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/MachineStatus/NotificationType.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/NotificationType.cs
new file mode 100644
index 000000000..cbf0d38c0
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/NotificationType.cs
@@ -0,0 +1,50 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: NotificationType.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.MachineStatus {
+
+ /// <summary>Holder for reflection information generated from NotificationType.proto</summary>
+ public static partial class NotificationTypeReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for NotificationType.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static NotificationTypeReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChZOb3RpZmljYXRpb25UeXBlLnByb3RvEhdUYW5nby5QTVIuTWFjaGluZVN0",
+ "YXR1cyptChBOb3RpZmljYXRpb25UeXBlEg4KCk5vdGlmeUluZm8QABIRCg1O",
+ "b3RpZnlXYXJuaW5nEAESDwoLTm90aWZ5RXJyb3IQAhISCg5Ob3RpZnlDcml0",
+ "aWNhbBADEhEKDU5vdGlmeVN1Y2Nlc3MQBEIjCiFjb20udHdpbmUudGFuZ28u",
+ "cG1yLm1hY2hpbmVzdGF0dXNiBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.MachineStatus.NotificationType), }, null));
+ }
+ #endregion
+
+ }
+ #region Enums
+ public enum NotificationType {
+ [pbr::OriginalName("NotifyInfo")] NotifyInfo = 0,
+ [pbr::OriginalName("NotifyWarning")] NotifyWarning = 1,
+ [pbr::OriginalName("NotifyError")] NotifyError = 2,
+ [pbr::OriginalName("NotifyCritical")] NotifyCritical = 3,
+ [pbr::OriginalName("NotifySuccess")] NotifySuccess = 4,
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationRequest.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationRequest.cs
new file mode 100644
index 000000000..002c42984
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationRequest.cs
@@ -0,0 +1,131 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StartNotificationRequest.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.MachineStatus {
+
+ /// <summary>Holder for reflection information generated from StartNotificationRequest.proto</summary>
+ public static partial class StartNotificationRequestReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StartNotificationRequest.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StartNotificationRequestReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Ch5TdGFydE5vdGlmaWNhdGlvblJlcXVlc3QucHJvdG8SF1RhbmdvLlBNUi5N",
+ "YWNoaW5lU3RhdHVzIhoKGFN0YXJ0Tm90aWZpY2F0aW9uUmVxdWVzdEIjCiFj",
+ "b20udHdpbmUudGFuZ28ucG1yLm1hY2hpbmVzdGF0dXNiBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.MachineStatus.StartNotificationRequest), global::Tango.PMR.MachineStatus.StartNotificationRequest.Parser, null, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StartNotificationRequest : pb::IMessage<StartNotificationRequest> {
+ private static readonly pb::MessageParser<StartNotificationRequest> _parser = new pb::MessageParser<StartNotificationRequest>(() => new StartNotificationRequest());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StartNotificationRequest> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.MachineStatus.StartNotificationRequestReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartNotificationRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartNotificationRequest(StartNotificationRequest other) : this() {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartNotificationRequest Clone() {
+ return new StartNotificationRequest(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StartNotificationRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StartNotificationRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(StartNotificationRequest other) {
+ if (other == null) {
+ return;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationResponse.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationResponse.cs
new file mode 100644
index 000000000..5b6210b8f
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationResponse.cs
@@ -0,0 +1,246 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StartNotificationResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.MachineStatus {
+
+ /// <summary>Holder for reflection information generated from StartNotificationResponse.proto</summary>
+ public static partial class StartNotificationResponseReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StartNotificationResponse.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StartNotificationResponseReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Ch9TdGFydE5vdGlmaWNhdGlvblJlc3BvbnNlLnByb3RvEhdUYW5nby5QTVIu",
+ "TWFjaGluZVN0YXR1cxoWTm90aWZpY2F0aW9uVHlwZS5wcm90byKIAQoZU3Rh",
+ "cnROb3RpZmljYXRpb25SZXNwb25zZRI3CgRUeXBlGAEgASgOMikuVGFuZ28u",
+ "UE1SLk1hY2hpbmVTdGF0dXMuTm90aWZpY2F0aW9uVHlwZRISCgpJc0Jsb2Nr",
+ "aW5nGAIgASgIEg0KBVRpdGxlGAMgASgJEg8KB01lc3NhZ2UYBCABKAlCIwoh",
+ "Y29tLnR3aW5lLnRhbmdvLnBtci5tYWNoaW5lc3RhdHVzYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tango.PMR.MachineStatus.NotificationTypeReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.MachineStatus.StartNotificationResponse), global::Tango.PMR.MachineStatus.StartNotificationResponse.Parser, new[]{ "Type", "IsBlocking", "Title", "Message" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StartNotificationResponse : pb::IMessage<StartNotificationResponse> {
+ private static readonly pb::MessageParser<StartNotificationResponse> _parser = new pb::MessageParser<StartNotificationResponse>(() => new StartNotificationResponse());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StartNotificationResponse> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.MachineStatus.StartNotificationResponseReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartNotificationResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartNotificationResponse(StartNotificationResponse other) : this() {
+ type_ = other.type_;
+ isBlocking_ = other.isBlocking_;
+ title_ = other.title_;
+ message_ = other.message_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartNotificationResponse Clone() {
+ return new StartNotificationResponse(this);
+ }
+
+ /// <summary>Field number for the "Type" field.</summary>
+ public const int TypeFieldNumber = 1;
+ private global::Tango.PMR.MachineStatus.NotificationType type_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tango.PMR.MachineStatus.NotificationType Type {
+ get { return type_; }
+ set {
+ type_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "IsBlocking" field.</summary>
+ public const int IsBlockingFieldNumber = 2;
+ private bool isBlocking_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool IsBlocking {
+ get { return isBlocking_; }
+ set {
+ isBlocking_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "Title" field.</summary>
+ public const int TitleFieldNumber = 3;
+ private string title_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Title {
+ get { return title_; }
+ set {
+ title_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// <summary>Field number for the "Message" field.</summary>
+ public const int MessageFieldNumber = 4;
+ private string message_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Message {
+ get { return message_; }
+ set {
+ message_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StartNotificationResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StartNotificationResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Type != other.Type) return false;
+ if (IsBlocking != other.IsBlocking) return false;
+ if (Title != other.Title) return false;
+ if (Message != other.Message) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Type != 0) hash ^= Type.GetHashCode();
+ if (IsBlocking != false) hash ^= IsBlocking.GetHashCode();
+ if (Title.Length != 0) hash ^= Title.GetHashCode();
+ if (Message.Length != 0) hash ^= Message.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Type != 0) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Type);
+ }
+ if (IsBlocking != false) {
+ output.WriteRawTag(16);
+ output.WriteBool(IsBlocking);
+ }
+ if (Title.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(Title);
+ }
+ if (Message.Length != 0) {
+ output.WriteRawTag(34);
+ output.WriteString(Message);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Type != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Type);
+ }
+ if (IsBlocking != false) {
+ size += 1 + 1;
+ }
+ if (Title.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Title);
+ }
+ if (Message.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Message);
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(StartNotificationResponse other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Type != 0) {
+ Type = other.Type;
+ }
+ if (other.IsBlocking != false) {
+ IsBlocking = other.IsBlocking;
+ }
+ if (other.Title.Length != 0) {
+ Title = other.Title;
+ }
+ if (other.Message.Length != 0) {
+ Message = other.Message;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ type_ = (global::Tango.PMR.MachineStatus.NotificationType) input.ReadEnum();
+ break;
+ }
+ case 16: {
+ IsBlocking = input.ReadBool();
+ break;
+ }
+ case 26: {
+ Title = input.ReadString();
+ break;
+ }
+ case 34: {
+ Message = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
index 79dab6329..aedc6495c 100644
--- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
+++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
@@ -169,6 +169,7 @@
<Compile Include="Diagnostics\StopDiagnosticsResponse.cs" />
<Compile Include="Diagnostics\StopEventsNotificationRequest.cs" />
<Compile Include="Diagnostics\StopEventsNotificationResponse.cs" />
+ <Compile Include="Diagnostics\TelemetryWire.cs" />
<Compile Include="Diagnostics\ThreadAbortJoggingRequest.cs" />
<Compile Include="Diagnostics\ThreadAbortJoggingResponse.cs" />
<Compile Include="Diagnostics\ThreadJoggingRequest.cs" />
@@ -307,6 +308,7 @@
<Compile Include="MachineStatus\IDSPackLevel.cs" />
<Compile Include="MachineStatus\MachineState.cs" />
<Compile Include="MachineStatus\MachineStatus.cs" />
+ <Compile Include="MachineStatus\NotificationType.cs" />
<Compile Include="MachineStatus\PumpState.cs" />
<Compile Include="MachineStatus\PumpStatus.cs" />
<Compile Include="MachineStatus\PumpType.cs" />
@@ -323,6 +325,8 @@
<Compile Include="MachineStatus\SpoolTypeChangedResponse.cs" />
<Compile Include="MachineStatus\StartMachineStatusUpdateRequest.cs" />
<Compile Include="MachineStatus\StartMachineStatusUpdateResponse.cs" />
+ <Compile Include="MachineStatus\StartNotificationRequest.cs" />
+ <Compile Include="MachineStatus\StartNotificationResponse.cs" />
<Compile Include="MachineStatus\Status.cs" />
<Compile Include="MachineStatus\StopMachineStatusUpdateRequest.cs" />
<Compile Include="MachineStatus\StopMachineStatusUpdateResponse.cs" />
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs
index 41ac42324..91585fff2 100644
--- a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs
+++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs
@@ -52,8 +52,7 @@ namespace Tango.Telemetry.Sources
{
ID = String.Empty,
Time = DateTime.UtcNow,
- Name = e.Name,
- Value = e.Value
+ Wires = e.Wires.Select(x => new Wire() { Name = x.Name, Value = x.Value }).ToList()
}
});
}
diff --git a/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs b/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs
index 5b3d82fbc..ef6d67675 100644
--- a/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs
+++ b/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs
@@ -6,9 +6,20 @@ using System.Threading.Tasks;
namespace Tango.Telemetry.Telemetries
{
- public class TelemetryWire : TelemetryBase
+ public class Wire
{
public String Name { get; set; }
public double Value { get; set; }
}
+
+ [TelemetryName("Wire", 1)]
+ public class TelemetryWire : TelemetryBase
+ {
+ public List<Wire> Wires { get; set; }
+
+ public TelemetryWire()
+ {
+ Wires = new List<Wire>();
+ }
+ }
}
diff --git a/Software/Visual_Studio/Utilities/Tango.Telemetry.Tester.IOT.CLI/Program.cs b/Software/Visual_Studio/Utilities/Tango.Telemetry.Tester.IOT.CLI/Program.cs
index 945fe5f1f..07d301f3d 100644
--- a/Software/Visual_Studio/Utilities/Tango.Telemetry.Tester.IOT.CLI/Program.cs
+++ b/Software/Visual_Studio/Utilities/Tango.Telemetry.Tester.IOT.CLI/Program.cs
@@ -44,6 +44,7 @@ namespace Tango.Telemetry.Tester.IOT.CLI
//publisher.RegisterSource(new DiagnosticsTestSource());
publisher.RegisterSource(new EventsTestSource());
publisher.RegisterSource(new MachineStatusTestSource());
+ publisher.RegisterSource(new WiresTestSource());
var logsSource = new TelemetryLogsStreamingSource();
logsSource.Config.Categories.Add(LogCategory.Info);
@@ -365,4 +366,46 @@ namespace Tango.Telemetry.Tester.IOT.CLI
}
}
+
+ public class WiresTestSource : ITelemetryStreamingSource
+ {
+ public bool IsStarted { get; }
+ public string Name { get; } = "Wires Test Streaming";
+ public bool RequiresTelemetryDuplicationTracking { get; }
+
+ public event EventHandler<TelemetryAvailableEventArgs> TelemetryAvailable;
+
+ public void Dispose()
+ {
+
+ }
+
+ public void Start()
+ {
+ Task.Factory.StartNew(() =>
+ {
+ TelemetryWire wires = new TelemetryWire();
+
+ for (int i = 0; i < 10; i++)
+ {
+ wires.Wires.Add(new Wire()
+ {
+ Name = "Wire 1",
+ Value = i,
+ });
+ }
+
+ TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs()
+ {
+ DisableDeliveryRetries = true,
+ TelemetryObject = wires
+ });
+ });
+ }
+
+ public void Stop()
+ {
+
+ }
+ }
}