From 3d8c362cd5409246c7026ea956ce10d51ed9ebc3 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Thu, 21 Aug 2025 16:49:02 +0300 Subject: Telemetry Wires. Implemented Firmware User Notifications. Added Missing UI Settings Units Display. Add Machine Name to General Information Dialog. --- .../Tango.PPC.MachineSettings/Views/MainView.xaml | 8 +- .../Connection/DefaultMachineProvider.cs | 2 + .../Dialogs/FirmwareNotificationView.xaml | 55 +++++ .../Dialogs/FirmwareNotificationView.xaml.cs | 28 +++ .../Dialogs/FirmwareNotificationViewVM.cs | 22 ++ .../Dialogs/GeneralInformationView.xaml | 15 ++ .../PPC/Tango.PPC.UI/Tango.PPC.UI.csproj | 10 +- .../PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs | 60 ++++- .../Visual_Studio/PPC/Tango.PPC.UI/app.manifest | 2 +- .../Operation/IMachineOperator.cs | 10 + .../Tango.Integration/Operation/MachineOperator.cs | 52 +++++ .../Visual_Studio/Tango.PMR/Common/MessageType.cs | 59 ++--- .../Diagnostics/StartTelemetryWireResponse.cs | 73 ++---- .../Tango.PMR/Diagnostics/TelemetryWire.cs | 187 ++++++++++++++++ .../Tango.PMR/MachineStatus/NotificationType.cs | 50 +++++ .../MachineStatus/StartNotificationRequest.cs | 131 +++++++++++ .../MachineStatus/StartNotificationResponse.cs | 246 +++++++++++++++++++++ Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj | 4 + .../Sources/TelemetryWireStreamingSource.cs | 3 +- .../Tango.Telemetry/Telemetries/TelemetryWire.cs | 13 +- .../Tango.Telemetry.Tester.IOT.CLI/Program.cs | 43 ++++ 21 files changed, 978 insertions(+), 95 deletions(-) create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationView.xaml.cs create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.UI/Dialogs/FirmwareNotificationViewVM.cs create mode 100644 Software/Visual_Studio/Tango.PMR/Diagnostics/TelemetryWire.cs create mode 100644 Software/Visual_Studio/Tango.PMR/MachineStatus/NotificationType.cs create mode 100644 Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationRequest.cs create mode 100644 Software/Visual_Studio/Tango.PMR/MachineStatus/StartNotificationResponse.cs (limited to 'Software/Visual_Studio') 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 @@ Spool Type - Default Segment Length + Default Segment Length (m) Default Color Space - Vector Fine Tuning Job Length + Vector Fine Tuning Job Length (m) Use Light Inks When Possible @@ -187,13 +187,13 @@ Enable Machine Buzzer - Machine Buzzer Duration + Machine Buzzer Duration (s) Enable White Thread Trimming Feature - Production Data Graph Start Time + Production Data Graph Start Time (h) 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 @@ + + + + + CLOSE + + + + + + + + + + + + + + + + + + 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 +{ + /// + /// Interaction logic for SpoolReplaceView.xaml + /// + 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 @@ + + + + + Machine Name: + + + + + + + + + + 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 @@ JerricanReplaceView.xaml + + FirmwareNotificationView.xaml + + WasteReplacementView.xaml @@ -405,6 +409,10 @@ MSBuild:Compile Designer + + MSBuild:Compile + Designer + MSBuild:Compile Designer @@ -1035,7 +1043,7 @@ if $(ConfigurationName) == X1 copy /Y "$(ProjectDir)Intro.wmv" "$(TargetDir)" - + 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(); - + 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(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. --> - + 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 @@ -272,6 +272,11 @@ namespace Tango.Integration.Operation /// event EventHandler TelemetryWireAvailable; + /// + /// Occurs when a new user notification is available. + /// + event EventHandler NotificationAvailable; + /// /// Occurs when waste replacement is required. /// @@ -322,6 +327,11 @@ namespace Tango.Integration.Operation /// bool EnableTelemetryWire { get; set; } + /// + /// Gets or set a value indicating whether to enable user notifications from the firmware. + /// + bool EnableNotifications { get; set; } + /// /// Gets the last process parameters table sent to the embedded device. /// 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 TelemetryWireAvailable; + public event EventHandler 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); + } + } + } /// /// 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 /// 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(request, new TransportContinuousRequestConfig() { ShouldLog = false }).ObserveOn(new NewThreadScheduler()).Subscribe( + (response) => + { + OnNotificationAvailable(response); + }, + (ex) => + { + _notificationsSent = false; + }, + () => + { + _notificationsSent = false; + LogManager.Log("Notifications response completed!?", LogCategory.Warning); + }); + } + } + /// /// Called when the enable events property has been changed. /// @@ -1079,6 +1123,11 @@ namespace Tango.Integration.Operation TelemetryWireAvailable?.Invoke(this, response); } + private void OnNotificationAvailable(StartNotificationResponse response) + { + NotificationAvailable?.Invoke(this, response); + } + /// /// Called when events notification message has been received. /// @@ -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, /// ///Power /// 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); } - /// Field number for the "Name" field. - public const int NameFieldNumber = 1; - private string name_ = ""; + /// Field number for the "Wires" field. + public const int WiresFieldNumber = 1; + private static readonly pb::FieldCodec _repeated_wires_codec + = pb::FieldCodec.ForMessage(10, global::Tango.PMR.Diagnostics.TelemetryWire.Parser); + private readonly pbc::RepeatedField wires_ = new pbc::RepeatedField(); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Name { - get { return name_; } - set { - name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "Value" field. - public const int ValueFieldNumber = 2; - private float value_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public float Value { - get { return value_; } - set { - value_ = value; - } + public pbc::RepeatedField 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 { + + /// Holder for reflection information generated from TelemetryWire.proto + public static partial class TelemetryWireReflection { + + #region Descriptor + /// File descriptor for TelemetryWire.proto + 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 { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new TelemetryWire()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser 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); + } + + /// Field number for the "Name" field. + 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"); + } + } + + /// Field number for the "Value" field. + 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 { + + /// Holder for reflection information generated from NotificationType.proto + public static partial class NotificationTypeReflection { + + #region Descriptor + /// File descriptor for NotificationType.proto + 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 { + + /// Holder for reflection information generated from StartNotificationRequest.proto + public static partial class StartNotificationRequestReflection { + + #region Descriptor + /// File descriptor for StartNotificationRequest.proto + 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 { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new StartNotificationRequest()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser 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 { + + /// Holder for reflection information generated from StartNotificationResponse.proto + public static partial class StartNotificationResponseReflection { + + #region Descriptor + /// File descriptor for StartNotificationResponse.proto + 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 { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new StartNotificationResponse()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser 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); + } + + /// Field number for the "Type" field. + 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; + } + } + + /// Field number for the "IsBlocking" field. + public const int IsBlockingFieldNumber = 2; + private bool isBlocking_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool IsBlocking { + get { return isBlocking_; } + set { + isBlocking_ = value; + } + } + + /// Field number for the "Title" field. + 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"); + } + } + + /// Field number for the "Message" field. + 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 @@ + @@ -307,6 +308,7 @@ + @@ -323,6 +325,8 @@ + + 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 Wires { get; set; } + + public TelemetryWire() + { + Wires = new List(); + } + } } 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 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() + { + + } + } } -- cgit v1.3.1